OpenSSH ya cuenta con el soporte inicial de la autentificación de dos factores
OpenSSH el conjunto de aplicaciones que permiten realizar comunicaciones cifradas a través de una red, usando el protocolo SSH ha agregado un soporte experimental para la autenticación de dos factores a la base de su código, utilizando dispositivos que admiten el protocolo U2F desarrollado por la alianza FIDO.
Para quienes desconocen de U2F, deben saber que, este es un estándar abierto para hacer tokens de seguridad de hardware de bajo costo. Estas son fácilmente la forma más barata para que los usuarios obtengan un par de claves respaldado por hardware y hay una buena gama de fabricantes que los venden, incluidos Yubico, Feitian, Thetis y Kensington.
Las claves respaldadas por hardware ofrecen la ventaja de ser considerablemente más difícil de robar: un atacante generalmente tiene que robar el físico token (o al menos acceso persistente a él) para robar la clave.
Dado que hay varias maneras de hablar con dispositivos U2F, incluido USB, Bluetooth y NFC, no queríamos cargar OpenSSH con un montón de dependencias En cambio, hemos delegado la tarea de comunicarse con el tokens a una pequeña biblioteca de middleware que se carga de manera similar al soporte existente PKCS # 11.
OpenSSH ahora tiene soporte experimental U2F/FIDO, con U2F se agrega como un nuevo tipo de clave sk-ecdsa-sha2-nistp256@openssh.com o “ecdsa-sk” para abreviar (el “sk” significa “clave de seguridad”).
Los procedimientos para interactuar con los tokens se han transferido a una biblioteca intermedia, que se carga por analogía con la biblioteca para el soporte PKCS # 11 y es un enlace sobre la biblioteca libfido2, que proporciona medios para comunicarse con los tokens a través de USB (se admiten los protocolos FIDO U2F / CTAP 1 y FIDO 2.0 / CTAP 2).
La biblioteca intermedia libsk-libfido2 preparada por los desarrolladores de OpenSSH se incluye en el núcleo libfido2, así como el controlador HID para OpenBSD.
Para habilitar U2F, se puede usar una nueva porción de la base de código del repositorio de OpenSSH y la rama HEAD de la biblioteca libfido2, que ya incluye la capa necesaria para OpenSSH. Libfido2 admite el trabajo en OpenBSD, Linux, macOS y Windows.
Hemos escrito un middleware básico para libfido2 de Yubico que es capaz de hablar con cualquier token estándar USB HID U2F o FIDO2. El middleware. La fuente está alojada en el árbol libfido2, por lo que construir eso y OpenSSH HEAD es suficiente para comenzar
La clave pública (id_ecdsa_sk.pub) debe copiarse al servidor en el archivo autorizado_claves. En el lado del servidor, solo se verifica una 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 descriptor de clave que forma una clave real solo en combinación con una secuencia secreta almacenada en el lado del token U2F.
Si la clave id_ecdsa_sk cae en manos del atacante, para la autenticación, también necesitará acceder 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, cuando se realizan operaciones clave (tanto durante la generación como la autenticación), se requiere una confirmación local de la presencia física del usuario, por ejemplo, se sugiere tocar el sensor en el token, lo que dificulta realizar ataques remotos en sistemas con un token conectado.
En la etapa de inicio de ssh-keygen, también se puede configurar otra contraseña para acceder al archivo con la 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 las teclas ecdsa-sk, la capa libsk-libfido2 debe estar presente y el agente debe ejecutarse en el sistema a qué token está conectado.
Se ha agregado un nuevo tipo de clave ecdsa-sk ya que el formato de clave ecdsa OpenSSH difiere del formato U2F para las firmas digitales ECDSA por la presencia de campos adicionales.
Si quieres conocer más al respecto puedes consultar el siguiente enlace.