0Pricing
Cryptology Academy · レッスン

TLS 1.3におけるChaCha20-Poly1305 AEAD

現代のTLSでChaCha20がAEAD暗号として使われる仕組みを学びます。

「TLS 1.3におけるChaCha20-Poly1305 AEAD」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。

ようこそ

ChaCha20-Poly1305は、ChaCha20ストリーム暗号とPoly1305 MACを組み合わせて、安全なAEAD暗号スイートを実現します。TLS 1.3、WireGuard、モバイルアプリケーションで使用されています。

Poly1305 MACの概要

Poly1305は、Bernsteinが設計したワンタイムMACです。素数2^130-5上で多項式評価を行い、メッセージを認証します。ワンタイムであるため、使用するたびに新しい32バイトの鍵が必要です。

Poly1305の安全性

鍵を決して再利用しなければ、Poly1305は128ビットの安全性を実現します。MAC鍵は、ChaCha20のキーストリームからメッセージごとに新しく導出されます。この組み合わせは、証明可能安全です。

ChaCha20-Poly1305の構成

1. ChaCha20ブロック0から64バイトのキーストリームを生成します 2. 最初の32バイトをPoly1305鍵にします 3. 残りの32バイトは破棄します 4. ChaCha20ブロック1、2、3、…で平文を暗号化します 5. AAD + ciphertextに対してPoly1305 MACを計算します

RFC 8439の構造

出力形式:ciphertext || tag(16バイト) MAC入力:AAD || pad1 || ciphertext || pad2 || len(AAD) || len(ciphertext) パディング:16バイト境界に揃うようゼロで埋めます。長さはリトルエンディアンの64ビット整数としてエンコードします。

TLS 1.3の暗号スイート

TLS 1.3で必須の暗号スイート: - TLS_AES_256_GCM_SHA384 - TLS_AES_128_GCM_SHA256 - TLS_CHACHA20_POLY1305_SHA256 AESハードウェアアクセラレーションを利用できないクライアントでは、CHACHA20_POLY1305が推奨されます。

WireGuardでのChaCha20-Poly1305の利用

WireGuardは、すべてのトンネル暗号化にChaCha20Poly1305のみを使用します。暗号のネゴシエーションは行わず、十分に分析されたアルゴリズムを1つだけ使用します。この単純さにより、攻撃対象領域が大幅に縮小されます。

libsodium secretbox

libsodiumのcrypto_secretbox_easy()は、XSalsa20-Poly1305(拡張ノンス版)を使用します。 ciphertext = crypto_secretbox_easy(message, nonce, key) 高レベルAPIなので、パラメーターを選択しなくても正しく動作します。

モバイルでの性能

AndroidやiOSのデバイスには、AES-NIが搭載されていないことがよくあります。Googleが2014年に行った分析では、ARM上のChaCha20-Poly1305はAES-GCMより3倍高速でした。これが、GoogleがAndroidとChromeでの採用を必須にした理由です。

Pythonでの実装

from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305 import os key = ChaCha20Poly1305.generate_key() nonce = os.urandom(12) aad = b'header_data' cipher = ChaCha20Poly1305(key) ct = cipher.encrypt(nonce, b'plaintext', aad) pt = cipher.decrypt(nonce, ct, aad)

比較:AES-GCMとChaCha20-Poly1305

AES-GCM:AES-NIがあれば高速、96ビットのノンス、ノンスを再利用するとGCMタグを偽造される可能性があります。 ChaCha20-Poly1305:ハードウェアがなくても高速、96ビットのノンス、Poly1305鍵はメッセージごとに新しく生成されます。 どちらも非常に優れています。サーバーではAES-GCMを、モバイルではChaCha20-Poly1305を使用してください。

クイックチェック

ChaCha20-Poly1305では、Poly1305鍵はどのように生成されますか。

まとめ

ChaCha20-Poly1305は、モバイル向けに最適化されたAEADの選択肢です。次はDiffie-Hellman鍵交換を学び、非安全なチャネル上で2者が共有秘密を確立する方法を見ていきます。

よくある質問

「TLS 1.3におけるChaCha20-Poly1305 AEAD」レッスンは無料ですか?

はい。「TLS 1.3におけるChaCha20-Poly1305 AEAD」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。

「TLS 1.3におけるChaCha20-Poly1305 AEAD」で何を学びますか?

現代のTLSでChaCha20がAEAD暗号として使われる仕組みを学びます。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cryptology Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「TLS 1.3におけるChaCha20-Poly1305 AEAD」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCryptology Academyレッスンでコードを書いて実行できますか?

はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ストリーム暗号の概念とPRNG
  2. RC4:設計、脆弱性、WEP攻撃
  3. Salsa20とChaCha20の設計
  4. TLS 1.3におけるChaCha20-Poly1305 AEAD
← Cryptology Academyに戻る