ブロック暗号とストリーム暗号を比較する
ブロック暗号は固定長ブロックをパディング付きで暗号化し、ストリーム暗号はバイト単位で暗号化します。速度、パディング、エラー伝播のトレードオフを理解しましょう。
- 1
ブロック暗号(AES、Blowfish)は固定長ブロック(AES は 128 ビット、Blowfish は 64 ビット)を暗号化します。ブロック境界に合わない入力にはパディングと運用モード(CBC、CTR、GCM)が必要です。ストリーム暗号(RC4、ChaCha20)はキーストリームを生成して XOR します。パディングが不要で、暗号文の長さは平文と同じです。
- 2 AES 暗号化ツール →
AES(ブロック暗号)でデータを暗号化します。暗号文がブロックサイズ(AES は 16 バイト)の倍数にパディングされることに注意してください。このパディングは復号時に取り除かれます。
- 3 RC4 暗号化ツール →
同じデータを RC4(ストリーム暗号)で暗号化します。暗号文は入力とまったく同じ長さで、パディングはありません。これがストリーム暗号を定義づける性質です。
- 4 Blowfish 暗号化ツール →
Blowfish で暗号化して、64 ビットブロック暗号を比較します。ブロックサイズが小さい(8 バイト)ため、パディングの粒度は AES と異なります。
- 5
重要なポイント:AES を CTR モードや GCM モードで使うと、実質的にストリーム暗号になります。カウンタブロックからキーストリームを生成して平文と XOR するのです。現代の実践では生のブロック暗号モードはほとんど使われず、AES-GCM(認証付きのストリーム的なモード)が標準です。
よくある質問
- どちらが速いの?
- ハードウェアによります。AES-NI ハードウェアアクセラレーション付きの AES は非常に高速です。それがないデバイスでは ChaCha20(ストリーム)の方が速いです。生の速度が決め手になることはまれで、セキュリティと認証の方が重要です。
- ストリーム暗号にパディングは必要?
- いいえ。ストリーム暗号は 1 バイトずつ処理するため、暗号文は常に平文と同じ長さになります。可変長データやストリーミングプロトコルでは、これが利点になります。
このタスクを解決するワークフロー
関連ツール
AES 暗号化ツール
Encrypt text or binary data with AES (CBC/GCM/ECB) using Web Crypto API。無料、プライベート、100%クライアントサイド。 ツール
RC4 暗号化ツール
Encrypt text with RC4 stream cipher using crypto-js。無料、プライベート、100%クライアントサイド。 ツール
Blowfish 暗号化ツール
Encrypt text with Blowfish block cipher using crypto-js。無料、プライベート、100%クライアントサイド。 ツール