SSH公開鍵ってなに?

SSH公開鍵ってなに?

仕事でsourcetreeを使っているときターミナルから直接pushしようとしたら、SSH公開鍵がどうのこうの、、、ってでてきた。前から言葉は良く目にするけど、中身をちゃんと調べたことなかったから良い機会だと思って調べることにした。

そもそもSSHとは

SSHは「Secure Shell」の略。概要を先に説明すると、ネットワークに接続された機器を遠隔で操作して管理するための手段・プロトコルらしい。

暗号化

SSHは他のネットワークを操作するための方法、プロトコル。最大の特徴は、このプロトコル(=SSH)は通信の時のデータが「暗号化」されるという点である。セキュリティの観点で言うSSHの対義語に「telnet」というプロトコルがある。こちらはデータが暗号化されないという点で、SSHの登場で最近はあまり使われなくなっている。調べているのを見た感じ、FTPも同様のプロトコル(=telnet?)を使ってるっぽい。このFTPもtelnetも通信内容を暗号化せずに「平文」でやりとりするから安全ではない。

認証方法

SSHには「認証方法」がある。なんかSSH周りでこの「認証」という文字はよく見かけるから最初はSSH特有の何かだと思っていたけど、多分どのプロトコル(やそれ以外)にも「認証」自体はあって(telnetにもそれ用のがあると思う)、SSHが色んな場所で用いられているのと認証がちょい複雑だから、よく「SSH認証」みたいなキーワードを目にするんだと思う。

認証の代表的なものには以下の2つがある。

  • パスワード認証
  • 公開鍵認証

パスワード認証

まずは理解が簡単なパスワード認証について見ていくことにする。パスワード認証の仕組みとしては、サーバー側でアカウントに対してパスワードを設定して、遠隔のパソコンからログインするときにそのアカウントとパスワードを入力するとそのサーバーにログインできる(多分)。つまりこの認証方法が簡単と言われる理由は、一旦サーバーのアカウントを作成すれば、あとはパスワードがあればどこからでもログインできる点にある。アクセス自体は簡単だけど、逆にパスワードがバレたら誰でもログインできてしまうから、危険性が低いとは言えない。

まあ超ざっくりとしか調べてないから、なんかミスってる気もしないでもないけど、とりまこれでいいや。

公開鍵認証

今度は「公開鍵認証」について見ていくことにする。前述のパスワード認証に比べて設定の手間は多いが、その分安全性は高い。仕組みは以下である。

自分側(クライアント)のパソコンでターミナルを操作して、キーペアというものを作成する。このキーペアの中身は鍵で以下の2種類が生成される。

  • 公開鍵
  • 秘密鍵

この2つの鍵はデータを暗号にしたり、その暗号を解除する機能がある。2つは大きな意味でセットで連動するが、詳細を見てみるともう少し複雑な仕組みが働いている。

自分のパソコンでキーペアを生成したら、この内の「公開鍵」を接続したいサーバーに渡す。これで事前の準備は完了。ユーザーがこれ以上の操作をする必要はない(はず)。

流れとしては、クライアントが特定のサーバーに接続したいと要求を出した時、サーバーはあるデータをクライアントに送信する。その時にはサーバーは、元々クライアント側から貰っていた公開鍵の暗号化する機能を使って、データを暗号化する。自分が生成した公開鍵によって暗号化されたデータを、クライアントで受信したあとは、自分の秘密鍵の解読する機能を使って暗号化したデータを再びサーバーに返す。サーバーはクライアントから受信したあとは自分の秘密鍵の解読する機能を使って、暗号化されたデータを解読する。解読したデータを再びサーバーに返す。サーバーはクライアントから受診したデータと自分が元々送信したデータを比較して、中身が等しかったら、そのクライアントからの応答に応じる、という流れ。

【結論】

なんとなく流していたSSH認証っていうワードをある程度理解できたから良かった。公開鍵は暗号化するだけの鍵で、秘密鍵は解読するだけの鍵。