わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

SSHの公開鍵認証があればパスワード認証は不要?

いきなりですが問題です.

次の疑問に対し,「はい」または「いいえ」と,その理由を答えなさい.

  • Secure Shell (SSH)で,パスフレーズを使った公開鍵認証を採用すれば,従来のパスワード認証が不要になる?

さっそくですが解答です.授業の解説形式で…
「みなさんの答案に目を通しました.『はい』と『いいえ』の数は拮抗しまして,実のところ1人の差で『いいえ』のほうが多かったのでした.
この問題については,『はい』でも『いいえ』でも,適切な理由を挙げられたら正解としました.
『はい』で答えるなら,『パスワード認証はSSHの安全性を低下させるから』が簡潔な理由となります.
少し,前回の復習をしますが,SSHサーバは,外部から攻撃されやすいサーバの1つです.ユーザ名とパスワードとして,代表的なものを順に送りつけ,認証が成功したらラッキー! てなもんです,攻撃する側にとっては.
そこでサーバを安全に運用したい側はですね,sshd_configというファイルを編集しておきます.パスワード認証を不可にすることをはじめ,安全側に倒すような設定変更をしておけば,攻撃が成功されてしまう可能性を小さくできるのです.
『いいえ』から始める場合には…『リモートログイン以外では,パスワード認証が必要だから』を理由に挙げるのはどうでしょうか.
こう答える場合,もとの疑問文のうち『Secure Shell (SSH)で』は,『パスフレーズを使った公開鍵認証を採用す』までに限定する,と考えます.従来のパスワード認証は,SSHではなく,PCに接続されたキーボードから直接,ログインする際に,必要ですからね.
さて,解説はここからが本番です.見せてもらった理由の中で,う〜んこれは,試験だと減点しないといけないなあと思った,不適切な書き方をしているものもありました.3パターン,挙げておきます.
まず多かったのが,『鍵の送付時に中間者攻撃が可能だから』です.
これですが,中間者攻撃の対象となるのは,前回の授業でも話したとおり,サーバ公開鍵です.ローカルホスト・リモートホストの間で,暗号化がなされていない段階です.
それに対し,公開鍵認証かパスワード認証かというのは,ユーザ認証における選択であり,すでに暗号化がなされている状態です.ということで,理由に『中間者攻撃』を持ち出すのは,問題文に書いた疑問と,噛み合っていないことになります.
なお,公開鍵認証における公開鍵は,ローカルホスト側で作って,一度,SSHリモートホストにログインしてから,~/.ssh/authorized_keysを編集する*1ことで,追加ができます.その際のリモートログインに限り,パスワード認証を使用し,その後は,公開鍵認証を使うことになります.
『その後は』のどこかのタイミングで,管理者がsshd_configを編集して,それ以降,パスワード認証は不可としても,特にトラブルとはならないでしょう.ログインするユーザ数が1人とか少人数のサーバでは,このやり方もけっこう手軽で,また問題文の『パスフレーズを使った公開鍵認証を採用すれば,従来のパスワード認証が不要になる』にも合致します.ただし答案の中で,こういったやり方をすればよいというのは,ありませんでしたが….
誤答の2番目に行きます.『2種類の認証方法があるほうがより安全である』です.これも何人か,いました.ええっとですね,こう書いて,『より安全』というのは,良くない感覚です.
というのも,認証の手段が,複数ある場合には,攻撃者は,より安全性の低い方をアタックすればいいのです.不備をつけば,いいのです.なので安全性は向上しません.
パスワード認証をしてから公開鍵認証をする,なんてことはSSHではしませんからね.『2段階の認証』と,『2種類の認証』は,区別して理解しておきたいところです.
3番目のパターンです.『パスフレーズはパスワードよりも長い字数を選べるから』という答案を,少ないながら見かけました.
授業のスライドには,パスワード認証は『字数が少なく安全性にやや不安』と書いてありまして,これを理由としたのでしょうか.
ですがこの理由もまた,現状では,間違いと言わざるを得ません.といいますのも,現在,ログイン用のパスワードの字数は,SSHが出回った1990年代,そして今利用可能な,パスフレーズと,同じくらいに十分長くできるからです.
従来型のパスワード認証については,授業では,一方向ハッシュ関数とメッセージ認証コードの間で,解説をしました.パスワードの暗号化関数はcryptといい,そのアルゴリズムは,古くはDESをベースとしていたのでパスワードは8文字までで,9文字目以降は無視する,という実装がなされていました.
それが現在では,MD5SHA1,SHA2をベースとしたものも,利用可能となっています.ふだん私がユーザとして,また管理者として使っているLinuxサーバで,/etc/shadowというファイルを開いて自分の情報を見たら,暗号化パスワードの先頭は「$6$」でして,ここから*2,SHA2の一つである,SHA-512が使用されていることが分かるのです.
そういった,一方向ハッシュ関数に基づく暗号化パスワードでは,出力サイズはそのベースとなるものに依存し,固定長です.強調しますが,固定長なのは出力のほうです.それに対し,入力となるパスワードのサイズは,任意の長さでOKです.
パスフレーズはパスワードよりも長い字数を選べるから』,公開鍵認証はパスワード認証よりも安全にできる,というのは,そうですね,1990年代なら正解,今だと不正解,と言っていいでしょう」

*1:ここで「鍵の送付」を行っています.ただしそれは,公開鍵認証のための鍵です.そしてこの送付では,通信は暗号化されていますので,解読する---SSHそのものの脆弱性を突く---ことができなければ,中間者攻撃も成立しません.

*2:https://linuxjm.osdn.jp/html/LDP_man-pages/man3/crypt.3.html