公開鍵と秘密鍵の仕組みや違いについて分かりやすく説明してみた

公開鍵と秘密鍵の仕組みや違いについて分かりやすく説明してみた

Posted at January 31,2013 12:55 AM
Tag:[authorization, key]

以前、「WinSCPを使って公開鍵認証でログインする方法(PuTTYgenで鍵生成)」や「公開鍵認証でサーバにログインする方法(サーバで鍵生成)」で公開鍵認証を行う方法を紹介しました。

が、そもそも公開鍵と秘密鍵の関係や使い方が分からない方が結構多いのではないかと思います。少なくとも私はその一人です。

ということで、公開鍵と秘密鍵の仕組みや違いについて、例え話を使って説明してみたいと思います。認識誤りがありましたらどこかでつぶやいてください。

説明で登場する図は、ワードアートの寄せ集めと手書きで図柄がばらばらです。すいません。

1.公開鍵の公開

そもそも「公開鍵」と「秘密鍵」という、2つの鍵があること自体分かりにくいです。2つの鍵に合う鍵穴がイメージできません(笑)。

なので、このエントリーでは公開鍵は「鍵」ではなく「錠前」と考えます。

公開鍵と秘密鍵

まず、錠前(公開鍵)をAさんに渡しておきます。この錠前はAさん以外の誰にでも渡すことができます。この「Aさん」はサーバなどが該当します。

公開鍵の公開

また、この錠前を開けることができる鍵(秘密鍵)は、あなただけが持っています。

2.公開鍵による暗号化

Aさんから宝物をもらえることになりました。「宝物」は認証のためのデータなどが該当します。

このとき、宝物は宝箱にいれて、さきほどの錠前を使って箱に鍵をかけてもらいます。これが「公開鍵による暗号化」に該当します。

公開鍵による暗号化

宝箱を受け取るまでの間、誰もこの宝箱を開けることはできません。あなた以外、この錠前に合う鍵を持っていないからです。

3.秘密鍵による複合化

宝箱を受け取ったあと、あなただけがもっている鍵(秘密鍵)を使って錠前を開ければ、中にある宝物(認証用データ)を手に入れることができます。これが「秘密鍵による複合化」に該当します。

秘密鍵による複合化

このような仕組みで公開鍵(錠前)と秘密鍵(鍵)が機能する訳です(多分)。

4.公開鍵と秘密鍵を使った認証

公開鍵と秘密鍵を使った認証の場合、3項までの動作の後にサーバとの認証動作があります。

ということで、公開鍵と秘密鍵を使った認証方法について流れを記しておきます。

  • クライアントは秘密鍵と公開鍵を作る
  • クライアントはサーバに公開鍵を渡す
  • サーバは公開鍵とユーザーを結びつけておく
  • サーバはユーザーがログインしてきたら、乱数を生成し、公開鍵で暗号化して渡す
  • クライアントは秘密鍵で乱数を復号し、ハッシュ値をサーバに渡す
  • サーバはクライアントから来たハッシュ値と自前のハッシュ値を比較して一致したら認証する
関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)