TL;DR

公開鍵と秘密鍵の組を使う暗号方式。非対称暗号とも呼ばれる。秘密鍵は秘密にしておく必要があるが、公開鍵は安全性を損なわずに公開できる。

なぜ必要か

共通鍵暗号(対称暗号)では、1 つの秘密の鍵を共有するので、事前に安全な方法で鍵を受け渡す必要がある。公開鍵暗号では公開鍵を公開してよいので、この受け渡しが要らない。

仕組み

公開鍵暗号は、主に次の 3 つの用途で使う。

  • 公開鍵暗号化: 誰でも公開鍵で暗号化できるが、復号できるのは対応する秘密鍵を持つ人だけである
  • デジタル署名: 秘密鍵でメッセージに署名し、公開鍵を持つ人なら誰でもその署名を検証できる。秘密鍵がなければ、正しい署名は作れない
  • 鍵交換: Diffie–Hellman のように、互いの公開鍵から共通の秘密を導く

アルゴリズムには、RSA、ECDSA などの楕円曲線暗号、Ed25519、X25519 などがある。

例

SSH で使う鍵は、ssh-keygen -t ed25519 のように公開鍵と秘密鍵の組で作る。WebAuthn は、パスワードや SMS の代わりに公開鍵暗号を使って、Web サイトでの登録や認証を行うブラウザの API である。

注意点

公開鍵暗号は、多くの用途で遅すぎることがある。そのため、TLS、SSH、PGP などのプロトコルは、公開鍵暗号で共通鍵を交換し、データは共通鍵暗号で暗号化する(ハイブリッド方式)。

秘密鍵が漏れると、その鍵で暗号化・署名したものがすべて危うくなる。また、公開鍵が本物であることを、公開鍵基盤(認証局)や信頼の輪で確かめる必要がある。

関連

出典