7. Public Key Authentication Method: \"publickey\"
7. Public Key Authentication Method: "publickey"
L'unico 'method name' REQUIRED è l'autenticazione « publickey ». Tutte le implementazioni DEVONO supportare questo metodo; tuttavia, non tutti gli utenti devono avere chiavi pubbliche, e la maggior parte delle policy locali probabilmente non richiederà l'autenticazione a chiave pubblica per tutti gli utenti nel prossimo futuro.
Con questo metodo, il possesso di una chiave privata serve come autenticazione. Il metodo funziona inviando una firma creata con una chiave privata dell'utente. Il server DEVE verificare che la chiave sia un autenticatore valido per l'utente e DEVE verificare che la firma sia valida. Se entrambe le condizioni valgono, la richiesta di autenticazione DEVE essere accettata; altrimenti DEVE essere rifiutata. Nota che il server PUÒ richiedere autenticazioni aggiuntive dopo autenticazione riuscita.
Le chiavi private sono spesso memorizzate in forma crittografata sull'host client, e l'utente DEVE fornire una passphrase prima che la firma possa essere generata. Anche se non lo sono, l'operazione di firma comporta un calcolo costoso. Per evitare elaborazione e interazione utente non necessarie, è fornito il seguente messaggio per chiedere se l'autenticazione usando il metodo « publickey » sarebbe accettabile.
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
Gli algoritmi a chiave pubblica sono definiti nella specifica del livello di trasporto [SSH-TRANS]. Il 'public key blob' PUÒ contenere certificati.
Qualsiasi algoritmo a chiave pubblica PUÒ essere offerto per l'uso nell'autenticazione. In particolare, l'elenco non è vincolato da ciò che è stato negoziato durante lo scambio di chiavi. Se il server non supporta un algoritmo, DEVE semplicemente rifiutare la richiesta.
Il server DEVE rispondere a questo messaggio con SSH_MSG_USERAUTH_FAILURE o con quanto segue:
byte SSH_MSG_USERAUTH_PK_OK
string public key algorithm name from the request
string public key blob from the request
Per eseguire l'autenticazione effettiva, il client PUÒ quindi inviare una firma generata usando la chiave privata. Il client PUÒ inviare la firma direttamente senza verificare prima se la chiave è accettabile. La firma è inviata usando il seguente pacchetto:
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
Il valore di 'signature' è una firma con la corrispondente chiave privata sui seguenti dati, in questo ordine:
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
Quando il server riceve questo messaggio, DEVE verificare se la chiave fornita è accettabile per l'autenticazione e, in tal caso, DEVE verificare se la firma è corretta.
Se entrambe le verifiche hanno successo, questo metodo ha successo. Nota che il server PUÒ richiedere autenticazioni aggiuntive. Il server DEVE rispondere con SSH_MSG_USERAUTH_SUCCESS (se non servono più autenticazioni) o SSH_MSG_USERAUTH_FAILURE (se la richiesta è fallita o servono più autenticazioni).
I seguenti numeri di messaggio specifici del metodo sono usati dal metodo di autenticazione « publickey ».
SSH_MSG_USERAUTH_PK_OK 60