RSA暗号 - 暗号化全般

暗号化全般 | IT用語集

RSA暗号とは

RSAは、1977年にMITのRon Rivest、Adi Shamir、Leonard Adlemanによって発明された公開鍵暗号(非対称暗号)アルゴリズムです。名前は3人の発明者の頭文字に由来します。RSAは、大きな2つの素数の積(合成数)を因数分解することが現実的な計算時間では困難であるという数学的性質(素因数分解問題)を安全性の根拠としています。なお、同じ発想の暗号方式は1973年に英国の政府通信本部(GCHQ)の数学者Clifford Cocksが先に考案していたことが1997年に機密解除文書で判明していますが、当時は非公開だったため、実質的にRSAが公開鍵暗号の実用化を切り開いた最初の方式として広く普及しました。

RSAは公開鍵と秘密鍵のペアを使用し、(1)第三者に公開しても安全な鍵で暗号化・署名検証を行い、(2)本人だけが持つ秘密鍵で復号・署名生成を行うという非対称性が最大の特徴です。共通鍵暗号(AESなど)では通信当事者間で事前に同じ鍵を安全に共有する必要がありますが、RSAはこの「鍵配送問題」を解決し、面識のない相手とも安全に暗号通信を開始できます。この性質から、TLS/SSL(HTTPS通信の暗号化)、SSH(サーバーへの安全なリモートログイン)、S/MIME・PGP(メール暗号化)、コードサイニング証明書、ICカードやマイナンバーカードの電子署名基盤(PKI)など、現代の情報インフラの根幹で利用され続けています。ただし後述のとおり、2026年時点では新規設計のシステムでは楕円曲線暗号(ECC)への置き換えが進んでおり、RSAは「枯れた実績」を理由に選ばれる場面が中心になりつつあります。

RSAの仕組み

RSAの安全性は「2つの大きな素数の積 n を計算するのは一瞬だが、nだけからその2つの素数(p, q)を逆算するのは天文学的な時間がかかる」という非対称性に支えられています。処理は次の3段階から構成されます。

  1. 鍵生成:ランダムに選んだ大きな素数 p, q から合成数 n = p × q を計算し、オイラーのトーシェント関数 φ(n) = (p-1)(q-1) を求める。φ(n) と互いに素な公開指数 e(実務上はほぼ必ず65537=2^16+1が使われる。計算が高速かつ既知の攻撃に対して安全な値として定着している)を選び、e × d ≡ 1 (mod φ(n)) を満たす秘密指数 d を拡張ユークリッドの互除法で求める。
  2. 公開鍵:(e, n) のペア。第三者に配布してよい。
  3. 秘密鍵:(d, n) のペア、およびp, q自体。厳重に保管し絶対に外部へ出してはならない。
  4. 暗号化:平文を数値化したメッセージ m に対し、暗号文 c = m^e mod n を計算する。
  5. 復号化:秘密鍵 d を使い m = c^d mod n を計算すると元のメッセージが復元される。フェルマーの小定理・オイラーの定理により、この演算が数学的に成立することが保証されている。

小さな数値による具体例(実運用では2048ビット以上を使うため、あくまで仕組み理解用の教科書的な例です):

p = 61, q = 53 とすると
n = p × q = 3233
φ(n) = (p-1)(q-1) = 60 × 52 = 3120

公開指数 e = 17 (φ(n)=3120と互いに素)
秘密指数 d = 2753 (17 × 2753 ≡ 1 mod 3120 を満たす)

公開鍵 = (17, 3233) 秘密鍵 = (2753, 3233)

平文 m = 65 を暗号化:
c = 65^17 mod 3233 = 2790

暗号文 c = 2790 を復号:
m = 2790^2753 mod 3233 = 65 (元のメッセージに一致)

実際のシステムでは m は文字列そのものではなく、パディングを施した後のバイト列を整数化したものです。RSAを教科書通り(生の m^e mod n)で使うと、同一平文が常に同一暗号文になる、小さいeと短い平文の組み合わせで根を取るだけで復号できてしまう(低指数攻撃)といった弱点があるため、実装では必ずパディングスキームを併用します。代表的なものが暗号化用のOAEP(Optimal Asymmetric Encryption Padding、RFC 8017で規定)と署名用のPSS(Probabilistic Signature Scheme)です。古いPKCS#1 v1.5パディングは実装依存でパディングオラクル攻撃(Bleichenbacher攻撃)を許す危険があるため、新規実装ではOAEP/PSSへの移行が強く推奨されています。

メリット・デメリット

RSAを採用するかどうかの判断材料として、実務でよく問題になる利点・欠点を整理します。

メリット

  • 枯れた実績と広範な相互運用性:1977年の発明以来、半世紀近く実運用されており、あらゆる言語のライブラリ、HSM(ハードウェアセキュリティモジュール)、スマートカード、レガシーシステムまで例外なくサポートされている。
  • 鍵配送問題の解決:事前の秘密共有なしに、公開鍵を配布するだけで暗号通信や本人性の検証(署名)が可能。
  • 暗号化・署名の両方に使える汎用性:DSAのように署名専用ではなく、暗号化・鍵交換・デジタル署名のいずれにも使用できる。
  • 数学的な理解のしやすさ:素因数分解というシンプルな数論に基づくため、監査・検証・教育の観点でも扱いやすい。

デメリット・注意点

  • 鍵長が大きく処理が重い:同等の安全性を得るために2048〜4096ビットの鍵長が必要で、256ビット程度で足りるECCと比べて鍵生成・署名・暗号化の処理コスト、通信データ量、消費電力が大きい。モバイルやIoTなど計算資源が限られる環境では不利になりやすい。
  • 大量データの直接暗号化に不向き:暗号化できる平文の長さはn(鍵長)とパディングオーバーヘッドで制限される(例:RSA-2048+OAEP-SHA256では実質190バイト程度が上限)。そのためRSA単体でファイルやストリームを暗号化することはなく、AESなどの共通鍵で本体を暗号化し、その共通鍵だけをRSAで暗号化する「ハイブリッド暗号」方式が定石。
  • 量子コンピュータに対する脆弱性:Shorのアルゴリズムを実行できる大規模な誤り耐性量子コンピュータが実現した場合、素因数分解が多項式時間で解けてしまい、RSAの安全性の前提が崩れる。
  • 実装不備によるサイドチャネル・オラクル攻撃のリスク:パディング方式や剰余演算の実装ミスにより、Bleichenbacher攻撃、ROBOT攻撃、タイミング攻撃などが成立し得る(詳細は後述のトラブル事例を参照)。
  • 鍵生成コスト:大きな素数を探索する必要があるため、ECCの鍵生成と比べて時間がかかる。証明書の一括発行やIoTデバイスの大量プロビジョニングでは無視できないコストになる場合がある。

混同されやすい用語・類似技術との違い

用語RSAとの違い
Diffie-Hellman(DH)鍵交換DHは離散対数問題に基づく「鍵交換専用」の方式で、暗号化や署名には使えない。RSAは暗号化・署名・鍵交換のすべてに使える汎用アルゴリズムという点が異なる。TLS 1.3では前方秘匿性(PFS)のため楕円曲線版のDH(ECDHE)が鍵交換に使われ、RSAは証明書の署名検証にのみ使われる構成が一般的。
ECC / ECDSA / ECDH数学的な安全性の根拠が「楕円曲線上の離散対数問題」であり、RSAの「素因数分解問題」とは別物。同等の安全性をより短い鍵長(256ビット前後)で実現でき、処理も高速なため、新規システムではECC系が優先される傾向にある。
DSA / ECDSA(署名アルゴリズム)DSAは離散対数問題に基づく「署名専用」アルゴリズムで暗号化はできない。RSAは署名にも暗号化にも使える点が構造的に異なる。
AES(共通鍵暗号)RSAは公開鍵・秘密鍵のペアを使う非対称暗号、AESは送受信者が同じ鍵を共有する対称暗号。RSAは鍵長が大きく低速なので大容量データの暗号化には向かず、実務ではAESと組み合わせるハイブリッド方式が標準的。
PKCS#1 v1.5 と OAEP/PSSどちらもRSAの「パディング方式」の名前であり、RSAというアルゴリズム自体ではない。PKCS#1 v1.5は歴史的に広く使われたが構造的にパディングオラクル攻撃を受けやすく、OAEP(暗号化用)・PSS(署名用)への移行がRFC 8017でも推奨されている。
RSA SecurID名称が似ているため混同されがちだが無関係。RSA SecurIDはRSA Security社が提供する多要素認証(MFA)用のワンタイムパスワードトークン製品であり、RSA暗号アルゴリズムそのものではない。

AIエンジニアとしての実務ポイント

AIエンジニア・インフラエンジニアの実務では、RSAは主にサーバー間通信の認証、SSH鍵、TLS証明書の管理で登場します。以下は現場で押さえておくべき運用上のポイントです。

  • 公開指数eは65537固定でよい:openssl genrsaなど主要ツールのデフォルトは65537。より小さいeへの変更は特殊な事情がない限り不要かつ非推奨。
  • 秘密鍵のパーミッションと保管場所:秘密鍵ファイルは chmod 600 で自分だけが読める状態にし、可能ならHSMやクラウドのKMS(AWS KMS、GCP Cloud KMSなど)で鍵自体をエクスポート不可な状態で管理する。
  • 証明書更新時の鍵ローテーション:TLS証明書更新のたびに秘密鍵を使い回さず、更新のタイミングで新しい鍵ペアを生成する運用が望ましい(鍵の使用期間を短くすることで漏えい時の被害範囲を限定できる)。
  • 暗号化と署名でパディングを混同しない:OpenSSLのAPIでは暗号化(RSAES-OAEP)と署名(RSASSA-PSS)で異なるパディング関数を使う。同じ鍵ペアであっても用途ごとに正しいスキームを選択する必要がある。
# RSA鍵ペアの生成(2026年時点では3072ビット以上を推奨)
openssl genrsa -out private.key 3072

# 公開鍵の抽出
openssl rsa -in private.key -pubout -out public.key

# RSA-OAEP(SHA-256)で暗号化:レガシーなrsautlではなくpkeyutlの使用が推奨
openssl pkeyutl -encrypt -inkey public.key -pubin \
  -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 \
  -in plaintext.txt -out encrypted.bin

# RSA-OAEPで復号
openssl pkeyutl -decrypt -inkey private.key \
  -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 \
  -in encrypted.bin -out decrypted.txt

# 秘密鍵の内容確認(p, q, n, e, dなどのパラメータを表示)
openssl rsa -in private.key -text -noout

RSAの鍵長と安全性

RSAの安全性は「素因数分解の困難さ」に依存するため、計算機の性能向上や新しい分解アルゴリズムの発見によって、かつて安全とされた鍵長が徐々に陳腐化していきます。実際、RSA-768(768ビット)は2009年に学術チームによって分解に成功しており、RSA-1024もその延長線上で危殆化が進んでいると評価されています。2026年時点でのNIST(米国国立標準技術研究所)SP 800-57 Part 1やCNSA 2.0(米国家安全保障局の次世代暗号スイート)の考え方を踏まえた目安は以下の通りです。

鍵長安全性の目安推奨度
1024ビット危殆化が進行中、実用上安全とは言えない❌ 使用禁止
2048ビット当面は許容されるが最低ライン⚠️ 新規採用は非推奨
3072ビット対称鍵128ビット相当の安全性、2030年代以降も一般に許容見込み✅ 推奨(NIST/CNSA基準)
4096ビット長期保存データや高セキュリティ要件向け✅ 最推奨(処理負荷は増大)

実務上の注意点として、鍵長を上げるほど暗号化・署名検証の計算コストとネットワーク帯域(TLSハンドシェイクのサイズなど)が増加するトレードオフがあります。長期間の機密性が必要なデータ(数十年単位で保護すべき医療・国家機密情報など)では鍵長の引き上げよりも後述のポスト量子暗号への移行を検討すべきという議論が2020年代後半から強まっています。また鍵長だけでなく、乱数生成器の品質(弱い乱数からp, qが推定できてしまうROCA脆弱性のような事例)や、パディング方式の選択も安全性を左右する要素であり、鍵長の数字だけを見て安全性を判断してはいけません。

最新動向(2026年)

楕円曲線暗号(ECC)への移行の加速

RSAと比較して、楕円曲線暗号(ECC)は同等の安全性をより短い鍵長で実現できます(256ビットのECCがRSA-3072相当)。TLS証明書、SSH鍵、コードサイニングなど幅広い領域で、新規システムはECDSAやEd25519をデフォルトに据えるケースが増えています。主要なクラウド事業者やCA(認証局)もECDSA証明書の発行を標準メニュー化しており、RSAは「相互運用性を最優先する場合の選択肢」という位置づけに変わりつつあります。

ポスト量子暗号(PQC)への移行計画

量子コンピュータが実用化されると、Shorのアルゴリズムによって素因数分解・離散対数問題が効率的に解かれ、RSAおよびECC/ECDH/ECDSAはいずれも安全性の前提を失います。NISTは2024年にポスト量子暗号の標準を確定させ、鍵確立(鍵カプセル化)にはFIPS 203(ML-KEM、旧CRYSTALS-Kyber)、デジタル署名にはFIPS 204(ML-DSA、旧CRYSTALS-Dilithium)およびFIPS 205(SLH-DSA、旧SPHINCS+)を制定しました。米国家安全保障局のCNSA 2.0方針では、国家安全保障システムに対して2033年までにPQCアルゴリズムへの全面移行を求めており、RSAやECCは移行期間中の「ハイブリッド構成」(PQCと従来方式を併用し、どちらか一方が破られても安全性を維持する設計)で使われる場面が増えています。長期的な機密性が求められるデータについては、「今は解読できなくても、将来量子コンピュータが実用化された時点で過去に傍受・保存された暗号文が復号される」という Harvest Now, Decrypt Later(今収集して後で復号する)攻撃のリスクが指摘されており、鍵長の議論だけでなくPQC移行計画自体を評価する必要があります。

トラブル事例と対策

⚠️ 弱い鍵長の使用

症状:古いシステムで1024ビットや旧デフォルトの2048ビットRSAがそのまま使われ続けている。

対策:新規発行・更新のタイミングで3072ビット以上のRSA、または可能であればECDSA/Ed25519への移行を検討する。証明書の棚卸しツールで鍵長を定期的に監査する運用が有効。

⚠️ RSAでの大量データ暗号化

症状:RSAで直接大量のデータやファイル全体を暗号化しようとして、平文長の上限エラーや極端な低速化に遭遇する。

対策:RSAは鍵交換(共通鍵の受け渡し)や署名に使用し、データ本体の暗号化にはAES-GCMなどの共通鍵暗号を使うハイブリッド暗号構成にする。

⚠️ Bleichenbacher攻撃・ROBOT攻撃(パディングオラクル)

症状:PKCS#1 v1.5パディングを使うTLSサーバーが、パディングの正当性によって異なるエラーメッセージや応答時間を返してしまい、攻撃者が繰り返しリクエストを送ることで秘密鍵を使わずに暗号文を復号できてしまう。1998年に発表されたBleichenbacher攻撃の変種であるROBOT攻撃は2017年に多数の大手ベンダー製品で再発見された。

対策:暗号化にはPKCS#1 v1.5ではなくOAEPを使用する。PKCS#1 v1.5を維持せざるを得ない場合は、パディングエラーとその他のエラーで応答(エラーメッセージ・応答時間)を一切区別しない実装にする(定数時間処理)。TLSライブラリは最新版を使い、既知の緩和策が適用されているか確認する。

⚠️ 共通モジュラス攻撃・低指数攻撃

症状:複数のユーザーが誤って同じ n(モジュラス)を共有してしまう「共通モジュラス攻撃」や、小さい公開指数(e=3など)かつパディングなしで同一平文を複数の鍵で暗号化した場合に、中国剰余定理を使って平文が復元できてしまう「低指数攻撃(Coppersmithの攻撃等)」が知られている。

対策:鍵生成は必ず信頼できるライブラリ(OpenSSL等)に任せ、独自実装や鍵の使い回しを避ける。公開指数は業界標準の65537を使い、必ずOAEP等の確率的パディングを併用する。

⚠️ 弱い乱数生成器による鍵の脆弱性(ROCA型の事例)

症状:素数p, qの生成に使う乱数源の品質が低いハードウェア・ライブラリでは、公開鍵nから元の素因数を効率的に推測されてしまう脆弱性が過去に複数報告されている(2017年に一部のスマートカード・TPM実装で報告されたROCA脆弱性が代表例)。

対策:鍵生成には暗号論的に安全な乱数生成器(CSPRNG)を使う実装であることを確認し、組み込みデバイスやHSMのファームウェアは既知の脆弱性情報(CVE)を定期的にチェックして最新化する。

外部リンク・参考資料

関連用語

📝 関連ブログ記事

【2026年最新】OpenSSLの深刻な問題とは?

よくある質問(FAQ)

Q. RSAとは何ですか?

RSAは1977年にRivest・Shamir・Adlemanが開発した公開鍵暗号アルゴリズムです。大きな数の素因数分解が計算困難であることを安全性の根拠とし、デジタル署名・鍵交換・暗号化に使われます。ただし現在は処理速度や鍵長の観点から、新規実装では楕円曲線暗号(ECC)が推奨されます。

Q. RSAの最小推奨鍵長は何ビットですか?

NIST(2022年)とBSI(ドイツ)の推奨では、2030年以降もRSA-3072以上を推奨しています。RSA-2048は2030年まで許容されますが、新規システムでは2048より長い鍵長またはECCへの移行が推奨されます。RSA-1024は既に危殆化しており使用禁止です。

Q. RSAとECCはどう違いますか?

RSAは素因数分解の困難性に基づき鍵長が長い(2048〜4096ビット)です。ECCは楕円曲線離散対数問題に基づき、256ビットのECC(P-256/Ed25519)でRSA-3072と同等のセキュリティを実現します。ECCはRSAより鍵生成・署名・検証が高速で、特にモバイル・IoT環境で有利です。

Q. RSAのメリットとデメリットを教えてください。

メリットは、半世紀近い実績による広範な相互運用性、鍵配送問題の解決、暗号化・署名・鍵交換のすべてに使える汎用性です。デメリットは、ECCと比べて鍵長が長く処理が重いこと、大量データの直接暗号化に向かないためAESとのハイブリッド構成が必須になること、量子コンピュータに対して原理的に脆弱なこと、パディング実装の不備がBleichenbacher攻撃やROBOT攻撃につながるリスクがあることです。

Q. RSA暗号とRSA SecurIDは同じものですか?

別物です。RSA暗号は公開鍵暗号アルゴリズムの名称ですが、RSA SecurIDはRSA Security社が提供する多要素認証(MFA)用のワンタイムパスワードトークン製品の名称です。名称にRSAが共通して含まれるため混同されがちですが、技術的な関連はありません。

Q. RSAは量子コンピュータで解読されてしまうのですか?

大規模な誤り耐性量子コンピュータが実現し、Shorのアルゴリズムを実行できるようになった場合、理論上RSAの素因数分解は効率的に解かれてしまいます。ただし2026年時点でそこまでの量子コンピュータは実用化されていません。とはいえ「今傍受した暗号文を保存しておき、将来の量子コンピュータで復号する」Harvest Now, Decrypt Later攻撃のリスクがあるため、長期保存が必要な機密データについてはNISTが標準化したFIPS 203(ML-KEM)などポスト量子暗号への移行計画を検討することが推奨されています。

暗号化実装のご相談

RSAに関するご質問や、暗号化基盤構築のご相談など、お気軽にお問い合わせください。