Ruby에서 RSA 개인 키를 열었습니다
-
04-07-2019 - |
문제
나 생각한다 사용자 정의 암호화 된 RSA 키를 만드는 방법을 알고 있지만 SSH-Keygen처럼 암호화 된 하나를 어떻게 읽을 수 있습니까?
나는 이것을 할 수 있다는 것을 안다 :
OpenSSL::PKey::RSA.new(File.read('private_key'))
그러나 OpensSL은 나에게 암호를 요청합니다 ... 어떻게 OpenSSL로 매개 변수로 전달할 수 있습니까?
그리고 SSH-Keygen이 생성 한 것과 호환되는 방법을 어떻게 만들 수 있습니까?
개인 암호화 키를 만들기 위해 이와 같은 일을합니다.
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
또한 OpenSSL :: pkey :: rsa.new (1024) (암호화없이)에 의해 생성 된 키, 비밀번호없는 로그인을 시도 할 때 작동하지 않습니다 (즉, 공개 키를 서버에 복사하고 개인 원을 사용하여 개인을 사용합니다. 로그인).
또한 OpenSSL을 통해 ssh-keygen 파일을 열고 내용을 확인하면 키의 시작과 끝에 추가 문자가있는 것으로 보입니다. 이것은 정상입니까?
나는이 보안 내용 중 일부를 실제로 이해하지 못하지만 배우려고 노력하고 있습니다. 내가 잘못하고있는 것은 무엇입니까?
해결책 2
나는 이것에 대해 약간의 진전을 이루었다. Net :: SSH 라이브러리를 사용하면 다음을 수행 할 수 있습니다.
Net::SSH::KeyFactory.load_private_key 'keyfile', 'passphrase'
소스 코드를 읽음으로써 라이브러리가 OpenSSL의 pkey :: rsa.new를 달성하기 위해 무엇을하는지 아직 알아 내지 못했습니다. net :: ssh ... 너무 많은 테스트를 했어, 어떻게 든 전에 이것을 올바르게 테스트하지 않았다.
하지만 여전히 SSH 호환 키 쌍을 만드는 데 문제가 있습니다 ... 그리고 아마도 다시 테스트하고 답을 가질 것입니다.
다른 팁
여기에 블로그 게시물에 따르면 :
http://stuff-things.net/2008/02/05/encrypting-lots-of-sensitive-data-with-ruby-o-rails/
당신은 단순히 할 수 있습니다 :
OpenSsl :: pkey :: rsa.new (file.read ( 'private_key'), 'passphrase')
행운을 빌어 요.