Á base de código OpenSSH
Para interactuar con dispositivos que confirman a presenza do usuario, engadiuse un novo tipo de chaves a OpenSSH "[protexido por correo electrónico]” (“ecdsa-sk”), que utiliza o algoritmo de sinatura dixital ECDSA (Elliptic Curve Digital Signature Algorithm) con curva elíptica NIST P-256 e hash SHA-256. Os procedementos para interactuar cos tokens colócanse nunha biblioteca intermedia, que se carga de forma similar á biblioteca para compatibilidade con PKCS#11 e é un envoltorio na parte superior da biblioteca.
Para activar U2F, podes usar unha nova parte da base de código desde
Libfido2 admite OpenBSD, Linux, macOS e Windows.
Para autenticar e xerar unha chave, cómpre establecer a variable de ambiente SSH_SK_PROVIDER, indicando nela o camiño a libsk-libfido2.so (exportar SSH_SK_PROVIDER=/path/to/libsk-libfido2.so), ou definir a biblioteca a través do SecurityKeyProvider configuración e, a continuación, execute "ssh-keygen -t ecdsa-sk" ou, se as chaves xa foron creadas e configuradas, conéctese ao servidor mediante "ssh". Cando executa ssh-keygen, o par de claves xerado gardarase en “~/.ssh/id_ecdsa_sk” e pódese usar de xeito similar a outras claves.
A chave pública (id_ecdsa_sk.pub) debería copiarse no servidor no ficheiro authorized_keys. No lado do servidor, só se verifica a sinatura dixital e a interacción cos tokens realízase no lado do cliente (non é necesario instalar libsk-libfido2 no servidor, pero o servidor debe admitir o tipo de chave "ecdsa-sk"). . A clave privada xerada (id_ecdsa_sk) é esencialmente un identificador de chave, formando unha clave real só en combinación coa secuencia secreta almacenada no lado do token U2F.
Se a clave id_ecdsa_sk cae en mans dun atacante, para pasar a autenticación tamén terá que acceder ao token de hardware, sen o cal a clave privada almacenada no ficheiro id_ecdsa_sk é inútil. Ademais, por defecto, ao realizar calquera operación con claves (tanto durante a xeración como durante a autenticación), é necesaria a confirmación local da presenza física do usuario, por exemplo, proponse tocar o sensor do token, o que dificulta realizar ataques remotos a sistemas cun token conectado. Como outra liña de defensa, tamén se pode especificar un contrasinal durante a fase de inicio de ssh-keygen para acceder ao ficheiro de chave.
Pódese engadir a chave U2F a ssh-agent mediante "ssh-add ~/.ssh/id_ecdsa_sk", pero ssh-agent debe construírse con soporte para chaves "ecdsa-sk", a capa libsk-libfido2 debe estar presente e o o axente debe estar en execución no sistema ao que está conectado o token.
Engadiuse un novo tipo de chave "ecdsa-sk" xa que o formato das chaves ecdsa de OpenSSH difire do formato U2F para as sinaturas dixitais ECDSA en presenza de campos adicionais.
Fonte: opennet.ru