1本の鍵は1回しか使えない:Stacksが「ワンタイム署名」でsBTCを送金、量子耐性はどう実現する?
昨日は、ビットコインのかなりの量のコインで公開鍵がすでに「露出している」と話しました。今日は、その解決策の実演を見てみましょう。
Stacks Labsは11月11日、公式ブログと公式Xで、Stacksメインネット上でsBTCの送金を完了したと発表しました。使われたのは、現在よく使われている楕円曲線署名ではなく、Lamportワンタイム署名で、プロトコルのアップグレードは行っていません。
まず、なぜ署名方式を変える必要があるのか。
ビットコインもStacksも、現在は楕円曲線署名を使っています。公式発表の趣旨は、十分に強力な量子コンピューターがあれば、公開鍵から秘密鍵を逆算し、署名を偽造して資金を送金できてしまうということです。ハッシュベースの署名は、既知の量子攻撃に耐性があると考えられています。
今回、具体的にどう実装したのか見てみましょう。
1. チェーンは変更せず、コントラクトだけを作成:Stacksのコントラクト言語Clarityには、もともとハッシュ関数が備わっています。エンジニアは「金庫」コントラクトを作成し、有効なLamport署名の検証に成功した場合にのみ、資金を払い出すようにしました。ハッシュアルゴリズムにはSHA-256を使っています。
2. 署名で何を固定しているのか:どの金庫から出すのか、どの資産をいくら、誰に送るのか、次の鍵はどれか、さらにチェーン、コントラクト、現在の送金カウンターもひも付けています。どれか一つでも変更すれば、認証は無効になります。
3. 1本の鍵で署名できるのは1回だけ:同じLamport鍵で異なる2つのメッセージに署名すると、より多くの秘密値が露出し、安全性が損なわれます。そのため送金が成功すると、コントラクトは同じトランザクション内でカウンターを1つ増やし、次の鍵をセットします。古い認証は再利用できません。署名ソフトウェアは指示をあらかじめ記録し、再起動後も同じ鍵で別のメッセージに署名することを拒否します。
4. 手数料を払うのは誰か:別のStacksアカウントがメッセージを送信し、STXで手数料を支払います。金庫は自ら署名を検証したうえで、メッセージに指定された受取人にsBTCを送ります。
5. デメリット:公式も、Lamport署名は楕円曲線署名よりかなりサイズが大きいと認めています。構造がシンプルで監査しやすいため、今回この方式を選びました。最終的にどの方式を採用するかは、引き続き検討中です。
今回の件で何が変わっていないのか、区別しておきましょう。
- これはプロトタイプの実演であり、ビットコインのプロトコルアップグレードではありません。ビットコイン自体は、まだ量子耐性を備えていません。
- ローカルテストでは、受取人の変更、次の鍵の変更、完了済み送金の再実行は、いずれも拒否されることを確認しました。コントラクト、署名ソフトウェア、テストの証拠はGitHubで公開されています。
- 公式によると、次の段階ではまずStacksネットワーク自体に量子耐性を持たせる方法と移行経路を評価し、その後、sBTCの裏付けとなるBTCの量子リスクを調査します。続報は「今年後半」に公開する予定です。
すぐに役立てられるポイント:
1. 「量子耐性」という宣伝を見たら、まず3つ質問しましょう。プロトコルのアップグレードなのか、それともコントラクトの実演なのか。メインネットなのか、テストネットなのか。コードとテストの証拠は公開されているのか。今回の答えは順に、コントラクトの実演、メインネット、公開済みです。
2. 自分でできる最も簡単な対策は、やはりこれです。同じビットコインアドレスを繰り返し使って入金やおつりの受け取りをしないこと。使用済みアドレスにあるコインの公開鍵は、すでにブロックチェーン上に記録されています。
3. 「量子」を口実にコインの購入やウォレットの乗り換えを勧められたら、まずプロジェクトの公式ブログの原文を探して確認しましょう。スクリーンショットをうのみにしないでください。
フォローして、毎日すぐに使える失敗回避の方法を一つずつ解説します。売買の煽りはしません。
昨日は、ビットコインのかなりの量のコインで公開鍵がすでに「露出している」と話しました。今日は、その解決策の実演を見てみましょう。
Stacks Labsは11月11日、公式ブログと公式Xで、Stacksメインネット上でsBTCの送金を完了したと発表しました。使われたのは、現在よく使われている楕円曲線署名ではなく、Lamportワンタイム署名で、プロトコルのアップグレードは行っていません。
まず、なぜ署名方式を変える必要があるのか。
ビットコインもStacksも、現在は楕円曲線署名を使っています。公式発表の趣旨は、十分に強力な量子コンピューターがあれば、公開鍵から秘密鍵を逆算し、署名を偽造して資金を送金できてしまうということです。ハッシュベースの署名は、既知の量子攻撃に耐性があると考えられています。
今回、具体的にどう実装したのか見てみましょう。
1. チェーンは変更せず、コントラクトだけを作成:Stacksのコントラクト言語Clarityには、もともとハッシュ関数が備わっています。エンジニアは「金庫」コントラクトを作成し、有効なLamport署名の検証に成功した場合にのみ、資金を払い出すようにしました。ハッシュアルゴリズムにはSHA-256を使っています。
2. 署名で何を固定しているのか:どの金庫から出すのか、どの資産をいくら、誰に送るのか、次の鍵はどれか、さらにチェーン、コントラクト、現在の送金カウンターもひも付けています。どれか一つでも変更すれば、認証は無効になります。
3. 1本の鍵で署名できるのは1回だけ:同じLamport鍵で異なる2つのメッセージに署名すると、より多くの秘密値が露出し、安全性が損なわれます。そのため送金が成功すると、コントラクトは同じトランザクション内でカウンターを1つ増やし、次の鍵をセットします。古い認証は再利用できません。署名ソフトウェアは指示をあらかじめ記録し、再起動後も同じ鍵で別のメッセージに署名することを拒否します。
4. 手数料を払うのは誰か:別のStacksアカウントがメッセージを送信し、STXで手数料を支払います。金庫は自ら署名を検証したうえで、メッセージに指定された受取人にsBTCを送ります。
5. デメリット:公式も、Lamport署名は楕円曲線署名よりかなりサイズが大きいと認めています。構造がシンプルで監査しやすいため、今回この方式を選びました。最終的にどの方式を採用するかは、引き続き検討中です。
今回の件で何が変わっていないのか、区別しておきましょう。
- これはプロトタイプの実演であり、ビットコインのプロトコルアップグレードではありません。ビットコイン自体は、まだ量子耐性を備えていません。
- ローカルテストでは、受取人の変更、次の鍵の変更、完了済み送金の再実行は、いずれも拒否されることを確認しました。コントラクト、署名ソフトウェア、テストの証拠はGitHubで公開されています。
- 公式によると、次の段階ではまずStacksネットワーク自体に量子耐性を持たせる方法と移行経路を評価し、その後、sBTCの裏付けとなるBTCの量子リスクを調査します。続報は「今年後半」に公開する予定です。
すぐに役立てられるポイント:
1. 「量子耐性」という宣伝を見たら、まず3つ質問しましょう。プロトコルのアップグレードなのか、それともコントラクトの実演なのか。メインネットなのか、テストネットなのか。コードとテストの証拠は公開されているのか。今回の答えは順に、コントラクトの実演、メインネット、公開済みです。
2. 自分でできる最も簡単な対策は、やはりこれです。同じビットコインアドレスを繰り返し使って入金やおつりの受け取りをしないこと。使用済みアドレスにあるコインの公開鍵は、すでにブロックチェーン上に記録されています。
3. 「量子」を口実にコインの購入やウォレットの乗り換えを勧められたら、まずプロジェクトの公式ブログの原文を探して確認しましょう。スクリーンショットをうのみにしないでください。
フォローして、毎日すぐに使える失敗回避の方法を一つずつ解説します。売買の煽りはしません。
