公開鍵と秘密鍵の使い方について復習した
きっかけ
転職しました(唐突)
転職先では業務開始前にe-learningの受講が義務付けられており仕事中に勉強させてもらっています(天国か)
心機一転ということで、わからないこと、少しでも理解が曖昧なことは勉強し直そうと思っています。
前置きが長くなりました。
e-learningでSSH用の認証キーを作成する場面がありました。
公開鍵と秘密鍵という単語はよく耳にする言葉ですが、
私はEC2を作る時にダウンロードシているのが正直どっちの鍵なのか理解できていないレベルです。
ということでSSHと使う鍵について勉強し直しました。
SSHって?
VPSにつなぐための技術です。
まず遠隔操作の技術について記載します。
・telnet
PCを遠隔操作するためのプロトコル
なお、通信内容は暗号化されないため現在は主流ではない
・SSH(secure shell:セキュアシェル)
簡単にいうとtelnetの強化版
通信内容が暗号化された状態で送受信される。つまりネットワーク上に流れているデータは暗号文なので傍受されても解読できない
例えば、telnetの場合、通信内容を暗号化しない。①から以下のような情報を③に送信した場合、②はすべての情報を傍受できてしまう。
メールアドレス:hogehoge@yyy.yyy
パスワード :hogehoge
SSHの場合の場合は暗号化した内容を①が送信、③は暗号化された内容を復号化して取り出す。
※多分こんな感じの文章が送信されている
adhfgjsdfhgisdfhg
doifgnaejkgnskfd
②が通信内容を傍受したとしても、傍受できるのは意味不明な文字列でありコレを意味のある文字列に復号化する方法を知らなければ内容を理解することはかなわない。
、、、さて、ここで①と③はどうやって暗号化と復号化を行っているのか?という話になるわけだけど、ここで登場するのが公開鍵と秘密鍵になる。長かった。。。
補足 SSHと似た言葉でSSLという単語があります。
SSL/TLS(Secure Sockets Layer/Transport Layer Security)については以下がとてもわかりやすかった
https://qiita.com/angel_p_57/items/dcb12a6a864f9aeba427
https://qiita.com/satodayo/items/b45573b7165235a15152
TLSとSSLの違いについては、時間のある時に調査して自分の言葉でまとめようと思います。
公開鍵を使った仕組み
公開鍵暗号方式について
共有鍵との違いについてよく説明されるのは、これのことかと思います。
個人的にわかりやすかったのはこちらの記載
https://udemy.benesse.co.jp/development/blockchain/public-key-cryptography.html
公開鍵で暗号化した文章は秘密鍵でしか復号化できない。
相手が自分宛てに送信する情報を自分だけが安全に復号化できる仕組み
、、、というのは字面として暗記しています。
公開鍵認証方式について
個人的にわかりやすかったのはこちらの記載
https://hnavi.co.jp/knowledge/blog/ssh/
SSHで利用するのはこっち!
秘密鍵で署名を作成して、公開鍵で検証を行う
サーバーに公開鍵を登録して置くことにより、自分が登録された秘密鍵を持つユーザーであることを証明できる。
※AWSのインスタンスを作成する時にダウンロードしているのは秘密鍵
赤の他人がユーザーを偽ってサーバーにログインできてしまうので絶対に漏らしてはイケナイ
※https://qiita.com/angel_p_57/items/d7ffb9ec13b4dde3357d
公開鍵認証での秘密鍵で暗号化という言葉はどうも正確ではないようです。
振り返り
公開鍵暗号方式と公開鍵認証が頭の中で混ざっていたことで、もやもやしていたことがわかりました。
ざっくりまとめると、復号化(チェック)が秘密鍵と公開鍵どちらでも行うパターンがある。これを理解していないことが原因だったなと
暗号化方式:公開鍵を使って暗号化し、秘密鍵で復号化する
認証方式 :秘密鍵を使って電子証明を作成、公開鍵でチェックする
※あれ?公開鍵でチェック?でも秘密鍵で復号化するんだよね???みたいな
また、調べる時に「公開鍵」という単語で検索するため
ヒットした検索が「認証」について説明しているもの「暗号化方式」について説明しているものという切り分けができておらず五里霧中という状態に、、、
同じように悩んでいる人の助けになれば幸いです。