7. Public Key Authentication Method: "publickey" (公開鍵認証方法: "publickey")
唯一必須の認証 'method name' は "publickey" 認証です。すべての実装はこの方法をサポートしなければなりません。ただし、すべてのユーザーが公開鍵を持つ必要はなく、ほとんどのローカルポリシーは近い将来すべてのユーザーに公開鍵認証を要求する可能性は低いでしょう。
この方法では、秘密鍵の所有が認証として機能します。この方法は、ユーザーの秘密鍵で作成された署名を送信することによって機能します。サーバーは、鍵がユーザーの有効な認証子であることをチェックしなければならず、署名が有効であることをチェックしなければなりません。両方が成立する場合、認証リクエストを受け入れなければなりません。それ以外の場合は拒否しなければなりません。サーバーは認証が成功した後に追加の認証を要求する可能性があることに注意してください。
秘密鍵は多くの場合、クライアントホストで暗号化された形式で保存されており、署名を生成する前にユーザーがパスフレーズを提供する必要があります。たとえそうでなくても、署名操作には高価な計算が含まれます。不要な処理とユーザーの相互作用を避けるために、'public key algorithm' を使用した認証が受け入れられるかどうかを照会するための次のメッセージが提供されています。
byte SSH_MSG_USERAUTH_REQUEST
string user name in ISO-10646 UTF-8 encoding [RFC3629]
string service name in US-ASCII
string "publickey"
boolean FALSE
string public key algorithm name
string public key blob
公開鍵アルゴリズムは、トランスポート層仕様 [SSH-TRANS] で定義されています。'public key blob' には証明書が含まれる場合があります。
任意の公開鍵アルゴリズムを認証に使用するために提供できます。特に、リストは鍵交換中に交渉されたものに制約されません。サーバーが一部のアルゴリズムをサポートしていない場合、単にリクエストを拒否しなければなりません。
サーバーは、このメッセージに SSH_MSG_USERAUTH_FAILURE または次のメッセージで応答しなければなりません:
byte SSH_MSG_USERAUTH_PK_OK
string public key algorithm name from the request
string public key blob from the request
実際の認証を実行するために、クライアントは秘密鍵を使用して生成された署名を送信することができます。クライアントは、鍵が受け入れられるかどうかを最初に確認せずに、署名を直接送信することができます。署名は次のパケットを使用して送信されます:
byte SSH_MSG_USERAUTH_REQUEST
string user name
string service name
string "publickey"
boolean TRUE
string public key algorithm name
string public key to be used for authentication
string signature
'signature' の値は、次のデータに対する対応する秘密鍵による署名です。順序は次のとおりです:
string session identifier
byte SSH_MSG_USERAUTH_REQUEST
string user name
string service name
string "publickey"
boolean TRUE
string public key algorithm name
string public key to be used for authentication
サーバーがこのメッセージを受信すると、提供された鍵が認証に受け入れられるかどうかをチェックしなければならず、そうである場合、署名が正しいかどうかをチェックしなければなりません。
両方のチェックが成功すると、この方法は成功します。サーバーは追加の認証を要求する可能性があることに注意してください。サーバーは、SSH_MSG_USERAUTH_SUCCESS(これ以上の認証が不要な場合)または SSH_MSG_USERAUTH_FAILURE(リクエストが失敗した場合、またはさらに認証が必要な場合)で応答しなければなりません。
"publickey" 認証方法では、次のメソッド固有のメッセージ番号が使用されます。
SSH_MSG_USERAUTH_PK_OK 60