OpenSSH の ChallengeResponseAuthentication と PasswordAuthentication

“ChallengeResponseAuthentication” で検索してこのブログに辿り着く人が多いのですが、ChallengeResponseAuthentication についてはちゃんと書いてないし、PasswordAuthentication との違いは昔から気になっていたので、調べてみることにしました。

調べたのは CentOS 6.5 の openssh-5.3p1-94.el6 です。これ以降のバージョンの OpenSSH でもおそらく同じだと思います。

結論から言うと、

* PasswordAuthentication: RFC 4252 で定義されている “Password Authentication Method (password)” を有効にする。
* ChallengeResponseAuthentication: RFC 4256 で定義されている “Generic Message Exchange Authentication (keyboard-interactive)” 認証を有効にする。

なんですが、これだけだと良くわからないので(^^; 違いを雑に説明すると、

* Password Authentication Method (password) では、クライアントがユーザ名とパスワードをサーバに送り、サーバは成功したか失敗したかを返す。
* Generic Method Exchange Authentication (keyboard-interactive) では、まずクライアントがサーバにユーザ名を送る(パスワードは送らない)。それに対してサーバがクライアントに instruction や prompt 等を送り、クライアントが応答する。認証に必要な回数だけ、サーバはクライアントとやり取りすることが出来る。

図にするとこんな感じ:

passwordとkeyboard-interactiveの違い

まだわかりにくい感じですが(^^; 要するに Generic Method Exchange Authenticationではワンタイムパスワード等の、チャレンジレスポンス型の認証にも使えることを想定していると考えれば良いでしょう。なので、OpenSSHの sshd_config で ChallengeResponseAuthentication という名前になっているのでしょうね。

RFC 4256 に載っている、チャレンジレスポンス型認証の例:

チャレンジレスポンス型認証の例

ちなみに、ふつうのパスワード認証にも使えます。

パスワード認証の例

## UsePAMとの関係
UsePAM が yes になっている時、PasswordAuthentication も ChallengeResponseAuthentication も PAMを使って認証します。

UsePAM が no の時、PasswordAuthentication は /etc/shadow を読んで認証するはずですが、

error: Could not get shadow information for fugahoge

と言って認証に失敗してますね…

ちなみに、ChallengeResponseAuthentication は PAM を使って認証するという前提の実装になっているので、UsePAM が no だとこれまた認証に失敗します。

UsePAM を no にする必要はないと思いますが、念の為。

スポンサーリンク
スポンサーリンク:

フォローする