Poly1305-AES:最先进的消息认证代码 D.J.伯恩斯坦
身份验证器和签名

最先进的消息-身份验证代码

为什么Poly1305-AES比其他消息认证代码更好?
如何在自己的软件中使用Poly1305-AES?
Poly1305-AES是如何实施的?
我在哪里可以了解更多关于Poly1305-AES的信息?
Poly1305-AES速度表
AES定时可变性一览
AES定时可变性图
Athlon的Poly1305-AES
奔腾Pro/II/III/M的Poly1305 AES
AIX下PowerPC的Poly1305-AES
MacOS X下PowerPC的Poly1305-AES
UltraSPARC的Poly1305-AES
带有IEEE浮点的通用计算机的Poly1305-AES
8051的Poly1305-AES
使用GMP和OpenSSL的Poly1305-AES
Poly1305-AES是一种最先进的密钥消息认证码适用于各种应用。

Poly1305-AES计算16字节身份验证器任何长度的消息,使用16字节的nonce(唯一消息编号)和一个32字节的密钥。攻击者无法修改或伪造消息如果消息发送方与每条消息一起发送认证器消息接收者检查每个验证器。

Poly1305-AES讨论有一个邮件列表。要订阅,请发送一条空消息poly1305-subscribe@list.cr.yp.to.

为什么Poly1305-AES比其他消息认证代码更好?

Poly1305 AES具有几个有用的功能:

有保证的安全性、密码可替换性和并行性由标准多项式求值-Wegman-Carter-MAC框架提供。在这个框架内,hash127-AES以牺牲每个键的大表为代价实现了极高的速度。Poly1305 AES的最大优势在于关键的灵活性:极高的速度,无任何按键扩展。

其他标准MAC比Poly1305-AES慢,安全性差。明确地,HMAC-MD5速度较慢,没有可比的安全保证;CBC-MAC-AES的速度慢得多,安全保障也较弱。HMAC-MD5和CBC-MAC-AES在2^64条消息内都是可断的。我并不是说任何人都会进行这次袭击;我是说每个人都对CBC的标准安全级别感到满意应满足Poly1305-AES更高的安全级别。

如何在自己的软件中使用Poly1305-AES?

我的斋戒聚乙烯1305图书馆属于公共领域。您可以并且应该将其包含在您自己的程序中,而不是努力链接到共享库;编译后的代码在6到10 KB之间,具体取决于CPU。

要开始使用,请下载并解压缩聚乙烯1305图书馆:

wget公司https://cr.yp.to/mac/poly1305aes-20050218.tar.gzgunzip<poly1305aes-20050218.tar.gz |焦油-xf-
编译库(确保为您的平台使用适当的编译器选项,例如-m64米用于UltraSPARC)了解其结构:
cd poly1305aes-20050218env CC=“gcc-O2”制造
将库文件复制到项目中:
cp`cat FILES.lib`您的项目/cat生成文件.lib>>您的项目/生成文件
对于任何将使用Poly1305-AES的C程序,修改程序以包含聚乙烯1305。小时;也修改您的生成文件将程序链接到聚乙烯1305。并声明程序依赖于聚乙烯1305。聚1305aes。小时.

在程序内部,生成32字节Poly1305-AES密钥,首先生成32个秘密随机字节来自加密安全来源:克朗[0],克朗[1], ...,克朗[31].然后打电话

poly1305aes灯(kr)
创建32字节Poly1305-AES密钥克朗[0],克朗[1], ...,克朗[31].

稍后,发送消息米[0],米[1], ...,米[len-1]具有16字节的随机数编号[0],n[1], ...,编号[15](其中必须每条消息都不同!),呼叫

poly1305aes认证(a、kr、n、m、len)
计算16字节身份验证器a[0],答[1], ...,a[15].

收到经过身份验证的消息后a[0],答[1], ...,a[15],编号[0],编号[1], ...,编号[15],米[0],米[1], ...,米[len-1],呼叫

poly1305aes _验证(a、kr、n、m、len)
验证验证器。接受消息,如果poly1305aes_验证返回非零;否则就把它扔掉。

不要生成或接受超过GB的消息。如果您需要发送大量数据,无论如何,你无疑是在把数据分成小数据包;安全性要求每个数据包都有一个单独的身份验证器。

请确保设置谷歌网页确定您的程序并说明它是“由Poly1305-AES提供动力”

Poly1305 AES实现是如何工作的?

有兴趣编写您自己的Poly1305-AES实现吗?看看Poly1305 AES是否可以从AltiVec中受益?在没有C链接的语言中使用Poly1305-AES?检查Poly1305-AES测试载体?建造Poly1305-AES电路?将Poly1305-AES计算技术应用于其他功能?

Poly1305-AES最简单的C实现是poly1305测试,它依赖于GMP和OpenSSL。我建议从顶部开始:阅读poly1305aes_test_verify。c(c)然后慢慢往下走。

其他语言的测试实现:

然后,您可以继续进行认真的实施:

如果你想达到更好的速度,确保你了解所有不同的情况由我的速度表.你可能想从我的散文最佳案例基准和现实世界之间的差异。我设计了Poly1305-AES软件,以及底层的Poly1305AES函数,提供一致的高速在广泛的应用领域。在某些情况下,轻微的加速通常意味着在其他情况下,速度会大幅放缓;进行权衡的Poly1305-AES实现可能对某些应用程序有用,但它充其量只是一种替代品,而不是替代品。

我在哪里可以了解更多关于Poly1305-AES的信息?

共有四篇论文:我还将就Poly1305-AES进行三次演讲:2005.02.15,强调消息认证码的结构;2005.02.21,强调最佳案例基准与现实世界之间的差异;2005.05,强调安全约束证明。