公開鍵暗号 - 公開鍵暗号(RSA 等)
公開鍵と秘密鍵のペアを使う暗号方式。鍵配送の問題を解決し、デジタル署名にも応用される。
概念図
実例
RSA 4096 ビットの鍵ペアを生成
bash
openssl genrsa -out private.pem 4096 && openssl rsa -in private.pem -pubout -out public.pem公開鍵でファイルを暗号化
bash
openssl rsautl -encrypt -pubin -inkey public.pem -in plain.txt -out encrypted.binどこで使われているか
公開鍵暗号は「相手を信頼するための仕組み」として広く使われています。
- TLS / HTTPS: ハンドシェイクでサーバー証明書を検証し、共通鍵を安全に交換する
- SSH 認証: 公開鍵認証でパスワードなしのサーバーログインを実現
- コード署名: npm / Docker イメージなどの配布物が改ざんされていないことを検証
- メール暗号化(S/MIME / PGP): 受信者の公開鍵で暗号化し、秘密鍵を持つ本人だけが読める
- ブロックチェーン: ウォレットアドレスの生成とトランザクション署名
使わなかった場合のリスク
- なりすまし: サーバー証明書がなければ、偽サイトと正規サイトを区別できない(中間者攻撃)
- 改ざん検知不能: コード署名がなければ、ダウンロードしたソフトウェアにバックドアが混入していても気づけない
- 鍵配送の失敗: 共通鍵を安全に渡す手段がないと、鍵自体が盗聴される
公開鍵暗号の仕組み
公開鍵暗号では、数学的に関連する 2 つの鍵を使用します。
- 公開鍵: 誰にでも公開できる鍵。暗号化やデジタル署名の検証に使う
- 秘密鍵: 所有者だけが保持する鍵。復号やデジタル署名の生成に使う
代表的なアルゴリズム:
- RSA: 大きな整数の素因数分解の困難さに基づく。2048 ビット以上を推奨
- ECDSA / EdDSA: 楕円曲線暗号。RSA より短い鍵長で同等の安全性を実現
- Diffie-Hellman: 鍵交換プロトコル。共通鍵を安全に共有するために使う
ベストプラクティス
- 鍵長: RSA は 2048 ビット以上、楕円曲線は 256 ビット以上を使う
- 秘密鍵の保護: ファイルのパーミッションを 600 に設定し、パスフレーズで暗号化する
- 鍵のローテーション: 定期的に鍵を更新する。有効期限を設定して失効管理を行う
- ハイブリッド暗号: 公開鍵暗号で共通鍵を暗号化し、データ本体は共通鍵暗号で処理する。TLS がこの方式を採用している
- 耐量子暗号への移行: 量子コンピュータの実用化に備え、NIST が標準化を進めている PQC(Post-Quantum Cryptography)への移行計画を検討する
