はじめに
MPC-TSS(Multi-Party Computation Threshold Signature Scheme) という署名方式があります。
MPC-TSSは、秘密鍵の柔軟な運用を可能とする技術であり、秘密鍵管理が課題となるウォレット分野を中心に活用が進んでいます。
一般的な署名方式では、秘密鍵を保持する1人が署名を行い、その結果を公開鍵で検証します。
一方、MPC-TSSでは、秘密鍵をシェアした複数人が協調して署名を生成します。
生成された署名は、通常の署名と同様に単一の公開鍵で検証できます。
MPC-TSSには次のようなメリットがあります。
- 3人のうち2人が揃えば署名できる といった柔軟な運用(しきい値署名)が可能
- 秘密鍵をシェアした3人のうち1人の鍵が盗まれても、その鍵だけでは署名できない
- 盗まれた鍵を無効化する際も、公開鍵を変更せずに運用を継続できる
本稿では、OSSライブラリであるmulti-party-sig-cppを用いて、MPC-TSSの動作を実験します。
環境
- 単一マシン上で複数の Party を起動する PoC 構成
- OS:Windows 11
- 実行環境:Docker Desktop
- 言語:C++
- MPCライブラリ:multi-party-sig-cpp
https://github.com/Safeheron/multi-party-sig-cpp
- Party間のデータ中継およびユーザインタフェース
- Node-RED
Partyについて
一般的には3人で1つのPartyを組む、みたいに使いますが、暗号業界では一人一人を別のPartyと呼ぶ習わしのようです。
以下に一通り動作済みのファイル一式を格納しています。
説明は本稿に記述します。
実験内容
keygen編
- 3人で鍵を作成(keygen)します
- keygenを開始するとParty間で計算データのやり取りが行われますので、その様子を観察します
- 各Partyがそれぞれに作成した公開鍵が同一であることを確認します
Sign編
- 3人全員、または2人だけでも署名できることを確認します
- 1人では署名できないことを確認します
- keygenで作成した公開鍵により署名検証できることを確認します
Refresh編
- 3人で鍵を再共有(refresh)します
- refresh前の古い鍵が混じると署名できないことを確認します
- refresh前と同じ公開鍵により署名検証できることを確認します
イントロ編 以上