メインコンテンツまでスキップ

8. Password Authentication Method: "password" (パスワード認証方法: "password")

パスワード認証は次のパケットを使用します。サーバーはパスワード変更をリクエストする可能性があることに注意してください。すべての実装はパスワード認証をサポートする必要があります。

byte      SSH_MSG_USERAUTH_REQUEST
string user name
string service name
string "password"
boolean FALSE
string plaintext password in ISO-10646 UTF-8 encoding [RFC3629]

'plaintext password' 値は ISO-10646 UTF-8 でエンコードされていることに注意してください。パスワードを解釈し、パスワードデータベースに対して検証する方法は、サーバー次第です。ただし、クライアントが別のエンコーディング(たとえば、ISO 8859-1 - ISO Latin1)でパスワードを読み取る場合、送信前にパスワードを ISO-10646 UTF-8 に変換しなければならず、サーバーはパスワードをそのシステムでパスワードに使用されるエンコーディングに変換しなければなりません。

国際化の観点から、ユーザーがパスワードを入力した場合、使用しているオペレーティングシステムやクライアントソフトウェアに関係なく、認証プロセスが機能することが望まれます。送信前にパスワードに対して文字セット変換を行うことで、このプロセスを支援します。ただし、ユーザーは、異なるシステムでパスワードを入力することが困難である可能性があることに注意する必要があります(たとえば、異なるロケールのキーボードレイアウトによってパスワードの入力が困難になる可能性があります)。

平文パスワードがパケットで送信される場合でも、パケット全体はトランスポート層によって暗号化されることに注意してください。サーバーとクライアントの両方は、基礎となるトランスポート層が機密性を提供するか(つまり、暗号化が使用されているか)どうかをチェックする必要があります。機密性が提供されていない場合("none" 暗号)、パスワード認証を無効にする必要があります。機密性がある場合、この方法はシンプルであり、パスワードベースのユーザー認証システムで機能します。

通常、サーバーは成功または失敗でこのメッセージに応答します。ただし、パスワードが期限切れの場合、サーバーは SSH_MSG_USERAUTH_PASSWD_CHANGEREQ で応答することでこれを示す必要があります。いずれにしても、サーバーは期限切れのパスワードを認証に使用することを許可してはなりません。

byte      SSH_MSG_USERAUTH_PASSWD_CHANGEREQ
string prompt in ISO-10646 UTF-8 encoding [RFC3629]
string language tag [RFC3066]

この場合、クライアントは別の認証方法で続行するか、ユーザーから新しいパスワードをリクエストし、次のメッセージを使用してパスワード認証を再試行することができます。クライアントは、サーバーからのリクエストなしに、通常のパスワード認証リクエストの代わりにこのメッセージを送信することもできます。

byte      SSH_MSG_USERAUTH_REQUEST
string user name
string service name
string "password"
boolean TRUE
string plaintext old password in ISO-10646 UTF-8 encoding [RFC3629]
string plaintext new password in ISO-10646 UTF-8 encoding [RFC3629]

サーバーは、各リクエストメッセージに SSH_MSG_USERAUTH_SUCCESS、SSH_MSG_USERAUTH_FAILURE、または別の SSH_MSG_USERAUTH_PASSWD_CHANGEREQ で応答しなければなりません。これらの意味は次のとおりです:

  • SSH_MSG_USERAUTH_SUCCESS - パスワードが変更され、認証が正常に完了しました。

  • SSH_MSG_USERAUTH_FAILURE with partial success - パスワードは変更されましたが、さらに認証が必要です。

  • SSH_MSG_USERAUTH_FAILURE without partial success - パスワードは変更されませんでした。パスワード変更がサポートされていないか、古いパスワードが間違っていました。サーバーがすでに SSH_MSG_USERAUTH_PASSWD_CHANGEREQ を送信している場合、パスワード変更をサポートしていることがわかります。

  • SSH_MSG_USERAUTH_CHANGEREQ - 新しいパスワードが受け入れられなかったため(たとえば、推測しやすすぎる)、パスワードは変更されませんでした。

パスワード認証方法では、次のメソッド固有のメッセージ番号が使用されます。

SSH_MSG_USERAUTH_PASSWD_CHANGEREQ   60