Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > opensslライブラリ > OpenSSL::PKey::DHクラス

class OpenSSL::PKey::DH

クラスの継承リスト: OpenSSL::PKey::DH < OpenSSL::PKey::PKey < Object < Kernel

要約

Diffie-Hellman 公開鍵暗号クラス

Diffie-Hellman 公開鍵暗号は署名ができないため、 OpenSSL::PKey::PKey#signOpenSSL::PKey::PKey#verify を呼び署名や署名の検証を行おうとすると例外 OpenSSL::PKey::PKeyError が発生します。

Diffie-Hellman はこのライブラリでは基本的には鍵合意にしか利用できません。

鍵合意の例。

# パラメータの生成
dh = OpenSSL::PKey::DH.generate(1024, 5)
# パラメータのチェック
raise "bad DH parameter" unless dh.params_ok?
# 以下、dh1 と dh2 が通信の両端であるとする
#  dh1 と dh2 は鍵パラメータ p と g を共有しなければならない
#  そのためここでは、単純に2つ複製することにしている

# dh1 は dh をそのまま使う
dh1 = dh
# パラメータを複製して dh2 に渡す
dh2 = OpenSSL::PKey::DH.new(dh)

# 両端が鍵パラメータから鍵対を生成する
dh1.generate_key!
dh2.generate_key!
# 通信の両端で公開鍵を交換する
#  公開鍵の交換は秘密で行われる必要はないが、それが確かに
#  相手の公開鍵であることを確認しなければばならない。
#  (さもなければ中間車攻撃などによって秘密情報は危険にされされる)
#  そのため自分の公開鍵を DSA などで署名してから交換する必要がある
#  ここでは例を簡単にするため、そのような処置はしていない
# dh1 の秘密鍵と dh2 の公開鍵、共有された鍵パラメータを
# 用いて dh1 側で鍵となる文字列を得る
key1 = dh1.compute_key(dh2.pub_key)
# dh2 の秘密鍵と dh1 の公開鍵、共有された鍵パラメータを
# 用いて dh2 側で鍵となる文字列を得る
key2 = dh1.compute_key(dh1.pub_key)
# key1 と key2 は同じ文字列となり、しかもこれは秘密鍵なしでは
# 得られないため、安全に秘密情報(ランダムな鍵文字列)を交換
# できたこととなる
p(key1 == key2)

特異メソッド

定義 説明
generate(size, generator = 2) -> PKey::DH
generate(size, generator = 2) {|u,n| ... } -> PKey::DH

DH 公開鍵暗号のパラメータを生成し、DH オブジェクトを返します。

new(size, generator = 2) -> OpenSSL::PKey::DH
new(obj) -> OpenSSL::PKey::DH
new() -> OpenSSL::PKey::DH

DH オブジェクトを生成します。

インスタンスメソッド

定義 説明
compute_key(bn) -> String

自分の秘密鍵と相手の公開鍵から鍵文字列を計算し、返します。

export -> String
to_pem -> String
to_s -> String

鍵パラメータを PEM 形式に変換します。

g -> OpenSSL::BN

DH 公開鍵暗号の鍵パラメータ g を返します。

g=(g)

DH 公開鍵暗号の鍵パラメータ g を設定します。

generate_key! -> self

鍵パラメータ p と g から鍵対を生成しなおし、 自身にセットします。

p -> OpenSSL::BN

DH 公開鍵暗号の鍵パラメータ p を返します。

p=(p)

DH 公開鍵暗号の鍵パラメータ p を設定します。

params -> {String => OpenSSL::BN}

鍵パラメータと鍵対を {"パラメータ名" => パラメータ値} というハッシュ テーブルで返します。

params_ok? -> bool

パラメータ p と g が安全かどうかを判定します。

priv_key -> OpenSSL::BN

DH 公開鍵暗号の秘密鍵を返します。

priv_key=(private_key)

DH 公開鍵暗号の秘密鍵を設定します。

pub_key -> OpenSSL::BN

DH 公開鍵暗号の公開鍵を返します。

pub_key=(public_key)

DH 公開鍵暗号の公開鍵を設定します。

to_der -> String

鍵パラメータをDER 形式に変換します。

to_text -> String

鍵パラメータを人間が読める形式に変換します。

継承したメソッド

== === =~ __id__ __send__ _dump class clone dclone display enum_for eql? equal? extend freeze frozen? hash initialize initialize_copy inspect instance_eval instance_exec instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? marshal_dump marshal_load method method_missing methods nil? pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods public_methods remove_instance_variable respond_to? singleton_method_added singleton_method_removed singleton_method_undefined singleton_methods taint tainted? tap to_a to_ary to_hash to_int to_io to_proc to_regexp to_str to_yaml to_yaml_properties to_yaml_style untaint sign verify