0Pricing
Cryptology Academy · レッスン

ブロック暗号の基礎とパディング

ブロックサイズ、PKCS7パディング、暗号の構造を理解します。

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

ようこそ

ブロック暗号は、固定サイズのブロックを暗号化します。平文がブロックを満たさない場合は、パディングが必要です。このレッスンでは、ブロック暗号の構造、パディング方式、それらが重要な理由を習得します。

ブロックサイズの復習

AESは128ビット(16バイト)のブロックを使用します。DESは64ビット(8バイト)のブロックを使用していました。平文がちょうど16バイトなら1ブロックです。17バイトの場合は2ブロック必要です。

パディングが必要な理由

平文が20バイトの場合、2番目のブロックには4バイトしかありません。暗号は16バイトの完全なブロックを必要とします。残りの12バイトには、決定的で可逆な方式でパディングを追加します。

PKCS#7パディング

PKCS#7ではNバイトを追加し、それぞれに値Nを設定します: - 3バイト必要 → 03 03 03を追加 - 12バイト必要 → 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0Cを追加 - 0バイト必要 → 16バイトの完全なブロックを追加:10×16

常に1ブロック分を追加する

平文がちょうど16バイトの場合、PKCS#7は0x10×16の完全な追加ブロックを付加します。これにより、受信側はパディングの終端を常に把握できます。最後のバイトの値が、取り除くバイト数を示すためです。

PythonでのPKCS#7

def pkcs7_pad(data: bytes, block_size: int = 16) -> bytes: n = block_size - (len(data) % block_size) return data + bytes([n] * n) def pkcs7_unpad(data: bytes) -> bytes: n = data[-1] return data[:-n]

パディングオラクル攻撃

復号後にサーバーがパディングの有効性を(エラーメッセージや処理時間によって)明らかにすると、攻撃者は鍵を知らなくても暗号文を1バイトずつ復号できます。2010年には、これによってASP.NET ViewStateが破られました。

ゼロパディングとANSI X.923

ゼロパディング:0x00バイトで埋めます(元のデータがゼロで終わっている可能性があるため、曖昧です)。 ANSI X.923:ゼロで埋め、最後のバイトに個数を設定します。 ISO 7816-4:最初のパディングバイトを0x80にし、残りを0x00にします。 PKCS#7は曖昧さがなく、推奨されます。

ビット単位のパディング(CTS)

Ciphertext Stealing(CTS)は、最後の2ブロックを組み替えて部分ブロックの入力を処理することで、パディングを完全に回避します。ディスク暗号化(Kerberosや一部のAES実装)で使用されます。

ブロックサイズがセキュリティに与える影響

64ビットブロック(DES、3DES、Blowfish)では、2^32ブロック(約32GB)の後に誕生日衝突が発生します。2016年にSWEET32攻撃がこれを実証した後、ブラウザーはTLSでの3DESを無効化しました。AESの128ビットブロックでは2^64ブロックが必要なため、実用上安全です。

パディングなしのモード

AES-CTRとAES-GCMではパディングは必要ありません。ブロック暗号をキーストリーム生成器として使用し、任意の長さの入力をXORするためです。ブロック境界は内部実装の詳細にすぎません。

クイックチェック

16バイトブロックでPKCS#7を使用する場合、13バイトのメッセージにはどのようなパディングを追加しますか?

まとめ

ブロック暗号のパディングを習得しました。次はECBモードとCBCモードを比較し、有名なECBペンギン攻撃から始めます。

よくある質問

「ブロック暗号の基礎とパディング」レッスンは無料ですか?

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

「ブロック暗号の基礎とパディング」で何を学びますか?

ブロックサイズ、PKCS7パディング、暗号の構造を理解します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「ブロック暗号の基礎とパディング」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. ブロック暗号の基礎とパディング
  2. ECBとCBC:パターンとIV
  3. CTRモードとストリーム暗号の動作
  4. GCMと認証付き暗号化
← Cryptology Academyに戻る