text :仲池 卓也 日本IBM
ライトニングネットワークの改ざん防止技術とは
2022年現在、ビットコインやイーサリアムなどの暗号資産は、多くの人に利用されている。その理由の1つとして、ブロックチェーンを用いた高い信頼性(改ざん防止、耐障害性)が挙げられる。
しかし長い間、1つの問題点が指摘されていた。それは、暗号資産取引の際の遅延である。
暗号資産を取引する際には、トランザクションを作成し、そのトランザクションをブロックに入れて、チェーンに繋ぐ必要があるが、そのスピードは1秒間に数トランザクションである(Bitcoin and Ethereum vs Visa and PayPal-Transactions per second)。
クレジットカードのトランザクションが1秒間に数千処理されることを考えれば、これは非常に低速である。さらに、自分のブロックが前段のブロックに繋がれたあと、そのブロックの後段に複数のブロックが繋がれるのを待つ必要がある。
これは、自分のブロックがブロックチェーンの深い位置で確定し、改ざんが著しく困難になったことを保証するために行われる。結果として、1トランザクション処理に対して1時間を要することもある。
上記の問題点を解決するために、ライトニングネットワーク(Lightning Network In-Progress Specifications)が提案され、現在すでに多く利用されている。
ライトニングネットワークは、既存のビットコインネットワーク上で利用可能なオフチェーントランザクションを実現するプロトコルである。
オフチェーンであるため、オンチェーン由来の上記の制約を受けず、瞬時にトランザクション処理を確定できる。
しかしオフチェーンであるために、オンチェーンの利点である改ざん防止性を別の手段で実現する必要がある。そこで本稿では、ライトニングネットワークがどのよう改ざん防止性を実現しているかについて概説する。
ビットコイントランザクションの構造
ライトニングネットワークでは、ビットコイントランザクションを変更することなく、オフチェーントランザクションを実現している。まずは、ライトニングネットワークを知る上で必要なビットコイントランザクションの構造について確認してみよう。
ビットコインでは、ペアとなる秘密鍵と公開鍵を用いてトランザクション処理を実行する。
公開鍵は、ビットコインの送金先として利用される。ある公開鍵に送金されたビットコインは、その公開鍵とペアになる秘密鍵で署名することにより、他の公開鍵に送金することが可能となる。
ビットコイントランザクション構造の例を図表1に示す(Mastering Bitcoin)。
ビットコイントランザクションは、大きく分けて内部に「入力」と「出力」を保持する。
「出力」は、総金額とロックスクリプトを保持している。ロックスクリプトは、送金先の公開鍵とその公開鍵に送られたビットコインの利用条件を記述する。典型的なロックスクリプトは、「その公開鍵とペアの秘密鍵の署名が得られれば送金可」という内容である。
一方の「入力」は、他のトランザクションの出力へのポインタと署名スクリプトを保持している。署名スクリプトは、対応する出力のロックスクリプトの利用条件を満たす内容を記述する。典型的な署名スクリプトは、ロックスクリプト内の公開鍵とペアの秘密鍵による署名である。
図表1の例では、トランザクション1は、公開鍵Aで受け取った1BTC(ビットコイン)を、公開鍵Aとペアの秘密鍵Aで署名することにより、公開鍵Bに送金している。
トランザクション2は、公開鍵Bで受け取った1BTCを、公開鍵Bとペアの秘密鍵Bで署名することにより、公開鍵Cへ送金している。
ライトニングネットワークを知る上で重要な要素を以下にまとめる。
・ビットコイントランザクションは入力と出力から構成される
・出力はロックスクリプトに、公開鍵とその公開鍵に送られたビットコインの利用条件を記述する
・入力は署名スクリプトに、ロックスクリプトの利用条件を満たす内容を記述する
ライトニングネットワークの仕組み
ライトニングネットワークの例を図表2に示す。
ライトニングネットワークを利用するには、最初にライトニングネットワークノードを用意する必要がある(Lightning Network Daemon)。
それにはクラウド上に自分のノードを立ててもよいし、BlueWalletのようにノードサービスを提供するビットコインウォレットを使用してもよい。
次に、ノード間でチャネルを構築する。チャネルは、ノード間でセキュアなコミュニケーションチャネルを確立し、ファンディングトランザクションを作成することによって構築される。
ノード間のコミュニケーションチャネルは、ディフィー・ヘルマン鍵共有プロトコルをもとに構築される(Lightning Network In-Progress Specifications)。
ファンディングトランザクションは、マルチシグアドレスを備えるオンチェーンのビットコイントランザクションである。
図表2の例では、ノードAとBから総額2BTCがファンディングトランザクションに送金され、その2BTCの利用条件として、ノードAとBのもつ秘密鍵による2つの署名が要求されている。
つまりファンディングトランザクションは、ノードAとBの共有財産である。チャネルの構築後、ノードAとBは、2BTC内でビットコインの取引を行う。
ファンディングトランザクションへの入金は、必ずしもすべてのノードが行う必要はない。チャネルに参加する少なくとも1つのノードが入金すればよい。たとえば、以下のようなユースケースが挙げられる。
<ファンディングトランザクションのユースケース>
① ショッピングサイトがノードSを立てる
② ユーザーがノードUを立てる
③ ユーザーが自身のビットコインを入金したファンディングトランザクションを作成し、ノードUとSの間にチャネルを構築する
④ ユーザーは買い物する際、ファンディングトランザクション内のビットコインをノードSに送金する
ライトニングネットワークトランザクションで
改ざんを防止する
ライトニングネットワークのノード間でやり取りされるオフチェーントランザクションの例を図表3に示す。
この図表にあるコミットメントトランザクションが、オフチェーントランザクションである。
この例のコミットメントトランザクションは、ファンディングトランザクションがもつ2BTCをノードAとBにそれぞれ1BTC送金している。
また図表3からわかるように、コミットメントトランザクションは各ノードによって作成され、保持される(つまり、1取引ごとに2つのコミットメントトランザクションが作成される)。
図表3にある2つのコミットメントトランザクションの入力は同じで、ファンディングトランザクションの利用条件を満たす、秘密鍵A2とB2による署名である。
ノードAとBは、それぞれの秘密鍵A2、B2を開示することはない。従って、コミットメントトランザクションをノード間でやり取りし、各ノードへの送金額が正しい場合にのみ、相手のコミットメントトランザクションに署名する。
図表3の例はノードAとBが送金額を了承し、お互いのコミットメントトランザクションに署名した後の状態である。
つまり、これら2つのコミットメントトランザクションは、ブロックチェーンにブロードキャスト可能な状態になっている。
このようにライトニングネットワークでは、ノード間のビットコイン取引を、コミットメントトランザクションを作成することによって実行する。
図表3の例は、ノードAとBに1BTCずつ送金しているが、その後ノードAからBに0.5BTCを送金する際には、ノードAに0.5BTC、ノードBに1.5BTCを送金する新たなコミットメントトランザクションを作成する。
上記のように、ライトニングネットワークでは、送金のたびにブロードキャスト可能なコミットメントトランザクションを作成する。当然ながら、最新のコミットメントトランザクションのみが実効性をもつようにしなければならない。そうでないと、1度合意したビットコイン取引の改ざんが可能になる。
たとえばノードAが、古いコミットメントトランザクションをブロードキャストすることで、0.5BTCの送金をなかったことにするといった行為が生まれる。この改ざんを防ぐために、コミットメントトランザクションの出力には2つの利用条件が記述される。図表3の出力A1に記述されている利用条件は以下のとおりになる。
利用条件1: 秘密鍵RDAの署名があれば、24時間後に1BTC送金可
利用条件2: 秘密鍵BRBの署名があれば、1BTC送金可
コミットメントトランザクションAが最新である場合、ノードAがコミットメントトランザクションAをノードBとの合意なしにブロードキャストすることに大きな問題はない。
なぜなら、ノードAとBは取引について合意しているからである(合意していなければ相手のコミットメントトランザクションに署名しなければよい)。
従って、ノードAは所持している秘密鍵RDAを用いて、利用条件1を満たせるので、1BTCを取得できる(利用条件1を満たすトランザクションは、「Revocable Deliveryトランザクション」と呼ばれる)。
ただしノードAは、合意なしにブロードキャストしたことに対して、24時間待つというペナルティを受ける。
コミットメントトランザクションAが最新でない場合、ノードAがそれをブロードキャストすることは、取引の改ざんに当たる。その場合、ノードAは利用条件2により、所持するすべてのビットコインを失う。
利用条件2に必要な秘密鍵BRBの生成方法を、図表4に示す(利用条件2を満たすトランザクションは「Breach Remedyトランザクション」と呼ばれる)。
ノードAとBは、コミットメントトランザクション作成時に、秘密鍵RA、RBとPer-commitment secret A、Bをそれぞれ生成する。
各ノードは、最新のコミットメントトランザクションに対応するPer-commitment secretを秘匿し、新たなコミットメントトランザクションを作成する際、古いコミットメントトランザクションに対応するPer-commitment secretを開示する。
秘密鍵BRBは、ノードBが所持する秘密鍵RBと、ノードAが開示したPer-commitment secret Aを掛け合わせること(楕円曲線暗号におけるスカラー倍算)により生成される。
ノードAは秘密鍵RBを所持していないため、秘密鍵BRBを生成できず、古いコミットメントトランザクションをブロードキャストした場合、秘密鍵BRBを生成可能なノードBにすべてのビットコインが奪われることになる。
ただしノードAは利用条件1により、一定時間経過するとビットコインを取得できるため、ノードBはその一定時間内に秘密鍵RBBを用いて、自分のアドレスにビットコインを送金する必要がある。
従って、ライトニングネットワークを使用する際には、古いコミットメントトランザクションがブロードキャストされていないかを見張る必要がある。
以上をまとめると、ライトニングネットワークは取引の改ざんに対して、全資産を失うといった最大のリスクを課すことにより、改ざんを防止している。
そのもとになる技術は2つある。1つは、自ノードへの遅延付き出力と他ノードへの条件付きロックスクリプト。もう1つは、他ノードへの出力を可能にする秘密鍵導出方法である。
ライトニングネットワークの耐障害性
以上本稿では、ビットコインの遅延問題を解決するために提案されたライトニングネットワークについて概説した。
ライトニングネットワークでは、オフチェーントランザクションを用いて高速なトランザクション処理を可能にする一方、オンチェーンの利点である改ざん防止性は実現できない。
その代わりに、ライトニングネットワークは、コミットメントトランザクションと呼ばれるオフチェーントランザクションに対して、取引の改ざんを行った際のペナルティを設定することで、改ざん防止を実現している。
ただしライトニングネットワークでは、耐障害性についての懸念は残る。
ブロックチェーンでは、トランザクションを分散台帳に書き込むことで、耐障害性を実現する(1つの台帳が壊れても、他の台帳から再生可能)。しかしライトニングネットワークはオフチェーントランザクションを用いるので、その利点は享受できない。
そこでライトニングネットワークでは、耐障害性の向上を目指して、Static Channel Backup(SCB)という仕組みを導入している。
これはチャネル作成時に、チャネル構築に必要な情報をバックアップする仕組みであるが、これは相手ノードに悪意のないことが前提となる。
たとえば、相手ノードに悪意がある場合、最新ではないコミットメントトランザクションがブロードキャストされてしまう可能性がある。従って実用化に向けては、ライトニングネットワークプロトコルに加えて、オフチェーントランザクションとそれらに必要な鍵の情報を安定的に保管する仕組みを構築する必要がある。
この点を考慮すると、従来のトランザクション処理に用いられている、高度な信頼性を備えたデータベースとの統合が実用化の鍵となるかもしれない。
著者
仲池 卓也 氏
日本アイ・ビー・エム株式会社
東京基礎研究所、ハイブリッドクラウド
シニアテクニカルスタッフメンバー(STSM)
TEC-Jステアリングコミッティーメンバー、WG推進リード
COOL Chipsレジストレーションチェア
IBM Z関連のシステムソフトウェアの研究に従事。Java Just-In-Timeコンパイラ、トランザクショナルメモリ、マイクロサービス等の研究を経て、現在ハイブリッドクラウド上での暗号資産のセキュリティの研究を推進。
*本記事は筆者個人の見解であり、IBMの立場、戦略、意見を代表するものではありません。
当サイトでは、TEC-Jメンバーによる技術解説・コラムなどを掲載しています。
[i Magazine・IS magazine]