今週のニュースレターでは、LNDのチャネル閉鎖における修正済みの再編成脆弱性の開示と、 rawtr()アウトプットスクリプトディスクリプターのBIPドラフトについて掲載しています。 また、サービスやクライアントソフトウェアの最近の更新や、 人気のBitcoin基盤ソフトウェアの注目すべき更新を紹介する恒例のセクションも含まれています。

ニュース

  • LNDのチャネル閉鎖における再編成の脆弱性: Bastien Teinturierは、 0.20.0より前のバージョンのLNDに影響する脆弱性の責任ある開示を Delving Bitcoinに投稿しました。この脆弱性は2026年2月にリリースされた0.20.0で修正されています。 古いバージョンを実行しているオペレーターはアップグレードが必要です。Teinturierの知る限り、この脆弱性による影響を受けた人はいません。

    当該バージョン以前のLNDノードは、協調的に閉鎖されたチャネルについて、 クロージングトランザクションが最初にオンチェーンで承認された直後にそのチャネルに関する情報を破棄してしまう挙動がありました。 これにより、チェーンの再編成に対する保護が失われていました。もし再編成によってその承認が取り消された場合、 攻撃者はそのチャネルの古い(失効済みの)コミットメントトランザクションをブロードキャストすることができ、 ノードは既にチャネルのことを忘れているためペナルティトランザクションを発行できず、 攻撃者にチャネルの資金をすべて奪われる恐れがありました。

    この脆弱性は2025年2月に発見され、LND #10331ニュースレター #389参照)で修正されました。 この修正により、ノードはチャネル閉鎖を確定とみなす前により多くの承認(BOLT5の再編成の安全性の扱いに従い、少なくとも6承認)を待つようになります。 Teinturierの投稿には、regtestでの再現手順と開示のタイムラインが記載されています。

  • rawtr()アウトプットスクリプトディスクリプターのBIPドラフト: Jean Pabloは、 rawtr()アウトプットスクリプトディスクリプターのBIP提案について Bitcoin-Devメーリングリストに投稿しました

    rawtr()ディスクリプターは、内部鍵やスクリプトツリーを必要とせず、 アウトプット鍵によって直接P2TRアウトプットを表現するために使用できます。これは例えば、 内部構造が分からない場合や、スクリプトツリーが所有者によって開示されていない場合に便利です。

    このディスクリプターはBitcoin Coreのバージョン24.0以降で利用可能でしたが、 正式なBIPとして仕様化されていませんでした。いくつかの実装は、これをサポートしないか、 他のBIPを引用することでこの問題を回避しています。今回の提案はこのギャップを埋めることを目指しています。 BIPドラフトはテストベクターとともに公開されており、BIPs #2251で議論されています。

サービスとクライアントソフトウェアの更新

この毎月の特集では、Bitcoinのウォレットやサービスの興味深いアップデートを取り上げています。

  • Payjoin Dev Kit (rust-payjoin) 1.0.0のリリース: Payjoin Dev Kitプロジェクトが、rust-payjoinの最初の安定版をリリースしました。 同期型のBIP78 Payjoinと、セッションの永続化と再開が可能な非同期型のBIP77 Payjoinの両方をサポートします。

  • Electrum向けサイレントペイメント送信プラグイン: Ali Sheriefは、シングルシグ・ソフトウェアウォレットであるElectrumデスクトップウォレットに サイレントペイメント(BIP352)の送信機能(受信は非対応)を追加するプラグインをリリースしました

  • Superscalarの実装の発表: 8144225309氏が、Superscalarの実装を発表しました。Superscalarは、 ZmnSCPxjによるチャネルファクトリーの設計で、 ソフトフォークなしで多数のセルフカストディ型ライトニングクライアントを単一のオンチェーンUTXOの背後に配置するものです( Superscalarのディープダイブ・ポッドキャストもご覧ください)。

  • Cofundマルチシグウォレットの発表: Cofundが、ポリシーベースのTaproot(P2TR)アーキテクチャ上に構築され、 マルチベンダーの鍵登録と階層型マルチシグを備えたセルフカストディ型マルチシグウォレットを発表しました

  • Lexeが人が読みやすいアドレスとLNURL-withdrawを追加: Lexeは、各ユーザーのノードをTEE(Trusted Execution Environment)内で実行することで、 オペレーターが資産を管理することなくノードをオンラインに保つセルフカストディ型ライトニングウォレットです。 同社は、BIP353に基づく人が読みやすいビットコインアドレス(ライトニングアドレスとしても機能)とLNURL-withdrawのサポートを発表しました

  • Ledger Bitcoinアプリ2.5.0が人が読みやすいポリシー説明を追加: Salvatore Ingalaは、Ledger Bitcoinアプリのバージョン2.5.0を発表しました。 このバージョンでは、多くのTaproot Miniscriptおよびマルチシグウォレットポリシーについて、 登録時に難解なディスクリプターテンプレートだけでなく、人が読みやすい説明を表示します。 これにより、ユーザーがポリシーを検証し、登録前に悪意ある置き換え(3-of-5が1-of-5に置き換えられているなど)を発見することが容易になります。

  • Bark 0.5.0リリース: Secondが、同社のArk実装であるBarkのバージョン0.5.0をリリースしました。 ニーモニックからウォレットのオフチェーン残高全体(VTXO)を復元する機能と、 外部Arkアドレスへのライトニング受信のサポートが追加され、これによりノンカストディアルなライトニングアドレスサーバーが可能になります。

  • プライベートなUTXOクエリのためのBitcoin-PIR: Weikeng Chenは、Bitcoin-PIRを発表しました。これはPIR(Private Information Retrieval)システムで、 軽量クライアントが、どのUTXOに関心があるかをサーバーに明かすことなく、 自身のアドレスやscriptPubKeyに対応するUTXOセットを確認できるようにするものです。DPF-PIR、HarmonyPIR、OnionPIRv2、 そしてTEE(Trusted Execution Environment)を活用したORAMスキームという4つのPIRバックエンドを選択できます。

  • OP_TEMPLATEHASHを使用したArkのデモンストレーション: Steven Rooseは、Second社のArk実装であるBarkをOP_TEMPLATEHASHを使用して動作させるsignetデモンストレーションを立ち上げましたOP_TEMPLATEHASHは、TaprootネイティブなCTVスタイルのコベナンツ opcodeです。 このデモはBarkのリポジトリtemplatehashブランチからビルドされています。

  • libshrincs: 形式検証されたハッシュベース署名: Jonas Nickは、libshrincsを発表しました。これはremix7531氏によって書かれた、 機械検証されたセキュリティ証明を伴う耐量子性のあるハッシュベース署名のC言語実装です。

注目すべきコードとドキュメントの更新

最近のBitcoin CoreCore LightningEclairLDKLNDlibsecp256k1Hardware Wallet Interface (HWI)Rust BitcoinBTCPay ServerBDKBitcoin Improvement Proposals(BIP)Lightning BOLTsLightning BLIPsBitcoin InquisitionおよびBINANAsの注目すべき変更点。

  • Bitcoin Core #32784は、derivehdkeyウォレットRPCコマンドを追加します。 このコマンドは、ウォレットが認識しているHD鍵から、 呼び出し元が指定した導出パス(少なくとも1回の強化導出ステップを含む必要がある)に基づいて、 xpubおよびオプションでxprvも導出します。これは、各参加者がウォレットのデフォルトのシングルシグディスクリプターとは 異なるパスから導出したxpubを提供する、マルチシグウォレットのコーディネートに便利です。 強化導出には秘密鍵が必要であるため、このRPCは監視専用ウォレットでは利用できず、 暗号化されたウォレットはロックを解除する必要があります。

  • Bitcoin Core #35797は、descriptorprocesspsbt RPC(ニュースレター #253参照)を使用する際に、 インプットが追加される前にPSBTv2のアウトプットメタデータを設定できるようにします。 これまで、UpdatePSBTOutputはアウトプットスクリプトを走査する際に、 PSBTの未署名トランザクションの最初のインプットを使用しており、 PSBTv2にアウトプットは含まれるがインプットが含まれない場合に失敗する可能性がありました。 今回の変更により、PSBTを変更することなく、ダミーインプットを含む一時的なトランザクションを使用してメタデータの走査が行われるようになりました。

  • Bitcoin Core #35531は、トランザクション識別子と位置の保存方法を変更することで、 -txindexオプション(ニュースレター #161参照)が使用するディスク容量を削減します。 32 byteのtxidとトランザクションのディスク位置をそのまま保存する代わりに、 新しいフォーマットではtxidのソルト付きSipHashの5 byteプレフィックスを使用し、 データベースキーのコンパクトな6 byteサフィックスにブロックのシーケンス番号とトランザクションオフセットをエンコードし、値は空にします。 ルックアップでは、プレフィックスを共有するすべてのエントリをスキャンし、 ブロックインデックスを使って各候補のブロック位置を特定し、 ディスクからトランザクションを読み込んだ後に完全なtxidを検証することで、衝突を安全に処理します。 PR作成者のmainnetのテストでは、完全に再構築したインデックスは約66 GBから26 GBへ縮小し、 インデックス作成時間は約1時間50分から1時間19分に短縮されました。 既存のインデックスは引き続き読み取り可能ですが、容量を解放するには再構築が必要です。 再構築後、古いバージョンのBitcoin Coreは新しいエントリを読み取れなくなり、 ダウングレードする際にもインデックスの再構築が必要になります。

  • Bitcoin Core #35889は、大量のアウトポイントを確認する際のgettxspendingprevout RPCのパフォーマンスを改善します。 これまでは、アウトポイントを消費するトランザクションがmempoolで見つかった場合、 mempoolロックを保持したままそのアウトポイントがベクターの中央から消去され、 残りのエントリのシフトを強いていました。今後、RPCは各リクエストを1回スキャンし、 解決済みの結果を元のインデックス位置に保存し、未解決のアウトポイントのみを別のワークリストに収集して、 オプションのtxospenderindexニュースレター #394参照)経由でルックアップします。 これにより、mempoolの処理時間は二次オーダーではなく線形になります。 PR作成者のベンチマークによると、mempoolのみの大規模なリクエストバッチは、 Ryzen 7 3700Xで約9倍、Raspberry Pi 5で31倍高速に完了しました。

  • Bitcoin Core #35605は、removeprunedfundsウォレットRPCを非推奨とし、デフォルトで無効にします。 引き続き必要なユーザーは、-deprecatedrpc=removeprunedfunds起動オプションを使用する必要があります。 このRPCは次のメジャーリリースで削除される予定です。削除の理由は、 既知の有用な用途がないまま危険な動作を引き起こす可能性があるためです。このRPCは、 関連するimportprunedfunds RPC経由で追加されていないトランザクションを含め、 ウォレットに属するすべてのトランザクションを削除できてしまいます。また、メンテナンスの負担にもなっています。 このRPCに関連する過去のバグについてはニュースレター #391を参照してください。

  • Eclair #3352は、Eclairがシングルファンド型チャネルの受け手である場合に欠けていたBOLT2のチャネル準備金チェックを修正し、 いずれの当事者のダストリミットも相手方のチャネル準備金を超えないようにします。 これらのチェックがないと、ピアは自身の残高を該当するダストリミットを下回る準備金まで使い切ることができ、 そのアウトプットがコミットメントトランザクションから除外され、 失効した状態を公開する際にリスクにさらされるオンチェーン資金がなくなる可能性がありました。 またこのPRは、設定可能なチャネルサイズ制限eclair.channel.max-funding-satoshisを追加し、 デフォルトは50億satoshi(50 BTC)に設定されます。 これは、Wumboチャネルのサポートにより 従来のプロトコル制限を超えるチャネルが許可されるようになった後の上限を復活させるものです。

  • Eclair #3351は、オンザフライファンディングニュースレター #323参照)における複数のバグを修正します。 この機能は現在、Phoenix WalletにおけるACINQのLSP(Lightning Service Provider)ノードで使用されています。 具体的には、再起動後、Eclairは保留中のチャネル変更のみをチェックしていたため、 HTLCが既に完全にクロス署名されていることを認識できないことがありました。 これにより、同じ支払いが2回リレーされる可能性がありました。 今後、Eclairはリレー前に現在のコミットメント状態もチェックするようになります。 加えてこのPRは、対応する上流のHTLCが失敗した後にEclairが下流のピアに支払いを行わないように、 複数のタイムアウトおよびオンチェーン障害パスを解決します。

  • Eclair #3345は、BOLT7ゴシップクエリを通じてチャネルアナウンスメントを要求および同期する際に、 各ピアが消費できるリソースを制限します。設定可能なレート制限(デフォルトで1秒あたり5リクエスト)が、 接続ごとにquery_channel_rangequery_short_channel_idsにまたがって適用されます。 Eclairは、トランスポートのバックプレッシャーを維持するため、クエリの応答が送信されるまで新たな処理を受け付けません。 Eclairは応答の増幅を防ぐために重複するショートチャネルID(SCID)を無視し、不正な形式または重複するクエリを拒否します。 また、同期中のメモリ使用量を抑えるため、ピアごとにキューに入れられるquery_short_channel_idsリクエストの数を2,000件に制限しています。 同様のリソース管理保護機能は以前LNDにも追加されました(ニュースレター#366および#417参照)。

  • LND #8754は、リモート署名者(ニュースレター #172参照)向けの実験的なアウトバウンド接続モードを実装します。 リモート署名者は、秘密鍵操作を別の署名サーバーに委譲するものです。 署名者は依然として受信したリクエストを独立して検証しないため、監視専用ノードから送信された任意のリクエストに署名します。 この新しいモードで変わるのは両者の接続方法のみです。 署名者がインバウンド接続を待ち受ける代わりに、監視専用ノード上の専用RPCリスナーに対してアウトバウンド接続を開始することで、 署名者がインバウンド接続を受け付けることなく動作できるようになります。 この構成については、以前ニュースレター #326で決定論的なmacaroon生成に関連して議論されました。

  • LND #11065は、実験的なXCreateAccount RPCおよび対応するlncli wallet accounts createコマンドを追加します。 これらは、LNDのウォレットマスター鍵から鍵を導出する、名前付きで完全に使用可能なアカウントを作成するためのものです。 これは、監視専用のxpubをインポートする既存のImportAccount RPC(ニュースレター #144参照)とは異なります。 コイン選択、残高、アドレス導出およびお釣りをアカウント単位に管理でき、 1つのウォレット内で分離された資金の領域(ポケット)を提供します。 選択されたアドレスタイプは固定され、デフォルトはTaprootです。

  • HWI #842は、ウォレットからトランザクションに署名する前に、 対応するハードウェア署名デバイスに名前付きのアウトプットスクリプトディスクリプターを登録するための registerdescriptorコマンドを追加します。 BitBox02、Coldcard、Jade、および非レガシーのLedgerデバイス向けの実装が追加されています。 BIP388ウォレットポリシー(ニュースレター #302参照)を使用するデバイスの場合、 HWIはディスクリプターをウォレットディスクリプターテンプレートと鍵情報ベクターに変換し、 後の署名に必要なデバイス固有の登録データも返します。

もっと知りたいですか?

このニュースレターで言及されたトピックについてもっと議論したい方は、 16:30 UTCに Riverside.fmで毎週配信されているBitcoin Optech Recapにご参加ください。 この議論は録画もされ、ポッドキャストページからご覧いただけます。