RSA (Rivest-Shamir-Adleman) は、現代のコンピュータがメッセージの暗号化および復号化に使用するアルゴリズムである。非対称暗号アルゴリズムである。非対称とは、2つの異なる鍵が存在することを意味します。鍵の一方は誰にでも渡せるので、公開鍵暗号方式とも呼ばれます。もう一方の鍵は秘密にしておかなければなりません。このアルゴリズムは、大きな合成数の因子を求めることが難しいという事実に基づいています。因子が素数の場合、この問題は素因数分解と呼ばれます。また、鍵ペア(公開鍵と秘密鍵)生成器でもある。

仕組み(基本の考え方)

RSAの基本は大きな合成数 n を作り、公開鍵と秘密鍵を整数のべき乗(冪乗)で表すことにより、以下の性質を利用します。公開鍵で暗号化したデータは対応する秘密鍵でのみ復号できる、というものです。数学的には次のように表されます。

  • 暗号化:平文 m に対して、暗号文 c = me mod n を計算する(e は公開指数、n は公開モジュロ)。
  • 復号:秘密指数 d を使って m = cd mod n を計算すると元の平文が得られる。

e と d は互いに逆元の関係(mod φ(n))にあり、これが上の性質を成立させます。

鍵の生成(手順)

典型的な鍵生成の流れは以下の通りです。

  • 大きな素数 p, q をランダムに生成する(安全のため十分大きく、一般に数百〜数千ビット)。
  • n = p × q を計算する(n は公開される)。
  • φ(n) = (p−1)(q−1) を計算する(φ は秘密にする)。
  • 1 < e < φ(n) を満たし、e と φ(n) が互いに素となる値(公開指数)を選ぶ。よく使われる値は 65537 など。
  • d を e の φ(n) に関する逆元として計算する(つまり e·d ≡ 1 (mod φ(n)))。この d が秘密鍵の主要部分になる。
  • 公開鍵は (n, e)、秘密鍵は (n, d)(および p, q を保持)として管理する。

安全性と注意点

安全性の根拠は、大きな n を素因数分解して p と q を求めるのが計算上困難である点にあります。十分大きな鍵長(現在の推奨は少なくとも2048ビット、より高い安全度が必要なら3072ビットまたは4096ビット)を使うことで、既知の古典的なアルゴリズムでは素因数分解が現実的に不可能になります。

ただし次のようなリスクや注意点があります:

  • 量子コンピュータの脅威:Shorのアルゴリズムを実装できる大規模量子コンピュータが実現すれば、RSAは効率的に破られます。量子耐性アルゴリズムへの移行が議論されています。
  • 実装上の脆弱性:暗号化に適切なパディング(例:OAEP)を使わないと、選択暗号文攻撃や復号オラクル攻撃に弱くなります。また、タイミング攻撃や電力解析などのサイドチャネル攻撃にも注意が必要です。
  • 小さすぎる鍵や不適切な e の選択:小さすぎる鍵長や、誤ったパラメータ(例:e = 3 をそのまま使って脆弱な状況を作るなど)は安全性を損ないます。
  • 鍵管理:秘密鍵の保護、適切な鍵の更新(有効期限)、乱数源の品質確保は極めて重要です。

実運用での使い方・用途

RSAは直接大量データを暗号化するには遅いため、一般に次のような用途で使われます。

  • セッション鍵の交換:TLS/HTTPS などで、RSAを用いて対称鍵(AESなど)を安全に交換する。
  • デジタル署名:ソフトウェア配布、電子メール(S/MIME)、証明書の発行(X.509)などで、送信元の認証とメッセージの改ざん検知に使用。署名は通常、ハッシュ値をRSAで処理して生成・検証する(例:RSASSA-PKCS1-v1_5、RSASSA-PSS)。
  • 認証と証明書基盤:公開鍵基盤(PKI)における認証局(CA)の証明書などで広く用いられている。
  • 電子決済やSSH鍵等:公開鍵認証方式の一部として利用されることがある(ただし新しいシステムでは楕円曲線暗号(ECC)なども増えている)。

運用上の推奨事項(実務的なポイント)

  • 十分な鍵長を選ぶ(現時点では最低2048ビット推奨)。
  • 安全なパディングを使う(暗号化ではOAEP、署名ではPSSなど)。
  • 秘密鍵はハードウェアで保護する(HSM、TPM、スマートカードなど)ことを検討する。
  • 定期的な鍵ローテーションと漏洩対策を行う。
  • 最新の暗号ライブラリを使用し、既知の脆弱性や攻撃から保護する。

まとめ(要点)

RSAは公開鍵暗号の代表的アルゴリズムで、鍵のペアを使って暗号化・復号やデジタル署名を可能にします。安全性は素因数分解の困難性に依存しますが、鍵長・パディング・実装・鍵管理次第で強度が大きく変わります。量子計算の進展には注意が必要で、将来的には量子耐性アルゴリズムへの移行が求められる可能性があります。それでも現在はTLSや電子署名など多くの分野で広く使われている信頼性の高い技術です。