あなたの「公開鍵暗号」はPKE? それともPKC?

初めに

サイボウズ・ラボの光成です。 いきなりですがクイズです。次のうち正しい説明はどれでしょう。

  • SSHやFIDO2などの公開鍵認証はチャレンジを秘密鍵で暗号化し、公開鍵で復号して認証する。
  • ビットコインでは相手の公開鍵を用いてハッシュ値を暗号化して相手に送る。
  • TLS1.3ではサーバ公開鍵を用いてAESの秘密鍵を暗号化する。

答えはどれも間違いです。 公開鍵認証は、(デジタル)署名を使って相手先の正しさを検証するものであり、暗号化は行われません。 同様にビットコインもデータや相手の正当性を確認するために署名が用いられ、暗号化は行われません。 TLS 1.3ではRSA暗号の公開鍵を用いて暗号化する方式(static RSA)は廃止され、ECDH鍵共有された値を元に秘密鍵を生成し、AES-GCMなどの認証つき暗号で暗号化します。

公開鍵暗号とは

いわゆる公開鍵暗号には大きく2種類の意味があります。 一つは「公開鍵で暗号化して秘密鍵で復号する」という公開鍵暗号です。RSA暗号の説明でよく聞きますね。 英語ではPublic Key Encryption(暗号化)、略してPKEといいます。 「暗号化」を強調するために「公開鍵暗号化」とか「公開鍵暗号方式」などと言われることがあります。

もう一つは「公開情報と秘密情報の組を扱う暗号技術全般を指す」公開鍵暗号です。 英語ではPublic Key Cryptography、略してPKCといいます。暗号化するPKEはPKCの一部です。 PKCには、DH鍵共有や(デジタル)署名が含まれます。

英語の「Encryption」と「Cryptography」のどちらも「暗号」と訳されることが多いため、誤解や混乱が生じやすいです。

暗号技術の分類

実はTLSやSSH, FIDO2などの最近の技術でPKEが使われる場面は殆どありません。 RSA暗号の暗号化と復号の関数の形が同じなため誤解しやすいのですが、署名は暗号化とは異なる技術です。

楕円曲線暗号ECC(Elliptic Curve Cryptography)もPKEではなくPKCの一部であり、TLSやSSHで楕円曲線を暗号化に使うことはありません。

よく見かける暗号技術の関係を図にしてみました。

f:id:cybozuinsideout:20211226122616j:plain
暗号技術の分類

本やWebサイトの記事を読んでいて「公開鍵暗号」という言葉が出てきたら、 筆者がPKEとPKCのどちらで使っているのか注意深く確認しましょう。 PKEを使って署名の説明をしていたら、大抵の場合、それはおそらく間違いです。

資料の紹介

暗号技術全般について、2021年9月から12月まで基礎的なところを解説した勉強会(暗認本読書会)を開いていました。 そのときに利用した資料や動画へのリンク一覧を示します。

個別の用語について概要を知りたい方は、それぞれのキーワードが書かれた回を参考にしてください。 たとえば署名は「読書会7」、TLS 1.3は「読書会9」のスライドや動画で解説しています。