首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪种算法具有更好的性能(HMAC、UMAC和Poly1305)?

哪种算法具有更好的性能(HMAC、UMAC和Poly1305)?
EN

Cryptography用户
提问于 2018-03-13 14:26:01
回答 1查看 4.2K关注 0票数 1

我想要实现一个协议,它的消息需要完整性和身份验证。我发现了许多提供完整性和认证的算法,如HMAC、UMAC和Poly1305。所以我搞不懂我该用哪一种。拜托,我能知道哪个更好吗?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2018-03-13 16:55:29

首先,HMAC-任何特定的散列函数,比如HMAC- say 256-是不同于UMAC和Poly1305的一种类型的东西。因此,直接比较它们是有误导性的。

HMAC 256是 pseudorandom函数族或 PRF,具有长输入和短输出,这意味着一个键控函数族$H_k\colon {0,1}^* \\到{0,1}{256}$,如果256位密钥$k$均匀分布,则$H_k$在所有函数( $F\colon {0,1}^* \\到{0,1}{256}$)之间呈现均匀分布。您可以使用$t = H_k(m)$作为身份验证标记来验证消息,因为不知道$k$的对手不能比不知道$F$的对手猜到$F(m)$要好得多,而后者在一次尝试中猜测$H_k(m)$的几率为$2^{-256}。

UMAC和Poly1305是一次性验证器。您可以使用密钥$k$一次来验证单个消息$m$,方法是使用$t = \operatorname{Poly1305}_k(m)$作为身份验证标记。如果您曾经透露过$\operatorname{Poly1305}_k(m)$和$\operatorname{Poly1305}_k(m')$,则对手可以在他们选择的任何消息上计算$k$和伪造身份验证标记。但是,您可以将这些扩展为处理许多消息,每条消息都具有不同的序列号或名为nonce的非碰撞随机令牌$n$,方法是使用PRF组合它们,然后使用(例如,$t =\operatorname{Poly1305}{k_n}(M)$),其中$k_n = \operatorname{HMAC-SHA256}_k(n)$。You绝不能对两个不同的消息重用相同的$(k,n)$对。

关于消息认证码、一次验证器、HMACs和伪随机函数族的更多信息,先前的一个问题有几个很好的答案。

通常,现在,Poly1305被用于一个名为NaCl密码_分泌箱_xsalsa20poly1305利伯钠变体之一的预定义组合中,它同时使用PRF XSalsa20派生一次性密钥$k_n$,并作为流密码派生用于加密消息的一次性pad。<#>这种 authenticated加密组合,crypto_secretbox_xsalsa20poly1305在几乎任何CPU上都比涉及HMAC的任何经过身份验证的加密要快得多。(可能的例外:也许在一个微型微控制器上,您将拥有对HMAC 256的硬件支持,但不支持XSalsa20或Poly1305)。

Does的意思是HMAC- that 256是无用的? No.您在会话中并不总是有消息序列号。例如,如果要在大多数无状态的web应用程序中分发承载令牌,为了使用Poly1305作为身份验证器,必须将${geq}192美元-位随机选择为PRF的输入,以选择密钥,该密钥连同128位Poly1305输出将为身份验证器标记花费320位空间,而对于本质上相同的安全性(用于短消息和低数据量),您可以使用HMAC-SHA256的128位截断,或者BLAKE2s-128或KMAC128-128。

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

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

复制
相关文章

相似问题

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