アドレスの生成方法は?非対称暗号とは何ですか?
アドレスの生成手順#
- 256 ビットのランダムな秘密鍵(32 バイト)を生成します。
- 楕円曲線暗号を使用して公開鍵を取得します。
- 公開鍵を 2 回のハッシュ関数にかけて、20 バイトのアドレスを生成します。
楕円曲線#
ここで、秘密鍵 K、公開鍵 P があります。
曲線上でランダムに点 A(x、y)を取り、Kx + Ky = P を計算します。つまり、KA = P です。実際、P は曲線上の座標点です。Bitcoin では、点 A の役割を果たす公認の点 G があります。つまり、ランダムな点は公開されており、G は定数のようなものです。
メッセージの暗号化#
NP 問題:P と G が与えられた場合、K を求めるのは困難ですが、K と G に基づいて P が正しいことをすばやく検証できます。
Alice と Bob という 2 人の人物がいます。それぞれが自分の公開鍵と秘密鍵を持っています。
- Alice:Pa Ka
- Bob:Pb Kb
Pa = Ka * G
Pb = Kb * G
公開鍵は公開されています。つまり、2 人はお互いの情報を知ることができます。
- Alice:Ka * Pb = Ka * Kb * G
- Bob:Kb * Pa = Kb * Ka * G
これらの情報は等しいです。つまり、この 2 人の間で共有される鍵は、2 人だけの対称鍵と見なすことができます。
Alice が Bob にメッセージを送りたい場合、Pb を使用して情報を暗号化し、Bob は Kb を使用して復号化します。つまり、可逆な操作を行います。
デジタル署名#
m:メッセージ
Alice は m に対して Ka で署名を付けます。m * Ka = N、これは秘密鍵を使用して公開鍵を生成するのと同様です(m は G です)。
相手がこの文が Alice のものであることを検証したい場合、
m * Pa = m * G * Ka、つまり = G * N です。G は公開されているため、m が Alice のものであるかどうかをすばやく検証できます。