Overview
公開鍵暗号(Public Key Cryptography)とは、暗号化に使う鍵(公開鍵)と復号に使う鍵(秘密鍵)が異なる非対称暗号方式です。公開鍵は誰でも入手可能ですが、対応する秘密鍵を持つ者だけが暗号文を復号できます。この仕組みにより、共通鍵暗号が抱える鍵配送問題を根本的に解決しました。
公開鍵暗号の概念は1976年にWhitfield DiffieとMartin Hellmanによって提唱されました。翌1977年、Ron Rivest、Adi Shamir、Leonard Adlemanの3名が具体的なアルゴリズムRSAを発表し、実用的な公開鍵暗号が誕生しました。RSAは発明者3名の頭文字から名付けられています。
現在、RSAはTLS/SSL通信、デジタル署名、電子メール暗号化、コードサイニングなど、インターネット上の信頼基盤を支える中核技術として使用されています。
Details
RSAの数学的原理
RSAの安全性は素因数分解問題の困難性に基づいています。2つの大きな素数 p と q の積 n = p × q を計算するのは容易ですが、nから元のp、qを求めること(素因数分解)は、nが十分に大きい場合、現在のコンピュータでは実質的に不可能です。
鍵生成では、まず2つの大きな素数p、qを選び、n = p × q を計算します。次にオイラーのトーシェント関数 φ(n) = (p-1)(q-1) を求め、φ(n)と互いに素な整数eを公開指数として選びます(一般的にe = 65537)。最後にe × d ≡ 1 (mod φ(n)) を満たすdを秘密指数として計算します。公開鍵は (n, e)、秘密鍵は (n, d) となります。
暗号化と復号
暗号化は平文mに対して c = m^e mod n で暗号文cを得ます。復号は m = c^d mod n で平文を復元します。この数学的関係により、公開鍵で暗号化したデータは秘密鍵でのみ復号でき、秘密鍵で署名したデータは公開鍵で検証できます。
RSAの鍵長と安全性
RSAの安全性は鍵長に大きく依存します。現在の推奨事項は以下の通りです:
- 1024ビット:非推奨。2010年代に解読リスクが現実的に
- 2048ビット:現在の最低推奨基準。2030年頃まで安全とされる
- 3072ビット:AES-128と同等のセキュリティレベル
- 4096ビット:長期保存データ向け。処理負荷は高い
RSA以外の公開鍵暗号
- 楕円曲線暗号(ECC):RSAより短い鍵長で同等の安全性を実現
- ElGamal暗号:離散対数問題に基づく暗号方式
- 格子暗号(Lattice-based):耐量子暗号の主要候補
ハイブリッド暗号方式
RSAは処理速度が共通鍵暗号と比較して数百〜数千倍遅いため、実用ではハイブリッド暗号方式が使用されます。まずRSAで共通鍵(セッション鍵)を安全に交換し、実際のデータ暗号化はAESなどの共通鍵暗号で行います。TLS通信はこのハイブリッド方式の代表的な実装です。
Security Measures
- 01十分な鍵長の使用:新規システムでは最低2048ビット、重要システムでは4096ビットを使用してください。1024ビット以下のRSA鍵は即座に更新が必要です。
- 02適切なパディングスキームの採用:PKCS#1 v1.5パディングには既知の脆弱性があるため、OAEP(Optimal Asymmetric Encryption Padding)を使用してください。デジタル署名にはPSSパディングを推奨します。
- 03安全な乱数生成:鍵生成時の素数選択には暗号論的に安全な乱数生成器を使用してください。不適切な乱数は鍵の安全性を根本から損ないます。
- 04秘密鍵の厳格な保護:秘密鍵はHSM(Hardware Security Module)での保管を推奨します。ファイルとして保管する場合は暗号化し、アクセス制御を厳格に設定してください。
- 05ECCへの移行検討:性能と安全性の観点から、新規システムではECDSA(署名)やECDH(鍵交換)への移行を検討してください。256ビットECCは3072ビットRSAと同等の安全性を提供します。
- 06量子コンピュータへの備え:RSAは量子コンピュータのShorのアルゴリズムにより将来的に解読可能となるため、NISTの耐量子暗号標準への移行計画を策定しましょう。
Incidents
📋 ROCA脆弱性 — Infineon社RSAライブラリの欠陥(2017年)
2017年10月、チェコ・マサリク大学の研究者らが、Infineon Technologies社のRSA鍵生成ライブラリに重大な脆弱性(CVE-2017-15361、通称ROCA)を発見しました。このライブラリで生成された2048ビットRSA鍵を、約100ドルのクラウド計算リソースで解読可能であることが実証されました。影響範囲はエストニアの電子IDカード75万枚以上、TPMチップ搭載PC、YubiKeyなど多岐に及び、エストニア政府は該当IDカードの電子署名機能を緊急停止する事態となりました。
📋 Debian OpenSSL乱数生成の欠陥(2008年)
2008年5月、Debian GNU/LinuxのOpenSSLパッケージに約2年間(2006年9月〜2008年5月)にわたり存在していた深刻なバグが発見されました。乱数生成器の初期化コードが誤って削除されていたため、生成される鍵のエントロピーが極端に低く、可能な鍵の総数が約32,768通りしかありませんでした。この期間にDebianベースのシステムで生成されたSSH鍵、SSL証明書、OpenVPN鍵などが脆弱となり、すべての再生成が必要となりました。
📋 Bleichenbacher攻撃によるTLS脆弱性の再発(ROBOT攻撃、2017年)
2017年12月、1998年にDaniel Bleichenbacherが発見したRSA PKCS#1 v1.5パディングに対する攻撃が、19年後も多くのTLS実装で依然として有効であることが明らかになりました。「ROBOT(Return Of Bleichenbacher's Oracle Threat)」と名付けられたこの攻撃は、F5、Citrix、Cisco、Bouncy Castleなど主要ベンダーの製品に影響し、Facebookのサーバーでも攻撃が成功しました。