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