Poly1305は、
メッセージ認証符号(MAC)の一種であり、データの完全性と認証を保証するために用いられます。このアルゴリズムは、著名な
暗号研究者である
ダニエル・バーンスタインによって設計され、RFC 7539として標準化されています。
Poly1305の概要
オリジナルのPoly1305-AESは、128ビットのAES鍵、106ビットの追加鍵、そして128ビットのnonce(使い捨ての値)を用いて、可変長のメッセージから128ビット(16バイト)の認証タグを生成します。このアルゴリズムの名前は、使用される
素数である2の130乗マイナス5と、
Advanced Encryption Standard (AES) に由来しています。
しかし、Poly1305はAESに依存するものではありません。例えば、NaClではAESの代わりにSalsa20が、TLSおよびSSHではChaCha20が使用されています。特に、
Googleは、
共通鍵暗号としてChaCha20、
メッセージ認証符号としてPoly1305を組み合わせたものを、
RC4に代わるインターネットセキュリティで使用可能な
ストリーム暗号として推奨しました。その結果、
Google Chromeや
GoogleのウェブサービスにおけるTLS/SSL通信(https)で、ChaCha20-Poly1305が実装されることになりました。このTLS/SSLにおけるChaCha20/Poly1305の利用は、RFC 7905として標準化されています。
さらに、
GoogleによるTLSでの採用に続き、ChaCha20とPoly1305の組み合わせは、
[email protected]としてOpenSSHにも採用されました。これにより、OpenSSHはOpenSSLに依存する必要がなくなりました。
セキュリティ
Poly1305-AESのセキュリティは、その基盤となるAESに依存しています。したがって、Poly1305-AESを破るには、AES自体を破る必要があります。しかし、Poly1305の設計上の柔軟性により、AESに問題が発生した場合でも、他の
暗号アルゴリズムで代替することが可能です。これにより、セキュリティを維持したまま、柔軟な運用が可能となります。
スピード
Poly1305-AESは、様々なCPUアーキテクチャ上で高速に計算できることが大きな特徴です。設計者自身が
C言語や
C++でのリファレンス実装を提供しているだけでなく、
Athlon、Pentium、
PowerPC、UltraSPARCなどの特定のプロセッサ向けに最適化された実装も公開されています。この高速性は、実用的な環境でPoly1305を利用する上で大きな利点となります。
実装ライブラリ
Poly1305は、多くの主要な
暗号ライブラリでサポートされています。以下にその一部を示します。
Botan
Bouncy Castle
Crypto++
Libgcrypt
libsodium
Nettle
OpenSSL
LibreSSL
wolfCrypt
GnuTLS
mbedTLS
MatrixSSL
これらのライブラリを利用することで、開発者は容易にPoly1305をアプリケーションに組み込むことができます。
Poly1305は、その高速性、セキュリティ、そして実装の容易さから、現代のインターネットセキュリティにおいて重要な役割を果たしています。特に、TLS/SSLプロトコルにおけるChaCha20との組み合わせは、広く採用され、より安全な通信環境を実現する上で貢献しています。