ビットコイン・インスティテュート

Bitcoinアドレスの衝突

12件のメッセージ BitcoinTalk NewLibertyStandard, サトシ・ナカモト, ec, matt.collier, molecular, Luke490, FreeMoney 2010年2月23日 — 2011年6月9日
NewLibertyStandard 2010年2月23日03: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日09:22 UTC)

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

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

NewLibertyStandard

自分が言っていたのはカスタム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日19: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)

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

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

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