🔐

MPC で暗号資産を守る

2024/03/23に公開

MPC で暗号資産を守る

ブロックチェーンや分散型台帳技術の普及に伴い、暗号鍵の安全な管理がますます重要になっています。そんな中、MPC (Multi-Party Computation) と呼ばれる技術が注目を集めています。MPC を利用することで、複数の当事者が協力して鍵を管理し、安全な署名生成を実現できます。

MPC を用いた閾値 ECDSA の概要

Bitcoin や Ethereum などの多くの暗号通貨では、取引の承認に電子署名アルゴリズムの一つである ECDSA (Elliptic Curve Digital Signature Algorithm) が使用されています。ECDSA では、秘密鍵を使って取引データに署名を行い、公開鍵を使って署名の検証を行います。

しかし、秘密鍵が単一の主体によって管理されている場合、その秘密鍵が流出したり盗まれたりするリスクがあります。そこで登場するのが、MPC を用いた閾値 ECDSA です。

ここでは GG20 と呼ばれる仕様とその実装である tss-lib を元に解説します。

MPC は、複数のパーティが各自の秘密情報を明かすことなく、協力して計算を行うための技術です。閾値 ECDSA に MPC を適用することで、秘密鍵の生成や署名の過程を安全に実行できます。各パーティは、秘密鍵の一部を保有し、他のパーティとの通信を通じて、全体の秘密鍵を明らかにすることなく、署名の生成に参加します。これにより、単一の主体が秘密鍵全体を持つことがないため、鍵の流出リスクを大幅に減らすことができます。

MPC を用いた閾値 ECDSA には、以下のようなメリットがあります。

  • プロアクティブセキュリティ:更新を定期的に行うことで、長期的な秘密鍵の盗難や流出のリスクを軽減できます。
  • アカウンタビリティ:署名生成に失敗した場合、どのパーティに原因があるかを特定できます。これにより、パーティ間の信頼性が向上します。

特徴

機能別にその特徴を見ていきましょう。
特筆すべきは、これらのいずれもパーティ間の通信が信頼できるものである必要はないということです。通信路が盗聴されても、秘密鍵や KeyShare が漏洩することはありません。また、データが改ざんされたりしても、どのパーティからの通信に問題があったかを特定できます。

秘密鍵の生成

MPC では、複数のパーティが協力して暗号鍵の生成や署名の生成を行います。まず、各パーティが連携して全体の秘密鍵を生成します。この過程では、各パーティの秘密情報は他のパーティに漏れることはありません。また生成された秘密鍵は実際にどこかに生成されるわけではなく各パーティに KeyShare という形で生成され保管されます。
ここで重要なのは秘密鍵は一度もどこにも存在することなく KeyShare が生成されるということです。

署名

署名時には、全パーティのうち設定された最低限必要な数の各パーティがそれぞれの KeyShare を使って連携して計算することで、全体の有効な署名が得られます。この過程で、個々のパーティは他のパーティの KeyShare を知る必要がなく、また他のパーティとやり取りする情報を傍受されても秘密鍵を推測することは事実上不可能になっています。

更新

KeyShare は任意に更新することができます。仮に一時的にあるパーティの KeyShare が漏洩したとしても、更新によって新しい KeyShare が生成されれば、漏洩の影響を最小限に抑えられます。
更新に必要なのは署名と同様設定された最低限の数のパーティでいいので紛失時のリカバリにもなります。

このように、MPC を用いた閾値 ECDSA では、複数のパーティが協力して暗号鍵の生成と署名の生成を行います。秘密鍵は KeyShare として分散され、定期的に更新されることで、安全性が維持されます。また、パーティ間の通信は信頼できるものでなくても、プロトコルの設計によって秘密情報が保護されます。

マルチシグとの違い

マルチシグと MPC は、どちらも複数の参加者による分散的な署名生成を可能にする技術ですが、いくつかの重要な違いがあります。

(ここでは Bitcoin ではなく Ethereum のコントラクトウォレットによるマルチシグを前提とします)

管理方法の違い

マルチシグを実現するためのコントラクトウォレットでは、管理や署名を行うために、各トランザクションにガス代が発生します。さらに、コントラクトウォレットを使用するには、目的のブロックチェーンにデプロイする必要があります。

一方、MPC では、コントラクトウォレットは必要ありません。鍵の管理方法も異なります。マルチシグでは各参加者が自分の秘密鍵を管理するのに対し、MPC では秘密鍵が分割され、各参加者はその一部(KeyShare)のみを保有します。

署名方法の違い

署名の生成方法も異なります。マルチシグでは、各参加者が自分の秘密鍵で個別に署名し、それらの署名を集めて最終的な署名とします。一方、MPC では、参加者が協力して一つの署名を生成します。各参加者は KeyShare を使って部分的な計算を行い、それらを組み合わせることで最終的な署名が得られます。

その他のメリット

MPC の KeyShare は、再分配することで柔軟性を提供します。同じ秘密鍵を異なる KeyShare の組み合わせで扱うことができるため、参加者の調整が容易になります。

さらに、MPC では、BIP32 の HDPath (階層的決定性ウォレット)による鍵の派生が使用できます。これにより、単一の秘密鍵から複数のアドレスを生成することが可能になり、プライバシーの向上やアカウント管理の簡素化が期待できます。

MPC の HDPath についてはこちらの記事をどうそ 😃
https://zenn.dev/sawatani/articles/60d57697309375

以上のように、MPC は、マルチシグと比較して、コストの削減、柔軟性の向上、およびプライバシーの強化といった点で優れています。

まとめ

MPC を用いた閾値 ECDSA は、暗号資産の安全管理において、複数の参加者による分散管理を可能にする有力な選択肢です。プロアクティブセキュリティとアカウンタビリティを備えており、暗号資産取引所や企業、個人での利用が期待されます。適切な参加者の選定とバックアップ体制の整備を行うことで、より安全性の高い暗号資産管理が実現できるでしょう。

Discussion