Secure Steady
公開鍵暗号 - 公開鍵暗号(RSA 等) の使い方・オプション・サンプル

公開鍵暗号 - 公開鍵暗号(RSA 等)

公開鍵と秘密鍵のペアを使う暗号方式。鍵配送の問題を解決し、デジタル署名にも応用される。

概念図

公開鍵暗号(RSA 等) diagram

実例

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)への移行計画を検討する

関連トピック