Poly1305は、暗号化に使用するためにDaniel J. Bernsteinによって設計されたユニバーサルハッシュファミリです。[1]
他のユニバーサルハッシュファミリと同様に、Poly1305は、送信者と受信者が共有する秘密鍵を使用して単一のメッセージを認証するためのワンタイムメッセージ認証コードとして使用できます。 [2] これは、送信者と受信者が共有する秘密鍵を使用して単一のメッセージの内容を隠すためにワンタイムパッドを使用できる方法に似ています。
もともとPoly1305はPoly1305-AES [3]の一部として提案されました。Poly1305-AESは Carter–Wegman認証子[4] [5] [1] で、Poly1305ハッシュとAES-128を組み合わせて、単一の短いキーと個別のメッセージ番号を使用して多くのメッセージを認証します。Poly1305は後に、NaCl crypto_secretbox_xsalsa20poly1305認証暗号[6]でXSalsa20を使用して各メッセージに生成された使い捨てキーとともに適用され 、その後、インターネット上のTLS に展開されたChaCha20-Poly1305認証暗号[7] [8] [1]でChaChaを使用して適用されました。 [9]
説明
Poly1305の定義
Poly1305は16バイトの秘密鍵と16バイトのメッセージを受け取り、16バイトのハッシュを返します。これを行うために、Poly1305は次の処理を行います。[3] [1]
- リトルエンディアンの 16 バイト整数として解釈されます。
- メッセージを連続する 16 バイトのチャンクに分割します。
- 16 バイトのチャンクごとに 1 バイトを追加して、16 バイトのチャンクを 17 バイトのリトルエンディアン整数として解釈し、多項式の係数として使用します。
- 素数 を法として点における多項式を評価します。
- リトルエンディアン形式でエンコードされた結果を剰余して、 16 バイトのハッシュを返します。
多項式 の係数( )は次のようになります。
ただし、の場合は次のようになります。
秘密鍵は、バイト(つまり、上位 4 ビットがクリア)を持ち、バイト(つまり、下位 2 ビットがクリア)を持つように制限されています。したがって、には異なる値が考えられます。
ワンタイム認証として使用
がリトルエンディアンの整数として解釈される秘密の16バイト文字列である 場合、
はメッセージの認証子と呼ばれます。送信者と受信者が事前に一様にランダムに選ばれた32バイトの秘密鍵を共有していれば、送信者は認証されたメッセージを送信できます。受信者が認証されたとされるメッセージ(送信中に敵対者によって変更されている可能性があります)を受信すると、受信者は以下をテストすることでその真正性を検証できます。
を知らなければ、攻撃者は検証に合格する を見つける可能性があります。
しかし、同じ鍵を2つのメッセージに再利用してはいけません。もし攻撃者が
の場合、減算できる
そして、結果として得られる多項式の根を見つけて、秘密の評価点 の候補の小さなリストを復元し、そこから秘密のパッド を復元します。敵対者はこれを使用して、高い確率で追加のメッセージを偽造できます。
Poly1305-AES での Carter–Wegman 認証子としての使用
オリジナルのPoly1305-AES提案[3]では、 Carter–Wegman構造[4] [5]を使用して、 をi番目のメッセージの認証子としてとることで、多くのメッセージを認証します。ここで、 はユニバーサルハッシュファミリであり、 はそれを隠すためのワンタイムパッドとして機能する独立した一様ランダムハッシュ値です。Poly1305-AESはAES-128を使用してを生成します。ここで、 は16バイトのリトルエンディアン整数としてエンコードされます。
具体的には、Poly1305-AES鍵は、上記の16バイトの評価ポイントと16バイトのAES鍵の32バイトのペアです。メッセージのPoly1305-AES認証子は、
16 バイトの文字列と整数は、リトルエンディアン エンコードによって識別されます。メッセージ間で再利用されることに注意してください。
を知らないと、攻撃者が受信者が本物として受け入れる認証済みメッセージを偽造する可能性は低くなります。攻撃者が認証済みメッセージを見て偽造を試み、最大で の利点で一様ランダム順列と区別できるとします。(AES が破られない限り、は非常に小さいです。) 攻撃者が 1 回の偽造に成功する可能性は最大で次のようになります。
メッセージ番号は、同じキー で決して繰り返されてはなりません。 繰り返されると、攻撃者は、ワンタイム認証子の場合と同様に、 と の候補の小さなリストを復元し、それを使用してメッセージを偽造することができます。
NaClおよびChaCha20-Poly1305での使用
NaCl crypto_secretbox_xsalsa20poly1305 認証暗号は、 XSalsa20ストリーム暗号でメッセージ番号を使用してメッセージごとのキー ストリームを生成します。最初の 32 バイトは 1 回限りの Poly1305 キーとして取得され、残りはメッセージの暗号化に使用されます。次に、メッセージの暗号文の 1 回限りの認証子として Poly1305 を使用します。[6] ChaCha20-Poly1305も同様ですが、XSalsa20の代わりにChaChaを使用します。[8]
安全
Poly1305とその派生物の偽造に対する安全性は、その普遍的なハッシュ族としての境界差確率から導かれる。と がそれぞれ最大バイトのメッセージであり、 がリトルエンディアンの整数として解釈される任意の16バイトの文字列である場合、
ここで、は均一ランダムPoly1305キーである。[3] :定理3.3、p.8
この性質は、上で-ほぼΔ-普遍性、または-AΔUと呼ばれることもあります[10]。この場合 、
ワンタイム認証子
ワンタイム認証子を使用すると、最大 バイトのメッセージに対する攻撃者の偽造試行の成功確率は次のようになります。
ここでは、簡単にするために、 内の算術はであるとみなされます。
NaClとChaCha20-Poly1305の
NaCl crypto_secretbox_xsalsa20poly1305 およびChaCha20-Poly1305の場合、偽造における敵対者の成功確率は、ワンタイム認証子の場合と同様に各メッセージごとに独立して同じであり、さらに、メッセージごとのキーを生成するために使用される疑似乱数関数としての XSalsa20 または ChaCha に対する敵対者の際立った利点があります。言い換えると、最大 バイトのメッセージの試行後に敵対者が単一の偽造に成功する確率は、最大で次のようになります。
ポリ1305-AESの
Poly1305-AES の偽造に対する安全性は、Carter–Wegman–Shoup 構造から導かれます。この構造は、Carter–Wegman 認証子を順列でインスタンス化して、メッセージごとのパッドを生成します。[11] 攻撃者が認証されたメッセージを見て、最大 バイトのメッセージの偽造を試み、攻撃者が疑似ランダム順列として AES-128 に対して最大で際立った優位性を持っている場合、攻撃者がいずれかの偽造に成功する確率は最大で次のようになります。[3]
例えば、メッセージが1024バイトまでのパケットであると仮定すると、攻撃者はPoly1305-AESキーで認証された2 64個のメッセージを確認し、攻撃者はなんと2 75回の偽造を試み、攻撃者はδ以上の確率でAESを破ることができない。この場合、少なくとも0.999999 − δの確率で、2 75回すべてが拒否される。
— バーンスタイン、ダニエル・J.(2005)[3]
スピード
Poly1305-AESは、さまざまなCPUで高速に計算できます。たとえば、nバイトのメッセージの場合、 3.1n + 780 Athlonサイクルしか必要ありません[3] 。著者は、 Athlon、Pentium Pro/II/III/M、PowerPC、UltraSPARC向けに最適化されたソースコードと、 CおよびC++による最適化されていないリファレンス実装をパブリックドメインソフトウェアとしてリリースしています。[12]
実装
以下は、Poly1305 をサポートする暗号化ライブラリのリストです。
参照
- ChaCha20-Poly1305 – ストリーム暗号ChaCha20とPoly1305の変種を組み合わせたAEAD方式
参考文献
- ^ abcd Aumasson, Jean-Philippe (2018). 「第7章: 鍵付きハッシュ」。本格的な暗号化: 現代暗号化の実践的入門。 No Starch Press。 pp. 136–138。ISBN 978-1-59327-826-7。
- ^ Bernstein, Daniel J. (2008-05-01). 「偽造に対する通信の保護」。Buhler, Joe、Stevenhagen, Peter (編)。アルゴリズム数論: 格子、数体、曲線、暗号。数学科学研究所出版。第 44 巻。ケンブリッジ大学出版。pp. 535–549。ISBN 978-0521808545. 2022年10月14日閲覧。
- ^ abcdefg Bernstein, Daniel J. (2005-03-29). 「Poly1305-AES メッセージ認証コード」。Gilbert, Henri、Handschuh, Helena (編)。高速ソフトウェア暗号化: 第 12 回国際ワークショップ。FSE 2005。コンピュータ サイエンスの講義ノート。パリ、フランス: Springer。doi : 10.1007 / 11502760_3。ISBN 3-540-26541-4. 2022年10月14日閲覧。
- ^ ab Wegman, Mark N.; Carter, J. Lawrence (1981). 「新しいハッシュ関数と認証および集合の等価性におけるその使用」. Journal of Computer and System Sciences . 22 (3): 265–279. doi :10.1016/0022-0000(81)90033-7.
- ^ ab Boneh, Dan ; Shoup, Victor (2020年1月). A Graduate Course in Applied Cryptography (PDF) (バージョン0.5版). §7.4 The Carter-Wegman MAC、pp. 262–269 . 2022年10月14日閲覧。
- ^ ab Bernstein, Daniel J. (2009-03-10). NaCl での暗号化 (技術レポート). 文書 ID: 1ae6a0ecef3073622426b3ee56260d34.
- ^ Nir, Y.; Langley, A. (2015 年 5 月). IETF プロトコルの ChaCha20 および Poly1305. doi : 10.17487/RFC7539 . RFC 7539.
- ^ ab Nir, Y.; Langley, A. (2018 年 6 月). IETF プロトコルの ChaCha20 および Poly1305. doi : 10.17487/RFC8439 . RFC 8439.
- ^ Langley, A.; Chang, W.; Mavrogiannopoulos, N.; Strombergson, J.; Josefsson, S. (2016 年 6 月). ChaCha20-Poly1305 トランスポート層セキュリティ (TLS) 用暗号スイート. doi : 10.17487/RFC7905 . RFC 7905.
- ^ Halevi, Shai ; Krawczyk, Hugo . 「MMH: Gbit/Second レートでのソフトウェア メッセージ認証」。Biham , Eli (ed.) 著。高速ソフトウェア暗号化。FSE 1997。コンピュータ サイエンスの講義ノート。Springer。doi : 10.1007 / BFb0052345。ISBN 978-3-540-63247-4。
- ^ Bernstein, Daniel J. (2005-02-27). 「Wegman-Carter-Shoup 認証子のセキュリティ境界強化」。Cramer, Ronald (編)。暗号学の進歩 - EUROCRYPT 2005、暗号技術の理論と応用に関する第 24 回国際会議。 EUROCRYPT 2005。コンピュータ サイエンスの講義ノート。オーフス、デンマーク: Springer。doi : 10.1007/11426639_10。ISBN 3-540-25910-4。
- ^ cr.yp.to の最先端のメッセージ認証コード
外部リンク
- Poly1305-AES リファレンスと最適化された実装 (著者 DJ Bernstein)
- github.com の C での高速 Poly1305 実装
- NaClワンタイム認証子と Poly1305 を使用した認証暗号
