Bitcoinアドレスの衝突

7 件のメッセージ BitcoinTalk NewLibertyStandard, サトシ・ナカモト, ec 2010年2月22日 — 2010年2月23日

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

ec 2010年2月23日 原文 · 個別ページ

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

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

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

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

ec 2010年2月23日 原文 · 個別ページ

Quote from: NewLibertyStandard on February 23, 2010, 09:22:47 AM

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

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

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

Quote from: NewLibertyStandard on February 23, 2010, 09:22:47 AM

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

自分が言っていたのはカスタム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ウィンドウ内でマウスを動かすたびにエントロピーが生成され、ディスク操作のタイミングからもエントロピーがキャプチャされる。

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

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

Quote from: NewLibertyStandard on February 23, 2010, 07:04:47 PM

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

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

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