家の中に入るにはかぎが必要なように、インターネットの世界にも似たようなセキュリティの仕組みが存在します。
共通鍵と公開鍵
共通鍵とはいわゆるスペアキーで暗号と復号でまったく同じキーを用います。
対して、公開鍵は非対称型暗号方式と呼ばれ、暗号化と復号化のカギが異なる方式となります。
秘密鍵と公開鍵
・公開鍵
公開鍵は誰にでも公開しているという意味合いで、外と通信する際に暗号化して使われるものです。秘密鍵から複雑な演算処理で公開鍵が作られます。
・秘密鍵
秘密鍵はその名の通り、外に漏らしてはいけない秘密の鍵です。
秘密鍵は一対となる公開鍵で暗号化された通信を復号するときに使います。
秘密鍵→公開鍵で作られますが、逆に公開鍵→秘密鍵で特定の秘密鍵を計算するのは数学的に不可能なので、その特性を利用して公開鍵暗号や公開鍵認証の通信が行われます。
公開鍵暗号と公開鍵認証
・公開鍵暗号
公開鍵は秘密鍵というオリジナルのカギから算出されます。
公開鍵で暗号化され、秘密鍵で復号化されます。
①受信側でキーペア(秘密鍵と公開鍵)を作成
②公開鍵のコピーを送信側に送る
③公開鍵から暗号化したデータを作成
④暗号化したデータを受信側に送る
⑤暗号化されたデータを秘密鍵で復号する
・公開鍵認証
秘密鍵で認証データを作成し、公開鍵で認証を行います。
①非認証側でキーペア(秘密鍵と公開鍵)を作成
②公開鍵のコピーを認証側に送る
③秘密鍵から認証データを作成
④認証データを認証側に送信
⑤渡された公開鍵で認証データを復号する
公開鍵の認証の仕組みを利用してホスト認証やユーザ認証が行われます。
sshコマンド
sshコマンドはリモートホストにログインしたり、リモートホスト上でコマンドを実行します。
クライアントがsshでサーバへログインする際、ホスト認証とユーザ認証が行われます。
・ホスト認証
SSHクライアントが接続先のリモートホスト(SSHサーバ)が正しいホストかどうか確認する
①クライアントからサーバにSSH接続
②サーバは自身の公開鍵をSSHクライアントに送信
③クライアントは受け取った公開鍵とSSHクライアントの「~/.ssh/know_hosts」ファイルに
格納されているSSHサーバの公開鍵が一致したらログインする
・ユーザ認証
SSHクライアントで接続してくるユーザが正当なユーザーか確認する
ID/パスワード方式と公開鍵方式がある
①ユーザごとに「ssh.key-genコマンド」を使用してキーペア(公開鍵と秘密鍵)を作成
②ユーザの公開鍵をサーバの「~/.ssh/authorized_keys」に登録
③ユーザの公開鍵を利用できるかクライアントからサーバに問い合わせ
④サーバから返答後、クライアントは秘密鍵で署名を作成
⑤サーバはユーザの公開鍵で署名を検証し、OKであればログイン許可
サーバはauthorized_keysに登録されている公開鍵が、署名とともに送られてきた公開鍵が合致しているか確認をとります。
それがOKだったらログインが成功するという流れになります。
ホスト認証はクライアントが認証を行い、ユーザ認証はサーバが認証を行い、それぞれ主語が違います。
■参考
https://it-trend.jp/encryption/article/64-0089