これははんドンクラブ Advent Calendar 2020ふぇむの記事です。

12月に入って以降、史上最高値を更新し、にわかに再度話題になりつつあるBitcoinについて、その誕生と特徴、技術の概要、課題について書いてみました。

注:私はBitcoin関係の開発者でもなければ暗号学者でも何でもありません。そのため、下記内容には誤りが含まれている可能性があります(大体合ってるとは思いますが)。

Bitcoinの要点

  1. 複数のコンピューター上で稼働するBitcoin Core と呼ばれるソフトウェアがインターネット経由で相互に通信し、ネットワーク(以下Bitcoinネットワーク)を構築する。
  2. Bitcoin Core はオープンソースソフトウェアとして公開されており、誰でも入手が可能。また、Bitcoinネットワークには誰でも自由に参加・離脱が可能。
  3. Bitcoin Coreを用いることで、Bitcoinネットワーク上にBitcoinアカウント(以下アカウント)が作成できる。アカウントは誰でも自由に作成でき、身分証明などは一切不要。
  4. Bitcoinネットワーク上におけるアカウントへのアクセス権は、ECDSAの秘密鍵(後述)によるものであり、アカウント≒ECDSAの公開鍵である。すなわち、アカウントの作成とはECDSAの秘密鍵の生成である。
  5. Bitcoinネットワーク上では、各アカウントの残高(BTC残高)が管理される。というか、Bitcoinネットワークは各アカウントのBTC残高を管理するための存在である。ここで、BTCはBitcoinネットワーク上で定義された独自通貨。
  6. アカウントの利用者は、Bitcoinネットワークを通じて、異なるアカウントに対してBTCの残高を移動(送金)することができる。送金する際には、送金先のアカウントを指定する。
  7. 残高の管理および送金に関して、銀行のような信頼できる主体の存在が不要。信頼できる主体の代わりに、暗号技術およびソフトウェアで定義されたルールと、ソフトウェアが稼働するコンピューター群を用いる。

※Bitcoinネットワークへの接続は、Bitcoin Coreと同じルールで動作するソフトウェアなら何でも可能なので、厳密にはBitcoin Coreのみで構成されたネットワークではありませんが、本文中ではBitcoin Coreであるとします。

※厳密には、アカウントは、ECDSAの公開鍵に対して特定の処理を施した上でハッシュ関数(RIPEMD-160)を適用して得られる160bitのバイト列です。誰かにBTCを送金する際には、このバイト列を指定します。

これらについて、以下に書いていきます。

Bitcoinを支える暗号技術

本編に入る前に、Bitcoinを支えている暗号技術に関して概要を書きます。

電子署名

電子署名は、Bitcoin以外でも今日のコンピューター、特にインターネットで多用されている技術です。どのような目的で使われるかというと、デジタルデータが改ざん(書き換え)られたり破損していない事、そしてそのデジタルデータの出自はどこなのか、ということを証明するために使われます。電子署名は、公開鍵暗号という暗号技術によって構成されています。

公開鍵暗号

「暗号」は、「何らかの情報」を、「何らかのルール」で変換し、その何らかのルールを知らない人間には変換前の何らかの情報が知れないようにする手段です。知れないように変換することを「暗号化」、暗号化された情報を元に戻す手段を「復号化」と呼びます。また、暗号化時・復号化時には「鍵」と呼ばれるものを使います。元の情報は同じでも、暗号化・復号化に鍵を用いることで、鍵を変えることによって、異なる形に暗号化することができます(そして復号化にもそれに対応した鍵が必要になります)。