Poly1305
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をサポートしている暗号ライブラリは以下の通り。
- Botan
- Bouncy Castle
- Crypto++
- Libgcrypt
- libsodium
- Nettle
- OpenSSL
- LibreSSL
- wolfCrypt
- GnuTLS
- mbedTLS
- MatrixSSL
脚注
[編集]- ^ Google Swaps Out Crypto Ciphers in OpenSSL, InfoSecurity, April 24, 2014
- ^ Miller, Damien (2013年12月2日). “ssh/PROTOCOL.chacha20poly1305”. BSD Cross Reference, OpenBSD src/usr.bin/. 2014年12月27日閲覧。
- ^ Murenin, Constantine A. (2013年12月11日). Unknown Lamer: “OpenSSH Has a New Cipher — Chacha20-poly1305 — from D.J. Bernstein”. Slashdot. 2014年12月27日閲覧。
- ^ Murenin, Constantine A. (2014年4月30日). Soulskill: “OpenSSH No Longer Has To Depend On OpenSSL”. Slashdot. 2014年12月26日閲覧。
- ^ Bernstein, Daniel J.. “The Poly1305-AES message-authentication code”. 2013年12月30日閲覧。