最高のステップバイステップのビットコインスクリプトガイドパート1

このガイドの目的は、ビットコインスクリプトの背後にあるロジックを理解するのに役立ちます。カバーしきれないので、ガイドは2部に分かれます.

ビットコインは、1つの目的だけのために作成されました…トランザクション。ビットコインは、支払いシステムが分散型ピアツーピアシステム上に存在できることを世界に示すことができました。しかし、これらのトランザクションの舞台裏では何が起こっているのでしょうか。すべての小さなトランザクションの背後には、バックグラウンドで動作するコードがいくつかあります。このコードはビットコインスクリプト言語、または略してビットコインスクリプトです.

最高のビットコインスクリプトガイド

ビットコインスクリプトの概要

スクリプトは、Forthに似た、スタックベースの逆ポーランド記法であるTuringIncomplete言語です。はい、それは非常に複雑に聞こえますが、実際にはそうではありません。逆からすべての用語を見ていきましょう.

チューリングが不完全

チューリングの不完全な言語は機能が制限されており、ジャンプやループを行うことができません。したがって、彼らは無限ループに入ることができません。チューリング完全であるということは、リソースとメモリがあれば、チューリング完全プログラムがあらゆる問題を解決できることを意味します。 Solidityはチューリング完全言語の一例です.

では、なぜビットコインスクリプトチューリングが完了しないのですか??

する必要がないからです。ビットコインスクリプトは、イーサリアムのスマートコントラクトほど複雑である必要はありません。実際、スクリプトがチューリング完全である場合、悪意のある当事者に複雑なトランザクションを作成し、ビットコインネットワークのハッシュレートを使い果たし、システム全体の速度を低下させる自由を与えていたでしょう。.

逆ポーランド記法

逆ポーランド記法は、演算子がオペランドに従うシステムです。.

意味:

  • 3 +4は34と表示されます+.
  • したがって、より長く複雑な合計の場合:
  • 5 * 3 +4は534 + *として表示されます.

スタックベース

スタックは、世の中で最も人気のあるデータ構造の1つです。. ウィキブックスによると, それらは、実際の物理的なスタックまたはパイルによって表される線形構造、つまりスタックの最上部と呼ばれる一端でアイテムの挿入と削除が行われる構造と論理的に考えることができます。.

スタックの基本的な考え方は、LIFOまたは後入れ先出しです。次の本の山を考えてみましょう。

最高のビットコインスクリプトガイド

このスタックに置かれた最初の本は何でしたか?一匹オオカミ & カブでしょ?最後の本は何でしたか?月の庭園.

このスタックから本を取り出すとしたら、ローンウルフ & カブは最初に取り出す本ではなく、Gardens of theMoonが最初に取り出す本になります.

したがって、後入れ先出し.

このスタックパイルに載った最後の本が最初に取り出される本になります.

ここで、知っておく必要のある2つのスタック操作があります。

  • 押す.
  • ポップ.

押す:スタックに物を追加する行為はプッシュと呼ばれます.

ポップ:スタックから物を取り除く行為は、ポップと呼ばれます。前に述べたように、スタックにプッシュされた最後のアイテムが最初にポップアウトされます.

最高のビットコインスクリプトガイド

画像クレジット:ウィキメディア

Forth-Like

これはかなり簡単です。ビットコインスクリプトはたまたまスタックベースのプログラミング言語「Forth」に似ています.

これで、少なくともスクリプトとは何かがわかったので、トランザクションがどのように機能するかを理解しましょう.

ビットコインでの取引はどのように機能しますか?

先に進む前に、ドナルドJパターソン教授と彼のYoutubeチャンネル「djp3」に説明を求めて大声で叫ぶ.

アリスが特定の数のビットコインをボブに送信したいとします。ビットコインのトランザクションシステムはどのように機能しますか?ビットコイン取引はフィアットウォレット取引とは大きく異なります。アリスがボブに2ドルを与えるとしたら、彼女は財布から物理的に2ドルを取り、それをボブに渡します。ただし、ビットコインではそのようには機能しません。あなたは物理的にビットコインを所有していません、あなたが持っているのはあなたがビットコインを持っているという証拠です.

知っておく必要のあることがさらに2つあります。

  • 鉱夫は、ブロックした鉱山内にデータを配置することにより、トランザクションを検証します。このサービスを提供する見返りに、彼らは取引手数料を請求します.

  • FIAT通貨に関しては、特定のメモをどこからどのように入手したかを実際に追跡することはできません。例えば。今すぐ財布を開けて、その中のすべてのメモとコインを取り出してください。特定の紙幣や硬貨をどこから正確に入手したかわかりますか?そうしない可能性があります。ただし、ビットコインでは、すべてのビットコイントランザクションの履歴が記録されます.

では、アリスとボブの間でビットコイン取引がどのように行われるかを詳しく見ていきましょう。トランザクションには、入力と出力の2つの側面があります。このトランザクション全体には、最終的に理解できる名前が付けられます。とりあえず、ダイナミクスを見てみましょう.

トランザクション入力

このトランザクションを実行するには、アリスは以前のさまざまなトランザクションから受け取ったビットコインを取得する必要があります。前に言ったように、ビットコインでは、すべてのコインがトランザクション履歴を介して会計処理されることを忘れないでください.

したがって、アリスがTX(0)、TX(1)、TX(2)という名前の次のトランザクションからビットコインをプルする必要があるとします。これらの3つのトランザクションが合計され、TX(Input)と呼ばれる入力トランザクションが得られます。.

概略的には、次のようになります。

最高のビットコインスクリプトガイド

それで、入力側からです。出力側がどのようになるかを確認しましょう。.

トランザクション出力

出力には基本的に、ボブが所有するビットコインの数、トランザクション後、残りの変更が含まれ、それがアリスに返送されます。この変更は、将来のすべてのトランザクションの入力値になります.

出力側の図解は次のようになります。

最高のビットコインスクリプトガイド

さて、これは(CHANGEを除いて)出力が1つしかない非常に単純なトランザクションであり、複数の出力で可能なトランザクションがあります。.

これは、トランザクションの基本的なレイアウトがどのように見えるかです。ただし、このすべてを実行するには、特定の条件を満たす必要があります.

取引条件

  • TX(入力) > TX(出力)。入力トランザクションは、常に出力トランザクションよりも大きくする必要があります。どのトランザクションでも、入力と出力の間の不足(出力+変更)は、鉱夫が徴収するトランザクション料金です。そう:

    取引手数料= TX(入力)–(TX(出力)+変更).

  • 入力側:

    TX(0)+ TX(1)+ TX(2)= TX(入力).

    アリスが取引を実行するために必要な資金を持っていない場合、鉱山労働者は単に取引を拒否します.

  • ボブは、ビットコインを取得するために必要な証拠を提供できることを示さなければなりません。アリスはボブのパブリックアドレスでトランザクションをロックします。トランザクションのロックを解除し、料金にアクセスするには、秘密鍵を作成する必要があります.

  • アリスはまた、そもそもビットコインを送信するために必要な権利を持っていることを確認する必要があります。彼女がそれを行う方法は、彼女のデジタル署名(別名彼女の秘密鍵)でトランザクションを承認することです。誰でも彼女の公開鍵を使用してこれをデコードし、データを送信したのが実際にアリスであることを確認できます。この証明は「署名データ」と呼ばれます。これは後で非常に重要になるため、これを覚えておいてください.

したがって、このトランザクション全体の名前は何になりますか?

入力(署名データを含む)と出力データは一緒に追加され、SHA256ハッシュアルゴリズムを使用してハッシュされます。出力ハッシュは、このトランザクションに付けられた名前です.

それでは、舞台裏を見て、トランザクションが実際にどのように見えるかを見てみましょう。.

ビットコインスクリプトトランザクション:舞台裏

これは、コード形式でのトランザクションの外観です。.

アリスが0.0015BTCをボブに送信したいとします。そのために、彼女は0.0015770BTCに相当する入力を送信します。トランザクションの詳細は次のようになります。

最高のビットコインスクリプトガイド

画像提供:djp3youtubeチャンネル.

表示される最初の行:

最高のビットコインスクリプトガイド

トランザクションの名前は、入力値と出力値のハッシュとも呼ばれます.

Vin_szは、アリスが以前のトランザクションの1つだけを使用してデータを送信しているため、入力データの数です。これは1です。.

出力はBobと変更のみであるため、Vout_szは2です。.

これは入力データです:

最高のビットコインスクリプトガイド

入力データを見ますか?アリスは1つの入力トランザクションのみを使用しています(上記の例では、これはTX(0)になります)。これがvin_szが1であった理由です。.

入力データの下には、彼女の署名データがあります.

これらすべての下には、出力データがあります。

最高のビットコインスクリプトガイド

データの最初の部分は、ボブが0.0015BTCを取得していることを示しています.

2番目の部分は、0.00005120BTCがアリスが変更として取り戻しているものであることを示しています.

さて、入力データが0.0015770 BTCだったことを覚えていますか?これは(0.0015 + 0.00005120)より大きいです。これら2つの値の不足は、鉱山労働者が徴収している取引手数料です。.

トランザクション出力の詳細

上で見たように、トランザクションのすべての入力は出力に変わり、これらの出力の一部は使用されますが、一部は未使用で変更になります。この変更は、UTXOまたは未使用のトランザクション出力とも呼ばれます。 UTXOは、今後のトランザクションで入力になります.

すべてのトランザクション出力は、次の2つの部分で構成されます。

  • その出力の値.

  • ロックスクリプト、または監視スクリプトまたはscriptPubKeyのいずれかを呼び出した暗号パズル。お金を使うには、パズルのロックを解除する必要があります。このパズルはビットコインスクリプト言語を使用してコーディングされています.

それでは、トランザクションの出力を調べて、トランザクション内の上記の部分を特定しましょう。アンドレアスM.アントノプロスから取得したコード。 「ビットコインをマスターする。」

「vout":[

{{

"値":0.01500000,

"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"

},

{{

"値":0.08450000,

"scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",

}

]

了解しました。上記のコードには2つの出力があります。.

一方の出力の値は0.015BTCで、もう一方の出力の値は0.0845BTCです。 0.015の値のロックを解除するには、ロックを解除する必要があるロックスクリプトは次のようになります。

「scriptPubKey」:「OP_DUPOP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFYOP_CHECKSIG」

トランザクション入力をさらに詳しく見る

それでは、コインの反対側であるトランザクション入力を見てみましょう。.

入力を行うために、ユーザーのウォレットはUTXOを通過し、トランザクションが通過するのに十分な価値があるものを選択します.

例えば。アリスが0.15BTCをボブに送信したい場合、ここでUTXOセットは次のようになります。

  • UTXO A = 0.09 BTC
  • UTXO B = 0.2 BTC
  • UTXO C = 0.005 BTC

このトランザクションではどのUTXOが選択されますか?それは正しいです。AとBが選択され、残ったものはすべて、アリスの次のトランザクションのUTXOになります。.

それでは、入力コードを見てみましょう。.

「ヴィン":[

{{

"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",

"vout":0,

"scriptSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 [ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",

"シーケンス":4294967295

}

]

入力スクリプトの各部分に含まれるものを見てみましょう。

  • txid: トランザクションIDは、このUTXOが生成されたトランザクションを参照します。これは、トランザクションを追跡するのに役立ちます

  • vout:これは、そのトランザクションからのどの出力が使用されているかを示します。例えば。そのトランザクションに2つのUTXOがある場合、最初のUTXOには0のラベルが付けられ(前に見たように、カウントは1ではなく0から開始されるため)、2番目のトランザクションには1のラベルが付けられます。この場合、最初のUTXOieUTXOを使用しています。 0.

  • scriptSig:前述したように、各UTXOにはロックスクリプトが含まれています。 scriptSigには、データのロックを解除するために必要なデータが含まれています.

  • シーケンス:ブロックで確認および確定される前にトランザクションを更新できるようにするために含まれていますが、基本を理解するのにそれほど関連性はありません.

トランザクションのシリアル化

それでは、これをまとめて、私たちが何を持っているかを見てみましょう。トランザクションがネットワークを介して中継されると、シリアル化されます。アンドレアス・アントノプロスが言うように,

「シリアル化は、データ構造の内部表現を、一度に1バイトずつ送信できる形式(バイトストリームとも呼ばれる)に変換するプロセスです。」

前の2つのセクションでは、単純な1つの入力トランザクションと1つの出力トランザクションを見ました。シリアル化して16進形式で保存するとしたら、どのようになりますか。?

0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd73 4d2804fe65fa35779000000008b483045022100884d142d86652a3f47 ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039 ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 01410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade84 16ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc1 7b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab6 8025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef800000000000 1976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000

ええ、この作者はここで誤ってキーボードに頭をぶつけたわけではありません…それが実際の様子です.

ただし、怖がらないでください。すぐに理解できるでしょう。その16進ストリームのどこかに、入力データと出力データがあります。両方を見つけましょう!

出力のシリアル化

トランザクションの出力部分のシリアル化には、次の部分が含まれます。

最高のビットコインスクリプトガイド

画像クレジット:AndreasAntonopoulos「MasteringBitcoin」

さて、出力に関するどのデータが実際にわかっていますか?

  • 2つの出力値があります.

  • 1つの出力値は0.015BTCまたは1,500,000サトシの価値があります

  • 16進数では1,500,000は16e3 60であり、リトルエンディアンでコーディングすると、最下位バイトの最初の表記で60 e316になります。.

  • scriptPubKeyの長さは25バイトで、16進数で19です。.

したがって、これらの情報に注意して、出力データを検索してみましょう。.

0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd73 4d2804fe65fa35779000000008b483045022100884d142d86652a3f47 ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039 ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 01410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade84 16ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc1 7b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab6 8025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef800000000000 1976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000

入力シリアル化

入力シリアル化には、次のコンポーネントが含まれています。

最高のビットコインスクリプトガイド

今、あなたは彼女のトランザクションの入力を見つけることができます?

0100000001186f9f998a5aa6f048e51dd8419a14d8a0f1a8a2836dd73 4d2804fe65fa35779000000008b483045022100884d142d86652a3f47 ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039 ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813 01410484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade84 16ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc1 7b4a10fa336a8d752adfffffffff0260e31600000000001976a914ab6 8025513c3dbd2f7b92a94e0581f5d50f654e788acd0ef800000000000 1976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac 00000000

さて、これまでに何を見てきましたか?

  • トランザクションとUTXOの出力.
  • トランザクションの入力.
  • トランザクション全体がどのようにシリアル化されているか.

これで、UTXOはロックが解除されている場合にのみ使用できることがわかりました。入力値には、ロックを解除するのに役立つscriptSigがあることがわかっています。それらはどのように相互作用しますか?

ただし、その前に、ビットコインスクリプトで計算と操作がどのように行われるかを理解しておく必要があります。.

スクリプトはどのように機能しますか?

スクリプトを続行する前に、スタックベースの逆ポーランドシステムがどのように機能するかを理解しておくと役に立ちます。.

スタックベースの逆研磨システムでの簡単な追加

逆ポーランド記法の3+ 4は34+のように見える前に言ったように、スタックを使用して加算操作を実行しましょう.

最高のビットコインスクリプトガイド

これが、スタックで簡単な加算操作が行われる方法です。これが完了したので、スクリプトの場合はどのようになりますか?

OP_3 OP_4 OP_ADD

外観が変わるだけで、残りの操作は上記と同じです。 「OP_」プレフィックスはスクリプト言語の署名です.

スクリプトで使用されるさまざまなオペコードの入門書が必要な場合 次に、ここをクリックしてください.

チェック付きのビットコインスクリプトを使用した簡単な加算

ここで、2 + 3 = 5を実行するとします。.

逆ポーランド記法では、23 + 5 =のようになります。.

スクリプト表記では、次のようになります。

OP_2 OP_3 OP_ADD OP_5 OP_EQUAL

最高のビットコインスクリプトガイド 最高のビットコインスクリプトガイド

さて、EQUALで接尾辞VERIFYを使用した場合はどうなるでしょうか?つまり、OP_EQUALの代わりにOP_EQUALVERIFYを使用しました?

VERIFYサフィックスを追加した瞬間、TRUEまたはFALSEはスタックにプッシュされず、代わりにスクリプトがプッシュされます。 続く TRUEまたはそれの場合に実行 止まる FALSEの場合に実行.

これは、オペコードに「VERIFY」を追加すると発生します。今後の例のためにこれを覚えておいてください.

さて、最後の例を見てみましょう.

スクリプトでの単純な複製

この例では、非常に重要なオペコード、DUP、別名複製を紹介します。.

ある番号をスタックにプッシュして複製し、2つの番号が同じかどうかを確認します(明らかにそうなります)。.

このスクリプトを使用します。

OP_5 OP_DUP OP_EQUALVERIFY

最高のビットコインスクリプトガイド

さて、ビットコインスクリプトで計算がどのように処理されるかがわかったので、トランザクションを続行して、どのように実行されるかを見てみましょう。.

ロックとロック解除のゲーム

ビットコインでのトランザクションは、ロックとロック解除の絶え間ないゲームです。トランザクションの入力にscriptSigが含まれている間、UTXOはscriptPubKeyによってロックされます。 scriptPubKeyのアイデアは、対応するscriptSigを介してのみロックを解除できる暗号パズルを提供することです。.

だから、正確に何が起こり、このゲームはどのようにプレイされますか?

アリスがボブにビットコインを送りたいとしましょう。ボブのパブリックアドレスは常識であり、彼女は条件とともにビットコインをボブのパブリックアドレスに送信します。ボブは、ビットコインを取得しているのが実際に彼であることを証明する必要があります.

それでは、少し戻って、いくつかの基本的な概念をもう一度見てみましょう。.

ビットコインの誰もが2つの鍵を持っています:

公開鍵は秘密鍵から暗号的に導出されます.

さて、彼らに送金するためには、誰もがパブリックアドレスを持っている必要があります。パブリックは、SHA-256とRIPEMD-160の2つのハッシュアルゴリズムを介して実行されます。これを行う理由は、誰かが公開鍵を使用して秘密鍵を生成する方法を何らかの方法で理解した場合に備えて、保護の追加レイヤーがあることを確認するためです(これは実行不可能です).

注意: 公開鍵は最初にSHA-256を通過して256ビットの出力ハッシュを生成し、次にそのハッシュがRIPEMD-160を通過して160ビットの出力ハッシュを生成します。したがって、最終的な出力は160ビットのハッシュです。.

了解しました。アリスは、ボブが証拠を提示する必要があるという条件とともに、ボブのパブリックアドレスに送金します。これは、実際にお金を受け取ったのは彼です。.

ボブが資金のロックを解除するために使用する証拠は、彼の秘密鍵から暗号的に導出された彼のデジタル署名です。.

アリスがボブをロックされたチェストとして送信し、ボブの署名をパスコードとして送信するトランザクションについて考えてみてください。.

さて、スクリプトに戻りましょう.

アリスは、ボブのアドレスを含むscriptPubKeyを含む出力をボブに送信します.

ボブは、署名と公開鍵を含むscriptSigの署名を使用して入力のロックを解除します.

では、これをコードでどのように表現するのでしょうか?

scriptPubKey = OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG.

注意: OP_HASH160とOP_CHECKSIGがどのように機能するかはすぐに明らかになります.

scriptSig =

出力のロックを解除して資金を使用するために、ボブは次のようにscriptSigとscriptPubKeyを連結または結合します。

最高のビットコインスクリプトガイド

画像クレジット: CryptoCompare

では、スクリプトがどのように機能して、貧しいボブに自分の資金へのアクセスを許可するかを見てみましょう。現在のスクリプトは次のようになっています。

OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG.

ロック解除/検証プロセスのスクリプト実装

では、検証/ロック解除プロセス全体のスクリプト実装がどのように機能するかを見てみましょう。.

現在、コードは次のようになっています

最高のビットコインスクリプトガイド最高のビットコインスクリプトガイド

最高のビットコインスクリプトガイド

OP_CHECKSIGが飛び出し、有効性を確認して、有効な署名とパブリックアドレスであることを確認します。.

このプロセス全体が完了すると、ボブはトランザクションのロックを解除して自分の資金にアクセスできるようになります.

おめでとう!あなたはビットコイン取引全体を通過しました!

ここに表示されているのは、最も一般的なタイプのビットコイン取引です。 P2PKH別名公開鍵ハッシュへの支払い.

では、この不思議なCHECKSIG演算子とは何で、どのように機能するのでしょうか。そのためには、ビットコインの背後にある暗号化を調べる必要があります.

CHECKSIGはどのように機能しますか?

CHECKSIGがどのように機能するかを知るためには、デジタル署名とは何かを知る必要があります。デジタル署名は、電子的に送信されたドキュメントに添付され、その内容と送信者のIDを確認するデジタルコード(公開鍵暗号化によって生成および認証されたもの)です。.

ビットコインで使用されるデジタル署名アルゴリズムは、ECDSAまたは楕円曲線デジタル署名アルゴリズムです。.

楕円曲線暗号 ビットコイン、イーサリアムなどが暗号化の目的で使用するものです。では、楕円曲線とは何ですか?楕円曲線は、次の方程式を満たす任意の曲線です。

Y ^ 2 = x ^ 3 + ax + b

ここで、(x、y)は曲線上の点であり、aとbは定数です。.

あなたが作ることができる無限の曲線があります。一般に、これらの曲線の1つは次のようになります。

最高のビットコインガイド

画像クレジット:CSBreakdownyoutubeチャンネル

楕円曲線の特性は何ですか?

  • 曲線はx軸全体で対称です.
  • 曲線上の2点を通る線は、3番目の点で曲線と交差します。.
  • 曲線上の接線は、もう1つの点で曲線と交差します.

曲線上で数学を実行する.

曲線の加法性

曲線VとAに2つの点があるとします。曲線上のそれらをトレースして、それらに線を引きます。これは3番目の点で曲線と交差します.

最高のビットコインスクリプトガイド

画像クレジット:CSBreakdownyoutubeチャンネル

この3番目の点をXと呼び、次のように曲線に反映します。

最高のビットコインスクリプトガイド

画像クレジット:CSBreakdownyoutubeチャンネル

Xの反射は、偶然に(V + A)になる点です。これは楕円曲線の加法性です.

興味深いメモ。上のグラフでXとV + Aを追加する場合、2つの反射を互いに追加すると、無限大になります。その理由は、Xと(V + A)を通る線が無限大で曲線と交差するためです。.

曲線の乗法の性質

では、それ自体に数値を追加したい場合はどうでしょうか。点Vがあるとすると、2Vを見つけるにはどうすればよいでしょうか。 Vに接線を走らせ、グラフ内の点で交差させてから、曲線上の点の反射を見つけます。その反射は2Vになります.

最高のビットコインスクリプトガイド

画像クレジット:CSBreakdownyoutubeチャンネル

これは、基本的に整数と点自体の乗算である点を見つけているため、グラフの乗法特性でもあります。ここで、3Vを見つけたいとします。 Vと2Vを結合してから、次のように交点を反映します。

最高のビットコインスクリプトガイド

画像クレジット:CSBreakdownyoutubeチャンネル

ポイントがグラフ全体でどのように循環するかわかりますか?これがセキュリティを提供するものです.

楕円曲線の数学的特性

プロパティ#1:曲線上の点はアーベル群を形成します

アーベル群の特性は次のとおりです。

  • 彼らはアイデンティティを持っています.
  • それらは逆、別名反射を持っています.
  • ポイントは、曲線上の3つのポイントA、B、およびCの結合法則です:(A + B)+ C = A +(B + C).
  • ポイントはカーブ上で閉じています.
  • ポイントは、2つのポイントAとBの可換意味です。A+ B = B + A.

プロパティ#2:曲線上の乗算は高速です

曲線上で行われるすべての乗算は、非常に高速に行うことができます。ここで、点Pがあり、100Pを見つけたいとします。数値を100回追加する代わりに、次の操作を実行できます。

  • ポイントPをそれ自体に追加して、2Pを取得します.
  • 2PとPを追加して3Pを取得します.
  • 6Pを取得するには、それ自体に3Pを追加します.
  • 6Pをそれ自体に追加して12Pを取得します.
  • それ自体に12Pを追加して、24Pを取得します.
  • 24PとPを追加して25Pを取得します.
  • それ自体に25Pを追加して、50Pを取得します.
  • それ自体に50Pを追加して、100Pを取得します.

したがって、99ステップを実行する代わりに、全体を8ステップに短縮します。.

プロパティ#3:曲線上の分割が遅い

乗算は高速ですが、除算は非常に低速です。 Q = nPであり、QをPで割ってnの値を見つけたいとします。実際にはそれはできません。方程式を満たす値を見つけるには、数値を1つずつ手動で調べる必要があります。これにより、非常に遅くなります。これは離散対数問題と呼ばれ、これが曲線にトラップドア関数を与えるものです。つまり、nとPを乗算してQを取得するのは簡単ですが、QとPが与えられると、nを取得することは不可能です。.

では、署名検証は楕円曲線でどのように機能しますか?

(注:これはビットコインで具体的に起こることです)

プロセスがどのように機能するかを確認する前に、次の方程式で使用する特定の変数とその意味を確認しましょう。.

秘密鍵= d.

メッセージ= z.

公開鍵= Q.

Gは、ビットコインによって提供されるグラフ上の定数ポイントになります.

「k」は、一意の署名ごとに自動的に生成される乱数です。.

「n」はビットコインによって提供される別の定数です.

では、検証の背後にある計算がどのように機能するかを見てみましょう。.

メッセージに署名する

公開鍵Q = dG。 (分割が不可能なため、QとGから秘密鍵を取得することはできません).

ここで、Gに乱数「k」を掛けて、その点をグラフにプロットします。その点の座標は(x、y)です。つまり、(x、y)= kG

次に、次のような2つの値rとsを決定します。

r = x mod n.

s =(z + rd)k ^ -1 mod n

rとsを生成する理由は、これらが署名の座標であるためです。.

そこで、検証のためにポイント(r、s)を送信します.

メッセージの確認

検証者は簡単な方程式を実行します。

z * s ^ -1 * G + r * s ^ -1 * Q

この方程式の値は、点(x、y)を与えます。.

これで、検証者はx座標を簡単に比較できます。送信者から直接与えられたx座標はありませんが、rとnの値はあります。.

そして、r = x mod nであることがすでにわかっているので、xを簡単に解くことができます。.

xの値が一致する場合、これは署名が検証されたことを意味します!

ボーナス:数学の詳細

検証者がもう一度実行する必要がある方程式を確認してみましょう。

ステップ1:z * s ^ -1 * G + r * s ^ -1 * Q

Q = d * Gであることがわかっているので、値を単純に代入してみましょう.

ステップ2:z * s ^ -1 * g + r * s ^ -1 * d * G

(z + r * d)共通を取ることができます

ステップ3:(z + r * d)* s ^ -1 * G

ここで、s =(z + r * d)* k ^ -1 mod nであることをすでに確立していることを思い出してください。ここで、値を代入しましょう。

ステップ4: (z + r * d)*(z + r * d)^-1 * k * G

(z + r * d)*(z + r * d)^-1は互いに打ち消し合い、次のようになります。

ステップ5:送信者が最初に送信した座標(x、y)であるk * G.

楕円曲線で何がうまくいかない可能性があるか?

楕円曲線が暗号化の最良のモードであることは言うまでもありませんが、それでも脆弱性はほとんどありません。

  • 間違った曲線が選択された場合はどうなりますか?曲線にループがある場合、曲線上の任意の点Pに対して1001P = Pである可能性があります。.

  • に割り込むことができる弱い曲線を選択することができます.

それには弱点がありますが、かなり扱いやすい弱点です.

パート1の終わり

ここで、ビットコインスクリプトガイドのパート1を終了します。パート2では、以下について説明します。

  • マルチシグニチャトランザクション.
  • スクリプトハッシュに支払う.
  • フロー制御.
  • タイムロック.

次のパートにご期待ください!

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me