【问题标题】:Endianness of HMAC-SHA codeHMAC-SHA 代码的字节顺序
【发布时间】:2012-08-14 19:44:26
【问题描述】:

我正在传输 AES 消息。我的理解是: 1. AES 算法将消息视为字节,并且是字节中立的。 2. 就传输和接收而言,初始化向量是字节序中立的。

我还在计算消息的 HMAC-SHA384 代码。从我的阅读来看,如果传输字节序(在我的情况下为大字节序)与机器字节序不匹配,则 HMAC-SHA384 确实 需要字节交换。交换应该从字节 0 和 47、1 和 46 开始,等等?请问有谁比我更了解这个主题吗?

我目前正在使用 .NET HMACSHA384 类,但另一方面我将编写 C++ 代码,还不知道哪个库将提供 HMAC 代码。

【问题讨论】:

  • 字节序在处理字节数组时并不重要。
  • 欢迎来到 stackoverflow,威利。

标签: encryption sha hmac endianness


【解决方案1】:

leppie 是对的,两者都是作为字节数组发送的。您可以非常确定收到的字节数组将符合 NIST 规范和测试向量。所以在这种情况下你不应该过分担心字节顺序。

如果有人需要担心,那就是哈希函数的实现者。例如。 NIST 不幸地指定了一个小端机器(英特尔处理器)作为 SHA-3 的参考平台。由于第一次迭代 (1.0) 中的字节顺序存在错误,Skein 的第一个版本具有不正确的测试向量。

【讨论】:

  • 如果您仍然感到困惑,如果您有 NIST 提供的十六进制测试向量,那么最左边的字节是索引最低的字节。如果只需要哈希的一部分,则取最左边的字节。
  • 如果我理解正确,您是说所有正确的 SHA-384 实现都应该生成一个 little-endian 格式的字节数组,因为这符合参考平台?
  • 不,内部是大端。最终结果只是一堆字节。在规范中,“第一个字节”可以被认为是最左边的字节。之后,它是特定于实现的。关于这方面的唯一真实信息是 FIPS 180-2 标准,确切地说是第 3 部分。
猜你喜欢
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 2012-07-07
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多