公開鍵暗号方式と公開鍵認証
公開鍵と一言に言っても二種類の使い方があるようです。
公開鍵で暗号化して秘密鍵で復号化する公開鍵暗号方式と
署名が本人によるものなのかを検証する公開鍵認証です。
今まであまり深く調べることがなかったので調べてみました。
公開鍵暗号方式
安全な通信を行うためによく使われる暗号方式です。
- 最初にサーバー側で公開鍵と秘密鍵を生成しておきます。
- クライアントからアクセス要求があったら、公開鍵を返します。
- クライアントは共通鍵を生成し、公開鍵を使って暗号化します。
- クライアントは暗号化した共通鍵をサーバーに送信します。
- サーバーは秘密鍵を使って暗号化された共通鍵を復号化します。
- 共通鍵を使って暗号化された通信を行います。
公開鍵認証
証明書が本人のものであるか確認する手段です。
SSH接続のセッションの確立を例にとってお話しします。
- 最初にクライアント側で公開鍵と秘密鍵を生成し、サーバーに配置しておきます。
- クライアント側で秘密鍵を使ってセッションIDやユーザー名などの情報を含む署名を作成します。
- 署名と共にサーバーに認証要求を出します。
- サーバー側でその署名が本人のものであるか、公開鍵を使って検証します。
※認証が始まる前に公開鍵暗号方式で共通鍵を共有している状態です。
パスワードの入力の代わりに公開鍵認証を行っているというイメージです。
HTTPSでは両方の機能を使っており、ドメインが管理者本人のものであるか確認するために公開鍵認証を使い、暗号化された通信を行います。
さいごに
@angel_p_57 さん ご指摘ありがとうございました。
SSHについて誤解していたので正しい知識を得られて良かったです。
参考
https://qiita.com/angel_p_57/items/2e3f3f8661de32a0d432
https://www.jipdec.or.jp/project/research/why-e-signature/public-key-cryptography.html
https://pfs.nifcloud.com/navi/words/ssh.htm