Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > opensslライブラリ > OpenSSL::PKey::DHクラス
クラスの継承リスト: OpenSSL::PKey::DH < OpenSSL::PKey::PKey < Object < Kernel < BasicObject
Diffie-Hellman 公開鍵暗号クラス
Diffie-Hellman 公開鍵暗号は署名ができないため、 OpenSSL::PKey::PKey#sign や OpenSSL::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
|
DH 公開鍵暗号のパラメータを生成し、DH オブジェクトを返します。 |
|
new(size, generator = 2) -> OpenSSL::PKey::DH
|
DH オブジェクトを生成します。 |
定義 | 説明 | |
---|---|---|
compute_key(bn) -> String
|
自分の秘密鍵と相手の公開鍵から鍵文字列を計算し、返します。 |
|
export -> 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
must_be
must_be_close_to
must_be_empty
must_be_instance_of
must_be_kind_of
must_be_nil
must_be_same_as
must_be_within_epsilon
must_equal
must_include
must_match
must_raise
must_respond_to
must_send
must_throw
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?
respond_to_missing?
singleton_class
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
trust
untaint
untrust
untrusted?
wont_be
wont_be_close_to
wont_be_empty
wont_be_instance_of
wont_be_kind_of
wont_be_nil
wont_be_same_as
wont_be_within_epsilon
wont_equal
wont_include
wont_match
wont_respond_to
sign
verify