Al código base de OpenSSH
Para interactuar con dispositivos que confirman la presencia del usuario, se ha agregado un nuevo tipo de claves a OpenSSH "[email protected]” (“ecdsa-sk”), que utiliza el algoritmo de firma digital ECDSA (Elliptic Curve Digital Signature Algorithm) con curva elíptica NIST P-256 y hash SHA-256. Los procedimientos para interactuar con tokens se colocan en una biblioteca intermedia, que se carga de manera similar a la biblioteca para compatibilidad con PKCS#11 y es un contenedor encima de la biblioteca.
Para habilitar U2F, puede utilizar una nueva porción del código base de
Libfido2 es compatible con OpenBSD, Linux, macOS y Windows.
Para autenticar y generar una clave, debe configurar la variable de entorno SSH_SK_PROVIDER, indicando en ella la ruta a libsk-libfido2.so (exportar SSH_SK_PROVIDER=/path/to/libsk-libfido2.so), o definir la biblioteca a través de SecurityKeyProvider configuración y luego ejecute “ssh-keygen-t ecdsa-sk" o, si las claves ya se han creado y configurado, conéctese al servidor usando "ssh". Cuando ejecuta ssh-keygen, el par de claves generado se guardará en “~/.ssh/id_ecdsa_sk” y se puede usar de manera similar a otras claves.
La clave pública (id_ecdsa_sk.pub) debe copiarse al servidor en el archivo autorizado_keys. En el lado del servidor, solo se verifica la firma digital y la interacción con los tokens se realiza en el lado del cliente (no es necesario instalar libsk-libfido2 en el servidor, pero el servidor debe admitir el tipo de clave “ecdsa-sk”) . La clave privada generada (id_ecdsa_sk) es esencialmente un identificador de clave, que forma una clave real solo en combinación con la secuencia secreta almacenada en el lado del token U2F.
Si la clave id_ecdsa_sk cae en manos de un atacante, para pasar la autenticación también necesitará obtener acceso al token de hardware, sin el cual la clave privada almacenada en el archivo id_ecdsa_sk es inútil. Además, de forma predeterminada, al realizar cualquier operación con claves (tanto durante la generación como durante la autenticación), se requiere la confirmación local de la presencia física del usuario, por ejemplo, se propone tocar el sensor del token, lo que dificulta Realizar ataques remotos a sistemas con un token conectado. Como otra línea de defensa, también se puede especificar una contraseña durante la fase de inicio de ssh-keygen para acceder al archivo clave.
La clave U2F se puede agregar a ssh-agent a través de "ssh-add ~/.ssh/id_ecdsa_sk", pero ssh-agent debe compilarse con soporte para claves "ecdsa-sk", la capa libsk-libfido2 debe estar presente y la El agente debe estar ejecutándose en el sistema al que está conectado el token.
Se ha agregado un nuevo tipo de clave "ecdsa-sk" ya que el formato de las claves ecdsa de OpenSSH difiere del formato U2F para las firmas digitales ECDSA en la presencia de campos adicionales.
Fuente: opennet.ru