RubyからRSA秘密鍵を開く
-
04-07-2019 - |
質問
私は考えるカスタムの暗号化された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ファイルを開き、その内容を確認すると、キーの最初と最後に追加の文字があるように見えます。これは正常ですか?
私はこのセキュリティのいくつかを本当に理解していませんが、学ぼうとしています。私が間違っているのは何ですか?
解決 2
これについては、いくつかの進展がありました。 Net :: SSHライブラリを使用する場合、これを行うことができます:
Net::SSH::KeyFactory.load_private_key 'keyfile', 'passphrase'
ソースコードを読んでも、ライブラリがOpenSSLのPKey :: RSA.newに対してこれを達成するために何をするのかまだ理解できていません... Net :: SSHがなくても問題ありません。テストをたくさん行ったので、以前は正しくテストしていませんでした。
しかし、私はまだSSH互換キーペアを作成する問題があります...そして、多分私はもう一度テストに行き、答えを持っています:P ... nah、私はその部分に興味がありません
他のヒント
こちらのブログ投稿によると:
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')
幸運を祈ります。