ECDSA は、デジタル検証および楕円曲線に基づく検証のための公開キーと秘密キーを生成するアルゴリズム プロセスです。イーサリアム上の 2 つのアカウント、アリスとボブがイーサリアム ネットワーク内で ETH 送金トランザクションを実行するプロセスは次のとおりです。
(1) アリスの DApp ツールは、彼女のアカウントの秘密鍵 k として乱数を生成します。
(2) 方程式 Q=kp に従って、楕円曲線 secp256k1 上の点 p を生成します。曲線上の点 Q の座標 (x, y) ) 数学的処理後、アリスの公開鍵を取得できる 公開鍵をハッシュして切り詰めると、イーサリアムのアリスのアカウントのアドレスが取得できる (3) 送金用のトランザクション情報を生成 (4) アリスの DApp が送金トランザクション tx
を
実行RLP エンコード、次に SHA-3 ハッシュ、最後にハッシュに署名します。署名の結果は 65 バイト (r、s、v) です。このうち r と s はそれぞれ 32 バイトで署名の主要部分、v=27+(r%2) となり、署名結果の簡易検証とみなして回復 ID として使用されます。イーサリアムの回復署名の。署名は本質的に、秘密キー k を使用してトランザクション ダイジェストを暗号化するプロセスです。
トランザクション検証プロセスは次のとおりです:
a. トランザクション検証ノードは、アリスによって開始された元のトランザクションと彼女の署名を受け取ります。
b. クロスリカバリ ID を含むアリスの署名を検証し、署名とトランザクション ハッシュを組み合わせてアリスの公開キー Q を回復します。
c. 公開鍵 Q をハッシュし、最後の 20 バイトをインターセプトして、Alice のアカウント アドレスを取得します。
d. 元のトランザクションの送信元アドレスが計算によって復元されたアリスのアドレスと同じかどうかを比較し、同じであればアリスの転送トランザクションが正当であることを証明し、そうでない場合はトランザクションは拒否されます。
署名検証は本質的に、公開キー Q を使用してトランザクションを復号化するプロセスです。Ethereum Go クライアント コードは、実際には cgo を通じてビットコイン secp256k1 ライブラリを統合しており、Go コードは署名をカプセル化し、署名に基づいて公開キーを復元します。
イーサリアムのアカウントアドレスはビットコインとは異なり、変換は比較的簡単です。具体的には、ハッシュ結果は最初の 20 バイトを取得します。ここでのハッシュ アルゴリズムは SHA3-256 であり、次のコードで表すことができます。
crypto.Keccak256(pubKey)[12:]
func PubKeyToAddress(p ecdsa.PublicKey) common.Address{
pubBytes := FromECDSAPub(&p)
return common.bytesToAddress(Keccak256(pubBytes[1:])[12:])
}
最近、些細な事+先延ばしが多すぎて、ブログを書く計画が何度も延期になってしまいましたが、今後は月に少なくとも1つのブログを更新するように努めます。