Bitcoin改善提案「BIP 0069」とは?
BIP(Bitcoin Improvement Proposal)は、Bitcoinのコードを改善するための提案です。誰でもこのような提案を出すことができ、コミュニティで議論・承認されると採用・実装されます。BIPは主に大きな変更や機能追加に関するもので、バグ修正などはこの枠組みで大規模に議論されることはありません。
ここでは「0069」という番号が付いた特定のBIPについて、その重要性を解説します。このアップデートは、Bitcoinの取引を解析しにくくすることで、セキュリティ向上を目指しています。
どのようなデータが解析対象になるのか?
BIP 0069が提案している内容を正しく理解するには、Bitcoinネットワーク上で資産がどのように移動するかを知る必要があります。各取引には「入力」と「出力」があり、実際にコインが流れているわけではなく、どこからどこへ送られたかという記録が残ります。入力は過去の取引の出力(未使用トランザクション出力=UXTO)へのリンクです。少し複雑に感じるかもしれませんので、例を挙げます。
Bitcoinの取引を現金のやり取りに例えてみましょう。たとえば、友人から何かを15BTCで購入したいとします。以前に10BTCずつ2回受け取っていた場合、財布の中に「10」と書かれた紙幣が2枚あるイメージです。それぞれの紙幣には、どこから受け取ったかが鉛筆で書かれています。これが新しい取引の入力となり、2枚あるので入力も2つです。
この2枚の紙幣に「チャーリーからピーターへ」と書き加えて友人に渡すと、このメッセージが取引の最初の出力となります。友人はお釣りを返す必要があるため、自分の財布から5BTCを取り出し、「チャーリーからピーターへのお釣り」と書いてあなたに渡します。これがもう一つの出力です。
ここでは簡単に説明しましたが、実際には複数の小額取引が絡む場合もあり、その場合は入力や出力の数がさらに増えます。
セキュリティ上の課題
問題は、入力や出力の並び順に標準がないことです。各ウォレットごとに独自の並び順を採用しており、たとえば支払い用の入力を先に並べてお釣り用の出力を後にする場合、第三者が送金元や受取先ウォレットの情報を推測しやすくなります。また、入力を追加日時順に並べるなど、さまざまな方法が存在します。このため、データ解析によって特定のウォレットやサービス特有のパターンが特定されてしまうリスクがあります。
さらに、ウォレット開発における潜在的な問題もあります。BIP 0069の提案者であるKristov Atlas氏は、ウォレットのコードにアクセスできる攻撃者(たとえば開発者)が、入力や出力の並び順を秘密鍵のビットに基づいて決めるように改ざんするという仮説を提示しています。こうした改ざんが行われると、攻撃者は取引の流れを追うだけで秘密鍵を特定できる可能性があり、この「仕込み」は非常に発見しにくくなります。
どうやって解決できるのか?
この脆弱性は、取引の入力と出力をパターンが生じないように並べることで対策できます。BIP 0069では、決定的でない(nondeterministic)並び順、つまり入力から並び順が特定できない方法を提案しています。ただし、複雑なアルゴリズムは不要で、データを単純に辞書順(アルファベット順)で昇順に並べるだけで十分です。
Tangem Walletはすでにこの方式を採用しています。iOSとAndroidの両方で利用可能です。