秘密鍵から公開鍵が生成できる
Bitcoin は、公開鍵と秘密鍵のペアを用いで送受信します。
公開鍵というのは、住所のようなもので、
例えば、AさんがBさんに Bitcoin を送るときは、
Aさんは、Bさんの公開鍵に Bitcoin を送ればよいです。
Bさんは送られた Bitcoin をBさんの秘密鍵を用いて使うことができます。
Bさんの秘密鍵はBさんしか知らないので、問題ないですね。
この公開鍵と秘密鍵の関係はおもしろくて、
秘密鍵がわかれば、そこから対応する公開鍵を簡単に得ることができます。
ただし、逆に、公開鍵から対応する秘密鍵を得ることは非常に難しい(というか現実的にほぼ不可能)とされています。
このように、公開鍵と秘密鍵は、1対1に対応しています。
秘密鍵の空間の大きさの話
Bitcoin の秘密鍵って 256ビットの長さなんですよ。
32ビットが 2 の 32 乗で、約43億通りの状態を表現できるわけですから、
256ビットは、32ビット8つ分なので、
256ビットの状態数は、
43億 x 43億 x 43億 x 43億 x 43億 x 43億 x 43億 x 43億
通りになりますね、とんでもない数です。
bitcon をハックしようとすると?
ただ、冷静に考えると、秘密鍵があれば公開鍵が一意に決まるので、
適当な256bitの秘密鍵を生成して、それが誰かの秘密鍵と一緒だったら、その人の bitcoin を盗めることになりますよね?
生成された公開鍵が使われているかどうかは、ブロックチェーンの全データをスキャンすればわかります。
では、現実に衝突する可能性はどのくらいか?
これを直感的に理解するのはなかなか難しいと思いますが、考えてみました。
4GHzのCPUをぶん回して1秒間に43億の秘密鍵を生成できるとしましょう。
地球にいる人口43億人のそれぞれが43億の秘密鍵を持っているとします。
100年の秒数を多めに見積もって43億秒だとします(厳密には31億秒くらい)
つまり、43億 x 43億の既にある秘密鍵を1秒に43億回生成できるマシンで100年計算したら
43億 x 43億の既にある秘密鍵に1回で当たる確率は
43億 x 43億 x 43億 x 43億 x 43億 x 43億 分の1となります。
これを100年で分回せるのは 43億 x 43億 回なので、
どれかにヒットする確率は以下のように表されます。
1 – 全部外す確率
ということは
1 – (1回はずす確率) の 43億 x 43億乗
つまり
1 – (1 – どれかにヒットする確率) の 43億 x 43億乗
となります。。
自分で書いててわけわからんくなってきた。
すいません。今度ちゃんと書き直します。
256bitの暗号化はどの程度強固なのか
https://pebble8888.hatenablog.com/entry/2018/05/26/111601
秘密鍵から Bitcoin を復元
やっと本題です。
まず以下のエントリを参考にして Bitcoin-cli をインストールしてください。
Bitcoin Core をビルドして Bitcoin-cli を使う
https://nomad.office-aship.info/bitcoin-build
bitcoind もインストールされるので、頑張ってフルブロックチェーンをダウンロードしてください(200Gくらいあります涙)
秘密鍵を
a837635fc9cbb055c00b64ef29ced5021d9b76900fce53538a99f1b3c05ce1d2
とすると
以下で秘密鍵をインポートできます
% bitcoin-cli importprivkey a837635fc9cbb055c00b64ef29ced5021d9b76900fce53538a99f1b3c05ce1d2
そうすると、該当アドレスの残高をチェックするため、フルチェーンのスキャンが始まります。
スキャンが終わると、以下のコマンドで残高が確認できると思います
% bitcoin-cli getwalletinfo { "walletname": "wallet_name", "walletversion": 169900, "format": "bdb", "balance": 0.00000000, }
この balance のところに金額が表示されれば成功です。
コメント