0Pricing
Cryptology Academy · レッスン

OAEP:最適非対称暗号化パディング

OAEPのエンコードと、IND-CCA2安全性を実現する仕組みを確認します。

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

ようこそ

OAEP(Optimal Asymmetric Encryption Padding)は、証明可能なIND-CCA2安全性を持つRSA暗号化を提供します。オラクルへのクエリを暗号学的に無意味にする、ランダム化されたエンコードを使用します。

OAEPの目標

OAEPはBellareとRogawayによって1994年に設計され、2つの目標を持っていました。(1) ランダム化によって教科書RSAのすべての攻撃を防ぐこと、(2) ランダムオラクルモデルにおける正式な安全性証明によってIND-CCA2安全性を達成することです。

OAEPの入力

M:暗号化するメッセージ(|M| ≤ |n| - 2*hLen - 2バイト) L:省略可能なラベル(通常は空) MGF:マスク生成関数(SHA-256ベース) r:ランダムシード(hLenバイト)

OAEPエンコード手順1:データブロック

DB = lHash || PS || 0x01 || M ここで: - lHash = Hash(L)(ラベルのハッシュ) - PS = 固定長になるように埋めるゼロバイト - 0x01はメッセージの開始位置を示します

OAEPエンコード手順2:マスキング

maskedDB = DB XOR MGF(r, len(DB)) maskedSeed = r XOR MGF(maskedDB, hLen) EM = 0x00 || maskedSeed || maskedDB これはRSA暗号化に入力されるパディング済みメッセージです。

MGF1:マスク生成関数

MGF1(Z, L) = Hash(Z || 0x00000000) || Hash(Z || 0x00000001) || ... SHA-256を使ったMGF1は、シードから任意の長さの疑似乱数出力を生成します。OAEPとRSA-PSSで使用されます。

OAEPのデコード

EMが与えられた場合: 1. maskedSeedとmaskedDBに分割します 2. r = maskedSeed XOR MGF(maskedDB, hLen)を計算します 3. DB = maskedDB XOR MGF(r, len(DB))を計算します 4. lHashが一致することを検証し、0x01の区切りを見つけてMを取り出します 5. エラーがあれば復号失敗とします(常に同じエラー)

OAEPがオラクル攻撃を防ぐ理由

OAEPのランダムシードrは、暗号化するたびに変化します。変更された暗号文は、圧倒的に高い確率で一様ランダムなパディング済みメッセージに復号されます。オラクルから見ると、すべての変更が「無効」になります。

IND-CCA2安全性

IND-CCA2(Indistinguishability under Chosen-Ciphertext Attack 2:選択暗号文攻撃2に対する識別不可能性)とは、攻撃者が、チャレンジ暗号文を除くすべての暗号文に対する復号オラクルへアクセスできる場合でも、Enc(M0)とEnc(M1)を区別できない性質です。OAEPはこれを実現します。

実際の利用におけるOAEPとv1.5

Pythonのcryptographyライブラリでは、padding.PKCS1v15()ではなくpadding.OAEP()を使用してください。Javaでは、'RSA/ECB/OAEPWithSHA-256AndMGF1Padding'暗号方式を使用します。新しいコードで'RSA/ECB/PKCS1Padding'を使用してはいけません。

OAEPの最大メッセージサイズ

SHA-256を使うRSA-2048の場合: 最大メッセージサイズ = 256 - 2×32 - 2 = 190バイト OAEPのオーバーヘッドは2×hLen + 2バイトです。より長いメッセージには、AESによるハイブリッド暗号化を使用します。OAEPでAES鍵を暗号化し、データをAES-GCMで暗号化してください。

クイックチェック

OAEPがパディングオラクル攻撃に耐えられるのは、どのような性質によるものですか?

まとめ

OAEPはRSA暗号化に証明可能な安全性を提供します。次は、RSA署名における同様の改善であるRSA-PSSを学びます。

よくある質問

「OAEP:最適非対称暗号化パディング」レッスンは無料ですか?

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

「OAEP:最適非対称暗号化パディング」で何を学びますか?

OAEPのエンコードと、IND-CCA2安全性を実現する仕組みを確認します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「OAEP:最適非対称暗号化パディング」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 教科書的RSAと安全でない理由
  2. PKCS#1 v1.5パディングとBleichenbacher攻撃
  3. OAEP:最適非対称暗号化パディング
  4. デジタル署名のためのRSA-PSS
← Cryptology Academyに戻る