HMAC_GOST34194值不匹配

HMAC_GOST341194 value mismatch

本文关键字:不匹配 GOST34194 HMAC      更新时间:2023-10-16

我不确定这个地方是否是解决这类问题的正确选择(它与加密有关),但不幸的是,没有其他发现错误的希望。

所以,这是我用来计算HMAC_GOST34194:的代码

HMAC hmac;
string step1, step2, step3;
ipad.assign(blockSize, 0x36);
opad.assign(blockSize, 0x5c);
for (size_t i = 0uL, e = length; i < e; ++i) 
{
    ipad.replace(i, 1, 1, secret[i] ^ 0x36);
    opad.replace(i, 1, 1, secret[i] ^ 0x5c);
}
step1 = ipad + text;
hmac.hash(step1, step1.length(), step2);
step3 = opad + step2;
hmac.hash(step3, step3.length(), mac);

哈希函数经过了双重检查-没有错误,并且所有测试值与其他源相同。

我的区块大小是256。

我使用以下S框(CryptoPro参数集):

const unsigned char S[8][16] = {
    { 10,   4,  5,  6,  8,  1,  3,  7,  13, 12, 14, 0,  9,  2,  11, 15  },
    { 5,    15, 4,  0,  2,  13, 11, 9,  1,  7,  6,  3,  12, 14, 10, 8   },
    { 7,    15, 12, 14, 9,  4,  1,  0,  3,  11, 5,  2,  6,  10, 8,  13  },
    { 4,    10, 7,  12, 0,  15, 2,  8,  14, 1,  6,  5,  13, 11, 9,  3   },
    { 7,    6,  4,  11, 9,  12, 2,  10, 1,  8,  0,  14, 15, 13, 3,  5   },
    { 7,    6,  2,  4,  13, 9,  15, 0,  10, 1,  5,  11, 8,  14, 12, 3   },
    { 13,   14, 4,  1,  7,  0,  5,  10, 3,  12, 8,  15, 6,  2,  9,  11  },
    { 1,    3,  10, 9,  5,  11, 4,  15, 8,  6,  7,  14, 13, 0,  2,  12  },
}; 

以下是我的一个例子(找到的唯一样本):

K(ASCII) = "s=, ehesttgiyga bnss esi2leh3 mT"
K(in hex) = 733d2c20 65686573 74746769 79676120
626e7373 20657369 326c6568 33206d54 (32 bytes)
text (ASCII) = "This is message, length=32 bytes"
text (in hex) = 54686973 20697320 6D657373 6167652C
206C656E 6774683D 33322062 79746573
HMAC_GOSTR3411 = 4ff66c94 bddaae61 13360514 2b582b9c
0f38bbdf f3d7f0ee 6a9c935d 92bfa107

但是,我的值是:C0F2FE71C3CA016356722646308B69453BB4CD1E232231E04BEB03DB6976F128

将感谢提供更多测试数据或拒绝/验证现有数据的任何帮助。

我找到了这个问题的答案:这个例子不正确,但我的代码中也有一个错误。

因此,假设

K(ASCII) = "s=, ehesttgiyga bnss esi2leh3 mT" 
text (ASCII) = "This is message, length=32 bytes"
  1. ipad||文本哈希为:E9D755A47F72A558AE5E75F5B141F5B174E7B1FED281436F3FE835D78D0D9F05
  2. opad||散列(ipad||文本)散列为:8FF55DDAAB167A22DE98286F10458A1619BC45C88F6EAC9CE947ED3FFB348822

第二个值是HMAC_GOST34194本身。

所有散列都是使用我的代码计算的,并使用参数为cpverify.exe -mk -alg GR3411 "%YOUR_PATH_TO_FILE%hash.txt" PAUSE 的cpverify进行验证

希望这能帮助人们节省几个小时的时间,不用研究为什么这里的示例HMAC计算错误。

PoC在这里可用。