6

カスタム暗号化RSAキーを作成する方法は知っていると思いますが、ssh-keygenのように暗号化されたRSAキーを読み取るにはどうすればよいですか?

私はこれができることを知っています:

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ファイルを開き、その内容を確認すると、キーの最初と最後に追加の文字が含まれているように見えます。これは正常ですか?

私はこのセキュリティ関連のいくつかを本当に理解していませんが、私は学ぼうとしています。私が間違っているのは何ですか?

4

2 に答える 2

9

ここのブログ投稿によると:

http://stuff-things.net/2008/02/05/encrypting-lots-of-sensitive-data-with-ruby-on-rails/

あなたは簡単に行うことができます:

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

幸運を祈ります。

于 2009-05-14T07:58:11.933 に答える
-3

私はこれについていくらかの進歩を遂げました。Net :: SSHライブラリを使用する場合、次のことができます。

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

ソースコードを読んでも、ライブラリがOpenSSLのPKey :: RSA.newに対して何をしてこれを達成するのかをまだ理解していません...そして、もう一度テストしてみます。確かに、OpenSSLは秘密鍵を問題なく開くことができます。 Net :: SSH ...私は非常に多くのテストを行ったので、どういうわけか以前はこれを正しくテストしていませんでした。

しかし、SSH互換のキーペアを作成するという問題がまだあります...そして多分私はもう一度テストして答えを得るでしょう:P ...いや、私はその部分にはそれほど興味がありません

于 2008-10-25T03:32:12.683 に答える