仮想通貨のためのデジタル署名

仮想通貨に利用される重要な技術として、デジタル署名がある。デジタル署名によって受取人はトランザクションが送金者によって作成されたことを検証できるようになり、他人がなりすまして送金することを防ぐことができる。ここではRSA暗号を使ったデジタル署名の例を説明する。

まず、送金者は秘密鍵と公開鍵を生成する。

  1. 2つの素数p=7, q=5をランダムに選ぶ。

  2. (p-1) * (q-1) = 24 の約数ではない任意の自然数 e=5 を選ぶ。

  3. ed % ((p-1)*(q-1)) = 1 を満たす任意の自然数 d=5 を選ぶ。

  4. e=5 と n = 7 * 5 = 35 を公開鍵として公開する。

  5. d=5, p=7, q=5 は秘密鍵として秘密にする。

次に、送金者はトランザクションのハッシュ値を秘密鍵を使って署名する。

  1. 暗号化したいハッシュ値を17とする。

  2. 秘密鍵 d=5 と 公開鍵 n=35 を使って、17^5 % 35 = 12を暗号化したハッシュ値とする。

  3. 暗号化したハッシュ値を署名としてトランザクションに付け加える。

最後に、受取人はトランザクションとその署名を受け取り、検証する。

  1. 復号化したい署名を12とする。

  2. 公開鍵 e=5 と n=35 を使って、12^5 % 35 = 17を復号化した署名とする。

  3. トランザクションのハッシュ値を計算する。

  4. トランザクションのハッシュ値と、2.で復号化した署名が一致すれば検証成功。

公開鍵nから秘密鍵dを推測するにはnを素因数分解する必要があり、これはp, qが十分大きいとき非現実的な計算時間がかかる。トランザクションのハッシュ値を秘密鍵で暗号化できるのは秘密鍵を知っている送金者だけなので、検証が成功すれば、受取人はトランザクションに署名したのが確かに送金者であり、他者によるなりすましではないことを確信できる。

ビットコインのホワイトペーパーを読んで、デジタル署名の重要性に気がついたため、RSA暗号を例としてデジタル署名について復習した。