公開鍵と秘密鍵の仕組みや違いについて分かりやすく説明してみた
以前、「WinSCPを使って公開鍵認証でログインする方法(PuTTYgenで鍵生成)」や「公開鍵認証でサーバにログインする方法(サーバで鍵生成)」で公開鍵認証を行う方法を紹介しました。
が、そもそも公開鍵と秘密鍵の関係や使い方が分からない方が結構多いのではないかと思います。少なくとも私はその一人です。
ということで、公開鍵と秘密鍵の仕組みや違いについて、例え話を使って説明してみたいと思います。認識誤りがありましたらどこかでつぶやいてください。
説明で登場する図は、ワードアートの寄せ集めと手書きで図柄がばらばらです。すいません。
1.公開鍵の公開
そもそも「公開鍵」と「秘密鍵」という、2つの鍵があること自体分かりにくいです。2つの鍵に合う鍵穴がイメージできません(笑)。
なので、このエントリーでは公開鍵は「鍵」ではなく「錠前」と考えます。
まず、錠前(公開鍵)をAさんに渡しておきます。この錠前はAさん以外の誰にでも渡すことができます。この「Aさん」はサーバなどが該当します。
また、この錠前を開けることができる鍵(秘密鍵)は、あなただけが持っています。
2.公開鍵による暗号化
Aさんから宝物をもらえることになりました。「宝物」は認証のためのデータなどが該当します。
このとき、宝物は宝箱にいれて、さきほどの錠前を使って箱に鍵をかけてもらいます。これが「公開鍵による暗号化」に該当します。
宝箱を受け取るまでの間、誰もこの宝箱を開けることはできません。あなた以外、この錠前に合う鍵を持っていないからです。
3.秘密鍵による複合化
宝箱を受け取ったあと、あなただけがもっている鍵(秘密鍵)を使って錠前を開ければ、中にある宝物(認証用データ)を手に入れることができます。これが「秘密鍵による複合化」に該当します。
このような仕組みで公開鍵(錠前)と秘密鍵(鍵)が機能する訳です(多分)。
4.公開鍵と秘密鍵を使った認証
公開鍵と秘密鍵を使った認証の場合、3項までの動作の後にサーバとの認証動作があります。
ということで、公開鍵と秘密鍵を使った認証方法について流れを記しておきます。
- クライアントは秘密鍵と公開鍵を作る
- クライアントはサーバに公開鍵を渡す
- サーバは公開鍵とユーザーを結びつけておく
- サーバはユーザーがログインしてきたら、乱数を生成し、公開鍵で暗号化して渡す
- クライアントは秘密鍵で乱数を復号し、ハッシュ値をサーバに渡す
- サーバはクライアントから来たハッシュ値と自前のハッシュ値を比較して一致したら認証する
- SSHポートフォワーディング(トンネリング)とは
- TeraTermで「unknown Encrypt algorithm(ctos)」というエラーになる場合の対処
- WinSCPを使って公開鍵認証でログインする方法(PuTTYgenで鍵生成)
- 公開鍵認証でサーバにログインする方法(サーバで鍵生成)