RSA 暗号鍵のクラスです。
通常このクラスで利用するのは、 OpenSSL::PKey::RSA.generate, OpenSSL::PKey::RSA.new, OpenSSL::PKey::RSA#public?, OpenSSL::PKey::RSA#private?, OpenSSL::PKey::RSA#public_key, OpenSSL::PKey::RSA#to_text, OpenSSL::PKey::RSA#to_pem, OpenSSL::PKey::RSA#to_der のいずれかでしょう。これ以外のメソッドを利用するときは RSA についてよく理解し、必要な場合のみにすべきです。
例:
require 'openssl' # initialize random seed OpenSSL::Random.seed(File.read("/dev/random", 16)) # 鍵対を生成 rsa = OpenSSL::PKey::RSA.generate(2048) # 秘密鍵をAES256で暗号化して private_key.pem に PEM 形式で保存 passphrase = "!secret passphrase!" File.open("private_key.pem", "w") do |f| f.write(rsa.export(OpenSSL::Cipher.new("aes256"), passphrase)) end # 公開鍵をpublic_key.pemに保存 public_key = rsa.public_key File.open("public_key.pem", "w") do |f| f.write(public_key.export) end # 秘密鍵で署名 data = "foobar" sign = rsa.sign("sha256", data) # 公開鍵で検証 p public_key.verify("sha256", sign, data) # 不正なデータを検証 p public_key.verify("sha256", sign, "foobarbaz")
generate(size, exponent = 65537) -> OpenSSL::PKey::RSA
[permalink][rdoc]generate(size, exponent = 65537) {|u,n| ... } -> OpenSSL::PKey::RSA
乱数により RSA 公開鍵と秘密鍵のペアを生成して、RSA オブジェクトを返します。
このメソッドを呼ぶ前に OpenSSL::Random の各モジュール関数によって乱数が適切に初期化されている必要があります。
size で鍵の modulus のビット数つまりは鍵のサイズを指定します。最低でも1024を指定してください。 exponent で public exponent を指定します。exponent には奇数を指定し、大抵の場合、3、17 あるいは 65537 を指定します。
このメソッドにブロックが渡された場合には、鍵生成の途中経過の情報を引数としてブロックが呼び出されます。
RSA 鍵ペアの生成には時間がかかるため、鍵生成の途中経過をユーザに表示したい場合にこの機能を使います。
new -> OpenSSL::PKey::RSA
[permalink][rdoc]new(size, exponent = 65537) -> OpenSSL::PKey::RSA
new(size, exponent = 65537) {|u,n| ... } -> OpenSSL::PKey::RSA
new(obj, pass = nil) -> OpenSSL::PKey::RSA
new(obj, pass = nil) {|flag| ... } -> OpenSSL::PKey::RSA
RSA 暗号鍵オブジェクトを生成します。
引数なしの場合は空の RSA オブジェクトを返します。
第一引数に整数を指定した場合には、OpenSSL::PKey::RSA.generate により公開鍵と秘密鍵のペアを生成し、それを返します。
それ以外の場合には、以下のようにして鍵データを読みこみ、RSA オブジェクトを生成します。
pass が指定された場合は、秘密鍵を pass を使って復号化します。
鍵データにパスフレーズが設定されているにもかかわらず、passが省略された場合は、渡されたブロックを呼びだしてパスフレーズを要求します。ブロックの返り値をパスフレーズとみなして復号します。ブロックの引数は通常は false が渡されますが、これはそのパスフレーズが秘密鍵の復号に使われることを意味します。ブロックが渡されなかった場合にはターミナルに問い合わせをします。
d -> OpenSSL::BN
[permalink][rdoc]鍵の private exponent です。
これは秘密鍵の一部です。
d=(new_d)
[permalink][rdoc]private exponent を設定します。
通常このメソッドで値を変更することはありません。よく考えて必要な場合のみ利用してください。
dmp1 -> OpenSSL::BN
[permalink][rdoc]鍵の exponent1 (d mod (p-1)) です。
秘密鍵の情報です。
dmp1=(new_dmp1)
[permalink][rdoc]鍵の exponent1 を設定します。
通常このメソッドで値を変更することはありません。よく考えて必要な場合のみ利用してください。
dmq1 -> OpenSSL::BN
[permalink][rdoc]鍵の exponent2 (d mod (q-1)) です。
秘密鍵の情報です。
dmq1=(new_dmq1)
[permalink][rdoc]鍵の exponent2 を設定します。
通常このメソッドで値を変更することはありません。よく考えて必要な場合のみ利用してください。
e -> OpenSSL::BN
[permalink][rdoc]鍵の public exponent を返します。
これは公開鍵の一部です。
e=(new_e)
[permalink][rdoc]鍵の public exponent を変更します。
通常このメソッドで値を変更することはありません。よく考えて必要な場合のみ利用してください。
export(cipher=nil, pass=nil) -> String
[permalink][rdoc]export(cipher=nil, pass=nil) {|flag| ... } -> String
to_pem(cipher=nil, pass=nil) -> String
to_pem(cipher=nil, pass=nil) {|flag| ... } -> String
to_s(cipher=nil, pass=nil) -> String
to_s(cipher=nil, pass=nil) {|flag| ... } -> String
鍵を PEM 形式で出力します。
cipher と pass が指定された場合、秘密鍵を暗号 cipher OpenSSL::Cipher::Cipher とパスワード pass を使って暗号化します。
cipher を指定して pass を省略した場合は渡されたブロックを呼びだしてパスフレーズを要求します。ブロックの返り値をパスフレーズとみなして暗号化します。ブロックの引数は通常は true が渡されますが、これはそのパスフレーズが秘密鍵の暗号化に使われることを意味します。ブロックが渡されなかった場合にはターミナルに問い合わせをします。
公開鍵を出力する場合は cipher と pass は無視されます。
iqmp -> OpenSSL::BN
[permalink][rdoc]鍵の coefficient (inverse of q mod p) です。
秘密鍵の情報です。
iqmp=(new_iqmp)
[permalink][rdoc]鍵の coefficient を設定します。
通常このメソッドで値を変更することはありません。よく考えて必要な場合のみ利用してください。
n -> OpenSSL::BN
[permalink][rdoc]鍵の modulus です。
公開鍵、秘密鍵両方の一部です。
n=(new_n)
[permalink][rdoc]鍵の modules を設定します。
通常このメソッドで値を変更することはありません。よく考えて必要な場合のみ利用してください。
p -> OpenSSL::BN
[permalink][rdoc]鍵の1つめの素数です。
秘密鍵の情報です。
p=(new_p)
[permalink][rdoc]鍵の1つめの素数を設定します。
通常このメソッドで値を変更することはありません。よく考えて必要な場合のみ利用してください。
params -> {String => OpenSSL::BN}
[permalink][rdoc]鍵のパラメータ(OpenSSL::PKey::RSA#e,OpenSSL::PKey::RSA#n, OpenSSL::PKey::RSA#dなど)を{パラメータ名文字列 => パラメータ値} というハッシュで返します。
鍵が公開鍵の場合、OpenSSL::PKey::RSA#d のように公開鍵が持っていない値は 0 になります。
private? -> bool
[permalink][rdoc]自身が秘密鍵を持っているかどうか判定します。
private_decrypt(str, mode = OpenSSL::PKey::RSA::PKCS1_PADDING) -> String
[permalink][rdoc]文字列 str を秘密鍵で復号化します。
復号化されたデータを文字列で返します。
mode でパディングモードを指定します。暗号化に利用したパディングモードと同じものを指定する必要があります。以下の4つのうちいずれかが利用可能です。
private_encrypt(str, mode = OpenSSL::PKey::RSA::PKCS1_PADDING) -> String
[permalink][rdoc]文字列 str を秘密鍵で暗号化します。
暗号化されたデータを文字列で返します。
mode でパディングモードを指定します。以下のいずれかが利用可能です。
public? -> true
[permalink][rdoc]自身が公開鍵を持っているかどうか判定します。
秘密鍵は公開鍵も持っているため、常に true を返します。
public_decrypt(str, mode = OpenSSL::PKey::RSA::PKCS1_PADDING) -> String
[permalink][rdoc]文字列 str を公開鍵で復号化します。
復号化されたデータを文字列で返します。
mode でパディングモードを指定します。以下のいずれかが利用可能です。暗号化に利用したパディングモードと同じものを指定する必要があります。
public_encrypt(str, mode = OpenSSL::PKey::RSA::PKCS1_PADDING) -> String
[permalink][rdoc]文字列 str を公開鍵で暗号化します。
暗号化されたデータを文字列で返します。
mode でパディングモードを指定します。以下の4つのうちいずれかが利用可能です。
public_key -> OpenSSL::PKey::RSA
[permalink][rdoc]公開鍵を複製して RSA オブジェクトとして返します。
q -> OpenSSL::BN
[permalink][rdoc]鍵の2つめの素数です。
秘密鍵の情報です。
q=(new_q)
[permalink][rdoc]鍵の2つめの素数を設定します。
通常このメソッドで値を変更することはありません。よく考えて必要な場合のみ利用してください。
to_der -> String
[permalink][rdoc]自身を DER 形式に変換します。
to_text -> String
[permalink][rdoc]鍵を人間が読める形式に変換します。
NO_PADDING -> Integer
[permalink][rdoc]パディングをしないパディングモードです。
セキュリティ上の問題を引き起すため、基本的に使わないでください。
OpenSSL::PKey::RSA#public_encrypt、 OpenSSL::PKey::RSA#public_decrypt、 OpenSSL::PKey::RSA#private_encrypt、 OpenSSL::PKey::RSA#private_decrypt の第二引数に指定できます。
PKCS1_OAEP_PADDING -> Integer
[permalink][rdoc]PKCS #1 v2.0 で定義されているパディングモードです。
互換性に問題ない場合はこのモードを利用すべきです。
OpenSSL::PKey::RSA#public_encrypt、 OpenSSL::PKey::RSA#private_decrypt の第二引数に指定できるパディングモード。
PKCS1_PADDING -> Integer
[permalink][rdoc]PKCS #1 v1.5 で定義されているパディングモードです。
互換性目的以外での利用は推奨しません。
OpenSSL::PKey::RSA#public_encrypt、 OpenSSL::PKey::RSA#public_decrypt、 OpenSSL::PKey::RSA#private_encrypt、 OpenSSL::PKey::RSA#private_decrypt の第二引数に指定できます。
SSLV23_PADDING -> Integer
[permalink][rdoc]PKCS #1 v1.5 で定義されているものに SSL特有の変更を加えたパディングモードです。
互換性目的以外での利用は推奨しません。
OpenSSL::PKey::RSA#public_encrypt、 OpenSSL::PKey::RSA#private_decrypt の第二引数に指定できます。