0Pricing
Cryptology Academy · レッスン

Bitcoin ScriptとUTXO署名検証

pay-to-public-key-hash(P2PKH)スクリプトとECDSA署名の流れを追います。

「Bitcoin ScriptとUTXO署名検証」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。

UTXOモデル

Bitcoinは未使用トランザクションアウトプット(UTXO)を使用します。各UTXOはロッキングスクリプト(scriptPubKey)を持つコインです。これを使用するには、支出者がロッキングスクリプトを満たすアンロッキングスクリプト(scriptSig)を提供します。UTXOは不可分であり、使用済みか未使用かのどちらかで、部分的に使用することはできません。

Bitcoin Script

Bitcoin Scriptは、スタックベースでチューリング完全ではない言語です。スクリプトはデータをプッシュし、オペコードを実行することで動作します。ループも再帰もないため、スクリプトは必ず終了します。この意図的な制限により、サービス拒否攻撃を防ぎ、スクリプト長に対する検証の計算量をO(n)にできます。

P2PKH:公開鍵ハッシュへの支払い

最も一般的な出力タイプです。scriptPubKey: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG。scriptSig: 。実行では、sigとpubkeyをプッシュし、pubkeyを複製し、hash160を計算して埋め込まれたハッシュと比較し、ECDSA署名を検証します。すべてに成功すると、コインを使用できます。

P2PKHの実行トレース

P2PKHのスタックトレースは次のとおりです。をプッシュし、をプッシュします。OP_DUP → コピーをプッシュ、OP_HASH160 → スタックの先頭をhash160、をプッシュ、OP_EQUALVERIFY → 2つをポップして、一致しなければ失敗、OP_CHECKSIG → sigとpubKeyをポップしてECDSAを検証し、TRUE/FALSEをプッシュします。TRUEになればスクリプトは成功です。

BitcoinにおけるECDSA

Bitcoinはsecp256k1(Koblitz曲線、y^2 = x^3 + 7 mod p)上でECDSAを使用します。秘密鍵 d ∈ [1, n-1]です。公開鍵は Q = d*G です。Sign(m): kはランダム値、r = (k*G).x mod n、s = k^{-1}(H(m)+r*d) mod n です。署名は (r, s) で、scriptSig内でDERエンコードされます。

SIGHASHの種類

Bitcoinの署名は、トランザクションの特定の部分にコミットします。SIGHASH_ALL(デフォルト):すべての入力と出力に署名します。SIGHASH_SINGLE:対応する出力だけに署名します。SIGHASH_NONE:出力には署名しません(危険です)。SIGHASH_ANYONECANPAY:自分の入力だけに署名し、共同トランザクションを可能にします。

P2SH:スクリプトハッシュへの支払い

P2SHを使うと、複雑な支出条件をハッシュの背後に隠せます。scriptPubKey: OP_HASH160 OP_EQUAL。scriptSig: 。実行では、hash(redeemScript) == scriptHashであることを検証してから、redeemScriptを実行します。支出時まで条件を明らかにせずにマルチシグを実現できます。

マルチシグ(2-of-3)

redeemScript: OP_2 OP_3 OP_CHECKMULTISIG。scriptSig: OP_0 。OP_0は、OP_CHECKMULTISIGがスタック項目を1つ余分にポップするバグを回避するために使用します。2-of-3マルチシグでは、3つの署名のうち任意の2つが必要です。

SegWitとP2WPKH

Segregated Witness(SegWit、BIP-141)は、署名をscriptSigから分離されたwitnessフィールドへ移動します。これにより、scriptSigが変わるとIDも変わるトランザクションの可変性を修正します。P2WPKHのscriptPubKey: OP_0 <20-byte pubKeyHash>。Witness: [ ]。

Taproot(P2TR)

Taproot(BIP-340/341/342)は、Schnorr署名とMerkle化抽象構文木(MAST)を使用します。デフォルトの支出方法は単一のSchnorr署名で、keypath spendと区別できません。複雑な条件はMerkle木に隠され、使用する場合にのみ明らかになります。これにより、プライバシーと効率が向上します。

コードにおけるScriptの検証

Bitcoin Coreは、スタックインタープリターでスクリプトを検証します。CheckSigはVerifyScriptを呼び出し、結合されたscriptSig+scriptPubKeyを実行します。各CHECKSIGオペコードについて、CheckECDSASignatureを呼び出し、secp256k1を使用してトランザクションハッシュに対するDERエンコードされた(r,s)を検証します。

確認問題

P2PKHスクリプトで、OP_CHECKSIGは何を検証しますか?

まとめ

UTXOはスタックベースのBitcoin Scriptを使用します。P2PKHは最も一般的な支出パターンで、公開鍵をハッシュして検証した後、ECDSA署名を確認します。SegWitは可変性を修正し、TaprootはSchnorrとMASTを追加します。次は差分解読です。

よくある質問

「Bitcoin ScriptとUTXO署名検証」レッスンは無料ですか?

はい。「Bitcoin ScriptとUTXO署名検証」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。

「Bitcoin ScriptとUTXO署名検証」で何を学びますか?

pay-to-public-key-hash(P2PKH)スクリプトとECDSA署名の流れを追います。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cryptology Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「Bitcoin ScriptとUTXO署名検証」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCryptology Academyレッスンでコードを書いて実行できますか?

はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ハッシュチェーンとブロック連結
  2. Merkle木:大規模環境でのトランザクション完全性
  3. Proof of Work:マイニングと難易度調整
  4. Bitcoin ScriptとUTXO署名検証
← Cryptology Academyに戻る