7. Public Key Authentication Method: \"publickey\"
7. Public Key Authentication Method: "publickey"
Le seul 'method name' REQUIRED est l'authentification « publickey ». Toutes les implémentations DOIVENT prendre en charge cette méthode ; cependant, tous les utilisateurs n'ont pas besoin de clés publiques, et la plupart des politiques locales n'exigeront probablement pas l'authentification par clé publique pour tous les utilisateurs dans un avenir proche.
Avec cette méthode, la possession d'une clé privée sert d'authentification. Cette méthode fonctionne en envoyant une signature créée avec une clé privée de l'utilisateur. Le serveur DOIT vérifier que la clé est un authentificateur valide pour l'utilisateur, et DOIT vérifier que la signature est valide. Si les deux conditions sont remplies, la demande d'authentification DOIT être acceptée ; sinon, elle DOIT être rejetée. Notez que le serveur PEUT exiger des authentifications supplémentaires après une authentification réussie.
Les clés privées sont souvent stockées sous forme chiffrée sur l'hôte client, et l'utilisateur DOIT fournir une phrase secrète avant que la signature puisse être générée. Même si ce n'est pas le cas, l'opération de signature implique un calcul coûteux. Pour éviter un traitement et une interaction utilisateur inutiles, le message suivant est fourni pour demander si l'authentification par la méthode « publickey » serait acceptable.
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
Les algorithmes de clé publique sont définis dans la spécification de la couche de transport [SSH-TRANS]. Le 'public key blob' PEUT contenir des certificats.
Tout algorithme de clé publique PEUT être proposé pour l'authentification. En particulier, la liste n'est pas contrainte par ce qui a été négocié pendant l'échange de clés. Si le serveur ne prend pas en charge un algorithme, il DOIT simplement rejeter la demande.
Le serveur DOIT répondre à ce message par soit SSH_MSG_USERAUTH_FAILURE, soit ce qui suit :
byte SSH_MSG_USERAUTH_PK_OK
string public key algorithm name from the request
string public key blob from the request
Pour effectuer l'authentification réelle, le client PEUT alors envoyer une signature générée à l'aide de la clé privée. Le client PEUT envoyer la signature directement sans vérifier d'abord si la clé est acceptable. La signature est envoyée dans le paquet suivant :
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
La valeur de 'signature' est une signature par la clé privée correspondante sur les données suivantes, dans l'ordre suivant :
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
Lorsque le serveur reçoit ce message, il DOIT vérifier si la clé fournie est acceptable pour l'authentification, et si oui, il DOIT vérifier si la signature est correcte.
Si les deux vérifications réussissent, cette méthode est réussie. Notez que le serveur PEUT exiger des authentifications supplémentaires. Le serveur DOIT répondre par SSH_MSG_USERAUTH_SUCCESS (si plus d'authentifications ne sont nécessaires), ou SSH_MSG_USERAUTH_FAILURE (si la demande a échoué, ou si d'autres authentifications sont nécessaires).
Les numéros de messages spécifiques à la méthode suivants sont utilisés par la méthode d'authentification « publickey ».
SSH_MSG_USERAUTH_PK_OK 60