Cryptology Academy · レッスン

デジタル署名のためのRSA-PSS

PSSエンコードとソルト、署名でPKCS#1 v1.5に取って代わった理由を学びます。

レッスン 4/413 ステップ

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

ようこそ

RSA-PSS(Probabilistic Signature Scheme)は、PKCS#1 v1.5署名に代わる安全な方式です。証明可能な安全性を持つ署名のために、ランダム化されたエンコードを使用します。

PKCS#1 v1.5署名の弱点

PKCS#1 v1.5署名では、決定的なDigestInfoエンコードを使用します。既知の偽造攻撃は、検証実装の緩さを悪用します。Bleichenbacherは2006年に、特定の検証器に対する署名偽造を示しました。

PSSの設計目標

Bellare-Rogawayは1996年、署名を確率的にするためにPSSへランダムなソルトを追加しました。署名するたびに異なる署名が生成されます。ランダムオラクルモデルで証明可能な安全性を持ち、RSAの困難性へのタイトな帰着が成立します。

PSSのエンコード手順

1. mHash = Hash(M) 2. salt = random(sLen bytes) 3. M' = 0x00×8 || mHash || salt 4. H = Hash(M') 5. DB = PS || 0x01 || salt 6. dbMask = MGF1(H, emLen - hLen - 1) 7. maskedDB = DB XOR dbMask 8. EM = maskedDB || H || 0xbc

ソルト長の選択

PKCS#1 v2.2の選択肢: - MAX_LENGTH:ハッシュと同じ長さのソルト(推奨、最大の安全性) - DIGEST_LENGTH:ソルトの長さをハッシュの長さにする(標準) - 0:決定的PSS(確率的という性質が失われるため非推奨) Python:padding.PSS.MAX_LENGTH

PSSの検証

EM = sig^e mod nを復元します。maskedDBとHを解析します。mHash(メッセージから得たもの)と復元したsaltからM'を計算します。H == Hash(M')を検証します。salt自体は一致する必要はなく、Hが検証に通れば十分です。

PSSとv1.5の安全性比較

PSS:証明可能な安全性、タイトな帰着、確率的署名、わずかに大きい計算量 v1.5:ヒューリスティックな安全性、決定性、高速、形式オラクル攻撃に対して脆弱 新しいコードではすべてPSSを使用してください。

TLS 1.3におけるPSS

TLS 1.3では、すべてのRSA署名にRSA-PSSを使用することが必須です。新しいTLS 1.3拡張ではPKCS#1 v1.5は禁止されています。署名アルゴリズムは、rsa_pss_rsae_sha256、rsa_pss_rsae_sha384、rsa_pss_rsae_sha512です。

PythonでのPSS

from cryptography.hazmat.primitives.asymmetric import padding from cryptography.hazmat.primitives import hashes # Sign sig = private_key.sign( message, padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH), hashes.SHA256() )

RSASSA-PSS OID

RSA-PSSには固有の鍵タイプOIDがあります:id-RSASSA-PSS (1.2.840.113549.1.1.10)。PSS専用に生成された鍵はこのOIDを使用し、PSS署名が必須です(v1.5では動作しません)。新しい導入ではこれがベストプラクティスです。

切り詰められたハッシュとソルトの推奨事項

salt_length = hash_lengthの場合、PSSの安全性はmin(|modulus|/2, |hash|) - 1ビットです。RSA-2048とSHA-256では128ビットの安全性になります。安全性レベルを合わせるには、192ビットの安全性を持つRSA-3072 + SHA-384を使用します。

クイックチェック

RSA-PSS署名がPKCS#1 v1.5と比べて「確率的」になる理由は何ですか?

まとめ

RSAで署名する場合はRSA-PSSが安全な方法です。次は楕円曲線暗号を極め、曲線の幾何学と代数を理解します。
無料で開始

AI チューターと学ぶ Cryptology Academy — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
67
レッスン
261

よくある質問

「デジタル署名のためのRSA-PSS」レッスンは無料ですか?

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

「デジタル署名のためのRSA-PSS」で何を学びますか?

PSSエンコードとソルト、署名でPKCS#1 v1.5に取って代わった理由を学びます。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「デジタル署名のためのRSA-PSS」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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