楕円曲線DSA

楕円曲線DSAは、Digital Signature Algorithm  について楕円曲線暗号を用いるようにした変種である。

1. DSAとの比較
----------

楕円曲線暗号で一般的に言われるように、ECDSAにおいて必要とされる公開鍵のサイズはセキュリティビット数のおよそ2倍であると考えられている。例えば、80ビットのセキュリティビット数を得るために、DSAでは最低でも1024ビットの公開鍵が必要であるが、ECDSAでは160ビットの公開鍵で十分である。一方、署名のサイズはDSAでもECDSAでも同じであり、必要とするビット安全性の4倍のビット長を要する。

2. 署名生成
-------

アリスが署名したメッセージをボブに送る場合を考える。最初に、使用する楕円曲線のパラメータ を決めておく必要がある。

アリスは の範囲からランダムに選択された秘密鍵 と、公開鍵 から成る鍵ペアを生成する。ここで は楕円曲線上での掛け算  を意味する。

アリスがメッセージ に署名する場合、以下の計算を行う。

を計算する。ここで HASH はSHA-1のような暗号学的ハッシュ関数を指す。
を、 の最上位側の ビットとする。ここで は位数 のビット長とする。
の範囲から整数 を任意に選択する。
曲線上の点 を計算する。
を計算する。 となる場合には の選択に戻る。
を計算する。 となる場合には の選択に戻る。
が に対する署名となる。 を計算する際に、 から得られる は整数に変換される。 は より「大きい」ことは許されるが、「長い」ことは許されない。

DSAと同様に、署名ごとに異なる を選択することは極めて重要である。さもないと、ステップ6の式から秘密鍵 を得ることが可能となってしまう。メッセージ および に対して、未知だが同じ から得られた2つの署名 および がある場合、攻撃者は および を計算することが可能であり、 であることから、 が得られる。 であるから、攻撃者は秘密鍵 を得ることができる。このように単一の を用いることは不適切な実装であり、PlayStation 3のソフトウェア署名鍵が漏洩したのはこれが原因であった。

3. 署名検証
-------

ボブがアリスの署名を検証するためには、アリスの公開鍵 が必要である。公開鍵 が正当なものであるかの検証は以下のとおりである。

が でないことを確認する。
が曲線上にあることを確認する。
であることを確認する。メッセージ と署名 の検証は以下のように行われる。

および がいずれも の範囲にある整数であることを確認する。これを満たさない場合には署名は不正なものである。
を計算する。ここで HASH は署名生成に用いられたハッシュ関数と同一のものである。
を、 の最上位側の ビットとする。
を計算する。
および を計算する。
曲線上の点 を計算する。
であれば署名は正当なものである。Straus's algorithmを用いることで、2つの楕円曲線上での掛け算の和 を、2つの楕円曲線上での掛け算よりも速く計算することができる。

4. アルゴリズムの正当性
-------------

ここで は署名検証のステップ6で得られた点とする。

公開鍵が と定義されることより

楕円曲線上での掛け算より

署名検証のステップ4より および の定義を拡張すると

を外に出して

署名のステップ6より の定義を拡張すると

逆数の逆数は元と同じであることと、逆数と元の積は であることから

の定義より、これは署名検証のステップ6と等しい。

これは正しく署名されたメッセージは正しく検証されることのみを示しており、セキュアな署名アルゴリズムであるための他の要素については考慮していない。

5. セキュリティ
---------

2010年12月、fail0verflowと名乗るグループが、ソニーがPlayStation 3のソフトウェア署名に用いていたECDSA秘密鍵の回復に成功したと発表した。しかし、これは をランダムではなく固定値としていたソニーの不適切な実装によるものであり、アルゴリズム自体の脆弱性ではない。署名生成のセクションで述べたように、 を固定値で用いることは秘密鍵 を計算可能とし、アルゴリズムを破綻させるものである。

2011年3月29日、2人の研究者による論文がIACRに発表された。この論文では、サイドチャネル攻撃の一つであるタイミング攻撃によって、ECDSAを認証に利用し、OpenSSLを用いたサーバのTLS秘密鍵を入手可能であることが示された。この脆弱性はOpenSSL 1.0.0eで修正された。

2013年8月、Java class [1]のいくつかの実装において、 のコリジョンが発生することがあるバグが明らかとなった。前述のように、これにより秘密鍵を得ることが可能であり、Javaを利用しECDSAを認証に用いていたAndroidアプリからBitcoinが盗まれる危険性があった。この問題は、RFC 6979にあるように、秘密鍵とメッセージハッシュから決定論的に を導くことで回避できる。

このアルゴリズムは楕円曲線をパラメータとして必要とするが、多くの場合NISTによって定められた楕円曲線が用いられる。これらの曲線は特定のシード値からSHA-1を基盤としたアルゴリズムを用いて算出されているが、シード値の根拠が不明であること、また同じく固定の楕円曲線を用いたアルゴリズムであるDual_EC_DRBGにNSAがバックドアを仕込んだ上でRSAセキュリティ社のセキュリティ製品に採用させたと報道されたことから、疑いの目で見られることがある。

6. 実装ライブラリ
----------

ECDSAをサポートしているライブラリは以下の通りである。

Botan
OpenSSL
GnuTLS
wolfCrypt

7. 脚注
-----

8. 参考文献
-------

Accredited Standards Committee [2], //American National Standard X9.62-2005, Public Key Cryptography for the Financial Services Industry, The Elliptic Curve Digital Signature Algorithm //, November 16, 2005.
Certicom Research, [3], Version 2.0, May 21, 2009.
López, J. and Dahab, R. [4], Technical Report IC-00-10, State University of Campinas, 2000.
Daniel J. Bernstein, [5], 2002.
Daniel R. L. Brown, //Generic Groups, Collision Resistance, and ECDSA//, Designs, Codes and Cryptography, 35, 119–152, 2005. [6]
Ian F. Blake, Gadiel Seroussi, and Nigel P. Smart, editors, //Advances in Elliptic Curve Cryptography//, London Mathematical Society Lecture Note Series 317, Cambridge University Press, 2005.

9. 関連項目
-------

楕円曲線暗号
Digital Signature Algorithm

10. 外部リンク
---------

[7]