Symbolで採用している電子署名アルゴリズム「Ed25519」の図解
本記事はqiitaに移行しました。
更新はqiitaで行います。
お手数お掛けしますか下記リンクにお進み下さい。
はじめに
RSA暗号の解説は多いが、EdDSA Ed25519に関してはそうではなく、数式を伴った難しい説明が添えられ、全体像を掴むのに時間が掛かった。細かいことは置いておいて、1枚に図解してみた。
ブロックチェーンごとの暗号方式
チェーンごとに署名アルゴリズムと曲線は違う。
署名アルゴリズム
Symbol:EdDSA(Ed25519)
bitcoin:ECDSA
Ethereum:ECDSA
・・・
曲線
Symbol:Curve25519
bitcoin:secp256k1
Ethereum:secp256k1
・・・
参考:http://ethanfast.com/top-crypto.html
特徴
・高いセキュリティ
・高速な署名生成および検証
・鍵と署名が短い
高いセキュリティをもちながらも、構造がシンプルなので署名生成/検証が高速。
鍵と署名データが短いので、利用する際のデータ転送やストレージコストが低い。
ECDSAからの改良ポイント
秘密情報を使用してメッセージを署名する際などに、内部乱数(ノンス)が必要。そのノンスの生成方法が改良されている。
ECDSAが擬似ランダム関数を使うのに対して、EdDSAは、秘密情報とメッセージのハッシュ値を組み合わせて、ノンスの代わりに使用する。これにより、ノンスが外部から予測されることがなくなる。
過去にECDSAを採用した国内ゲーム機では、擬似ランダム関数を固定化してしまい、解析されてしまったことがある。
EdDSAは、そもそも外部(デバイス)の擬似ランダム関数を使わずに、メッセージと秘密情報・ハッシュ値に基づいて署名を生成しているので機密性が確保されている。
一般的に使われていた乱数アルゴリズムにバックドアが存在する疑惑が浮上した事があった、そこから「乱数を使わない」という考え広まり、その観点からもEdDSAが注目されている。
署名作成の際に、平文のハッシュ化を2回しているので、平文が長い場合にECDSAに比べて署名作成に時間がかかるという側面もある。検証時間に差はない。
※EdDSAであっても実装の仕方によって脆弱になってしまう。
ブロックチェーンSymbolではどこで活躍しているのか
署名を扱うとき、つまりアカウント作成やトランザクション発行時に使われる。
ブロックの生成には使われないので、単に「ブロックチェーンの速度」という意味では、関係していない。
EdDSAの図解
署名アルゴリズムによって、楕円曲線の種類があり、またそれぞれに共通パラメータが用意されている。署名時に秘密鍵、パラメータ、メッセージを使い署名を作成。メッセージに署名を付加。検証時には秘密鍵ではなく、公開鍵の情報を合わせて検証する。メッセージは暗号化されておらず、検証側では、なりすまし/改竄がされているか?いないか?だけを確認する。オレンジ色の「ランダム性確保」の箇所において、擬似乱数関数を使わず、秘密鍵、平文のハッシュ値を使っているのがストロングポイント。
参考サイト
参考:https://www.nic.ad.jp/ja/newsletter/No60/0640.html
参考:https://www.cryptrec.go.jp/exreport/cryptrec-ex-3002-2020.pdf
参考:https://portswigger.net/daily-swig/dozens-of-cryptography-libraries-vulnerable-to-private-key-theft
参考:Symbol解体新書
Discussion