Poly1305は、ダニエル・バーンスタインによって設計されたメッセージ認証符号である。メッセージのデータ完全性の検証および認証に用いられる。RFC 7539 として標準化されている。
オリジナルであるPoly1305-AESは、128ビットのAES鍵、106ビットの追加鍵、128ビットの1回だけ使われる値 (nonce)を用いて、可変長のメッセージから128ビット(16バイト)の認証子を生成する。素数である 2130−5 およびAdvanced Encryption Standard (AES)を用いていることからその名が付けられた。
NaClではAESではなくSalsa20が、TLSおよびSSHではChaCha20が用いられる。
Googleは、共通鍵暗号としてChaCha20、メッセージ認証符号としてPoly1305を組み合わせたものを、RC4に代わるインターネットセキュリティで利用可能なストリーム暗号として提唱し、Google ChromeおよびGoogleのウェブサービスにおけるTLS/SSL通信 (https) においてChaCha20-Poly1305が実装されている[1]。TLS/SSLにおけるChaCha20/Poly1305の利用は、RFC 7905 として標準化された。
GoogleによるTLSでの採用に続き、ChaCha20とPoly1305の組み合わせはchacha20-poly1305@openssh.comとしてOpenSSHに採用された[2][3]。これにより、OpenSSHがOpenSSLに依存する必要がなくなった[4]。
Poly1305-AESのセキュリティは、基となるAESに類似するものとなる。そのため、Poly1305-AESを破るためにはAESを破る必要がある[5]
Poly1305-AESでは、AESを他の暗号アルゴリズムに置き換えることも可能である。AESに何か問題が起きた場合でも、他のアルゴリズムに置き換えることでセキュリティを保つことができる。
Poly1305-AESは様々なCPUで高速に計算可能である。設計者によって、C言語およびC++でのレファレンス実装だけでなく、Athlon、Pentium、PowerPC、UltraSPARC向けの最適化実装も公開されている。
Poly1305をサポートしている暗号ライブラリは以下の通り。