コンテンツへスキップ
uencoder

ブロック暗号とストリーム暗号を比較する

ブロック暗号は固定長ブロックをパディング付きで暗号化し、ストリーム暗号はバイト単位で暗号化します。速度、パディング、エラー伝播のトレードオフを理解しましょう。

  1. 1

    ブロック暗号(AES、Blowfish)は固定長ブロック(AES は 128 ビット、Blowfish は 64 ビット)を暗号化します。ブロック境界に合わない入力にはパディングと運用モード(CBC、CTR、GCM)が必要です。ストリーム暗号(RC4、ChaCha20)はキーストリームを生成して XOR します。パディングが不要で、暗号文の長さは平文と同じです。

  2. 2
    AES 暗号化ツール →

    AES(ブロック暗号)でデータを暗号化します。暗号文がブロックサイズ(AES は 16 バイト)の倍数にパディングされることに注意してください。このパディングは復号時に取り除かれます。

  3. 3
    RC4 暗号化ツール →

    同じデータを RC4(ストリーム暗号)で暗号化します。暗号文は入力とまったく同じ長さで、パディングはありません。これがストリーム暗号を定義づける性質です。

  4. 4
    Blowfish 暗号化ツール →

    Blowfish で暗号化して、64 ビットブロック暗号を比較します。ブロックサイズが小さい(8 バイト)ため、パディングの粒度は AES と異なります。

  5. 5

    重要なポイント:AES を CTR モードや GCM モードで使うと、実質的にストリーム暗号になります。カウンタブロックからキーストリームを生成して平文と XOR するのです。現代の実践では生のブロック暗号モードはほとんど使われず、AES-GCM(認証付きのストリーム的なモード)が標準です。

よくある質問

どちらが速いの?
ハードウェアによります。AES-NI ハードウェアアクセラレーション付きの AES は非常に高速です。それがないデバイスでは ChaCha20(ストリーム)の方が速いです。生の速度が決め手になることはまれで、セキュリティと認証の方が重要です。
ストリーム暗号にパディングは必要?
いいえ。ストリーム暗号は 1 バイトずつ処理するため、暗号文は常に平文と同じ長さになります。可変長データやストリーミングプロトコルでは、これが利点になります。

このタスクを解決するワークフロー

関連ツール