PTLC(Point Time Locked Contracts)
Lightning Network(LN)の次世代支払いロック機構であり、現在の HTLC(Hash Time Locked Contract) を置き換える提案です。
📌 HTLC = ハッシュロック
📌 PTLC = 楕円曲線ポイントロック
なぜPTLCなのか?(HTLCの課題)
HTLC は以下の構造:
支払い条件:支払うためには preimage を提出せよ
受け取り:hash(preimage) が一致したら支払い成功
問題点:
⚠ 同じ payment_hash がルート全体で再利用される(=リンク可能)
⚠ マルチパス支払い(MPP)をまたいだプライバシーが弱い
⚠ シークレットを第三者に教えることで atomicity を壊す可能性がある(scriptless scriptsが難しい)
PTLCの基本仕組み
PTLCでは、支払い条件が以下のようになります:
支払い条件:特定の楕円曲線ポイントの秘密に対応する署名(Schnorr)を提出せよ
支払元と受取人の間で point(楕円曲線上のポイント)を共有し、
受取人がその point に対応する秘密値(x)を提出すれば支払い成功
送信者は: P = x * G というポイントを受け取り、チャネルに 「Pに対応する秘密鍵 x を提出すれば取り出せる」条件 を付ける
受信者は: x を知っているので、提出して支払い成功
ここで G は楕円曲線の基点、x は秘密値、P は公開ポイント。
table:s
| 項目 | HTLC | PTLC |
| ------------ | ------------------ | ----------------------------- |
| ロック方法 | hash(preimage) | elliptic curve point |
| プライバシー | 弱い(同じ hash を使う) | 強い(point は一回ごとに変更可能) |
| Atomicity | preimage共有で破壊されうる | 複数 recipient に異なる secret を使える |
| MPP連携 | hashで繋がるためリンクされやすい | 独立性が高く匿名性が高い |
| スクリプトレススクリプト | 非対応(script使用) | ✅ 対応(Schnorr署名ベース) |
実際の支払い例(簡易イメージ)
Alice → Bob に 1000 sat 送る
Bob はランダムな秘密 x を生成 → P = xG を作る
P をエンコードして invoice に含める(pointは公開されてよい)
Alice はルートを決定して支払い送信
Bob は x を使って Schnorr署名を提出(または adaptor signature を完成)して資金受け取り
応用例:AMP(Multi-Path)でも P_i を個別に
Bob が 3本の経路で支払いを受け取るとき、それぞれ:
P1 = x1G, P2 = x2G, P3 = x3G
Bob はそれらの秘密 x1, x2, x3 を加算し:
x_total = x1 + x2 + x3 → 最終支払いの鍵として使用
→ これにより、外部からはリンク不可能なのに、受け取る側では合成可能という強力な匿名支払いが実現します。
-----------------------------------
Adaptor Signature(アダプター署名)
PTLCやDLC(Discreet Log Contracts)などに不可欠な暗号技術で、
ある秘密(例:x)を署名に埋め込み、後で署名を完成させることでその秘密を公開できるという仕組みです。
「署名の一部(未完成な署名)を渡しておき、後から完全な署名を受け取ったときに、ある秘密 x を取り出せる」ように設計された署名方式
基本構造(Schnorrベース)
前提:
通常のSchnorr署名:s = k + e * sk
k:ランダム値、sk:秘密鍵、e = H(R || msg)
アダプター署名の流れ
① 相手から秘密 x を含んだ「公開鍵」 T = x*G を受け取る
② 自分は署名を以下のように作る:
通常の署名は s = k + e*sk
アダプター署名は s' = s + x を省略した「未完成な署名 s'」を渡す
つまり:署名を完成させるには x を加えなければならない!
③ 相手が s = s' + x を完成させ、公開すると
自分は s と s' から x = s - s' を復元できる!
具体的な使い方:PTLCの場合
Bob(受信者)は x をランダムに生成し、T = xG を Alice(送信者)に渡す
Alice は T を使って PTLC を作成(= このポイントに対応する秘密を出せば受け取れる)
支払いが実行され、Bob が s = s' + x を使って署名し資金を取得
Alice は s' と s を比較して x を取得(これにより atomic swap や DLC のトリガーが可能)
通常のSchnorr署名(復習)
まず前提として、Schnorr署名の基本構造を確認します。
✔ 通常の署名
鍵ペア:
秘密鍵:sk
公開鍵:PK = sk * G
署名対象メッセージ:m
ランダム値:k
コミットメント:R = k * G
チャレンジ:e = H(R || PK || m)
シグネチャ:s = k + e * sk
→ 署名ペアは (R, s) で、検証側は s * G = R + e * PK を確認。