🐕

SSH通信って、結局何してるの?

2020/09/24に公開1

「SSH通信って何ぞや?」とは思いながらも、言われるがまま鍵を作って書いてあるコマンドを打ち込んで通信して... という方、多いのではないですか?

ですが、いざとなった時にその中身を知っている/知っていない では大違い。
この記事では、曖昧なSSH通信のその中身を見ていければと思っています。

SSH通信とは

SSH通信とは、Secure Shell の略で、言わばセキュリティの強固な通信方法のことです。
SSH通信を用いて送られている情報は全て暗号化されており、
仮に通信を覗き見をされていたとしても、その内容は闇のベールの中に包まれたままとなっております。

では、どのようにしてセキュリティを強固にしているのか。
これが重要ですよね。

SSHの仕組み

通信の全体的な流れは下記です。

[local]1.通信用の秘密鍵・公開鍵の作成
[local]2.サーバーに公開鍵を渡す

[server]A.サーバーにユーザーを登録する(sudo権限)
[server]B.サーバーに登録されているユーザーと、渡された公開鍵を紐づける
※この状態で初めて作成したユーザーによるサーバーへのログインが可能となります。

[local]3.作成したユーザーでログイン

[server]C.ログイン時に乱数を生成
[server]D.Cで生成した乱数から、ハッシュ値を生成
※このハッシュ値は認証で使うのでサーバー側で保持しておく。
[server]E.受け取った公開鍵 + Cで生成した乱数を用いて、暗号を生成
[server]F.Dで作成した暗号をローカルに送る

[local]4.1で作成した秘密鍵を用いて、送られてきた暗号を解読し、乱数を復元する。
[local]5.乱数からハッシュ値を計算し、そのハッシュ値をサーバーに送る。

[server]G.送られてきたハッシュ値と、Dで生成したハッシュ値を比較。
一致していれば認証成功。以後全ての通信は暗号化されることとなります。

上記を画像にすると、このようになります。

なんとなく流れは掴めたでしょうか??
単に言われたままコマンドを打ち込むのと、上記を理解した上でコマンドを打ち込むのでは天地の差があります。
ぜひおおまかな流れだけでも頭に入れておきましょう!

Discussion

いわもと こういちいわもと こういち

sshでの公開鍵認証の説明をしようとしているのだと思いますが、内容が完全に間違っています。

この説明だと、以下の点で実際の動作と合いません。

  • sshの公開鍵認証で使われる鍵方式の内、DSAやECDSA,Ed25519等のRSA以外の方式は署名の為の方式であり、暗号化が行えない。
  • サーバに複数の公開鍵が登録してある時の動作が説明できない。特にGitHubのように一つのユーザで数百万やそれ以上の鍵が使える時に使われる鍵の選ばれ方が説明できない。