HTLCとアトミックスワップ
仲介所を通さず別々のチェーンのコインを交換しても、片方だけ持ち逃げされない。HTLCのハッシュ開示とタイムロックが「全部成立か全部返金か」をどう保証するかを原理から押さえられる。
- 1.HTLC(ハッシュタイムロックコントラクト)は「正しいプリイメージを示せば送金、期限切れなら返金」の二択を強制する条件付きロック。ハッシュロックが原子性を、タイムロックが持ち逃げ防止を担う。
- 2.アトミックスワップは同一の秘密 s(そのハッシュ h=H(s))を両チェーンのHTLCに共有させる。受取人が一方を s で開けた瞬間 s が台帳に露出し、送り手はもう一方も s で回収できる。全成立か全返金かの二値に収束する。
- 3.タイムアウトは非対称に設定する(先に開ける側の期限を長く)。これで相手が土壇場で開けても自分が返金だけ食らう事態を防ぐ。ライトニングの各ホップも同じHTLCで、支払いの中継を信頼なしに連鎖させる。
仲介者なしで「交換」を成立させる難問
AさんがチェーンXのコインを、BさんがチェーンYのコインを持ち、互いに交換したいとします。取引所(カストディアル)に預ければ簡単ですが、それは第三者に資産を委ね、/blockchain/signatures-wallets-keys/ でいう「鍵を持たない=所有していない」状態を受け入れることです。では信頼できる仲介者なしに、二つの独立した台帳をまたいで交換できるでしょうか。
素朴に「AがXを送る→BがYを送る」と逐次に行うと、先に送った側が丸損するリスクが残ります。Aが送金した直後にBが姿を消せば、AはXを失ったままYを受け取れません。二つのチェーンは互いの状態を知らず、片方の送金をもう片方の送金の条件にする自然な手段がないのです。
アトミックスワップはこの交換を、**「両方成立するか、両方とも元に戻るか」のどちらかしか起こらない(原子性, atomicity)ように仕立てる技法です。その中核部品がHTLC(Hash Time-Locked Contract, ハッシュタイムロックコントラクト)**です。
HTLCは条件付き支払いを表す仕組みであって、/blockchain/smart-contracts-evm/ のような汎用スマートコントラクトを必須とはしません。Bitcoin では OP_SHA256 と OP_CHECKLOCKTIMEVERIFY(CLTV)を組み合わせたロックスクリプトで実現され、Ethereum では小さなコントラクトとして書けます。/blockchain/utxo-vs-account-model/ の違い(UTXOのスクリプト条件か、アカウント上のコントラクト状態か)で実装は変わりますが、満たすべき論理は同一です。
HTLCの二つのロック
HTLCは一つの資金に二通りの解錠条件を同時に掛けます。名前のとおりハッシュ(Hash)とタイムロック(Time-Lock)です。
- ハッシュロック:ある秘密値
s(プリイメージ, preimage)のハッシュh = H(s)を事前に公開しておく。受取人は「H(x) == hとなるx(=s)」を提示できたときだけ資金を受け取れる。ハッシュ関数は一方向なので、hからsは逆算できず、正しいsを知る者だけが解錠できます(ハッシュの一方向性は /blockchain/merkle-tree-verification/ で扱う衝突・原像困難性が土台)。 - タイムロック:一定の期限(ブロック高または時刻)を過ぎたら、送金人が自分に払い戻せる。受取人がいつまでも
sを出さず資金が凍りつくのを防ぐ、返金(refund)の逃げ道です。
擬似コードで骨格を示します。地の文の集合は {送金, 返金} の二択です。
HTLC(送金人=Alice, 受取人=Bob, 金額, h, 期限T):
条件A(送金 / claim):
Bob が x を提示し H(x) == h ならば → Bob へ支払う
条件B(返金 / refund):
現在時刻 >= T かつ Alice の署名 → Alice へ払い戻す
重要なのは、この二条件は排他的に決着することです。Bob が期限前に s を出せば送金が確定し、s が出ないまま期限が来れば返金が確定します。どちらの経路でも資金が宙に浮かないよう設計されている点が、HTLC が「条件付き支払い」として信頼できる理由です。
ハッシュロックだけでは、受取人が s を握ったまま解錠を拒む「グリーフィング(嫌がらせ)」で資金を無期限に凍結できてしまいます。タイムロックは「期限を過ぎたら送り手が取り戻せる」というフォールバックを与え、最悪でも元本が返ることを保証します。原子性は「成立」だけでなく「確実な返金」の両輪で初めて成り立ちます。
アトミックスワップ:一つの秘密を二つのチェーンで共有する
HTLC単体は一つのチェーン上の条件付き支払いにすぎません。アトミックスワップの妙は、同じ h(=同じ秘密 s)を両チェーンのHTLCに使い回すことにあります。これにより、片方のHTLCを開ける行為が、もう片方を開ける鍵を自動的に露出させます。
AliceがチェーンXのコインを、BobがチェーンYのコインを交換する手順です。
0. Alice が秘密 s をランダム生成し、h = H(s) を計算(s は自分だけが知る)
1. Alice: チェーンX に HTLC を作成
「s を示せば Bob が受取/期限 T_X 経過で Alice へ返金」
2. Bob: h を見て、チェーンY に HTLC を作成
「s を示せば Alice が受取/期限 T_Y 経過で Bob へ返金」
※ T_Y < T_X(Bob側の期限を短く)に設定するのが要
3. Alice: チェーンY の HTLC を s で解錠 → Y のコインを受け取る
この瞬間、s がチェーンY の台帳上に公開される
4. Bob: 台帳に現れた s を読み取り、チェーンX の HTLC を s で解錠
→ X のコインを受け取る。スワップ完了
ここに原子性の核心があります。ステップ3でAliceが s を使った瞬間、s は公開台帳に刻まれ、誰でも読める——とりわけBobが。するとBobは同じ s でチェーンX側を回収でき、交換は両方成立します。逆にAliceが最後まで s を出さなければ、両方のHTLCは期限切れでそれぞれの送り手に返金され、交換は両方とも不成立になります。「片方だけ成立」は原理的に起こりません。
秘密 s を握るのは、スワップを望む起点となる側(ここでは Alice)です。s を最初に使う(露出させる)のも Alice で、これはAlice自身が「相手のチェーンのコインを取りに行く」動作と一体です。Aliceが s を露出させて初めて Bob が反対側を回収できる——つまり利益を得る側が先に手の内(s)を明かす構図にすることで、露出のインセンティブが自然に生まれ、Bobは受け身でも取りはぐれません。
タイムアウトはなぜ非対称でなければならないか
素朴には両チェーンの期限を同じにしたくなりますが、それは危険です。先に相手チェーンを開ける側(Alice)の返金期限を、後から回収する側(Bob)の期限より長く取らねばなりません(上の T_Y < T_X)。
理由は「土壇場での開示」を潰すためです。仮に T_X == T_Y だとすると、AliceはチェーンYを開けて s を露出させる操作を期限ぎりぎりまで遅らせられます。Aliceが T_Y の直前に s でチェーンY側を回収すると、Bobが台帳から s を読み取ってチェーンX側を開けようとした頃には T_X も過ぎており、Aliceが T_X 経過を理由にチェーンXを自分へ返金してしまう。結果、AliceはX(返金)とY(回収)の両取り、Bobは丸損です。
危険な対称ケース(T_X == T_Y = T):
t ≈ T直前: Alice が Y を s で回収(s 露出)
t ≈ T直後: Bob が s を見て X を開けようとする
…が T 経過済みなので Alice が X を返金で奪える → Bob 損失
安全な非対称(T_Y < T_X, 例 T_Y=24h, T_X=48h):
Alice は T_Y までに Y を開けねばならない(過ぎれば Bob に返金される)
Alice が s を露出させた後、Bob には T_X まで十分な猶予がある
→ Bob は確実に X を回収できる
つまり非対称なタイムロックは、「後で s を知る側に、それを使って回収するための時間的マージンを保証する」ための構造です。この差分(デルタ)は、トランザクションが取り込まれ確定するまでの余裕を見込んで決めます。
s が「台帳に現れた」とみなせるのは、その解錠トランザクションが十分に確定してからです。確率的ファイナリティのチェーンでは、浅い確認で s を露出とみなすと再編成(リオーグ)で覆される恐れがあります。タイムロックのデルタは、両チェーンの確定所要時間と、相手が反応してトランザクションを取り込ませる時間の合計を上回るように取らねば、非対称性の保護が破れます。
前提条件と限界
HTLCベースのスワップは強力ですが、成立には前提があります。両チェーンが同じハッシュ関数(少なくとも相互に検証可能な H)とタイムロック機構を持つことです。多くのBitcoin系はSHA-256とCLTVを備え、Ethereumも同等のことができるため相互運用が成り立ちます。逆に、任意のハッシュロックやタイムロックを表現できないチェーンとは直接スワップできません。
| 観点 | HTLCアトミックスワップ | 取引所(カストディアル) |
|---|---|---|
| 資産の保管 | 自分の鍵のまま(ノン・カストディアル) | 第三者が預かる(鍵を渡す) |
| 信頼の前提 | 両チェーンのプロトコルと自分の実装のみ | 取引所の運営・支払い能力を信頼 |
| 原子性の担保 | ハッシュ開示+タイムロックで全成立/全返金 | 取引所の内部処理に依存 |
| 前提技術 | 同一ハッシュ関数とタイムロック機構が両側に必要 | 特になし(口座があればよい) |
| 主なリスク | タイムロック設定ミス、確定前露出、手数料と待機 | 取引所の破綻・凍結・ハッキング |
限界も明確です。(1)待機時間:安全なデルタを確保するため、最悪ケースでは数時間〜数十時間の返金待ちが生じ得ます。(2)手数料:両チェーンでロック用・解錠用の複数トランザクションを要し、少額交換では割高です。(3)プライバシー:同じ h が両チェーンに現れるため、外部からスワップの対を関連付けられる余地があります。(4)流動性のマッチング:相手を見つける仕組み自体はHTLCの外側の問題です。
ライトニングネットワークとの関係
HTLCは異チェーン交換だけの道具ではありません。ライトニングネットワーク——Bitcoin上の/blockchain/layer2-rollups/ 的な決済レイヤー(ペイメントチャネル網)——の支払い中継の心臓部でもあります。
ライトニングでは、AがCへ支払うのにA→B→Cと複数ホップを経由することがあります。このとき各ホップの中継者Bを信頼せずに済むよう、経路上の全ホップが同一の h を持つHTLCで連結されます。
受取人 C が秘密 s を作り、h = H(s) を支払人 A に渡す(invoice 経由)
経路: A --HTLC(h)--> B --HTLC(h)--> C
決済(s が下流から上流へ伝播):
C が B から s と引き換えに受領 → C が s を B に開示
B は得た s を使って A から受領 → 中継の立て替えを回収
→ 各ホップは「先に払って、s で取り戻す」を連鎖。s が経路を逆流する
各ホップのタイムロックは下流ほど短く、上流ほど長く設定されます(アトミックスワップの非対称性と同じ原理をマルチホップに一般化したもの)。これで、下流で s が露出してから上流が確実に回収できる時間差が各段で保証され、どの中継者も、自分が下流へ払った分を上流から取り戻せることが保証されます。中継者Bは資金を持ち逃げできず、かつ立て替えで損もしません。
ライトニングのチャネルは、未確定のコミットメントトランザクションを相互に保持して更新します。もしトランザクションIDが第三者に書き換えられると(署名可鍛性)、事前に署名した払い戻し経路が無効化され資金が危険に晒されます。/blockchain/signatures-wallets-keys/ で触れた SegWit による可鍛性の除去がライトニング実用化の前提だったのは、このためです。
・HTLC=ハッシュロック(H(x)==h で送金)+タイムロック(期限超過で返金)の二択を強制する条件付き支払い。
・アトミックスワップは同一の s(h=H(s))を両チェーンのHTLCで共有。受取側が s で開けると s が台帳に露出し、相手も回収→全成立か全返金の二値。
・タイムロックは非対称(後で s を知る側の猶予を長く)。確定前の s 露出やリオーグを見込んでデルタを取る。
・ライトニングの各ホップも同一 h のHTLCで連結し、下流ほど短いタイムロックで中継者の取りはぐれと持ち逃げを同時に防ぐ。SegWitの可鍛性除去が前提。
まとめ
- HTLCは一つの資金にハッシュロック(正しいプリイメージ
sの提示で送金)とタイムロック(期限超過で送り手へ返金)を同時に掛け、「送金」か「返金」の二択に決着させる条件付き支払いである。 - アトミックスワップは同じ秘密
s(そのハッシュh)を二つのチェーンのHTLCに共有させる。受取側がsで一方を開けた瞬間sが公開台帳に露出し、相手も同じsで他方を回収できる。ゆえに両方成立か両方返金しか起こらない(原子性)。 - タイムロックは非対称に設定する(後から
sを知る側の回収猶予を長く)。対称にすると土壇場の開示で片側だけ持ち逃げされうる。確定前露出やリオーグを見込んでデルタを決める。 - 前提は両チェーンが同一のハッシュ関数とタイムロック機構を持つこと。ノン・カストディアルで信頼を要さない反面、待機時間・手数料・プライバシー・相手探しという実務的制約がある。
- ライトニングネットワークのマルチホップ決済も、経路全体を同一
hのHTLCで連結し、下流ほど短いタイムロックで各中継者の持ち逃げ防止と立て替え回収を両立させる。SegWitによる署名可鍛性の除去がその前提である。
ブロックチェーン Article
HTLCとアトミックスワップを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ブロックチェーン
比較で見る軸
難易度: advanced / カテゴリ: ブロックチェーン / タグ数: 6
導入後に効く点
アトミックスワップは同一の秘密 s(そのハッシュ h=H(s))を両チェーンのHTLCに共有させる。受取人が一方を s で開けた瞬間 s が台帳に露出し、送り手はもう一方も s で回収できる。全成立か全返金かの二値に収束する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ブロックチェーン
- タグ数
- 6
判断チェックリスト
- 自社の用途が「ブロックチェーン / HTLC」に近いか確認する。
- 強みである「HTLC(ハッシュタイムロックコントラクト)は「正しいプリイメージを示せば送金、期限切れなら返金」の二択を強制する条件付きロック。ハッシュロックが原子性を、タイムロックが持ち逃げ防止を担う。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。