6

2 つのキー ペアを使用して、2 つの通信システム間で否認防止の安全なメッセージングを実装したいと考えています。以下を使用して、キーペアの 2 つのセットを生成して保存しました。

sys1_key = OpenSSL::PKey::RSA.generate( 2048 )
sys2_key = OpenSSL::PKey::RSA.generate( 2048 )

これらのキー ペアはどちらも、個別の公開キーと秘密キーがファイルに保存されています。

  • sys1.pub.pem
  • sys1.priv.pem
  • sys2.pub.pem
  • sys2.priv.pem

システム 1 には、システム 2 の公開鍵だけでなく、独自の公開鍵と秘密鍵があります。システム 2 には、システム 1 の公開鍵だけでなく、独自の公開鍵と秘密鍵もあります。

システム 1 で、「Hello world」というメッセージを取得し、システム 1 の秘密鍵とシステム 2 の公開鍵を使用して暗号化します。このメッセージは、独自の秘密鍵とシステム 1 の公開鍵を使用して、システム 2 によってのみ復号化できます。

現在、GPG を使用して同様のプロセスを実行していますが、プロセスを自動化したいと考えています。Ruby 1.9.2 を使用しています。

4

2 に答える 2

8

秘密鍵は復号化用であり、公開鍵は暗号化用です。

したがって、システム1が暗号化されたテキストをシステム2に送信する場合。

システム1は、システム2の公開鍵を取得し、システム2の公開鍵を使用してテキストを暗号化する必要があります。システム2はテキストを受信し、独自の秘密鍵を使用して復号化できます。送信側では、このようなコードを使用できます。

#!/usr/bin/env ruby

require 'openssl'
require 'base64'

public_key_file = 'server2_public.pem';
string = 'Secret!';

public_key =
OpenSSL::PKey::RSA.new(File.read(public_key_file))
encrypted_string = Base64.encode64(public_key.public_encrypt(string))
print encrypted_string, "\n"

Base 64エンコーディングは、バイナリデータをネットワーク経由で送信するかどうかなどに応じて、単なるオプションの手順です。

受信側

#!/usr/bin/env ruby

require 'openssl'
require 'base64'

key = 'my_private_key.pem';

private_key = OpenSSL::PKey::RSA.new(File.read(key),'password')
data = private_key.private_decrypt(Base64.decode64(encrypted_data_received))

puts data

n個のシステムがある場合は、規則を使用して公開鍵名を検索する必要があります。公開鍵名などは、メッセージのターゲットマシン名と同じ名前にすることができ、鍵サーバーから検索することができます。秘密鍵は、対応するシステムにのみ存在する必要があります。

非対称暗号化の目的は2つあります。

1)公開鍵を使用して暗号化する場合。対応する秘密鍵を持っている人だけが復号化できます。これにより、メッセージのセキュリティが実現します。2)秘密鍵を使用して署名する場合、公開鍵を使用して信頼性を検証できます。公開鍵にアクセスできる人は誰でも、メッセージの信頼性を確認できます。それはあなただけがそれを暗号化できたという点を証明しています。これは署名と呼ばれます。

于 2012-10-01T14:49:50.943 に答える
2

RSAをサポートするOpenSSLの非常に使いやすいラッパーとして機能する、私が数か月前に書いた非常に便利なライブラリがあります。インターフェイスはかなり読みやすく、理解しやすいです。

public_key, private_key = Encryption::Keypair.generate( 2048 )
plaintext = 'some secret data'
securetext = public_key.encrypt( plaintext )
private_key.decrypt( securetext ) == plaintext # true

これは暗号化と呼ばれます:
GitHub の暗号化
Rubygems での暗号化
ドキュメンテーション

于 2014-04-13T19:43:37.747 に答える