Bitcoin アドレスの衝突

12 件のメッセージ BitcoinTalk NewLibertyStandard, サトシ・ナカモト, ec, matt.collier, molecular, Luke490, FreeMoney 2010年2月22日 — 2011年6月9日
NewLibertyStandard 2010年2月22日 18:46 UTC 原文 ·

極めて低い確率ではあるが、2 つのビットコインクライアントが同じビットコインアドレスを生成した場合、どうなるのか?支払いは先にその支払いに遭遇したクライアントに届けられるのか?このような衝突を防止するメカニズムがある場合は、説明してほしい。

ec 2010年2月23日 08:25 UTC 原文 ·

2 つのアドレスが等しくなるには、2 つの同一の秘密鍵/公開楕円曲線(ec 😊)鍵が生成されなければならない。ソースコードを見ずに、128 ビットの鍵空間に対してその確率が 2^(-128)であると仮定しよう。122 ビットの衝突がどの程度起こりうるかの見通しについてはこちらを参照。

しかし、Debian SSL スキャンダルのような事態が起きれば、類似の鍵が実際に生成される可能性がある。個人が既存の鍵を生成してしまった場合の影響は(正しく理解しているなら)、事実上 wallet.dat のコピーを作ることになる。まったく良くないが、P2P ネットワークの全メンバーにとって壊滅的というわけではない。

NewLibertyStandard 2010年2月23日 09:22 UTC 原文 ·

Bitcoin を初回起動したときに生成される秘密鍵のことを言っているのか? もし誰かが他人の鍵を複製することに成功したら、全ブロックをダウンロードした後、元の鍵の所有者と同じ残高を持つことになる。そういうことだよな?

自分が言っていたのはカスタム Bitcoin アドレスのことだ。bitcoin を送ってくる相手の名前でラベルを付けて、誰からの支払いか分かるようにするものだ。これらのアドレスは前述の秘密鍵から生成されると思う。衝突について疑問なのは、非常にユニークではあるが、すべての bitcoin クライアントで簡単に何度でも生成されるからだ。

ec 2010年2月23日 16:17 UTC 原文 ·
NewLibertyStandardの投稿(2010年2月23日 00:22 UTC)

Bitcoin を初回起動したときに生成される秘密鍵のことを言っているのか? もし誰かが他人の鍵を複製することに成功したら、全ブロックをダウンロードした後、元の鍵の所有者と同じ残高を持つことになる。そういうことだよな?

その通りだ。ウォレットを共有することになり、先にお金を使う競争になる。

NewLibertyStandardの投稿(2010年2月23日 00:22 UTC)

自分が言っていたのはカスタム Bitcoin アドレスのことだ。bitcoin を送ってくる相手の名前でラベルを付けて、誰からの支払いか分かるようにするものだ。これらのアドレスは前述の秘密鍵から生成されると思う。衝突について疑問なのは、非常にユニークではあるが、すべての bitcoin クライアントで簡単に何度でも生成されるからだ。

ソースコードを正しく読んでいれば、鍵は常にペアで作られる。つまり、すべてのアドレスには対応する秘密鍵がある。「New Address」をクリックすると、main.cpp の GenerateKey が呼ばれ、新しい鍵ペアが生成される。したがって、重複アドレスは究極的には重複公開鍵を意味する。これは非常に起こりにくい。

鍵は確かに「簡単に生成される」が、衝突が起きるまでには膨大な数の鍵を生成する必要がある。確信はないが、生成される鍵の空間は 256 ビットのようで、UUID に関する Wikipedia 記事で見通しが示された 122 ビットよりもはるかに大きい。123 ビットは 122 ビットの半分の衝突確率であり、124 ビットはさらにその半分、といった具合だ。

すべての Bitcoin アドレスに対して個別の公開鍵/秘密鍵ペアがある。すべてを解錠する単一の秘密鍵はない。Bitcoin アドレスは公開鍵の 160 ビットハッシュであり、システム内の他のすべては 256 ビットだ。

衝突が発生した場合、衝突した者はそのアドレスに送られたお金を使うことができる。そのアドレスに送られたお金だけであり、ウォレット全体ではない。

意図的に衝突を起こそうとした場合、現在では衝突する Bitcoin アドレスを生成するのにブロックを生成するより 2^126倍長い時間がかかる。ブロックを生成する方がはるかに多くのお金を得られただろう。

ランダムシードは非常に徹底している。Windows では、コンピューターの起動以来のディスクパフォーマンス、ネットワークカードの指標、CPU 時間、ページングなどのあらゆるビットを測定するパフォーマンスモニターデータをすべて使用する。Linux には組み込みのエントロピーコレクターがある。さらに、Bitcoin ウィンドウ内でマウスを動かすたびにエントロピーが生成され、ディスク操作のタイミングからもエントロピーがキャプチャされる。

NewLibertyStandard 2010年2月23日 19:04 UTC 原文 ·

説明ありがとう。全部理解できたと思う。

生成された bitcoin は、Bitcoin のメインウィンドウに現在表示されているアドレスで暗号化されるのか? かなり前にメールで言及したかもしれないが、将来のバージョンで、自分の bitcoin のうちどれがどのアドレスで暗号化されているかを確認できるようになると素晴らしいだろう。

NewLibertyStandardの投稿(2010年2月23日 10:04 UTC)

生成されたbitcoinは、Bitcoinのメインウィンドウに現在表示されているアドレスで暗号化されるのか?

いいえ、生成された各トランザクションは新しい使い捨てアドレスを使用する。

メインウィンドウのアドレスは何にも使用されておらず、コピーしやすいようにあるだけだ。0.2.5 ではその横に「新規…」ボタンがあり、使用するたびに簡単に変更できる。

matt.collier 2011年5月22日 15:28 UTC 原文 ·

我々が 224/256 ビットのハッシュ(衝突の可能性なし)ではなく 160 ビットのハッシュ(衝突の可能性がある)を使っているのは、ビットコインアドレスを短くするためなのか? もしそうなら、後日256 ビットのハッシュへ移行することは可能なのか?

意図的に衝突を生成するのは計算量的に高すぎる、という議論は買わない。我々はすでに GPU の利用がビットコインのマイニングのパラダイムを根本から変えるのを見てきた。将来的には、ハッシュ関数の実行に特化して設計された機器が登場する可能性も十分ある。もしかするとそういった機器はすでに存在しているかもしれない。

なぜビットコインに不正の機会をわざわざ組み込むのか? コピーアンドペーストや QR コードを使うのであれば、ビットコインアドレスの文字数を気にする必要はないはずだ。

molecular 2011年5月22日 16:32 UTC 原文 ·
matt.collierの投稿(2011年5月22日 15:28 UTC)

我々が224/256ビットのハッシュ(衝突の可能性なし)ではなく160ビットのハッシュ(衝突の可能性がある)を使っているのは、ビットコインアドレスを短くするためなのか? もしそうなら、後日256ビットのハッシュへ移行することは可能なのか?

意図的に衝突を生成するのは計算量的に高すぎる、という議論は買わない。我々はすでにGPUの利用がビットコインのマイニングのパラダイムを根本から変えるのを見てきた。将来的には、ハッシュ関数の実行に特化して設計された機器が登場する可能性も十分ある。もしかするとそういった機器はすでに存在しているかもしれない。

なぜビットコインに不正の機会をわざわざ組み込むのか? コピーアンドペーストやQRコードを使うのであれば、ビットコインアドレスの文字数を気にする必要はないはずだ。

心配無用だ。「もし意図的に衝突を作ろうとするなら、衝突するビットコインアドレスを生成するには、現在のところブロックを生成するよりも 2^126倍長い時間がかかる」。つまり、現在のすべてのマイナーを合わせたものの 100 万倍強力なコンピューターを持っていたとしても、平均で 1,618,542,460,620,902,128,345,579,373年かかるということだ。

ムーアの法則が最も寛大な形で成り立つとしても、これが現実的になるまでには 100年以上の余裕がある。

それから:そう、ビットコインのマイニング専用に設計された機器は存在する(Artforz は自分用に ASIC(カスタムチップ)をいくつか作らせた)。

matt.collier 2011年5月22日 17:24 UTC 原文 ·

あるいは、5分後に何らかの異常な事故で起きるかもしれない。

君の応答は、計算量的に高価だという議論を補強することを狙ったものだ。

なぜ衝突への耐性がより高いものではなく、160 ビットのハッシュを使っているのか? 必要が生じたときに、たとえそれが 100年後だとしても、224/256 ビットのハッシュへ移行することは可能なのか?

Luke490 2011年6月9日 06:15 UTC 原文 ·
サトシ・ナカモトの投稿(2010年2月23日 16:26 UTC)

意図的に衝突を起こそうとした場合、現在では衝突する Bitcoin アドレスを生成するのにブロックを生成するより 2^126倍長い時間がかかる。ブロックを生成する方がはるかに多くのお金を得られただろう。

もし君のコンピューターネットワークがすでにあり得るすべてのブロックを生成し検査し終えていたとしたらどうなる? 確かにアドレスの可能性の干し草の山ははるかに大きく、検査するのは難しい…だがもし他方の干し草の山(ブロック生成)が完全に数え終わっていたとしたら、他に何をやることがあるんだ?

FreeMoney 2011年6月9日 06:21 UTC 原文 ·
Luke490の投稿(2011年6月9日 06:15 UTC)
サトシ・ナカモトの投稿(2010年2月23日 16:26 UTC)

もし意図的に衝突を作ろうとするなら、衝突するビットコインアドレスを生成するには、現在のところブロックを生成するよりも2^126倍長い時間がかかる。ブロックを生成していた方がはるかに多くの金を得られただろう。

もし君のコンピューターネットワークがすでにあり得るすべてのブロックを生成し検査し終えていたとしたらどうなる? 確かにアドレスの可能性の干し草の山ははるかに大きく、検査するのは難しい…だがもし他方の干し草の山(ブロック生成)が完全に数え終わっていたとしたら、他に何をやることがあるんだ?

これはすべての原子を調べ終えたあと何が起こるのかと聞くより馬鹿げている。何も、何も起こらない。仮にいずれ全空間を見られたとしても(できない、1 兆人の君がいてもできない)、それを覚えていられるわけでもない。