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

class OpenSSL::PKey::DH

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

要約

Diffie-Hellman 鍵共有クラス

Diffie-Hellman 鍵共有プロトコルは署名ができないため、 OpenSSL::PKey::PKey#signOpenSSL::PKey::PKey#verify を呼び署名や署名の検証を行おうとすると例外 OpenSSL::PKey::PKeyError が発生します。

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

鍵共有の例。

require 'openssl'

# パラメータの生成
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__ instance_eval instance_exec method_missing singleton_method_added singleton_method_removed singleton_method_undefined !~ <=> == === =~ _dump class clone define_singleton_method display enum_for eql? equal? extend freeze frozen? hash initialize initialize_copy inspect instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? itself marshal_dump marshal_load method methods nil? object_id pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods psych_to_yaml public_method public_methods public_send remove_instance_variable respond_to? respond_to_missing? send singleton_class singleton_method singleton_methods taint tainted? tap to_a to_ary to_hash to_int to_io to_proc to_regexp to_str trust untaint untrust untrusted? .yaml_tag ::ARGF ::ARGV ::DATA ::ENV ::FALSE ::NIL ::RUBY_COPYRIGHT ::RUBY_DESCRIPTION ::RUBY_ENGINE ::RUBY_ENGINE_VERSION ::RUBY_PATCHLEVEL ::RUBY_PLATFORM ::RUBY_RELEASE_DATE ::RUBY_REVISION ::RUBY_VERSION ::SCRIPT_LINES__ ::STDERR ::STDIN ::STDOUT ::TOPLEVEL_BINDING ::TRUE sign verify