问题标签 [message-authentication-code]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2830 浏览

cryptography - CMAC 为什么选择 K1 和 K2

http://en.wikipedia.org/wiki/CMAC

http://www.rfc-archive.org/getrfc.php?rfc=4493

有两个键 K1 和 K2。除了消息 1 与 10^127 不同(1 和 127 个零)之外,还有其他原因吗

如果消息携带长度(并且长度也是 CMAC-ed whit 消息),那么仅使用一个随机生成的 K 是否存在任何安全漏洞?

0 投票
1 回答
6214 浏览

cryptography - Mifare Desfire 的 MAC 和 CMAC 计算

谁能帮我指导 Mifare Desfire 的 MAC(4 字节)和 CMAC(8 字节)的计算?我得到了意想不到的结果。

CMAC结果

CMAC 是否仅由 DES 和 TDES 生成,例如 DES 加密所有块,除了最后一个块应该像零售 MAC 计算一样进行 TDES 加密吗?

0 投票
1 回答
10385 浏览

c# - AES CMAC 计算 C#

我知道 MAC 是最后一个块加密的 4 个第一个字节,并且在这里找到了这个 CMAC 解释,但这有点难以理解。也许已经有一些 CMAC AES 问题,但很抱歉我不能很好地理解它。

任何人都可以解释如何计算 CMAC?并在必要时使用 C# 中的一些示例代码。谢谢

0 投票
2 回答
1733 浏览

mifare - Mifare Desfire Wrapped Mode:如何计算 CMAC?

使用 Desfire 原生封装的 APDU 与卡通信时,必须使用命令和响应的哪些部分来计算 CMAC?

成功认证后,我有以下会话密钥:

然后,当我发送 GetKeyVersion 命令时,卡返回以下我正在尝试验证的 CMAC:

我根据“NIST 特别出版物 800-38B”实现了 CMAC 算法并确保它是正确的。但我不知道必须使用命令和响应 APDU 的哪些部分来计算 CMAC。

我使用的是 TDES,所以 MAC 是 8 个字节。

0 投票
1 回答
1060 浏览

encryption - 嵌套 JWS + JWE 与具有身份验证加密的 JWE

问题

我想在我的服务器(受信任的环境)上签名和加密(有效地混淆)一些信息(“令牌”)并将密文发送到客户端机器(不太受信任的环境)以由我的客户端读取和验证软件。这种类型的环境允许我在服务器上拥有一个用于非对称签名的私钥,但我不能在客户端“隐藏”一个用于对称签名的密钥。

备择方案

我选择使用 JWT 作为标准,使用Nimbus JOSE+JWT 库作为签名和加密的实现。Nimbus库为签名 + 加密提供了两个选项:将 JWS 嵌套到 JWE 或将 JWE 与经过身份验证的加密算法(A128CBC_HS256、A192CBC_HS384 或 A256CBC_HS512)一起使用。Nimbus 算法选择指南指出:

JOSE 中的加密始终经过身份验证,这意味着密文的完整性受到保护,不会被篡改。因此,经过身份验证的加密使得将 HMAC JWT 嵌套在 JSON Web 加密 (JWE) 中是多余的;仅使用 JWE 加密。

但是,AxxxCBC_HSxxx 加密方法仅使用对称密钥。此外,用 RSA JWE 算法替换直接 JWE 算法应该无济于事,因为滥用者可以自己生成 CEK(由加密密钥和 HMAC 密钥组成)并使用公钥对其进行加密。

问题

尽管引用了嵌套 JWT 的冗余,但我得出的结论是,就我而言,JWE+JWS 嵌套是唯一可行的方法。我对吗?

0 投票
2 回答
511 浏览

laravel - 为什么 Laravel 的加密需要消息验证码 (MAC)?

Laravel文档

Laravel 的所有加密值都使用消息验证码 (MAC) 进行签名,因此它们的基础值一旦加密就不能被修改。

在实践中,这意味着有效载荷伴随着一点哈希值。这个值是如何产生的并不是什么秘密,因为 Laravel 是一个开源产品。源代码是这样说的:

我个人不认为这个 MAC 对 Laravel 有什么好处。为什么会在那里?

我的意思是,如果我们已经拥有与消息一起使用的公钥,而私钥则隐藏在某处并openssl_encrypt作为处理器。MAC 如何为安全做出贡献?或者它是否有助于其他事情?

0 投票
0 回答
198 浏览

java - SHA-256 执行时间小于 java 中的 HmacSHA256

我想比较 sha256 和“Hmac with sha256”的执行时间。

结果是:SHATime:489589 和 macTime:180070,据我所知,计算 sha256 是计算 Hmac 的一部分;所以应该花更少的时间。有人可以帮我吗?

0 投票
0 回答
35 浏览

r - 向量中的 R 函数 BitXWor 错误有问题吗?

以下是我目前的功能

________Sbox 函数______

___轮 1 功能___

} round1('000001010111','001101100')


问题:运行我的 round1() 函数时,bitwXor 函数不断重复此错误:bitwXor(ER0, K1) 中的错误:'bitwXor' 中未实现类型'字符'

我尝试使用不同的数据类型,但似乎没有任何效果?是否只是数据类型问题

PS如果它有助于我输入函数,如:round1(“000001010111”,“001101100”)

0 投票
1 回答
115 浏览

c# - 用于 Triple DES HMAC 的 Openssl 命令行,例如 C# MACTripleDES

谁能解释如何在 OpenSSL 命令行中制作 TDES MAC?

我试图在 C 中为 OpenSSL API 复制一个工作 C# 程序的一些功能,并且在 openssl 中复制 .Net MACTripleDES.ComputeHash 函数时遇到了麻烦。这是一个带有虚假数据和密钥的示例:

结果是“Bogus Signature = A056D11063084B3E” 我的新 C 程序必须提供该数据的相同散列,以便与其更广泛的环境进行互操作。但是在 openSSL 中执行此操作的方法让我难以理解。这表明 openssl 数据开始时与 C# 数据相同:

字符串化,001000000000000000000000000000008000000000000000 匹配 c# 字符串。

该数据太长,我预期的数据不是子字符串。-sha1 等也一样。我尝试分别加密和制作摘要,不好。MS没有说它做了什么样的哈希,我找不到关于如何在openssl中使用TDES设置MAC的文档。

所以我希望这里有人对这两个平台有足够的了解,能给我一个体面的提示。

0 投票
1 回答
754 浏览

node.js - 节点 crypto.createCipheriv('aes-256-gcm', ...).getAuthKey() 的值可以公开吗?

我很难找到一些信息。有谁知道从cipher.getAuthTag() (--> 返回 MAC) 返回的值是否可以公开显示?

TL;博士

消息验证码可以公开可见,还是需要像密码一样保密?

一些背景,我正在尝试加密文件。我找到了这个帮助我入门的 stackoverflow 问题和答案。https://stackoverflow.com/a/27345933/11070228

在对 nodejs 文档进行了一些研究之后,我发现答案使用了一个已弃用的函数。创建密码。要使用的新函数应该是createCipheriv

因此,为了使用新的 createCipheriv,我使用文档编写了一个新的加密和解密函数,类似于帖子中使用新的 createCipheriv 函数的那个​​。编写解密函数后,我得到一个错误是

错误:不受支持的状态或无法验证数据

在谷歌搜索这个问题之后,它把我带到了这个github 帖子。简而言之,它表示解密文件需要使用密码生成的 authTag。

我不知道这个 authTag 是什么,我认识的任何人也不知道。所以我开始用谷歌搜索它,它让我看到了这篇博文。它指出

authTag 是在加密期间计算的消息验证码 (MAC)。

这是一篇关于什么是消息验证码的维基百科文章。

所以。这是我的问题。消息验证码可以公开可见,还是需要像密码一样保密?


我的代码不那么相关,但可能会帮助某人使用 createCipheriv 和 createDecipheriv 创建加密和解密。

加密

解密