class OpenSSL::PKey::DSA

[edit]

要約

DSA 公開鍵暗号クラス

実際には、DSA は署名のためのアルゴリズムであり、暗号化はできません。

以下は、data に署名し、署名をもとに data を検証する簡単な例です。

require "openssl"
dsa512 = OpenSSL::PKey::DSA.new(512)
data = 'hoge'
sign = dsa512.sign('dss1', data)
p dsa512.verify('dss1', sign, data)

目次

特異メソッド
インスタンスメソッド

継承しているメソッド

OpenSSL::PKey::PKeyから継承しているメソッド

特異メソッド

generate(size) -> OpenSSL::PKey::DSA[permalink][rdoc][edit]
generate(size) {|u,n| ... } -> OpenSSL::PKey::DSA

乱数により DSA 公開鍵と秘密鍵のペアを生成して、DSA オブジェクトとして返します。

このメソッドを呼ぶ前に OpenSSL::Random の各モジュール関数によって乱数が適切に初期化されている必要があります。

size は DSA パラメータの素数のビット数を指定します。最大 1024 まで指定できます。通常 512 か 1024 を使います。

このメソッドにブロックが渡された場合には、鍵パラメータ生成の途中経過の情報を引数としてブロックが呼び出されます。

  • n個目の素数候補を生成した場合、u=0 でブロックが呼びだされる
  • 生成した素数候補が小さな素数で割りきれてしまった場合は u=1, n=-1 でブロックが呼びだされる
  • 生成した素数候補がn回目の素数テスト(Miller-Robin)に成功した 場合、u=1 でブロックが呼び出される
  • 適当な1つめの素数が見付かった場合は、u=2, n=0 と u=3, n=0 でブロックが呼び出される
  • もう1つ素数を見付けるために、上の1,2,3をもう一度繰り返す
  • 適当な2つめの素数が見付かった場合は、u=2, n=1 でブロックが 呼び出される
  • パラメータ g (generator) が見付かった場合には、 u=3, n=1 でブロックが呼び出される

DSA パラメータの生成には時間がかかるため、生成の途中経過をユーザに表示したい場合にこの機能を使います。

new -> OpenSSL::PKey::DSA[permalink][rdoc][edit]
new(size) -> OpenSSL::PKey::DSA
new(obj, pass=nil) -> OpenSSL::PKey::DSA
new(obj, pass=nil) {|flag| ... } -> OpenSSL::PKey::DSA

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

引数なしの場合は空の DSA オブジェクトを返します。

第一引数に整数を指定した場合には、OpenSSL::PKey::DSA.generate により公開鍵と秘密鍵のペアを生成し、それを返します。

それ以外の場合には、以下のようにして鍵データを読みこみ、DSA オブジェクトを生成します。

  • 第一引数が文字列の場合は、PEM 形式もしくは DER 形式と仮定して 鍵データを読み込みます
  • 第一引数が IO オブジェクトの場合は、その内容を 読み込んで DSA オブジェクトを生成します。
  • 第一引数が to_der メソッドを持つ場合は、それにより DER 形式の 文字列に変換してから読み込みます

pass が指定された場合は、秘密鍵を pass を使って復号化します。

鍵データにパスフレーズが設定されているにもかかわらず、passが省略された場合は、渡されたブロックを呼びだしてパスフレーズを要求します。ブロックの返り値をパスフレーズとみなして復号します。ブロックの引数は通常は false が渡されますが、これはそのパスフレーズが秘密鍵の復号に使われることを意味します。ブロックが渡されなかった場合にはターミナルに問い合わせをします。

[PARAM] size:
鍵を生成する時の素数のビット数
[PARAM] obj:
鍵データ
[PARAM] pass:
鍵データに設定したパスフレーズ
[EXCEPTION] OpenSSL::PKey::DSAError:
鍵の読み込みに失敗した場合に発生します。

インスタンスメソッド

export(cipher=nil, pass=nil) -> String[permalink][rdoc][edit]
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 は無視されます。

g -> OpenSSL::BN[permalink][rdoc][edit]

DSA 鍵のパラメータ g を返します。

g は公開鍵、秘密鍵の両方に属する情報です。

g=(g)[permalink][rdoc][edit]

DSA 鍵のパラメータ g を設定します。

通常このメソッドで値を変更することはありません。よく考えて必要な場合のみ利用してください。

[PARAM] g:
設定する整数値
p -> OpenSSL::BN[permalink][rdoc][edit]

DSA 鍵のパラメータ p を返します。

p は公開鍵、秘密鍵の両方に属する情報です。

p=(p)[permalink][rdoc][edit]

DSA 鍵のパラメータ p を設定します。

通常このメソッドで値を変更することはありません。よく考えて必要な場合のみ利用してください。

[PARAM] p:
設定する整数値
params -> {String => OpenSSL::BN}[permalink][rdoc][edit]

鍵のパラメータを {パラメータ名 => その整数値} というハッシュで返します。

公開鍵における priv_key のように自身が持っていないパラメータは 0 がセットされます。

priv_key -> OpenSSL::BN[permalink][rdoc][edit]

DSA 鍵の秘密鍵パラメータを返します。

秘密鍵はこの値と、 OpenSSL::PKey::DSA#p, OpenSSL::PKey::DSA#q, OpenSSL::PKey::DSA#g から構成されます。

priv_key=(private_key)[permalink][rdoc][edit]

DSA 鍵の秘密鍵パラメータを設定します。

通常このメソッドで値を変更することはありません。よく考えて必要な場合のみ利用してください。

[PARAM] private_key:
設定する整数値
private? -> bool[permalink][rdoc][edit]

自身が秘密鍵をもっている場合に true を返します。

pub_key -> OpenSSL::BN[permalink][rdoc][edit]

DSA 鍵の公開鍵パラメータを返します。

公開鍵はこの値と、 OpenSSL::PKey::DSA#p, OpenSSL::PKey::DSA#q, OpenSSL::PKey::DSA#g から構成されます。

pub_key=(public_key)[permalink][rdoc][edit]

DSA 鍵の公開鍵パラメータを設定します。

通常このメソッドで値を変更することはありません。よく考えて必要な場合のみ利用してください。

[PARAM] public_key:
設定する整数値
public? -> bool[permalink][rdoc][edit]

自身が公開鍵をもっている場合に true を返します。

public_key -> OpenSSL::PKey::DSA[permalink][rdoc][edit]

公開鍵を複製して DSA オブジェクトとして返します。

q -> OpenSSL::BN[permalink][rdoc][edit]

DSA 鍵のパラメータ q を返します。

q は公開鍵、秘密鍵の両方に属する情報です。

q=(q)[permalink][rdoc][edit]

DSA 鍵のパラメータ q を設定します。

通常このメソッドで値を変更することはありません。よく考えて必要な場合のみ利用してください。

[PARAM] q:
設定する整数値
syssign(data) -> String[permalink][rdoc][edit]

自身で data に署名をし、 DER 形式の文字列で署名を返します。

data は適切なハッシュ関数で計算されたダイジェストであると仮定しています。

通常は OpenSSL::PKey::PKey#sign を使い、署名をすべきです。

[PARAM] data:
署名の対象
sysverify(data, sign) -> bool[permalink][rdoc][edit]

署名 sign と自身の公開鍵で data を検証します。

検証に成功した場合は真を返します。

sign に OpenSSL::PKey::DSA#syssign が返す DER 形式の文字列を渡さなければなりません。

data は適切なハッシュ関数で計算されたダイジェストであると仮定しています。

[PARAM] data:
検証対象の文字列
[PARAM] sign:
署名文字列
[EXCEPTION] OpenSSL::PKey::DSAError:
検証時にエラーが起きた場合に発生します。正しい署名でなかった場合など、検証に失敗した場合はこの例外は発生しないことに注意してください
to_der -> String[permalink][rdoc][edit]

自身を DER 形式に変換します。

to_text -> String[permalink][rdoc][edit]

鍵を人間が読める形式に変換します。