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

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

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

——ジャン=ポール・サルトル、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で最も影響力のある人物

推薦する

韓国警察、安価な電気を違法に使用したとしてビットコイン採掘者14人を逮捕

聯合ニュースによると、韓国警察は最近、安価な電気を違法に使用したとして13社の鉱山労働者14人を逮捕...

エルサルバドル政府は国内にビットコインATM200台を設置する計画

エルサルバドル政府は、国内にビットコインATMを200台設置し、デジタル通貨ウォレットChivoに接...

ビットコインのフォークと未来

数ヶ月後、再びビットコインに関する記事を書きましたが、私の気分は完全に変わっています。今年の初めには...

流動性マイニングの詳細な説明:富への道か、それともDeFiの間違った道か

出典: Odaily Planet Daily (ID: o-daily) 8月6日の午後、Odai...

ビットコインコア開発者のウラジミールは円卓会議の合意に全面的に同意する

Bitcoin Coreの主任開発者であるウラジミール・ファン・デル・ラーン氏は、電子メールでCo...

中国のビットコイン取引所はすべて閉鎖され、ビットコイン規制はまだ長い道のりを歩んでいる

10月も終わりに近づき、規制当局の要請に従い、この日をもって国内のビットコイン取引は全ての仮想通貨取...

KPMG、マイクロソフトと提携してブロックチェーン対応ツールキットを開発

世界的な監査法人KPMGは昨日、銀行やその他の金融サービス企業が規制に準拠した方法でブロックチェーン...

ジュビビッグデータ:2015年国内仮想通貨市場概況

編集者は、過去6か月間のほとんどのJuBiプラットフォームのデータを基に、国内の競争コイン市場に関す...

金融機関の70%がブロックチェーン技術に楽観的

宝蔵時報のコメント:調査によると、金融機関の70%がこの革​​新的な技術がビジネスの発展に有益である...

ASICBoost 特許ゲートとビットコインパッケージマイニング原理の技術的説明

序文:最近の「ASICBoost 特許ゲート」事件は、暗号通貨界全体にセンセーションを巻き起こし、ビ...

ビットコインの価値: 子供たちに金銭的責任を教える

父親として、私は子供たちにお金とは何か、そしてそれを賢く使う方法を教えたいと思っています。父は私に、...

エネルギーを大量に消費するビットコイン採掘は内モンゴルからカザフスタンやアメリカへ移行するのでしょうか?

仮想通貨のマイニングは内モンゴルから完全に移転される可能性がある。マイニングファームとマイニングマシ...

L2 スケーリングが Eth2.0 統合よりも重要な理由

L2 は、今後 12 ~ 24 か月間の Ethereum スケーリングにおいて最も重要な部分になる...