用語集 / ライトニングとレイヤー2
ノードエイリアス
- ノードエイリアスとは?
- ノードエイリアスとは、ライトニングノードが自身の署名済みnode_announcementに書き込む32バイトの名前で、生の公開鍵の代わりに表示する読みやすい文字列をエクスプローラーやウォレットに提供するものです。
すべてのライトニングノードは自分で名前を選んで署名します。それが仕組みのすべてであり、問題のすべてでもあります。BOLT 7はこのフィールドにちょうど32バイトを割り当て、余りをゼロで埋め、受信側のソフトウェアに名前が自己署名であることを示唆するよう指示しています。2つのノードが同じ名前を名乗ることを妨げるものは何もないため、エイリアスを支払い相手の証明として扱ってはいけません。
仕組み
ノードエイリアスは、gossipメッセージタイプ257であるnode_announcementの中に含まれ、その名前が指すのと同じ鍵で署名されます。
このメッセージには、署名、機能ビットフィールド、タイムスタンプ、node_id、3バイトのrgb_color、32バイトのエイリアス、そしてノードが接続を受け付けるネットワークアドレスが含まれます。エイリアスと色の設定は任意ですが、エイリアスを有効なUTF-8にすることは任意ではなく、使われない末尾のバイトはゼロでなければなりません。
32バイトはバイトの予算であり、文字数ではありません。このフィールドは有効なUTF-8を保持するため、1文字に複数バイトを使う文字体系の名前は、単純なラテン文字の名前よりも入る文字数が少なくなります。
名前の変更は安価です。ノードは各タイムスタンプを前回より大きく設定しなければならないため、新しい名前は新しいnode_announcementにすぎず、ピアは古いレコードの代わりにそれを受け入れ、再ブロードキャストのためにキューに入れます。プロトコルにはレジストリも手数料も一意性の確認もありません。
このフィールドは無料の広告枠ではありません。BOLT 7は、既知のチャネルにまだ関連付けられていないノードからのアナウンスを無視し、チャネルはその資金供給のアウトプットが6回の承認を得るまでアナウンスできないため、読みやすい名前には、誰かがリレーする前にオンチェーンのトランザクションとロックされた資金が必要になります。
BOLT 7には、エイリアスに特化して書かれたセキュリティの節があります。エイリアスはユーザーが定義するものなので、表示するときも保存するときもインジェクションの経路になります。そのため実装者には、HTMLやJavaScriptに挿入する前にサニタイズすること、保存するときはプリペアドステートメントを使うことが指示されています。エイリアスを表示するソフトウェアには、その自己署名の出自をほのめかすことも指示されています。
表示される場所
ノードエイリアスは、ライトニングのグラフが人間向けに描画されるあらゆる場所に現れます。
BOLT 7は、受信側のソフトウェアがインターフェース内でノードを参照するためにエイリアスとrgb_colorを使えるようにしており、だからこそグラフエクスプローラーやピアの選択画面は鍵ではなく名前を表示します。ルーティングの運用者はこれに頼ります。node_idは誰も2回入力しないものだからです。
エイリアスがあるかどうかは、あなたのウォレットが実際に何であるかによって決まります。Phoenixは端末上で本物の自己完結型ライトニングノードを実行するため、識別鍵を保持し、名前をアナウンスできます。Wallet of Satoshiはカストディモードではあなたに代わって鍵を保持するため、グラフの中にあなたのノードは存在せず、名前を付けるものもありません。
支払いや受け取りは名前には依存しません。インボイス、ルート、チャネルの開設はすべてnode_idを基準にします。
ノードエイリアスvsライトニングアドレス
ノードエイリアスは機械に名前を付けるもので、ライトニングアドレスはインボイスを要求する場所に名前を付けるものです。エイリアスには支払えません。ドメインもエンドポイントも金額も持たず、プロトコルの中でそれを支払い可能な何かに解決するものはありません。ライトニングアドレスは逆の役割を果たし、HTTPSで解決して実際のインボイスをあなたのウォレットに渡します。
ノードエイリアスvsショートチャネルID
ショートチャネルIDは、チャネルの資金供給アウトプットの8バイトのロケーターであり、BOLT 7はピアがその代わりとなるエイリアスショートチャネルIDを渡すことも認めています。この2つ目のエイリアスは、言葉以外にノードエイリアスと共通するものはありません。ノードは、アナウンスされていないチャネルについてchannel_updateを送信でき、short_channel_idには実際のものではなくピアから提供されたエイリアスを設定します。その場合、プライバシー上の理由からdont_forwardを設定し、その更新を決して転送してはなりません。一方のエイリアスはノードが見せたい公開名であり、もう一方はノードが隠したい数字の私的な代替物です。