¿Es posible usar el agente SSH en ejecución para descifrar algunos datos (suministrados como una cadena o leer de un archivo)?
¿Es posible usar el agente SSH en ejecución para descifrar algunos datos (suministrados como una cadena o leer de un archivo)?
No, no es al menos con OpenSSH, no hay opciones para operar en este modo. Es para autenticarse con servidores remotos (validación de identidad) y luego cifrar el tráfico de red entre la aplicación cliente ssh
y el servidor remoto sshd
.
Puedes intentar compilar una biblioteca de OpenSSH que use sus modos de cifrado y crear un ejecutable basado en eso para usar el cifrado, pero los autores de OpenSSH no intentaron hacerlo. Aquí hay un repositorio de github que tomó openssh y trató de convertirlo en una biblioteca que otras aplicaciones pueden usar.
OpenSSH utiliza protocolos conocidos que se implementan en OpenSSL; por ejemplo, mi conexión ssh ahora usa aes128-ctr para cifrar con hmac-md5 para verificar la integridad (la combinación). Por supuesto, si realmente realiza un seguimiento para ver de dónde proviene aes128-ctr, encontrará que finalmente se toma de biblioteca OpenSSL . (Eso es en libopenssh / cipher.c le dice a aes128_ctr
que use EVP_aes_128_ctr
el cual está pasando por el archivo de encabezado #include "cipher.h"
(libOpenSSH que incluye a hreza) "https://github.com/openssl/openssl/blob/master/crypto/evp/evp.h"> #include <openssl/evp.h>
(nota OpenSSL) que define EVP_aes_128_ctr
que finalmente remonta a ser implementado ( después de algunos envoltorios para tratar con diferentes modos / tamaños) en openssl / crypto / aes / aes_core. c .
EDITAR:
Lo siento, no estaba claro que estabas hablando de ssh-agent
.
En cuanto a usar las claves privadas cargadas en ssh-agent para cifrar o descifrar mensajes, no es posible. El propósito completo de ssh-agent
es limitar el uso de la clave privada a solo una función aceptable (autenticación en ssh).
Mire el código fuente de ssh-agent y la descripción de la funcionalidad en PROTOCOL.agent . Por seguridad, ssh-agent proporciona una interfaz muy limitada para usar las claves privadas ssh almacenadas.
Para ssh2, el único uso de la clave privada es firmar solicitudes usando su clave privada . Con ssh1 también hay desafíos de autenticación de procesos , pero realmente no deberías usar ssh1 más. Las otras funciones no usan la clave privada, sino que tratan con la administración de claves.
Los desafíos clave en SSH1 funcionaron como becarios . Primero, el extremo remoto envía un desafío: una cadena de bits aleatoria cifrada con la clave pública del usuario (conocida por el archivo authorized_keys). El usuario envía el desafío a ssh-agent
, que utiliza la clave privada para descifrar el mensaje de desafío. Luego, ssh-agent toma la cadena de bits aleatoria y calcula un hash criptográfico, y envía el hash criptográfico. Esto verifica que el usuario estaba en posesión de la clave privada, y solo filtra el hash del mensaje descifrado, pero no el mensaje descifrado real.
Los desafíos clave en SSH2 ahora funcionan mediante el envío de solicitudes de firma. De nuevo, el servidor remoto envía una cadena de bits aleatoria al usuario. Luego ssh-agent toma esa cadena de bits aleatoria y usa su clave privada para firmar criptográficamente que mensaje - no se realiza ningún descifrado. La firma se devuelve y el servidor verifica la firma utilizando la clave pública para validarla.
En el contexto de RSA, la clave pública es ( N = p*q
, e
) y la clave privada ( N
, d
), donde d se construye para que d*e ≡ 1 (mod (p-1)(q-1))
(d se pueda calcular de manera eficiente saber e, pyq vía el algoritmo extendido de Euclid). Luego, el método de firma es el hash (con SHA1) del mensaje aleatorio h = sha1(r)
y luego elevar el hash a una potencia con la clave privada S = h^d (mod N)
. Luego, el servidor valida la firma S
con la clave pública del usuario calculando S^e (mod N)
, lo cual, debido al teorema total de Euler, será el hash del mensaje enviado y lo comparará con S^e ≡ (h^d)^e ≡ h^(d*e) ≡ h^(1 + (q-1)(p-1)) ≡ h (mod N)
.
No es posible utilizar el Agente de SSH para asimétricamente datos descifrados que se cifraron con la clave pública porque El agente de SSH solo expone la capacidad de firmar con la clave privada, no de descifrar.
Sin embargo, puede usar el hecho de que la clave privada en el Agente SSH es la única que puede generar una firma para algo, y usar esa firma como key simétrico .
Hice sshcrypt para hacer esto.
Lea otras preguntas en las etiquetas ssh file-encryption