しきい値署名の説明<
著者Omer Shlomovits, ZenGo. しきい値署名スキーム(TSS)は分散化された鍵発行と署名のための暗号理論です。 ブロックチェーンクライアントにUSSを使うことは、特にセキュリティにおいて、多くのメリットを提供できる新しいパラダイムです。 より広い視点だと、TSSは(仮想通貨ウォレットにおける)鍵管理システムの設計に影響を与え、DeFiのユースケースにおけるネイティブサポートの方法を導くことができます。 とは言っても、TSSはまだ新しいテクノロジーなので、リスクと限界は考慮されるべきです。 この記事では、TSSとは何か、それがブロックチェーンの分野にもたらすアドバンテージ、どのようにブロックチェーンクライアントに実装できるか、Shamir secret sharingとマルチシグとの比較、分散化された鍵管理のためにTSSを使う様々な方法、そしてそのリスクと限界について説明します。 暗号学の力 TSSを理解するためには、暗号学の基礎知識について理解しておく必要があります。 1970年代以降、多くのインターネットシステムがTLSとPGPのような、公開鍵暗号として知られる、非対称暗号を採用してきました。 公開鍵暗号では、公開鍵と暗号鍵の2つの鍵を使います。 公開鍵は公開されているので誰でも使うことができますが、秘密鍵はこのシステムのセキュリティを表す、機密情報の1つです。 暗号化とデジタル署名は公開鍵において、最も良く使われる2つの技術です。 暗号化とデジタル署名スキームどちらも3つのアルゴリズムを活用しています。 1つ目が暗号鍵と公開鍵のペア発行、2つ目が暗号化テキスト/署名の発行、そして3つ目が復号化/検証のプロセスです。 デジタル署名に関して、署名アルゴリズムは固有の署名を発行するために、所有者しか知らない、暗号鍵を要求します。 この署名はメッセージに付属され、公開鍵を持っている人ならば誰でもその真正性と正確さを検証できるようになっています。 ブロックチェーン ブロックチェーンが強力なテクノロジーであることには疑いはありません。 ブロックチェーンはイベントを記録し、整理するコンセンサスレイヤーを提供します。 ブロックチェーンのようなインフラは、私たちユーザーに、分散型の経済とさらには政府を、構築する力を与えるポテンシャルがあります。 驚くべきことに、デジタル署名だけで十分に、基本的なブロックチェーン を運営することができます。 ブロックチェーンの文脈においては、暗号鍵はIDを、署名はそのIDが行った発表、もしくは主張を示します。 ブロックチェーンは何らかの行動を記録し、定められたルールに従って、それらを検証することで、その行動に付属している署名が変更不可能で、かつ正しいことを保証します。 ブロックチェーンに使われているより古典的な暗号技術よりも、現代の暗号技術のツールボックスにはいくつかの驚くような、魔法のような技術が含まれています。そのような技術として、ゼロ知識証明、純同型暗号、秘密計算技術などがあります。 過去10年間で見てきたように、ブロックチェーンの研究により、暗号化技術は大幅に進歩しました。 この記事では、そのようなブレイクスルーの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は純粋な暗号によるものなので、サポートは常に可能となっています。 こちらの記事はマルチシグとTSSの違いを説明した素晴らしいものです。 TSS vs シュノアの秘密分散法 シュノアの秘密分散法(SSSS)は、暗号鍵を最低でも複数ロケーションで保存するなど、分散化された方法で暗号鍵を保存するための方法を提供します。 SSSSとTSSには2つの大きな違いがあります。 鍵発行:SSSSでは、ディーラーと呼ばれる人が暗号鍵の発行を行います。 つまり、鍵発行時点では暗号鍵は単一地点で発行され、それからディーラーによって様々なロケーションに分散化されるということです。 TSSでは、ディーラーの役割はなく、完全な暗号鍵が単一地点にあることはなく、分散化されています。 署名:SSSSでは、署名をするために完全な暗号鍵を復元する必要があるため、署名が必要になる度に、単一障害点ができてしまいます。 TSSでは、署名は分散化された方法で行われるので、単一障害点はできません。 これまで見てきたように、TSSではシステムのセキュリティの肝である、暗号鍵は決して単一地点に存在することがないです。 しきい値ウォレット TSSを採用したウォレットはこれまでの仮想通貨ウォレットとは少し違っています。 一般的に、従来のウォレットはシードフレーズを発行し、それを使ってアドレスを作成しています。 ユーザーは後にこのシードフレーズを使うことで、1)ウォレットの公開アドレスに対応する暗号鍵に達し、それを使ってトランザクションに署名をすること、そして2)対応するウォレットの全ての鍵を復元することができます。 しきい値ウォレットでは、もう少し複雑になっています。 HD構造を作成することも可能ですが、その作成は他のMPCプロトコルのように分散化された方法で計算されなければいけません。 参加者は一緒にどの鍵が次に使われるかを決める必要があります。 言い換えると、それぞれの当事者は独自のシードフレーズを持つということです。 このシードフレーズは個別に発行され、誰かが自分のシードから暗号鍵を復元することができないようにするために、決して組み合わされることはないです。 TSSベースウォレットには、素晴らしいセキュリティ機能があり、対応する公開鍵とブロックチェーンアドレスを変更することなく暗号鍵をローテーションすることができます。 暗号鍵のローテーションは、事前秘密共有としても知られていますが、「シークレットシェア」をインプットとし、新しい「シークレットシェア」のセットをアウトプットとするMPCプロトコルの一種です。 古いシークレットシェアは削除され、新しいものを同じ方法で使うことができます。 このような構造はセキュリティに時間による次元を追加します。つまり、攻撃者はしきい値ウォレットを攻撃する時、同時に複数箇所にいなければいけません。 シークレットシェアをローテンションの前と後に組み合わせることで、攻撃者が署名を行いたくても、攻撃者に余分な権限を与えずに済みます。 このような種類のウォレットのデメリットとして、シードフレーズがないためシングルキーウォレットシステムとの互換性がないことです。 そのため、誰がシークレットシェアを保有するかを検討することは重要です。 […]










