KMAC128 消息认证码生成器

使用你的密钥(文本或十六进制)、自定义字符串和输出长度计算 KMAC128 消息认证码。结果与 NIST SP 800-185 示例一致。

必须是 8 的倍数,范围 8 到 16384 位。

可选的域分隔标签,例如应用名称。不同的字符串会产生完全不相关的输出。

密钥为空。没有密钥时,KMAC 无法起到认证作用。

KMAC128

完全在浏览器中运行,您的数据不会被上传。

什么是 KMAC128 生成器?

KMAC128 是 NIST SP 800-185 中基于 Keccak 的消息认证码,相当于 SHA-3 世界里的 HMAC。给定秘密密钥、可选的自定义字符串和输出长度,它会生成只有持有密钥的人才能算出的标签。本工具可对文本或原始字节计算 KMAC128。

如何使用 KMAC128 生成器

  1. 在 消息 中输入数据;如果是二进制数据,请将输入编码选为 十六进制字节 或 Base64。
  2. 输入 密钥,并选择其 密钥编码(文本 (UTF-8) 或十六进制字节)。
  3. 可选填写 自定义字符串 (S),并按需修改 输出长度(位)(默认 256)。
  4. 选择 输出格式,然后点击 复制 以使用该标签。

示例

输入
Message 00010203 (Hex bytes), key 404142…5E5F (32 bytes, hex), S = "My Tagged Application", 256 bits
输出
3b1fba963cd8b0b59e8c1a6d71888b7143651af8ba0a7070c0979e2811324aa5

NIST SP 800-185 KMAC 示例 #2。

何时使用 KMAC128 生成器

在基于 SHA-3 的系统中,可用 KMAC128 对消息进行认证或派生密钥,也可以用来校验规范或其他实现给出的 KMAC 标签。如果对方期望的是 HMAC-SHA256,KMAC 无法互通——此时请使用 HMAC。不要使用空密钥或容易被猜到的密钥;MAC 的强度取决于密钥。

KMAC128 生成器 的工作原理

KMAC128(NIST SP 800-185)就是函数名为“KMAC”的 cSHAKE128。它先吸收 bytepad(encode_string(K), 168)——即填充到完整分组的密钥——然后是消息,再是带有所需输出长度 L 的 right_encode(L),最后挤出 L 位。由于 L 是输入的一部分,同一份数据的 256 位和 512 位 KMAC 互不相关(与 SHAKE 不同)。海绵结构使简单的密钥前缀构造也是安全的,因此 KMAC 不需要 HMAC 那样的嵌套结构。

常见用例

  • 校验 NIST SP 800-185 的 KMAC 测试向量
  • 调试其他语言中的 KMAC 实现
  • 为基于 SHA-3 的协议中的 API 或消息生成认证标签
  • 把 KMAC 当作 KDF(SP 800-108 风格)派生密钥用于测试

安全提示

当密钥随机且至少 16 字节时,KMAC128 最高可提供 128 位安全强度。请使用新生成的秘密密钥,并在你自己的代码中以恒定时间比较标签。不要把生产环境的密钥粘贴到你不信任的工具中;本工具在本地运行,不会发送任何内容。

常见问题

KMAC128 与 HMAC 有何不同?

HMAC 对哈希套用两次,以避开 SHA-2 的长度扩展问题。Keccak 不受长度扩展攻击影响,因此 KMAC 只需在前面加上填充后的密钥。两者的结果不能互换。

为什么改变输出长度会让所有位都变化?

输出长度 L 被编码进了输入,因此 256 位和 512 位的 KMAC 是相互独立的值——较短的并不是较长的前缀。

如何输入二进制密钥?

将 密钥编码 设为 十六进制字节,并以十六进制粘贴密钥(允许有空格)。选择文本 (UTF-8) 时,字符本身会被当作密钥字节。

我的密钥会被发送到任何地方吗?

不会。密钥和消息只在你的浏览器中处理。

探索更多分类