Crypto Life

Tech in X

ブロックチェーンを中心にテクノロジーや東南アジアのスタートアップ情報を提供

Bitcoinを安全に使うための基礎知識

Bitcoinの安全性を理解するため、今回はどのような場合にBitcoinを盗まれてしまうのかを、トランザクションの観点から説明していきたいと思います。

 

なお、今回の記事は以下の記事の知識+公開鍵暗号の概要理解を前提としています。

cryptocoin.hatenablog.com

より詳しいトランザクションの解説はこちら。

cryptocoin.hatenablog.com

 

上記記事で述べた通り、トランザクションは「受取人のBitcoinアドレス」、「送金額」、「送金者の情報」という3つの情報を組み合わせることで成り立っていました。

 

つまり、「受取人のBitcoinアドレス」と「送金額」に対して、「送金者の持つ秘密鍵で署名する」ことで、送金者以外の第三者が、送金者になりすまして送金をしていないということを証明しています。

 

ここから以下の疑問が生まれます。

  1. 秘密鍵が送金者のものであることをどのように証明しているのか」
  2. そもそも秘密鍵が漏れ出してしまったときの対処法はあるのか」

 

秘密鍵が送金者のものであることをどのように証明しているのか

Bitcoinで使用されている公開鍵暗号方式は、秘密鍵と公開鍵がペアになっています。この暗号方式には面白い点があり、「公開鍵で情報を”暗号化”すると、対応する秘密鍵のみで解読できる」という点と、「秘密鍵で”署名”すると、対応する公開鍵でのみその秘密鍵で署名されたことがわかる」という、暗号化と電子署名の両面を実現することができる仕組みになっています。

 

Bitcoin電子署名に即して考えると、送金者が秘密鍵を利用して署名した送金情報は、送金者の公開鍵でしか検証できないから、送金者の公開鍵で検証できた場合には、この送金情報は間違いなく送金者によって生み出されたものだということができます。

 

と、ここで話が終われば簡単なのですが、まだ話は続きます。送金者の「公開鍵」が送金者の「秘密鍵」のペアであることを、どのように証明できるのでしょうか?

 

例えば悪意を持った第三者が「これが送金者の公開鍵だから使ってくれ」といって、その人の秘密鍵で署名した送金情報の検証に使用させた場合、送金情報を偽装することができてしまいます。

 

従来は、この公開鍵の配布には、PKIと呼ばれる中央集権的な仕組みを利用していました。中央集権的なPKIとよばれる機関に公開鍵の情報を登録して、PKIがその公開鍵が本当に送信者のものであることを証明していました。

 

しかし、Bitcoinにこの仕組みを導入してしまうと、分散型の仕組みに中央集権的な混在することになってしまい、PKIが悪意を持った場合にBitcoinの仕組みが崩壊してしまいます。言い換えると、PKIが単一障害点になってしまいます。

 

この問題の解決のため、送金時に送付されてきた公開鍵が、前回の取引でBitcoinを受け取ったBitcoinアドレス(=公開鍵にハッシュ関数をかけたもの)と一致しているかを検証しています。トランザクションを受け取ったノードは、送付されてきた公開鍵にハッシュ関数をかけて送信者のBitcoinアドレスと一致することを検証します。こうすることで、偽の公開鍵を利用した不正送金を防いでいます。

 

そもそも秘密鍵が漏れ出してしまったときの対処法はあるのか

結論から書くと、秘密鍵が漏れ出してしまった場合の対応方法はありません。たとえば、2013年にはBitcoin秘密鍵の情報を保持しているQRコードをテレビのキャスターが放送してしまい、Bitcoinを盗まれてしまうという事態が発生しています。

gigazine.net

 

これを防ぐには、一般的には秘密鍵を無効化するということが考えられます。前述したPKIを使用している場合には、PKI上でCRL (Certificate Revokation List)とよばれる無効となった公開鍵を管理する仕組みがあるため、PKIに申請を行うことで秘密鍵の無効化が可能です。

 

翻ってBitcoinを見てみると、PKIのような中央集権的な仕組みはないためこの手法をとることはできません。考えられるのは、CRLをブロックチェーンに組み込んでしまうことですが、無効化するアドレスに蓄積されているBitcoinをどのように取り扱うかを考えると、「漏えいしたアドレスから急いで別のアドレスに退避する」という現在の方法が、結局のところ理にかなっているかと考えています。

 

以下のサイトでは、ブロックチェーンにおけるPKIを提唱していますが、以上のロジックから実現は難しいかと、私は考えています。

www.cybertrust.ne.jp

 

まとめ

秘密鍵が漏えいしない限りは、トランザクションのなりすましは不可能であることがわかりました。そのため、

  • 秘密鍵を漏えいしないための管理
  • 漏えいした場合にすぐに送金できるためのバックアップアドレスの用意

の2点がBitcoinをセキュアに使うためには重要になってきます。相場は上昇していますが、秘密鍵が漏えいしたら利益もふっとんでしまうので、みなさん秘密鍵の管理はぬかりなく!