署名生成アルゴリズム
アリスがボブに署名付きメッセージを送りたいとします。まず、二人は曲線パラメータについて合意する必要があります。
曲線の場と方程式に加えて、
曲線上の素数位数の基点。
は点の加法的な次数です
。
注文
基点の
は素数でなければならない。実際、環のすべての非零要素は素数であると仮定する。
は可逆なので、
フィールドでなければならない。それは、
素数でなければならない(ベズーの恒等式を参照)。
アリスは秘密鍵と整数からなる鍵ペアを作成する。
区間内でランダムに選択
公開鍵曲線ポイント
. 私たちは使用します
楕円曲線上の点のスカラー倍を表す。
アリスがメッセージに署名するために
彼女は以下の手順に従います。
- 計算する
(ここでいうHASHとは、 SHA-2などの暗号学的ハッシュ関数であり、その出力は整数に変換されます。) - させて
になる
左端のビット
、 どこ
グループオーダーのビット長
。 (ご了承ください
より大きい可能性がある
しかし、それ以上ではない。[ 2 ]) - 暗号的に安全な乱数を選択してください
から
。 - 曲線の点を計算する
。 - 計算する
。 もし
ステップ3に戻ってください。 - 計算する
。 もし
ステップ3に戻ってください。 - 署名はペアです
。 (そして
(これも有効な署名です。)
規格に記載されているように、
秘密にしておくことも重要ですが、異なる選択をすることも重要です
異なる署名の場合。そうでない場合は、ステップ 6 の方程式を解くことができます。
秘密鍵: 2 つの署名が与えられた場合
そして
同じ未知のものを使用し
既知のさまざまなメッセージ
そして
攻撃者は計算できる
そして
、そして
(この段落のすべての演算はモジュロ演算で行われます)
攻撃者は
。 以来
攻撃者は秘密鍵を計算できるようになる
。
この実装上の欠陥は、例えばPlayStation 3ゲーム機で使用される署名キーを抽出するために利用された。[ 3 ]
ECDSA署名で秘密鍵が漏洩するもう1つの方法は、
これは、欠陥のある乱数生成器によって生成されたものです。このような乱数生成の失敗により、2013年8月にAndroid Bitcoin Walletのユーザーが資金を失いました。[ 4 ]
確実にするために
各メッセージごとに固有であるため、乱数生成を完全に回避し、決定論的な署名を導出することができます。
メッセージと秘密鍵の両方から。[ 5 ]
署名検証アルゴリズム
ボブがアリスの署名を認証するために
メッセージについて
彼は彼女の公開鍵曲線ポイントのコピーを持っている必要がある
ボブが確認できる
有効な曲線点は以下のとおりです。
- 確認してみてください
は単位元Oとは等しくなく、その座標はそれ以外は有効である。 - 確認してみてください
曲線上に位置する。 - 確認してみてください
。
その後、ボブは以下の手順に従います。
- rとsが整数であることを確認してください。
そうでない場合、署名は無効です。 - 計算する
ここで、HASHは署名生成で使用される関数と同じものです。 - させて
になる
eの左端のビット。 - 計算する
そして
。 - 曲線の点を計算する
。 もし
その場合、署名は無効です。 - 署名が有効であるのは、
それ以外の場合は無効です。
効率的な実装では逆数を計算することに注意してください
一度だけ。また、シャミアのトリックを使用すると、2 つのスカラー乗算の和
2 つのスカラー乗算を個別に行うよりも速く計算できる。[ 6 ]
アルゴリズムの正確性
検証が正しく機能する理由はすぐには明らかではない。その理由を理解するために、検証のステップ 5 で計算された曲線点をCとすると、

公開鍵の定義から
、

楕円曲線のスカラー乗算は加算に対して分配法則を満たすため、

定義を拡大する
そして
検証ステップ4から、

共通用語を収集する
、

署名ステップ6からのsの定義を拡張すると、

逆元の逆元は元の要素であり、要素の逆元と要素の積は単位元であるため、次の式が残ります。

rの定義から、これは検証ステップ 6 です。
これは、正しく署名されたメッセージは正しく検証されるということを示しているに過ぎません。安全な署名アルゴリズムには、正しく署名されていないメッセージは正しく検証されないことや、暗号解読攻撃に対する耐性など、その他の特性も必要です。
公開鍵の復元
メッセージmとアリスの署名が与えられた場合
そのメッセージから、ボブは(潜在的に)アリスの公開鍵を復元できる。[ 7 ]
- rとsが整数であることを確認してください。
そうでない場合、署名は無効です。 - 曲線上の点を計算する
どこ
は
、
、
など(提供)
曲線の領域に対して大きすぎず、
は、曲線方程式を満たす値です。これらの条件を満たす曲線上の点は複数存在する可能性があり、Rの値が異なると、それぞれ異なる復元鍵が得られることに注意してください。 - 計算する
ここで、HASHは署名生成で使用される関数と同じものです。 - zを
eの左端のビット。 - 計算する
そして
。 - 曲線の点を計算する
。 - 署名が有効であるのは、
アリスの公開鍵と一致します。 - 考えられるすべてのRポイントを試しても、アリスの公開鍵と一致するものが見つからない場合、署名は無効となります。
無効な署名、または別のメッセージの署名を使用した場合、誤った公開鍵が復元されることに注意してください。復元アルゴリズムは、署名者の公開鍵(またはそのハッシュ値)が事前にわかっている場合にのみ、署名の有効性を確認するために使用できます。
回復アルゴリズムの正確性
定義から始めましょう
回復ステップ6から、

定義から
署名ステップ4から、

楕円曲線のスカラー乗算は加算に対して分配法則を満たすため、

定義を拡大する
そして
回復ステップ5から、

署名ステップ6からのsの定義を拡張すると、

要素の逆元と要素の積は単位元なので、

第1項と第2項は互いに打ち消し合い、

定義から
これはアリスの公開鍵です。
これは、曲線点を一意に計算するための追加情報が共有されていれば、正しく署名されたメッセージは正しい公開鍵を復元できることを示しています。
署名値rから。
安全
2010年12月、 fail0verflowと名乗るグループが、PlayStation 3ゲーム機のソフトウェア署名にソニーが使用していたECDSA秘密鍵の復元を発表した。しかし、この攻撃が成功したのは、ソニーがアルゴリズムを適切に実装していなかったためである。
ランダムではなく静的でした。上記の署名生成アルゴリズムのセクションで指摘したように、これにより
解決可能であり、アルゴリズム全体が無意味になる。[ 8 ]
2011年3月29日、2人の研究者がIACR論文[ 9 ]を発表し、タイミング攻撃によってバイナリ体上の楕円曲線DSAで認証するOpenSSLを使用するサーバーのTLS秘密鍵を取得できることを示した[ 10 ]。この脆弱性はOpenSSL 1.0.0fで修正された[ 11 ]。
2013年8月、JavaクラスSecureRandomの一部の実装におけるバグにより、衝突が発生することがあることが明らかになった。
価値。これにより、ハッカーは秘密鍵を復元し、正当な鍵の所有者が持っていたのと同じビットコイン取引の制御権を得ることができました。これは、Javaを使用し、取引の認証にECDSAに依存する一部のAndroidアプリ実装でPS3署名鍵を明らかにするために使用されたのと同じエクスプロイトを使用しています。[ 12 ]
この問題は、RFC 6979で説明されているように、kを決定論的に生成することで回避できます。
実装
以下は、ECDSAをサポートする暗号ライブラリの一覧です。
参考文献
- ↑ Johnson, Don; Menezes, Alfred (1999). "楕円曲線デジタル署名アルゴリズム (ECDSA)". Certicom Research. カナダ. CiteSeerX 10.1.1.38.8014 .
- ↑ 「NIST FIPS 186-4、2013年7月、19ページと26ページ」(PDF)。2016年12月27日にオリジナルからアーカイブ(PDF) 。 2014年3月17日に取得。
- ↑コンソールハッキング 2010 - PS3 大失敗2014年12月15日にWayback Machineにアーカイブ済み、123~128ページ
- ↑ 「Androidのセキュリティ脆弱性」。2019年4月7日にオリジナルからアーカイブ済み。2015年2月24日に取得。
- ↑ Pornin, T. (2013). RFC 6979 - デジタル署名アルゴリズム (DSA) および楕円曲線デジタル署名アルゴリズム (ECDSA) の決定論的使用法(技術レポート). doi : 10.17487/RFC6979 . 2015 年2 月 24 日取得。
- ↑ 「楕円曲線暗号における二重基数システム」(PDF)。2011年7月26日にオリジナルからアーカイブ(PDF) 。 2014年4月22日に取得。
- ↑ Daniel RL Brown SECG SEC 1: 楕円曲線暗号(バージョン 2.0) https://www.secg.org/sec1-v2.pdf
- ↑ベンデル、マイク(2010年12月29日)。「ハッカーがPS3のセキュリティを大失敗と評し、無制限のアクセス権を獲得」。Exophase.com。2019年4月7日のオリジナルからアーカイブ。 2011年1月5日取得。
- ↑ 「暗号学ePrintアーカイブ:レポート2011/232」。2018年12月8日にオリジナルからアーカイブ済み。2015年2月24日に取得。
- ↑ 「脆弱性ノート VU#536044 - OpenSSLがリモートタイミング攻撃により ECDSA 秘密鍵を漏洩」。www.kb.cert.org。2019年 4 月 7 日のオリジナルからアーカイブ済み。2011年5 月 24 日取得。
- ↑ 「脆弱性」 . OpenSSLプロジェクト. 2026年6月13日取得。
- ↑ 「Androidのバグがビットコインウォレットを襲う」。The Register。2013年8月12日。2013年8月15日のオリジナルからアーカイブ。2017年8月27日取得。
- ↑ブルース・シュナイアー(2013年9月5日)「NSAはインターネット上のほとんどの暗号化を破っている」。シュナイアー・オン・セキュリティ。2017年12月15日のオリジナルからアーカイブ。 2018年1月11日取得。
- ↑ 「SafeCurves: 楕円曲線暗号のための安全な曲線の選択」。2013年10月25日。2019年4月7日にオリジナルからアーカイブ済み。2018年1月11日に取得。
- ↑ Bernstein, Daniel J.; Lange, Tanja (2013 年 5 月 31 日). 「NIST 曲線のセキュリティ上の危険性」(PDF) . 2019 年 5 月 28 日のオリジナルからアーカイブ(PDF) . 2018 年1 月 11 日取得.
- ↑ Schneier, Bruce (2007年11月15日). "The Strange Story of Dual_EC_DRBG" . Schneier on Security . 2019年4月23日のオリジナルからアーカイブ済み。2018年1月11日取得。
- ↑ラリー・グリーンマイヤー(2013年9月18日)「NSAの暗号化技術回避の試みが米国の暗号化標準を損なった」サイエンティフィック・アメリカン。2017年12月24日のオリジナルからアーカイブ。 2018年1月11日取得。
- ↑ "curve25519-sha256@libssh.org.txt\doc - projects/libssh.git" . libssh共有リポジトリ。2019年3月23日にオリジナルからアーカイブ済み。2018年1月11日に取得。
- ↑ Bernstein, Daniel J. (2014年3月23日). 「楕円曲線署名システムの設計方法」 . cr.yp.toブログ. 2014年3月23日のオリジナルからアーカイブ済み. 2018年1月11日取得.
さらに読む
- 認定標準委員会X9、ASC X9が公開鍵暗号/ECDSAの新標準を発行、2020年10月6日。出典
- 認定標準委員会X9、米国国家規格 X9.62-2005、金融サービス業界向け公開鍵暗号、楕円曲線デジタル署名アルゴリズム (ECDSA)、2005 年 11 月 16 日。
- Certicom Research、「効率的な暗号化のための標準規格、SEC 1:楕円曲線暗号」、バージョン2.0、2009年5月21日。
- López, J. および Dahab, R. 「楕円曲線暗号の概要」、技術報告書 IC-00-10、カンピーナス州立大学、2000 年。
- Daniel J. Bernstein、「Pippengerのべき乗アルゴリズム」、2002年。
- Daniel RL Brown、「汎用グループ、衝突耐性、および ECDSA」、Designs, Codes and Cryptography、35、119–152、2005年 。ePrint版
- Ian F. Blake、Gadiel Seroussi、Nigel Smart編、『Advances in Elliptic Curve Cryptography』、ロンドン数学会講義ノートシリーズ 317、ケンブリッジ大学出版局、2005 年。
- Hankerson, D.; Vanstone, S. ; Menezes, A. (2004).楕円曲線暗号入門. Springer Professional Computing. ニューヨーク: Springer . doi : 10.1007/b97644 . ISBN 0-387-95273-X. S2CID 720546 .
外部リンク
- デジタル署名規格。ECDSAに関する情報を含む。
- 楕円曲線デジタル署名アルゴリズム(ECDSA);ECDSAに関する詳細なガイドを提供します。Waybackリンク