デジタル署名スキームと楕円曲線暗号。カリフォルニア大学バークレー校 ビットコインと仮想通貨の無料講義超訳|Week3-3

前回までの記事はこちら

ーーーーーーーーーー

こんにちは!クレメア(@cremea_tw)です。

前回に引き続き、カリフォルニア大学バークレー校の無料講義、
「ビットコインと仮想通貨のオンライン講座」で学んだ内容をシェアしていきます。

講義そのものにおいて、

読者対象:ビットコインや仮想通貨について詳しく知りたい全ての人
前提知識:不要

という感じなので、
講義内容を読むだけでもかなり理解が深まるのではないかと思います。

 

文章のスタイルとしては、
翻訳ではなく、個人的解釈バリバリの超訳をしてきます。

荒削りですがスピード重視で、
クレメア的な解釈も交えてお伝えするので、
間違いや意見などあればコメントいただければと思います。

 

また、太字や文字色などの文章の装飾は極力していません。

学びの本質はそこではない、時間がもったいない、あとでできる、
ということで、今回は泣く泣くカットしました。

見辛いかもしれませんが、予めご了承ください。

 

ということで、
講義の内容に沿って進めます。

今回の記事は、
デジタル署名スキームと楕円曲線暗号についてお伝えします。

それでは、本題に入っていきましょう。

イントロ:署名と認証

ここでは、デジタル署名を使用し、匿名で信頼できる方法で、
メッセージとトランザクションを送信する方法を説明します。

前のセクションでは、
ブロックチェーン内の前のブロックに含まれていたトランザクションが、
どのように改ざんを防止するのかを示しました。

デジタル署名を使用することで、
残りのネットワークに送信する現在のトランザクションも、
改ざんが防止できることを確認することができます。

署名を取得するという動機付けは、
アイデンティティを認証することであることを思い出してください。

そのユーザーの特定の秘密鍵で署名されているため、公開鍵の所有権が証明されおり、
受信したメッセージは他のユーザーからのメッセージであると分かります。

この次のセクションでは、
デジタル署名スキームから必要なものを、
上位レベルで検討します。

 

デジタル署名スキーム(DSS)

ネットワーク上の2人のユーザー、
アリスとボブを考えてみましょう。

彼らは両方とも、
秘密鍵と公開鍵を持っていることを思い出してください。

 

ビットコインの秘密鍵と公開鍵は、
ECDSA(Elliptic Curve Digital Signature Algorithm)というアルゴリズムによって生成されます。

次のセクションでそれについて説明します。

アリスはボブにメッセージを送るつもりです。

彼女はこれをどうすれば誰もメッセージを改竄できないようにすることができますか?

 

最初に、ボブはアリスの公開鍵へのアクセス権を持っていると指摘します。

なぜならそれは、アリスを識別するための公開情報だからです。

あとで、ボブがアリスからのメッセージが、
実際にアリスによって送信されたことを確認するのに、
これが重要で役に立つことをみていきます。

 

彼女のメッセージを送信する前に、
アリスは自分の秘密鍵でメッセージに署名します。

これにより、メッセージをそのまま作成したことを証明する、
固有の署名が生成されます。

 

その後、元のメッセージと署名をボブに送ります。

アイデアは、メッセージが主要なペイロードであり、
その署名はアリスがその正確なメッセージを作成した人であることを、
証明するために使用できます。

 

ボブは、アリスの公開鍵と元のメッセージが与えられて、
署名が有効であることを容易に検証することができます。

署名が有効であれば、
それはメッセージが改竄されていないことを意味します。

アリスが署名を作成するためには、
関連する秘密鍵を持っていなければなりません。

また、メッセージが改竄された時点で、
署名はもう有効ではありません。

これは、デジタル署名方式が、
メッセージを改竄防止する方法を示しています。

 

重要な点は、ボブや他の誰かが、
自分の公開鍵だけではアリスの秘密鍵を推測できないはずであるということです。

さもなければ、ボブか他の誰かがアリスの署名を作り直して、
彼女のアイデンティティを偽造することができます。

次のセクションでは、
公開鍵と秘密鍵のペアを生成する方法について説明します。

 

DSSの重要な定義

要約すると、
ここに留意すべき重要な特性がいくつかあります。

これらは、アリスがボブにメッセージを送信した機能を有効にする、
デジタル署名スキームの本質的な特性です。

まず、メッセージと署名と送信者の公開鍵のコピーがあれば、
受信者はメッセージの発信元を特定できるはずです。

メッセージは送信者の秘密鍵で署名されているため、
元の送信者がこのメッセージを承認したことを示します。

元の送信者がバックトラックできないようにすることもできます。

彼らはすでに自分の秘密鍵でメッセージに署名しているので、
その署名を元に戻すか、それを無効にするべきではありません。

メッセージを変更すると、
署名がもう一致しないようになります。

最後に、メッセージの受信者もメッセージの整合性を確認できる必要があります。

これは以前見ましたが、
署名後に誰でもメッセージを変更できないように署名を使用することができます。

 

Quick Check 1

デジタル署名方式はどのような特性を備えていますか?

  • Non-repudiation
  • Authenticity
  • Integrity
  • Message origin
  • Byzantine Fault Tolerance

 

秘密鍵からアドレスまで

概要を説明します。

ランダムに生成する秘密鍵から始まります。

次に、楕円曲線点スカラー倍算を使用して、
公開鍵を導き出すことができます。

そこからハッシュ関数を使って、
最終的にビットコインアドレスに到達することができます。

1つ重要な注意点は、
前述のプロセスが全て一方向プロセスであることです。

私たちは前進することはできますが、後退することはできません。

私たちが秘密鍵を対応する公開鍵またはアドレスから推測することができれば、
秘密鍵はそれほどプライベートではありません。

さて、楕円曲線を最初に見ていきましょう。

 

楕円曲線暗号

ビットコインでは、
ECDSA(楕円曲線デジタル署名アルゴリズム)を使用して、
秘密鍵と公開鍵を生成します。

楕円曲線は、
一般形y ^ 2 = x ^ 3 + ax + bによって定義される単なる数学的な曲線です。

私たちは一定の量の空間内で可能なすべての値をエンコードする必要があるため、
有限体上の全てをとります。

 

右側にビットコインの楕円曲線の画像secp256k1があります。

方程式はy ^ 2 = x ^ 3 + 7であり、
今後説明するいくつかの固有の特性を持つように設計されています。

先に述べたように、
キーサイズを制限するために有限体を引き継いでいます。

例として、左側は同じ曲線ですが、
小さなフィールドでは-128〜128の整数値しかありません。

我々が有限体上でそれを取るとき、
それはもはや滑らかな曲線のようには見えません。

しかし、秘密鍵から公開鍵を生成する、
一方向関数を作成するのに役立つ楕円曲線の固有の特性があります。

 

前述のように、ビットコインの楕円曲線はsecp256k1です。

この曲線は、実際の曲線式自体(その係数による)、
フィールド、およびジェネレーターポイントを含む、2つのパラメータで指定されます。

x軸を横切る曲線の対称性に注意してください。

この対称性は、有限体上に取っても保存されます。

また、この曲線上の非垂直線は、
多くとも3点で曲線と交差することにも注意してください。

グラフでは、点PおよびQを通る線は点Rで交差します。

この楕円曲線では、線と点を使って点の加算を行うことができます。

PとQを加算するには、
それらを通る直線を3番目の点Rで交差させ、
次に点Rをx軸に反映させて、結果P + Qを得ることができます。

これをthe chord tangent processといいます。

これは、P + Qである点Kが与えられているので、
個々の点PおよびQを見つけることは困難であるため、
トラップドアまたは一方向関数です。

 

Quick Check 1

ECDSAは何を表しますか?

  • Epsilon Chi Delta Sigma Alpha
  • Easy Calculator for Determining Safe Authentication
  • Elliptic Curve Digital Signature Algorithm
  • Elliptical Curve Digital Signature Algorithm

 

楕円曲線暗号:デモ

説明のためのデモがあります。

我々は、誰もが知っているジェネレーターポイントの点Pから始めます。
secp256k1の仕様に組み込まれているからです。

Pをそれ自身で追加するには、
ポイントPで接線を取るだけです。

線が曲線と交差するところで-2Pとしましょう。

次に、この点をx軸に反映させて、結果を2Pにします。

3Pを得るには、同じプロセスでPを2Pに加えることができます。

Pと2Pを通る線を描き、それらが交差する場所を見つけます(-3P)。

そして、それを再びx軸に反映させて、答えを3Pにします。

 

楕円曲線暗号:セキュリティ

ユーザーは、秘密鍵の乱数nを生成します。

彼らは公開鍵を生成するために、
nで楕円曲線点スカラー倍を使用します。

secp256k1の既知のジェネレータ点Pをn回追加します。

次に、アドレスを生成するために、
最初にSHA-256で公開鍵nPをハッシュし、
次にRIPEMD160という別のハッシュ関数でハッシュします。

量子コンピュータは楕円曲線を破ることができ、
私たちが定義した一方向点スカラー倍算を逆転させることができますが、
量子コンピュータはハッシュ関数を逆転することができないので、
SHA-256はアドレスに量子抵抗を生じさせます。

RIPEMD160は、アドレスサイズを256ビットから160ビットに短縮します。

あなたは疑問に思うかもしれません。
公開鍵nPが与えられた場合、秘密鍵nを得ることは可能ですか?

この問題は楕円曲線離散対数問題として知られており、
計算上実行不可能であることが知られています。

したがって、秘密鍵から公開鍵を生成する手順はかなり安全です。

 

公開鍵を公開鍵ハッシュへ

私たちはすでに公開鍵を持っていますが、
どのようにアドレスまでたどり着けるのでしょうか?

量子コンピュータが存在する場合、
それらを用いて楕円曲線離散対数問題を解くことができ、
公開鍵を与えられた秘密鍵を見つけることができます。

量子コンピュータはハッシュ関数を逆転することができないので、
公開鍵で2つのハッシュ関数を実行することを選択します。

最初に、
ビットコインプロトコルで広く使用されていたハッシュ関数として言及したSHA-256と、
アドレスサイズを256ビットから160ビットに短縮するRIPEMD-160です。

SHA – 256とRIPEMD – 160を使用する組み合わせは、
“ダブルハッシュ”またはHASH160と呼ばれます。

この後、私たちは公開鍵ハッシュを持っています。

 

公開鍵ハッシュをアドレスへ

公開鍵ハッシュを取得からビットコインアドレスの到達までは、
ちょっと離れた所にあります。

次のステップは、私たちの公開鍵ハッシュを、
もっと人間的にやさしくすることです。

最初に、前のセクションの前回のRIPEMD-160ハッシュの前に、
バージョンバイトを追加します。

バージョンバイトでは、メインのビットコインネットワークか、
より小さなテストネットワークかを指定します。

これを保存して拡張RIPEMD-160ハッシュと呼んでいます。

次に、Base58CheckEncodeを実行します。

これは、これまでのものをベース58に変換することを最初に行います。

ベース58は、通常の62文字のアルファベットのようなアルファベットです。

お互いを区別するのが難しいものを除き、
0から9までのすべての1桁の数字とすべての大文字と小文字があります。

そこで、0と大文字O、さらには大文字の「I」と小文字の「l」を取り出します。

これはあなたのアドレスをコピーするときのあいまいさを避けるためです。

次に、チェックサムを計算します。

拡張RIPEMD-160ハッシュでSHA-256dを実行し、
SHA-256を2回実行します。

SHA-256dハッシュの最初の4バイトをチェックサムとして取得し、
拡張RIPEMD-160ハッシュの末尾に追加します。

結果をbase58に変換した後、最終的にビットコインアドレスを取得します。

要約すると、私たちのアドレスでは、
人々が私たちに支払うことができる公開鍵ハッシュ、
私たちが現在いるネットワークを示すバージョンバイト、
人為的エラーを説明するチェックサムをうまくコード化しています。

誰かがあなたのアドレスを誤って入力したりコピーしたりすると、
チェックサムが与えられてもアドレスは有効ではありません。

そして、これはデコードソフトウェアが私たちのためにするものです。

アドレスの先頭をハッシュし、
チェックサムと比較して有効かどうかを調べることができます。

 

あとがき

 

オンラインでのやり取りは、
とにかくセキュリティを考えなければならない。

そして、そのセキュリティを支えているのが、
高度な数学であるということがよくわかりました。

 

久しぶりに数学にアタマを殴られた気がします。

 

わからないことがわかれば、
それも1つの学びということで。

 

今回はこの辺で失礼します。

このブログを書く僕の目的は、
「ファンを作ること・仲間を増やすこと」です。

趣味が合う、気が合う、考え方が合う。
なんかええなーと思ったら、気軽にメッセージください。喜びます。

終わり。

 

次の記事
ビットコインスクリプト。Proof of Burn。カリフォルニア大学バークレー校 ビットコインと仮想通貨の無料講義超訳|Week3-4

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

ABOUTこの記事をかいた人

物語の引き金を引く男 / 「てめえの人生に火をつける」 / プロ火付け役 / 腐れニートからの再始動 / 見知らぬ人にMacBook Proを買った人 / 32日で100記事達成 / ただの足跡を伝説に変えていく男 / Youtubeで #クレメアラジオ 不定期配信 / サロン「裏世界」オーナー 参加希望者はDMまで