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?
De acuerdo con la publicación del blog aquí:
http://stuff-things.net/2008/02/05/encrypting-lots-of-sensitive-data-with-ruby-on-rails/
Simplemente puede hacer:
OpenSSL :: PKey :: RSA.new (File.read (''private_key''), ''frase de paso'')
La mejor de las suertes.