Technical background of version 1 Bitcoin addresses

提供: tezos-wiki
移動先: 案内検索

thumb | right | ECDSA公開鍵からBitcoinアドレスへの変換 この記事は、一部のユーザーにとっては技術的すぎるかもしれません。 Bitcoin Addressesに関するより基本的な記事がより適切かもしれません。

Bitcoinアドレスは、公開/非公開 ECDSA鍵ペアの公開部分の160ビットのハッシュです。 公開鍵暗号を使用すると、秘密鍵でデータに署名することができ、公開鍵を知っている誰でも署名が有効であることを確認できます。

新しいキーペアが各受信アドレスに対して生成されます(新しい HDウォレット、確定的に行われます)。 公開鍵とそれに関連する秘密鍵(または生成に必要なシード)は、walletデータファイルに格納されます。 これは、ユーザーがバックアップに必要な唯一のファイルです。 特定のBitcoinアドレスへの「送信」トランザクションでは、対応するWalletがそれを実装する秘密鍵を認識する必要があります。 これは、アドレスを作成してそのアドレスにコインを受け取り、アドレスが生成される前に以前のバックアップからウォレットを復元すると、そのアドレスで受信したコインが失われることを意味します。これは、すべてのアドレスが1つのシードから生成されるHDウォレットでは問題になりません。 コインを受け取る前に住所キープールに住所が追加されます。あなたが財布を完全に失うと、あなたのコインの全てが失われ、元に戻すことはできません。

Bitcoinでは、必要な数のアドレスを作成し、すべてのトランザクションに新しいアドレスを使用することができます。 「マスターアドレス」はありません。一部のウォレットUIの「あなたのBitcoinアドレス」領域には特別な重要性はありません。 あなたの便宜のためだけにあり、使用すると自動的に変更されるはずです。

Bitcoinアドレスには組み込みのチェックコードが含まれているため、Bitcoinsを誤ったアドレスに送信することは一般的に不可能です。しかし、住所が整形式であるにもかかわらずそれを所有していない(または所有者がwallet.datを紛失した)場合、その住所に送られたコインは永遠に失われます。

ハッシュ値とチェックサムデータは、カスタムスキームBase58Check encodingスキームを使用して英数字表現に変換されます。 Base58Checkで、アドレスには、0、O、I、およびlを除くすべての英数字を含めることができます。通常のアドレスは現在1から始まります(スクリプトハッシュのアドレスは3を使用します)。これは将来のバージョンで変更される可能性があります。テストネットアドレスは、通常、 m または n で始まります。メインラインアドレスの長さは25〜34文字、testnetアドレスの長さは26〜34文字です。ほとんどのアドレスは33文字または34文字です。

衝突(その欠如)[編集]

Bitcoinアドレスは基本的に乱数であるため、2人で独立して同じアドレスを生成することはほとんどありませんが、可能です。これは collisionと呼ばれます。この場合、アドレスの元の所有者と衝突している所有者の両方が、その住所に送付された金額を費やす可能性があります。衝突した人が元のオーナーのウォレット全体を使うことはできません(またはその逆)。故意に衝突させようとすると、ブロックを生成するよりも衝突するBitcoinアドレスを生成するのに現在2〜107倍かかるでしょう。署名とハッシュアルゴリズムが暗号的に強力である限り、[[https://]などのプロジェクトで示されているように、世代と取引手数料を収集する方が、 lbc.cryptoguru.org/ Large Bitcoin Collider]を使用してアドレス衝突を発生させます。

地球が次の5秒で破壊される可能性は、衝突が次の千年に起こるよりもそうです。

Bitcoinアドレスの作成方法[編集]

0 - プライベートECDSAキーを持つ     18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725 1 - 生成された対応する公開鍵を取得する(65バイト、1バイト0x04、X座標に対応する32バイト、Y座標に対応する32バイト)     0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6 2 - 公開鍵に対してSHA-256ハッシュを実行する     600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408 3 - SHA-256の結果に対してRIPEMD-160ハッシュを実行する     010966776006953D5567439E5E39F86A0D273BEE 4 - RIPEMD-160ハッシュの前にバージョンバイトを追加する(メインネットワークの場合は0x00)     00010966776006953D5567439E5E39F86A0D273BEE (以下の手順は、Base58Check encodingであり、複数のライブラリオプションが実装可能です)
5 - 拡張RIPEMD-160結果にSHA-256ハッシュを実行する     445C7A8007A93D8733188288BB320A8FE2DEBD2AE1B47F0F50BC10BAE845C094 6 - 以前のSHA-256ハッシュの結果にSHA-256ハッシュを実行する     D61967F63C7DD183914A4AE452C9F6AD5D462CE3D277798075B107615C1A8A30 7 - 2番目のSHA-256ハッシュの最初の4バイトを取得します。これはアドレスチェックサムです     D61967F6 8 - ステージ4からの拡張RIPEMD-160ハッシュの最後にステージ7から4つのチェックサムバイトを追加します。これは25バイトのバイナリBitcoinアドレスです。     00010966776006953D5567439E5E39F86A0D273BEED61967F6 9 - Base58Check encodingを使用してバイト文字列の結果をbase58文字列に変換します。これは、最も一般的に使用されるBitcoinアドレス形式です     16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM

関連項目[編集]

Category:技術