クレイグ・ライトがビットコインの鍵検証プロセスを明らかに

クレイグ・ライトがビットコインの鍵検証プロセスを明らかに

「ジャン=ポール・サルトルと契約することは、ノーベル賞受賞者のジャン=ポール・サルトルと契約することとは意味が異なります。

——ジャン=ポール・サルトル、1964年

何年も前にこの文章を読んだのを覚えていますが、それ以来ずっと不快な気持ちになっています。しかし、何年も経って、この数年間の浮き沈みを経験した後、私はこの文章を思い出すと安らぎを感じます。クレイグ・ライトの署名を使用することは、クレイグ・ライトまたはサトシ・ナカモトを使用して署名することとは意味が異なります。

これが真実だとは分かっていますが、心の底ではこうなってほしくないのです。

IFdyaWdodCwgaXQgaXMgbm90IHRoZSBzYW1lIGFzIGlmIEkgc2lnbiBDcmFpZyBXcmlnaHQsIFNh

dG9zaGkuCgo=

何時間も画面を見つめていましたが、ビットコインを最初からサポートしてくれた多くの人々に対する感謝の気持ちを表現する言葉がまだ見つかりません。一人一人挙げるには多すぎるほどです。あなたは、何の成果も得られないかもしれないこのオープンソース プロジェクトに、若さと実績を捧げ、長年にわたり人間関係や休息時間を犠牲にし、今もなお懸命に取り組んでいます。このコミュニティの情熱、知恵、そして忍耐が、私の貢献を引き継ぎ、育み、受け入れ、そして実現させてきました。あなたはこの世界に素晴らしい贈り物をもたらしました。そのことに私は深く感謝しています。

心配しないでください。私は長年何もしていなかったわけではありません。それ以来、私はサトシのイメージから距離を置き、研究に全力を注いできました。私は沈黙を守りましたが、ビットコインのイベントを見逃すことはありませんでした。私は特別なグループと協力し、適切な時期に結果を共有できることを楽しみにしています。

サトシ・ナカモトは死んだ。

しかし、これはほんの始まりに過ぎません。

キー検証

この投稿の残りの部分では、キー検証プロセスについて説明します。

OpenSSL で正しい楕円曲線パラメータを使用してメッセージに正常に署名および検証できるようにするには、まず secp256k1 曲線が正常にロードされていることを確認する必要があります。これは Centos Linux ではデフォルトではありません。ここでは詳細には触れません。 RPMForge はパッチを適用したバイナリを維持していることを指摘しておきます。私のように CentOS を使用している場合は、OpenSSL Web サイトからソースとパッチをダウンロードすることをお勧めします。

読者は以下のウェブサイトを読むことをお勧めします。

• https://wiki.openssl.org/index.php/Command_Line_Elliptic_Curve_Operations

•http://www.secg.org/sec2-v2.pdf

• https://www.openssl.org/

• https://www.bfccomputing.com/bitcoin-and-curve-secp256k1-on-fedora/

最初のステージではハッシュ関数について説明します。下の画像では、「sn7-message.txt」というファイルが表示されています。

上の画像に示されている一連の 16 進数値は、入力値の SHA256 ハッシュを表します。優れたハッシュ アルゴリズムでは、事前に決定できない値の長いリストが生成されます。情報量とすべての可能な順列は、任意のハッシュ関数から出力できるシミュレーションの範囲を常に超えますが、衝突は常に存在します。現在の最先端技術を考えると、同じ出力値との衝突を生成する入力値のセットを見つけることは現実的ではありません。これが、SHA256 などのハッシュ関数の有用性とセキュリティを保証するものです。

SHA256 アルゴリズムによって提供される情報の最大量は (2^128−1) ビットであり、出力値として 32 バイトまたは 256 ビットを返します。 SHA256 ハッシュ関数に入力できる情報量は (2^128−1) です。可能な入力値は、0 から、上記で示したように受け入れ可能な最大範囲までです。

衝突の可能性のある範囲を決定する際には、組み合わせ論を通じて順列を決定する二項係数 ( n ) を使用します。

衝突検出に関係する数学については、後の記事でさらに詳しく説明します。各ハッシュには膨大な数の衝突値がありますが、2 つの衝突値を見つけたり事前に決定したりする確率は極めて小さいことに注意する必要があります。

ハッシュ

ハッシュ関数は比較的単純なので、手作業で実行できます。もちろん、これによりハッシュ関数を逆転させる複雑さがわかりにくくなります。優れたハッシュ関数は使い方が簡単ですが、逆ハッシュするのは簡単ではありません。次の図は、Linux ハッシュ プログラム「sha256sum」の動作を示しています。プログラムは、固定された入力セットに対応する特定の値を返します。

上の図では、いくつかのファイルに対してプログラムを実行しており、そのうちの 1 つは OpenSSL 署名に使用されています。この特別なファイルは Sartre と呼ばれます。文書の内容は以下の通りです。

デジタル署名アルゴリズムはメッセージのハッシュに署名します。情報に署名することも可能ですが、ハッシュに署名することで情報の整合性を確保し、情報が変更されたかどうかを確認できます。スペースまたはピリオドを 1 つでも変更すると、ハッシュは元の戻り値とは大きく異なります。

この値を書き込んでファイルに保存するには、Linux コマンド xxd を使用します。これにより、ASCII 値が 16 進バイナリ ファイルに書き込まれます。次のコマンドを入力すると、「file.name」というファイルに連続した 0 を書き込むことができます。

 '000...000' をエコーし​​ます | xxd -r -p > ファイル名

これを行うには、ハッシュ アルゴリズムからの出力として受信した文字列を 16 進数でエンコードされたファイルに変換します。この情報に署名して検証することができます。上記の echo コマンドに追加した文字列を確認することが重要です。 1 桁でも間違って入力すると、メッセージを認証できません。

公開鍵

デジタル署名されたメッセージを検証するには、次のようないくつかの条件が必要です。

•アルゴリズム

• 検証したい署名者の公開鍵

•署名付きメッセージ

• 文書にデジタル署名する

最初の部分、必要なアルゴリズムは、secp256k1 曲線パッチがマージされた OpenSSL をインストールすることによって取得できます。上記の手順にはハッシュの作成も含まれます。次のセクションでは、ECDSA 公開キーの使用について説明します。

この手順では、OpenSSL の PEM ファイルに保存されている公開鍵と秘密鍵のペアを使用します。 David Derosa は、 OpenSSL の楕円曲線キーペアの作成について説明する素晴らしいページを作成しました。上の画像では、メッセージの署名に使用されるキー ペアと密接に関連する特定の PEM 形式の公開キーを確認できます。 David のページを詳しく読むと、Bitcoin トランザクションで使用される秘密鍵を PEM ファイルとしてフォーマットする方法の詳細がすべてわかります。このページでは、既存の秘密鍵を OpenSSL にインポートする方法ではなく、新しい秘密鍵の作成について詳しく説明します。この追加プロセスを紹介し、楕円曲線暗号に基づく既存の秘密鍵ペアを ASN.1 形式にインポートして OpenSSL で直接使用できるようにする方法を説明します。

公開鍵をエクスポートするコマンドは次のとおりです。

openssl ec -in sn-pub.pem -pubin -text -noout

0411db93e1dcdb8a016b49840f8c53

bc1eb68a382e97b1482ecad7b148a6

909a5cb2e0eaddfb84ccf9744464f8

2e160bfa9b8b64f9d4c03f999b8643

f656b412a3

これらの戻り文字列は、検証とアドレス指定のために Bitcoin 署名機能を含むプログラムによって使用される公開キー値です。

Casascius は、公開鍵をデコードして関連する Bitcoin アドレスを返すのに役立つツールを開発しました。

サイン

OpenSSL を使用してメッセージにデジタル署名するプロセスでは、メッセージに署名する側が秘密鍵にアクセスできる必要があります。最近、私はビットコインアドレスに関連付けられた 10 個の秘密鍵を使用しました。これらはすべて SPV ウォレット Electrum にロードされており、そこでは私が選択した情報ではなく、他の誰かが選択した情報に署名します。場合によっては、Electrum の新しいバージョンをダウンロードすることで、プロセスの整合性を確保しました。

私が使用しているエレクトラムのバージョンはCentos Linux v7で、Pythonで実行しています。

署名検証

最後のステップは署名です。次のコマンドを使用して、base64 署名を OpenSSL に読み込むことができるファイル形式に変換します。

>> base64 – 署名をデコード > sig.asn1 & openssl dgst -verify sn-pub.pem -signature sig.asn1 sn7-message.txt

検証する署名ファイルには、次のデータが含まれています。

————————- 署名ファイル ————————-

MEUCIQDBKn1Uly8m0UyzETObUSL4wYdBfd4ejvtoQfVcNCIK4AIgZmMsXNQWHvo6KDd2Tu6euEl1

3VTC3ihl6XUlhcU+fM4=

————————- 署名終了 ————————–

下の図に示すように、署名ファイルを表示します。ファイルを保存するときに、Vim などの編集プログラムを使用して、エンコードされた署名を切り取って貼り付け、保存したファイルに挿入することができます。

いくつかのスクリプト

プログラムを簡素化するために、 2 つのシェル スクリプト ファイルを含めました。これらのスクリプトのバリエーションについては、Enrico Zimuel などのサイトを参照してください。このサイトは楕円曲線暗号に特化しているわけではありませんが、Bitcoin ベースのシステムで使用するためにコードを更新することは難しくありません。

サイン

以下に署名スクリプトを記載しましたので、ご都合の良いときにテストしてください。このスクリプトを使用するには、入力に変数 <file> を含めます。この変数は、選択した <private_key> を使用して署名するファイルを表すために使用できます。このコマンドでは、<private_key> 変数は、メッセージの署名に使用される秘密キーを含むファイルを表します。

 EcDSA.Sign.sh <ファイル> <秘密鍵>

確認する

次のスクリプトを使用して、同様の手順で作成した署名を検証できます。

 EcDSA.Verify.sh <ファイル> <署名> <公開鍵>

このコマンド ラインでは、変数 <file> は検証するファイルの名前を表します。変数 <signature> は、署名 (Base64 を使用してエンコード) を保存するファイルを表します。最後の変数 <public_key> には、PEM 形式の公開鍵が含まれます。これらのファイルは一緒に使用することができ、すべてが有効かつ正しい場合、デジタル署名を正常に検証できます。

フォーマットを選択

Bitcoin で使用される署名形式は DER エンコーディングに基づいています。元のコードに適用された他の方法は、過去 7 年間で劇的に変化しました。署名やその他の情報に DER エンコーディングを選択したのは、互換性のないシステム間で情報を共有できるようにしたいという要望に基づいています。これは情報を保存する最も効率的な方法ではありませんが、異なるシステム間での効率的な通信が可能になります。

多くのオープンソース プロジェクトと同様に、OpenSSL は多くの領域でドキュメントが不十分です。ビットコインのアドレス指定とキーペアの保存はより効率的に行うことができ、これが実現されるようにコードが更新されました。

安全性は、絶対的なものではなく、常にリスクに応じて変化します。


<<:  OKCoin CEO徐明星氏との独占インタビュー: ブロックチェーン技術は金融分野の「ホットな商品」

>>:  謎に包まれたサトシ・ナカモト:The Paperで最も人気、Caixinで最も人気、そしてInterfaceで最も影響力のある人物

推薦する

Bitmain IPO 目論見書をダウンロード

Bitmain IPO 目論見書は合計 438 ページで、サイズは 290 万です。 Baidu C...

ファイルコインがトークン配布の詳細を発表:70%はマイニング報酬としてマイナーに配布される

Blockbeatsによると、8月28日、分散ストレージプロジェクトFilecoinはトークン経済...

米国の銀行は年末までにビットコイン(BTC)取引サービスを提供予定

詳細を入手したCNBCによると、銀行口座でのビットコイン取引サービスを提供する計画は早ければ2021...

BTC は 10 万ドル付近でわずかに調整していますが、今後のパフォーマンスはどうなるでしょうか?

11月22日、BTCは99,588ドルの高値を記録し、100,000ドルの水準にわずかに手が届くと...

Meme Coin は現在の暗号通貨市場に何をもたらすのでしょうか?

データによると、ネットワークのミームコインスキャンダルが拡大し続け、市場のセンチメントが急落する中、...

米SEC委員長:SECは暗号化を禁止する計画はないが、暗号化を禁止するかどうかは議会次第

米証券取引委員会(SEC)のゲーリー・ゲンスラー委員長は火曜日、SECは仮想通貨を禁止する計画はない...

BitMEXレポート: 金融崩壊はビットコインにとって大きな課題でありチャンスでもある

3月17日、BitMEXの研究部門であるBitMEX Researchは、COVID-19パンデミッ...

データ:ビットコインのネットワーク難易度は20.08兆に上昇、7回連続の増加

データによると、ビットコインネットワークは本日午前4時27分にブロック高705600で難易度調整を開...

IPFSはDT時代の到来に貢献する

データ時代については数年前から議論されてきましたが、データ時代とは何か、その特徴は何かという明確な定...

ハッシュレート市場週報(2020.12.19-2020.12.25)

「来てハッシュし、採掘し、採掘マシンで投機しましょう。 」 BTCハッシュレート市場について要約:...

最初の規制文書はここにあります。 AIGC管理措置に関する意見募集の目的は何ですか?どのような信号が発せられるのでしょうか?

新興産業に対する法整備のペースが加速している。多くの政府がChatGPTのリスクに気付いている中、生...

ビットコインのマイニング難易度調整アルゴリズムを理解する

「ビットコインの設計において、PoWコンセンサスアルゴリズムは非常にエキサイティングな部分です。マイ...

ビットコインのマイナーから取引所への純移転が底を打つ

グラスノードのデータによると、マイナーから取引所への純送金量は7月中旬から下旬にかけて1日あたり10...

アフリカでビットコイン新興企業と従来型決済会社が衝突

CoinDeskによると、ケニア高等裁判所は火曜日、ビットコイン新興企業BitPesaとそのパートナ...