Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 181

ChaCha20

監修Cybersecurity entrepreneur & security researcher

ChaCha20 とは何ですか?

ChaCha20Daniel J. Bernstein が設計した現代的ストリーム暗号で、256 ビット鍵と 96 ビットナンスを用いる。Poly1305 と組み合わせた AEAD「ChaCha20-Poly1305」として広く使われる。


ChaCha20 は、Daniel J. Bernstein が 2008 年に自身の Salsa20 設計を改良して発表した 20 ラウンドのストリーム暗号です。256 ビット鍵、96 ビットナンス、32 ビットブロックカウンタから、32 ビット語に対する加算・回転・XOR(ARX)演算のみを用いて鍵ストリームを生成します。中核となるのは、状態語を 4 つずつ混合する「クォーターラウンド」です。ルックアップテーブルを必要としないため高速で、AES ハードウェアを持たない CPU でも自然に定数時間で動作します。これが、Google が 2014 年に Android と Chrome のトラフィック保護のために最初に展開した理由です。Poly1305 MAC と組み合わせた AEAD 方式 ChaCha20-Poly1305 は RFC 8439(RFC 7539 を廃止)で標準化され、TLS 1.3 では AES-GCM と並ぶ 2 つの必須暗号スイートの 1 つとなっています。また QUIC、WireGuard、OpenSSH、Signal プロトコル、Linux カーネルの乱数生成器などの基盤にもなっています。

運用上の重大な落とし穴が ナンスの再利用 です。同じ鍵とナンスで 2 つのメッセージを暗号化すると、それらの平文の XOR が露出し、さらにワンタイムの Poly1305 鍵が明らかになるため、機密性と完全性の両方が破られます。96 ビットのナンスは接続ごとのカウンタとしては十分ですが、大規模にランダム生成する用途では危険です。そこで XChaCha20(draft-irtf-cfrg-xchacha)は、HChaCha20 によるサブ鍵導出を介してナンスを 192 ビットに拡張し、ランダムなナンスを安全に使えるようにしています。10 年以上にわたる暗号解析を経ても、フル 20 ラウンド版を破る攻撃は見つかっていません。

flowchart LR
  K[256 ビット鍵] --> S[状態を初期化: 定数・鍵・カウンタ・ナンス]
  N[96 ビットナンス] --> S
  CTR[ブロックカウンタ] --> S
  S --> R[ARX クォーターラウンドを 20 回]
  R --> KS[鍵ストリームブロック]
  PT[平文] --> X((XOR))
  KS --> X
  X --> CT[暗号文]
  CT --> P[Poly1305 MAC]
  P --> TAG[認証タグ]

  1. 01

    TLS 1.3 と QUIC ではモバイル端末で TLS_CHACHA20_POLY1305_SHA256 が使われる。

  2. 02

    WireGuard はすべてのデータパケットを ChaCha20-Poly1305 で暗号化する。

よくある質問

ChaCha20 とは何ですか?

Daniel J. Bernstein が設計した現代的ストリーム暗号で、256 ビット鍵と 96 ビットナンスを用いる。Poly1305 と組み合わせた AEAD「ChaCha20-Poly1305」として広く使われる。 サイバーセキュリティの 暗号 カテゴリに属します。

ChaCha20 とはどういう意味ですか?

Daniel J. Bernstein が設計した現代的ストリーム暗号で、256 ビット鍵と 96 ビットナンスを用いる。Poly1305 と組み合わせた AEAD「ChaCha20-Poly1305」として広く使われる。

ChaCha20 からどのように防御しますか?

ChaCha20 に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。

関連用語

関連項目