Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > 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 はこのライブラリでは基本的には鍵共有にしか利用できません。
鍵共有の例。
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
|
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__
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