pprime×qprime=n = pq2048 bitseasy forward, hard reversefactoring n breaks RSA

RSA暗号化

11 最小読み取り暗号化

RSA は最初の実用的な公開鍵アルゴリズムであり、2 人が直接会うことなく秘密を交換できるアルゴリズムでした。 48 年経った今でも、TLS ハンドシェイクのかなりの部分を保護し、すべての PGP メッセージに署名し、多くのコード署名スキームを支えています。徐々に楕円曲線に置き換えられていますが、なくなったわけではありません。

記事全文は以下に英語で記載されています。

RSA は、1977 年に MIT の Ron Rivest、Adi Shamir、Leonard Adleman によって導入された公開キー暗号システムです。この特許は 2000 年に期限切れとなり、その後、基本的にすべての暗号ライブラリに普及しました。 RSA では、2 つの補完的な操作が可能になります。公開キーを使用して暗号化して秘密キーだけが復号化できるようにする操作と、秘密キーを使用して署名して公開キーを持っている人なら誰でも検証できるようにする操作です。キー生成:

  1. 2 つの大きなランダム素数 p および q (通常はそれぞれ 2048 ビット) を選択します。
  2. n = p × q を計算します。これは法です。public.
  3. オイラー合計を計算します。φ(n) = (p-1)(q-1).
  4. φ(n) と互いに素な小さな奇数 e を選択します。一般的には 65537 (=2^16+1).
  5. d = e^(-1) mod φ(n) を計算します。これは秘密キーです。

公開キーはペア (ne) です。秘密キーはd.

です。メッセージmを暗号化するには、暗号文c = m^e mod nです。復号するには:m = c^d mod n。公開鍵を持っている人は誰でも暗号化できます。秘密鍵を持っている人だけが復号化できます。署名するには、その逆: s = m^d mod nm = s^e mod n.

これが機能する理由

トリック: d を計算するには φ(n) を知る必要があり、それには n を因数分解する必要があります。 p×q。 2048 ビットの準素数の因数分解には、人類が持つ以上のコンピューティングが必要です。 pq がすでに分かっている場合に、n = p × q を検証するのは簡単です。非対称性 (簡単な乗算、ハード因数分解) は RSA.

Key size

  • RSA-1024 の基盤全体であり、十分なリソースを持った攻撃者によって原理的に破られます。 NIST は、2014 年以降、新規展開での使用を禁止しています。
  • RSA-2048 (現在のベースライン)。従来の敵対者に対して中期的には安全であると考えられています。
  • RSA-3072 — NIST の 2030 年の移行タイムラインに従って新規導入に推奨されます。
  • RSA-4096 — キーの期間が 10 ~ 20 年のコード署名に一般的です。低速ですが保守的に安全です。

RSA 実際には、

RSA が大きなメッセージを直接暗号化することはほとんどありません。遅いです。1 キロバイトの暗号化には何千もの累乗剰余演算が必要です。代わりに、ハイブリッド暗号化ではRSAが使用されます。ランダムなAESキーを生成し、AESでデータを暗号化し、AESキーのみをRSAで暗号化します。復号化側はキーを RSA 復号化し、次にデータを AES 復号化します。すべての TLS RSA ハンドシェイクはこのように機能します。すべての PGP 暗号化メールはこのように機能します。

パディングは重要

Plain (「教科書」) RSA (パディングなしで m を直接暗号化する) は致命的に安全ではありません。多くの攻撃は、展性、ランダム性の欠如、および小規模な m のようなエッジ ケースを悪用します。実際の RSA はパディング スキームを使用します。

  • PKCS#1 v1.5 padding — オリジナルのパディング。実装がパディングが有効かどうかをリークすると、Bleichenbacher の攻撃に対して脆弱になります。
  • OAEP (最適な非対称暗号化パディング) — 最新のパディング。選択暗号文攻撃に耐性があります。これを新しい RSA 暗号化に使用します。
  • PSS (確率的署名スキーム) — 最新の署名パディング。

パディング スキームは展開されたプロトコルの一部であり、オプションではありません。パディング実装のミスは、実際のシステムにおける RSA 脆弱性の最も一般的な原因です。

RSA の廃止が遅い

RSA は、次の 2 つの理由で置き換えられています。

  • キーのサイズ。 RSA-3072 キーは同等のものよりも大きいです。楕円曲線キーを 10 倍にします。 TLS ハンドシェイクとストレージのコストは規模が大きくなると加算されます。
  • 量子抵抗。 十分に大きな量子コンピューターでは、多項式時間でショールのアルゴリズムを介して RSA を因数分解します。 ECC も脆弱ですが、量子耐性のある代替手段の方が導入が簡単です。

TLS 1.3 では、ECDHE を優先して RSA キー交換が非推奨になりました。最新の認証局署名は ECDSA に移行しています。 RSA はインストール ベースの互換性 (PGP、JWT、スマート カード、コード署名) のために存続し、何年も存続します。

ポスト量子に関する質問

RSA を解読できる量子コンピューターが登場するのは数十年先であっても、長期的な価値を持つ暗号化されたデータは、後で復号できるという前提で今日収集されています。政府公電、医療記録、知的財産 - 「今すぐ収集し、後で復号化する」が現在の脅威モデルです。 NIST のポスト量子標準 (キーのカプセル化には CRYSTALS-Kyber、署名には CRYSTALS-Dilithium) がハイブリッド構成で RSA と並行して導入されています。長期的な機密データの Pure-RSA 導入は不適切であると考えられることが増えています。

よくある質問

RSA は 2026 年でも安全ですか?
従来の敵対者に対して、RSA-2048 以降は安全性を維持します。この暗号には実用的な解読が知られていません。十分な量子ハードウェアが存在すれば、将来の量子の敵に対して、RSA は多項式時間で解読可能になります (おそらく 5 ~ 20 年後)。長期機密データはすでにハイブリッドポスト量子スキームに移行しているはずです。
AES に比べて RSA が非常に遅いのはなぜですか?
RSA は、巨大な累乗剰余演算に基づく公開鍵 (非対称) アルゴリズムです。 AES は、ハードウェア アクセラレーションを備えた 128 ビット ブロック上で動作する対称アルゴリズムです。 AES はバイトあたり約 1000 倍高速です。そのため、ほとんどすべての実際のシステムは、セッション キーの交換にのみ RSA を使用し、その後、大量のデータを AES で暗号化します。
RSA 暗号化と RSA 署名の違いは何ですか?
彼らは同じ数学を反対方向に使用します。暗号化: 公開キーで暗号化し、秘密キーで復号化します。署名: 秘密鍵で「暗号化」(署名と呼ばれます)、公開鍵で「復号化」(検証と呼ばれます)。暗号化プリミティブは詳細 (パディング) が異なるため、両方に同じキーを使用しないでください。個別の署名キーと暗号化キーが標準です。
RSA 公開指数として 65537 が使用されるのはなぜですか?
これはフェルマー素数 (2^16 + 1) であり、暗号化/検証を高速に行うのに十分な大きさ (乗算は 17 回のみ) であり、効率的な計算を可能にするスパース バイナリ表現を備えています。値が大きくても小さくても機能しますが、速度が遅くなったり、微妙な脆弱性のリスクが生じたりします。 65537 は慣例により普遍的になりました。
自分の RSA キーを安全に生成できますか?
十分にテストされたライブラリ (OpenSSL、libsodium、GnuPG) と CSPRNG を使用します。独自の素数性テストを実行したり、RSA を最初から実装したりしないでください。障害モードは微妙で壊滅的です。 <code>ssh-keygen -t rsa -b 3072</code> または同等のものを使用してキーを生成することは問題ありません。自分で計算を書くことはそうではありません。
RSA 暗号化の説明: 公開鍵暗号を実用化したアルゴリズム