ライトニングネットワークのインボイスは長い文字列で可読性が低く、有効期限もあるため、比較的扱いにくい形式のデータでした。それを解決すべく、LNURLそしてLN Addressという技術が生まれました。

Lightning Addressと乱立するインボイス請求方法
ライトニングネットワークを用いたペイメントにはインボイスという1回1回の支払いごとに異なる情報が用いられます。そのため、非推奨ながらも固定のアドレスを使い回せるオンチェーンの送金と異なり、ライトニングで送金を受け取るにはインボイスの発行という手順が最初に必要になります。 送金を送金者から開始したい場合に、宛先のノードにインボイスの発行を依頼する方法は前からいくつかありましたが、最近このあたりを考えている人が多いように感じます。今日は8/20にリリースされたLightning Addressを紹介し、他の方法との類似点や違いを見ていった後に、将来的にどうなるのか予想してみます。 https://lightningaddress.com/ 既存のインボイス請求方法 既存のインボイス請求方法で一番有名なのは圧倒的にLNURL-Payだと思われます。これはLNURLという仕様群の1つで、ノードの運営者がLNURLのリクエストを捌くサーバーを動かすことで、「インボイスをくれ」「はい、どうぞ」という流れなどを自動化することができます。 毎回異なるインボイスと違い、LNURLは変更せず使

今では多くのウォレットやサービスがLN Addressに対応しており、ユーザーはメールアドレスのような文字列を入力して送金できるようになっています。

また、可読性は犠牲になってしまいますが、LNURLサーバーを運用せずに同じような機能が実現できるBOLT12という機能が各ライトニングノード実装に徐々に導入されています。

BOLT12の登場がついにライトニングネットワークにサブスクをもたらすのか
ライトニング決済は数年前と比べ安定性も大幅に改善しており、普通の支払いや送金が失敗するなどのトラブルはかなり減ったように思います。ところがインターネット上での支払いの少なくない割合を占める「サブスクリプションの支払い」にライトニングを使う例は全くと良いほど出てきていません。ライトニングの仕組みとの親和性が低いためです。 これに対してBOLT12とセットで提案されたRecurring Paymentsという規格がライトニングにサブスクリプションをもたらす!と数年前に話題になりました。今日はBOLT12のLndへの導入が年末~来年頃に見込まれる中、ついにライトニングがサブスクリプションの支払いに使われるようになるのか?という疑問を掘り下げていきます。 ・ライトニングでサブスク決済が難しかった理由は「毎回手動で支払う必要があるから」 ・BOLT12には当初はRecurring Payments (繰り返しの支払い)という仕様が含まれていた。これはウォレットが定期的に特定の金額のインボイスを自動的に取得して支払うというものであった。 ・Recurring PaymentsはBOLT12

もはやオンチェーン送金よりもユーザーフレンドリーになったライトニング送金ですが、オンチェーン送金にもLN Addressのような可読性の高い送金先指定方法は実現できないのでしょうか?

以前紹介したBIP353というDNSを使った仕組みがありました。当時はBOLT12による送金を前提に考えていましたが、ビットコインアドレスやSilent Paymentsアドレスを設定することでオンチェーンの送金にも利用できます。

BOLT12でLightning Addressのような機能をよりシンプルに実現するための提案BIP-353
ライトニングでは原則的に送金を受け取る側が先に一度限りしか使えないインボイスを発行して送金者に送る必要があり、これがユーザー体験を複雑にしていると言われがちです。そこでLNURL-payという仕組みができ、ウェブサーバーを立ち上げて特定のパスへのアクセスをさばくことで「オンデマンドでインボイスを発行できる」ようになりました。 LNURL自体も人間には読めない長い文字列であったため、LNURLへと「変換」できるLightning Addressというものが生まれました。メールアドレスのようにuser@domain.comという形式のLightning Addressに対して支払いたいユーザーのウォレットは、domain.com/.well-known/lnurlp/userというURLにインボイスを取得しに行きます。 詳細は下記の記事からどうぞ。 Lightning Addressと乱立するインボイス請求方法ライトニングネットワークを用いたペイメントにはインボイスという1回1回の支払いごとに異なる情報が用いられます。そのため、非推奨ながらも固定のアドレスを使い回せるオンチェーンの送

今日はこの規格に再び興味が出てきたので、ハードウェアウォレットにおける対応などについて前回の話を発展させてみたいと思います。

・DNSSECを使ったBIP353の仕組みとHWW

・ハードウェアウォレットの対応には時間がかかりそう

・アドレス再利用がデファクトになってしまっている取引所宛の送金などに有効

DNSSECを使ったBIP353の仕組みとHWW

冒頭で参照した過去記事にあるとおり、BIP353とはEメールアドレスのような形式のHRN(Human Readable Name)と呼ばれる形式に情報をエンコードし、それを下にDNSクエリを行うとbitcoin:~というおなじみのBIP21形式の送金先情報をDNSSECの仕組みで検証可能な形で取得できるプロトコルです。

用語が難しいので図で表すとこうなります:

実際はメールアドレスなどと見分けるためにHRNの先頭に₿記号をつけるのが推奨されています

LN Addressではウォレットがサーバーからインボイスを取得してそのインボイスに対して支払っていましたが、BIP353におけるHRNの作成にサーバーは不要で、あくまでドメインの所有とDNS設定で作成可能です。また、DNSクエリは通信経路上で結果を改ざんされやすいので、DNSSECという機能でDNSルートサーバーから連鎖的に改ざんされていないことを検証できるようになっています。

💡
余談ですが、DNSSECのセキュリティの大元であるルート署名セレモニーはけっこう面白いです。Cloudflareによる説明がわかりやすいのでインターネットのセキュリティの根本に興味がある方は一読する価値あると思います。

さて、DNSクエリを必要とする仕組みですがハードウェアウォレットからDNSSECの検証を行うことはできるのでしょうか?

結論から言うと、PSBTにDNSSEC Proofを含める形式もセットで提案されているので、ソフトウェアウォレットでBIP353のプロトコルを通して取得してきたビットコインアドレス、DNSSEC Proofとその元となるBIP353 HRNをハードウェアウォレットに渡し、ハードウェアウォレットがDNSSEC Proofを検証するとHRNとアドレスが表示される(HRNが表示されることによって正しく取得してきたアドレスだとわかる)、というフローになります。

実際はBIP353に現時点で対応しているソフトウェアウォレットは非常に少なく(Zeusくらい)、対応ハードウェアウォレットはまだ存在しない。

すなわち、HWWでもアドレスとHRNの対応を検証できるのです。これは送金時のUIにとって革命的な進化といえるでしょう。

ハードウェアウォレットの対応には時間がかかりそう

しかし、上で述べた通り、現時点でファームウェアがDNSSECの検証を含めたBIP353に対応しているHWWは存在しません。Spiralに所属するビットコイン開発者のMatt CoralloはBIP353を実装するハードウェアウォレットと、ハードウェアウォレットに対応しているソフトウェアウォレットにそれぞれ$1000のバウンティを発表しました:

BIP353のように新しいプロトコルはネットワーク効果が得られるまで費用対効果が得られないためなかなか普及しないという問題がありますが、LNDがBOLT12に対応したら利用が伸びる可能性は小さくないのでこれから徐々に対応されていくと期待しています。

💡
カスタムのビットコインスクリプトに対応するHWWもMiniscriptの登場から数年経って出てきたので、少なくとも当初はニッチなユースケースであるから単純に時間がかかるのだと思います。

ただ、BOLT12やSilent Paymentsを見ていると、実際にBIP353の利用が伸びたときには固定のビットコインアドレスが主流になる予感はしています。アドレスの再利用はビットコインの使い方として非推奨ですが、それでもよいのでしょうか?

アドレス再利用がデファクトになってしまっている取引所宛の送金などに有効

もちろん、アドレスの再利用はしないに越したことはありません。しかし、LNURL/LN Addressのようにサーバーを運営したり、Silent Paymentsのように送金者にも負担をかけながら自分もフルノードが必ず必要というような重荷の必要なく、セキュアに読みやすい形式で送金者にアドレスを伝えられるBIP353 HRNは画期的で求められているものだと思います。(xpubを公開するのではアドレスを全公開してしまっているので再利用のデメリットをほとんど回避できていません)

💡
Web3界隈における.eth .btcみたいなドメイン風のNFTの普及率や、ウォレットで送金時に指定することで送金ミスを減らせるメリットがそれを表しています。

でも実はアドレス再利用がバンバン現役なメジャーユースケースが存在しています。取引所の預け入れアドレスです。多くの取引所では預け入れのたびに新しいビットコインアドレスを発行させてくれません。これがブロックチェーン分析の格好の標的となり、ユーザーに不利益をもたらしているのにもかかわらずです。

金額が大きくなりやすく、マルウェアによる改ざんの対象となりやすく、送金ミスが怖い取引所の預け入れアドレスこそBIP353対応すべきユースケースなのではないでしょうか。ハードウェアウォレットからmy-deposit-address@bitbank.ccに対する送金を検証できると、ビットコインのユーザーエクスペリエンスの改善になるように思います。

💡
強いて言えば、メールアドレス風のプロトコルが増えてきているのでそれら同士が混乱を呼ばないかは注意が必要かもしれません。

まとめ

・BIP353はメールアドレスのような形式でDNSサーバーからビットコインアドレスやBOLT12などを、改ざん耐性のある方法で取得してくる規格

・ハードウェアウォレット側で改ざん有無の検証が行えるため、HWWの画面で「◯◯@△△.com」宛の送金を確認することができ、UXの改善につながる

・ネットワーク効果がないため対応するウォレットがほぼないので、個人がバウンティを出している。また、LNDがBOLT12対応すればもう少し利用が増えるかもしれない