首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libsodium中HMAC的验证

libsodium中HMAC的验证
EN

Cryptography用户
提问于 2018-08-02 14:02:24
回答 1查看 214关注 0票数 2

libsodium通过以下代码验证HMAC是正确的:

代码语言:javascript
复制
return crypto_verify_32(h, correct) | (-(h == correct)) | sodium_memcmp(correct, h, 32);

crypto_verify_32在哪里

代码语言:javascript
复制
for (i = 0; i < n; i++) {
    d |= x[i] ^ y[i];
}
return (1 & ((d - 1) >> 8)) - 1;

sodium_memcmp

代码语言:javascript
复制
for (i = 0U; i < len; i++) {
    d |= b1[i] ^ b2[i];
}
return (1 & ((d - 1) >> 8)) - 1;

为什么不使用简单的memcmp呢?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2018-08-02 14:53:02

memcmp()不是常数时间.名为“恒定时间”的属性并不意味着(令人困惑地)每一次运行都是在固定的时间内;如果算法实现不通过基于定时的侧通道泄漏关于秘密数据的信息,则称为“恒定时间”。

memcmp()的情况下,泄漏很简单:memcmp()以递增的地址顺序查看字节,并在字节不同的第一个索引处停止。因此,如果攻击者观察到执行时间和内存访问模式,可能会显示有多少字节是相同的。如果攻击者能够重复各种所谓的" HMAC“值的实验,他可以利用该漏洞来学习完整的真实HMAC值,在某些情况下这可能是非常糟糕的事情。

有关此主题的更多信息,请参见BearSSL文档中的此页面

票数 5
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/61261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档