この記事では、TSSとは何か、それがブロックチェーンの分野にもたらすアドバンテージ、どのようにブロックチェーンクライアントに実装できるか、Shamir secret sharingとマルチシグとの比較、分散化された鍵管理のためにTSSを使う様々な方法、そしてそのリスクと限界について説明します。
暗号学の力
ブロックチェーン
この記事では、そのようなブレイクスルーの1つである効率的で、安全なしきい値署名(TSS)について説明します。
秘密計算技術としきい値署名スキーム(TSS)
秘密計算技術(MPC)はほぼ40年前にAndrew C. Yaoによる重要な研究から始まった暗号額の一分野です。 MPCでは、互いに信頼していない一組の当事者が、入力を非公開にしながら、入力に対する関数を共同で計算しようとします。
例えば、ある会社の従業員n人がそれぞれの実際の給料を明かすことなく、だれが一番高い給与を貰っているかを知りたいとします。 ここでは、秘密となる入力は給与で、出力は最も高い給与を貰っている従業員となります。 MPCを使った計算を行っている間は、誰の給料も他の人に対して公開されることはないです。
MPCの2つの主要な特徴は正確さとプライバシーです。
正確さ:アルゴリズムによって発行された出力は期待通り正しいです。
プライバシー:当事者の保有者する秘密の入力データが他の当事者に流出することがないです。
私たちは分散型の方法でデジタル署名を計算するためにMPCを使います。 ここからはこれまで説明してきた特徴がどのように署名に適用できるかを説明していきます。 署名については3つのステップがあります。
鍵の発行:最初のステップがたいてい最も複雑です。 私たちは公開鍵を発行する必要があり、この公開鍵は将来的に署名を検証するのに使われます。 さらに、それぞれの当事者のための秘密を発行する必要があり、この秘密のことを「シークレットシェア」と呼びます。 正確さとプライバシーという観点において、関数は全当事者に対して同じ公開鍵とそれぞれ固有の「シークレットシェア」を出力します。(1)プライバシーという観点では、誰の「シークレットシェア」も他の当事者に公開されません。(2)正確性という観点では、公開鍵は「シークレットシェア」の関数です。
署名:このステップには署名発行関数が含まれています。 それぞれの当事者の入力は「シークレットシェア」となり、先ほど述べた分散型鍵発行のステップの出力となります。 そして、署名されるメッセージは全員に公開されている入力となります。 出力はデジタル署名となり、プライバシーの特徴によって、計算中に「シークレットシェア」の流出が発生しないことを保証します。
検証:検証アルゴリズムは従来の設定のままです。 シングル鍵署名と互換性を持つために、公開鍵について知っているすべての人は署名を検証できるようになる必要があります。 これはまさに、ブロックチェーンのバリデーションノードが行っていることです。
しきい値署名方式(TSS)は、この分散鍵発行(DKG)としきい値署名方式の分散署名との組み合わせに付けられた名前です。
TSSをブロックチェーンに組み合わせる
ブロックチェーンにTSSを組み込む自然な方法としては、ブロックチェーンのクライアントをTSSを使って、鍵を発行して、署名をするように変更することです。 ここで使っている、ブロックチェーンのクライアントは、フルノードによって実行されるコマンドのセットのことを指します。 実務的には、このTSSという技術を使うことで、分散型コンピューティングいおける秘密鍵と関係するす全てのコマンドを置き換えることができます。
これをより詳しく説明するために、これまでのブロックチェーン設計において、どのように新しいアドレスが作成されているかを簡潔に説明します。 シンプルに言うと、私たちは暗号鍵を使って、新しいアドレスを作成することができ、その暗号鍵から公開鍵を計算します。 最後に、公開アドレスが公開鍵から派生します。
TSSを使うことで、公開鍵を協力して計算しているn人による集団ができました。それぞれが暗号鍵の「シークレットシェア」を保有しています。(それぞれが保有する「シークレットシェア」は共有されません。) 公開鍵から、私たちはこれまでのシステムと同様の方法で公開アドレスを発行することで、ブロックちゃーんがアドレスの発行方法に依存しないようにすることができます。 このアドバンテージとしては、それぞれの当事者が暗号鍵の一部を保有するようになるので、暗号鍵が単一障害点ではなくなることです。
同様のことをトランザクションの署名をする時に行うことができます。 この場合には、単一当事者が暗号鍵で署名をする代わりに、私たちは複数当事者間での分散型署名を実施します。 そのため、各当事者は、誠実である限り、有効な署名を発行できます。 再び、私たちは単一障害点のあるローカルでの計算から、インタラクティブなものへ移行しました。
分散型鍵発行は違うアクセス構造によって行おうことができるようになっており、セキュリティを犠牲にすることなく、設定は秘密鍵関連の操作における任意の失敗に影響されないようになっています。
TSS vs マルチシグ
いくつかのブロックチェーンはTSSの機能をネイティブ、もしくは何らかのプログラミングによって実現できるような形で提供しています。 私たちはこの機能のことをマルチシグ、もしくはマルチシグネチャーと呼んでいます。 違いを理解するには、TSSをブロックチェーンのアプリケーションレイヤーとみることができます。
違いとしては、マルチシグ、TSSどちらも同じようなゴールを達成しようとしていますが、TSSはオフチェーン、マルチシグはオンチェーンで処理が行われます。 しかしながら、ブロックチェーンにはアクセス構造(署名者数)がブロックチェーン上で公開されることでプライバシーを侵害する可能性のある、マルチシグをエンコードする方法が必要です。 マルチシグトランザクションのコストは、ブロックチェーン上で様々な署名者とのコミュニケーションのための情報が必要となるため、より高くなります。
TSSでは、署名所の詳細は通常のトランザクションに見えるトランザクションにまとめられることで、コストを減らし、プライバシーを保持することが可能です。 一方、マルチシグは相互にやり取りをする必要がないので、様々な署名者間での複雑なコミュニケーションレイヤーで発生するトラブルを防止します。
TSS vs シュノアの秘密分散法
シュノアの秘密分散法(SSSS)は、暗号鍵を最低でも複数ロケーションで保存するなど、分散化された方法で暗号鍵を保存するための方法を提供します。 SSSSとTSSには2つの大きな違いがあります。
鍵発行:SSSSでは、ディーラーと呼ばれる人が暗号鍵の発行を行います。 つまり、鍵発行時点では暗号鍵は単一地点で発行され、それからディーラーによって様々なロケーションに分散化されるということです。 TSSでは、ディーラーの役割はなく、完全な暗号鍵が単一地点にあることはなく、分散化されています。
署名:SSSSでは、署名をするために完全な暗号鍵を復元する必要があるため、署名が必要になる度に、単一障害点ができてしまいます。 TSSでは、署名は分散化された方法で行われるので、単一障害点はできません。
これまで見てきたように、TSSではシステムのセキュリティの肝である、暗号鍵は決して単一地点に存在することがないです。
しきい値ウォレット
しきい値ウォレットでは、もう少し複雑になっています。 HD構造を作成することも可能ですが、その作成は他のMPCプロトコルのように分散化された方法で計算されなければいけません。 参加者は一緒にどの鍵が次に使われるかを決める必要があります。 言い換えると、それぞれの当事者は独自のシードフレーズを持つということです。 このシードフレーズは個別に発行され、誰かが自分のシードから暗号鍵を復元することができないようにするために、決して組み合わされることはないです。
TSSベースウォレットには、素晴らしいセキュリティ機能があり、対応する公開鍵とブロックチェーンアドレスを変更することなく暗号鍵をローテーションすることができます。 暗号鍵のローテーションは、事前秘密共有としても知られていますが、「シークレットシェア」をインプットとし、新しい「シークレットシェア」のセットをアウトプットとするMPCプロトコルの一種です。 古いシークレットシェアは削除され、新しいものを同じ方法で使うことができます。
このような構造はセキュリティに時間による次元を追加します。つまり、攻撃者はしきい値ウォレットを攻撃する時、同時に複数箇所にいなければいけません。 シークレットシェアをローテンションの前と後に組み合わせることで、攻撃者が署名を行いたくても、攻撃者に余分な権限を与えずに済みます。
このような種類のウォレットのデメリットとして、シードフレーズがないためシングルキーウォレットシステムとの互換性がないことです。 そのため、誰がシークレットシェアを保有するかを検討することは重要です。
実装可能なアーキテクチャとしては数種類あります。
TSSアウトソーシング:ユーザーは、サーバに代わりに計算を行わせます。 アセットの所有者ではないけれども、何らかのインセンティブの代わりにセキュリティレイヤーを提供するサービスプロバイダーに鍵の発行、管理、そして署名を効率的にアウトソーシングします。
複数デバイスの使用:ユーザーはTSSを保有している複数のデバイスにおいて実行します。 例えば、あるユーザーはIoTデバイスを使い、別のユーザーはスマホやノートパソコンなどをTSSのために使います。
ハイブリッド:TSSを外部のサービスプロバイダーによって管理されている人たちと自分のデバイスで実行している人たち両方で実行することです。
最初の方法では、ユーザークライアントサイドからTSSの莫大な計算量を軽減します。 一方で、サービスプロバイダーが結託(同時に攻撃するのに十分な数のサービスプロバイダが攻撃されることはないと考えていますが、実務的には発生する可能性があります。)して、ユーザーの資産を盗むことが可能です。
2つ目の方法はユーザーに完全なコントロールを与えますが、TSSの計算を行うのに、オンラインの、複数デバイスが必要となるので、トランザクションを実行するのが面倒です。
3つ目の方法は、ユーザーが簡単、かつ迅速にトランザクションを行うことができ、さらにユーザーの承認なしではトランザクションを行うことができないので、最も良い方法と考えられています。
TSSとスマートコントラクト
リスク
結論
この記事では、私たちはしきい値署名スキーム(TSS)の基本を紹介しました。TSSはとても注目されている暗号技術で、私たちがブロックチェーンを活用している方法を大幅に変える可能性があります。
参考文献