0Pricing
Cryptology Academy · レッスン

Salsa20とChaCha20の設計

ChaCha20のquarter-roundと、モバイルハードウェア上での速度を確認します。

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

ようこそ

ChaCha20 は現代のシステムで主流のストリーム暗号です。TLS 1.3、WireGuard、Signal など、多くのシステムで使用されています。その洗練された設計を詳しく見ていきます。

ChaCha20 の起源

Daniel J. Bernstein は2005年に Salsa20 を設計し、2008年に改良して ChaCha20 を作りました。「Cha」という接頭辞は、拡散性を高める8つの追加改良を示しています。RFC 7539(2015年)と RFC 8439(2018年)で標準化されました。

ChaCha20 の状態

ChaCha20 は32ビットワードの4×4行列(合計512ビット)を処理します。 - ワード0~3:定数('expa', 'nd 3', '2-by', 'te k') - ワード4~11:256ビット鍵(8ワード) - ワード12:32ビットのブロックカウンタ - ワード13~15:96ビットのノンス

クォーターラウンド

ChaCha20 の中核演算である、(a,b,c,d) に対するクォーターラウンドです。 a+=b; d^=a; d<<<= 16 c+=d; b^=c; b<<<= 12 a+=b; d^=a; d<<<= 8 c+=d; b^=c; b<<<= 7 Add-Rotate-XOR(ARX)です。S-box は不要で、あらゆるハードウェア上で高速に動作します。

20ラウンド

ChaCha20 は20ラウンドを適用します。各ラウンドでは、4つのクォーターラウンドによる列ラウンドと対角ラウンドを交互に実行します。8ラウンドは ChaCha8(高速)、12ラウンドは ChaCha12(バランス型)です。ChaCha20 が安全性を重視したデフォルトです。

キーストリームの生成

1. 鍵、ノンス、カウンタから状態を初期化する 2. クォーターラウンドを20ラウンド適用する 3. 初期状態を変換後の状態に加算する(逆算を防ぐ) 4. 64バイトのキーストリームブロックを出力する 5. 次のブロックに備えてカウンタをインクリメントする

ARX の安全性に関する利点

ARX(Add、Rotate、XOR)暗号は、ほとんどの CPU 上で自然に定時間で動作します。テーブル参照を使わないため、キャッシュタイミングのサイドチャネルが発生しません。これは安全な実装にとって重要です。

ChaCha20 の性能

AES-NI がない場合、ChaCha20 は AES-CBC より約3倍高速です。スマートフォン(ARM Cortex-A)では、ChaCha20 のほうが高速です。AES-NI を搭載した現代の x86 では AES-GCM のほうが高速です。TLS 1.3 は両方を採用しています。

Salsa20 と ChaCha20

ChaCha20 は、初期ラウンドでの拡散性を高めることで Salsa20 を改良しており、差分解読法への耐性が向上しています。状態の初期化方法も異なります。どちらも安全ですが、現在の標準は ChaCha20 です。

ChaCha20 の Python 実装

from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305 import os key = ChaCha20Poly1305.generate_key() nonce = os.urandom(12) ct = ChaCha20Poly1305(key).encrypt(nonce, b'hello', None)

XChaCha20:拡張ノンス

ChaCha20は96ビットのノンスを使用します。XChaCha20は、HChaCha20関数を使用してノンスを192ビットに拡張します。ノンスが大きいほど、衝突を心配せずにランダム生成できます。libsodiumはXChaCha20-Poly1305を使用します。

クイックチェック

ChaCha20のARX設計によって、キャッシュタイミングのサイドチャネルが排除されるのはなぜですか。

まとめ

ChaCha20は洗練されており、安全です。次は、TLS 1.3でChaCha20-Poly1305 AEADとして採用されている仕組みを見ていきます。

よくある質問

「Salsa20とChaCha20の設計」レッスンは無料ですか?

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

「Salsa20とChaCha20の設計」で何を学びますか?

ChaCha20のquarter-roundと、モバイルハードウェア上での速度を確認します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Salsa20とChaCha20の設計」レッスンにはどのくらい時間がかかりますか?

ほとんどの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に戻る