本文へスキップ
buybitcoinsmart

用語集 / ライトニングとレイヤー2

失効キー

失効キーとは?
失効キーとは、ライトニングネットワークのコミットメントトランザクションにおける遅延アウトプットとHTLCアウトプットをロックするブラインド化された公開鍵であり、その状態を無効化する秘密をあなたが明かした瞬間に、チャネルの相手方がそのアウトプットを使用できるようになります。

ライトニングのコミットメントトランザクションにはすべて、いずれか一方がコミットメントごとのシークレットを公開するまで誰も署名できない失効ブランチが付いています。BOLT 3はそれらのシークレットを281,474,976,710,655から降順に番号付けしており、受け取る側はそのすべてを49個のスロットを持つ配列に保持できます。すでに失効させた状態を公開すると、ピアがチャネルの残高全額を取得できてしまいます。だからこそ、シードフレーズではライトニングをバックアップできないのです。

仕組み

失効キーは、チャネルのどちらの側も単独ではその秘密部分を計算できないように、意図的に構築されています。

ノードがピア向けに新しいコミットメントを用意するとき、自身のrevocation_basepointとピアのper_commitment_pointを取得し、2つのそれぞれを、その点を先頭に置いて連結したペアのSHA256で乗算し、その結果を加算します。BOLT 3はこの性質を1行で述べています。この構築により、basepointを提供するノードも点を提供するノードも、相手ノードのシークレットなしには秘密鍵を知ることができないことが保証されます。秘密鍵は、後半が届くまでどこにも存在しません。

その到来はメッセージです。ピアが自身の新しいコミットメントに対するあなたの署名を確認すると、メッセージタイプ133のrevoke_and_ackで応答し、これはたった今引退させた状態に対応する32バイトのper_commitment_secretと、次の状態の点を運びます。それ以降、あなたは古い状態のrevocationprivkeyを計算でき、ピアはそれを取り戻せません。

このキーは2種類のアウトプットに現れます。to_localアウトプットはP2WSHであり、そのウィットネススクリプトはOP_IF、revocationpubkey、OP_ELSE、to_self_delay、OP_CHECKSEQUENCEVERIFY、OP_DROP、local_delayedpubkey、OP_ENDIF、OP_CHECKSIGと読みます。所有者はto_self_delayブロック分待たなければなりませんが、失効キーの保持者は署名と1からなるウィットネススタックで即座に使用できます。各HTLCアウトプットは、同じキーをSHA256に対するRIPEMD160で20バイトにハッシュ化したものを運び、BOLT 5は、罰則を課すノードが不正を行った者のHTLC-successトランザクションとHTLC-timeoutトランザクションもそのキーで一掃することを求めています。

保管は、この設計が巧妙になるところです。チャネルはコミットメントごとのシークレットを281,474,976,710,655個、状態ごとに1個使い切ることがあり、それらはすべて推測不可能な256ビットの単一のシードから、ビットを反転させてハッシュ化することで生成され、インデックスは増加ではなく減少していきます。インデックスが末尾のゼロで終わるシークレットからは、そこから次の2の累乗の境界までのすべてのシークレットが導出されるため、受け取るノードは49組の値とインデックスのペアだけを保持し、残りは必要に応じて再構築します。BOLT 3はまた、受け取る側が新しい到着ごとに以前のシークレットを再導出して確認するように定めており、シードを密かに切り替えたピアは、閉鎖の時点ではなくその場で発見されます。

ビットコインを購入するときにこれが重要な理由

失効キーは、ライトニングの残高が取引所から送られてくるオンチェーンのコインとはまったく異なる挙動をする理由です。

当サイトでレビューしている41個のウォレットのうち、ライトニングを利用できるようにするものは、状態の問題を明らかに異なる方法で扱っており、その違いが評価を説明しています。Phoenixは、BIP84のパス上の標準的なBIP39シードの背後で、端末上に真に自己完結したノードを実行しており、当サイトのレビューは、シードがチャネルではなくオンチェーンのフォールバックであることを明示しています。ACINQが消滅した場合、あなたは強制閉鎖し、およそ720ブロック、約5日待って、Electrumでオンチェーンで復元することになります。Muunは単語リストを完全に拒否し、両方のマルチシグ鍵とアウトプットディスクリプタを保持するEmergency Kitファイルを渡します。その公表された理由は、ニーモニックは鍵をバックアップするが、そのコインはウォレットにも伝える必要があるスクリプトの中に存在するというものです。Wallet of Satoshiのデフォルトのカストディモードは、あなたをそこから外すことで問題を取り除きます。同社がすべてのシークレットを保持するため、当サイトでは注意ステータスと2.7の評価が付いており、また2023年11月23日に米国の顧客へのサービスを停止でき、2026年の変わり目に欧州連合全域でサービスを撤回でき、EUの保有者には代わりに自己管理モードを残しました。BlueWalletはオンチェーンで自己管理型であり、その点で4.2の評価を受けていますが、そこでのライトニング残高は、オンチェーンのリカバリーフレーズが対象としないLNDHubアカウントにあります。

プロトコルは1つのセーフティネットを提供しており、それを正確に知っておく価値があります。古い状態を抱えたまま再接続すると、channel_reestablishがそれを露呈します。ピアのメッセージは、あなたが予想していたより高い失効番号を示し、あなたが最後に送ったper_commitment_secretを返送します。これにより、その主張が正直であることが証明されます。BOLT 2はその後、あなたが自身のコミットメントトランザクションをブロードキャストしてはならず、代わりにピアにチャネルを失敗させるよう求めるエラーを送るべきだと述べています。これは正直なソフトウェアが従う規則であり、コンセンサスの保証ではなく、あなた自身が古い状態を公開することを控えている間だけあなたを保護します。BOLT 5は対応する義務を平易に述べています。ノードは、すでにper_commitment_secretを公開したコミットメントトランザクションをブロードキャストしてはなりません。

実際には、リスクはあなたの受け取り用ウォレットの中にのみ存在し、他のどこにもありません。当サイトが追跡している63社の取引所のいずれかで購入し、ライトニングで出金しても、取引所のチャネルは取引所の問題であるため、あなたがリスクにさらされることはありません。あなたがリスクにさらされるのは、コインが、あなた自身がノードを実行することになっている場所に到着した瞬間からです。

BOLT 3のテストベクター、キーごとに

BOLT 3は付録に実際の導出例を載せており、それを読むことが、失効キーの両方の半分が不可欠であると理解する最速の方法です。

revocation_basepoint 036d6caac248af96f6afa7f904f550253a0f3ef3f5aa2fe6838a95b216691468e2と、per_commitment_point 025f7117a78150fe2ef97db7cfc83bd57b2e2c0d0dd25eaf467a4a1c2a45ce1486から始めます。basepointを先頭にしてハッシュ化するとefbf7ba5a074276701798376950a64a90f698997cce0dff4d24a6d2785d20963になり、点を先頭にしてハッシュ化するとcbcdd70fcfad15ea8e9e5c5a12365cf00912504f08ce01593689dd426bca9ff0になります。各点を、それを先頭に置くハッシュで乗算し、2つの結果を加算すると、revocationpubkey 02916e326636d19c33f13e8c0c3a03dd157f332f3e99c317c141dd865eb01f8ff0が得られます。

その公開鍵から秘密鍵が漏れることは一切ありません。秘密鍵が現れるのは、ピアが対応するper_commitment_secret 1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100を開示した後だけであり、その時点で同じ2つのハッシュがそのシークレットとbasepointのシークレットと組み合わさって、revocationprivkey d09ffff62ddb2297ab000cc85bcb4283fdeb6aa052affbc9dddcf33b61078110が得られます。1回のチャネル更新、1回の開示で、直前まで単なる飾りだった公開鍵が、アウトプット全体に対する請求権になります。

失効キーvsシードフレーズ

失効キーとシードフレーズはどちらもあなたの資金が依存するシークレットですが、紙に書けるのはそのうちの1つだけです。

シードフレーズは静的です。12語または24語が、ウォレットが将来導出するすべての鍵を固定し、追加のコピーはあなたをより安全にし、古いコピーは新しいコピーとまったく同じだけ有効です。失効シークレットはこの3つの性質すべてを反転させます。それらはチャネル更新ごとに1つずつ、相手側からrevoke_and_ackの中で届きます。重要なコピーはピアの開示であり、あなた自身のシードでは再生成できません。そして古いチャネル状態のコピーはバックアップではなく負債です。それに基づいて行動することは不正と区別できないからです。49個のスロットの保管方式が存在するのは、まさにこれらのシークレットが変更されすぎて書き留められないからです。

実際上の帰結は、すべてのライトニングウォレットが繰り返す警告です。ライトニングウォレットを単語だけで復元して使用を始めると、あなたはすでに失効させた状態を再公開してしまい、それはBOLT 5が明確に禁じている唯一のこと、そしてあなたのチャネル相手の失効キーが待ち望んでいた唯一のことです。

混同しやすい用語

よくある質問

シードフレーズはライトニングネットワークのチャネルをバックアップしますか?

いいえ。シードフレーズは鍵とアドレスを復元しますが、チャネルの相手方が送ってきたコミットメントごとのシークレットは復元しません。BOLT 3では、受信するノードがそれらを到着した時点で保存することになっているため、単語だけから復元したウォレットは、すべてのチャネルについて古い状態しか把握していません。Muunは、単語のリストではなく、鍵とアウトプットディスクリプタの両方を含むEmergency Kitファイルをバックアップすることで、この混乱を回避しています。

誤ってライトニングネットワークのチャネルの古い状態をブロードキャストするとどうなりますか?

チャネルの相手方がチャネルの残高全体を取得できます。その状態が失効したときに渡したコミットメントごとのシークレットにより、相手方は待機期間を置かずに、すべてのアウトプットの失効ブランチに一度に署名できるからです。

私が何も不正をしていない場合でも、チャネルの相手方は失効キーを私に対して使えますか?

いいえ。現在の状態に対応する失効秘密鍵はまだ存在しないからです。それには、まだ開示していないコミットメントごとのシークレットが必要であり、BOLT 3は双方が提供した材料から鍵を構築するため、どちらか一方だけでは鍵を導出できません。

次に読む

関連用語

ライトニングとレイヤー2のその他の用語

このページを英語で読む