online funciona explicacion ejemplos criptografia como cifrado asimetrica aplicacion algoritmo ruby encryption openssl encryption-asymmetric

funciona - Abrir una clave privada RSA de Ruby



rsa algorithm (2)

He hecho algunos progresos en esto. Si utilizo la biblioteca Net :: SSH, puedo hacer esto:

Net::SSH::KeyFactory.load_private_key ''keyfile'', ''passphrase''

Al leer el código fuente aún tengo que descubrir qué hace la biblioteca para PKey :: RSA.new de OpenSSL para lograr esto ... Y luego voy y pruebo nuevamente, y efectivamente, OpenSSL puede abrir la clave privada sin problemas Net :: SSH ... He hecho tantas pruebas que de alguna manera no probé esto correctamente antes.

Pero todavía tengo el problema de crear un par de claves compatible con SSH ... y tal vez voy a volver a probar y tener la respuesta: P ... nah, no estoy tan interesado en esa parte

Creo que sé cómo crear claves RSA cifradas personalizadas, pero ¿cómo puedo leer una cifrada como lo hace ssh-keygen?

Sé que puedo hacerlo:

OpenSSL::PKey::RSA.new(File.read(''private_key''))

Pero luego OpenSSL me pide la frase de contraseña ... ¿Cómo puedo pasarla a OpenSSL como parámetro?

Y, ¿cómo puedo crear uno compatible con los generados por ssh-keygen?

Hago algo como esto para crear claves privadas cifradas:

pass = ''123456'' key = OpenSSL::PKey::RSA.new(1024) key = "0000000000000000#{key.to_der}" c = OpenSSL::Cipher::Cipher.new(''aes-256-cbc'') c.encrypt c.key = Digest::SHA1.hexdigest(pass).unpack(''a2'' * 32).map {|x| x.hex}.pack(''c'' * 32) c.iv = iv encrypted_key = c.update(key) encrypted_key << c.final

Además, las claves generadas por OpenSSL :: PKey :: RSA.new (1024) (sin cifrado) no funcionan cuando intento iniciar sesión sin contraseña (es decir, copio la clave pública en el servidor y la privada para iniciar sesión).

Además, cuando abro un archivo ssh-keygen a través de OpenSSL y luego reviso su contenido, parece que tiene caracteres adicionales al principio y al final de la clave. ¿Esto es normal?

Realmente no entiendo algunas de estas cosas de seguridad, pero estoy tratando de aprender. ¿Qué es lo que estoy haciendo mal?