IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ セピア・アンパルツセルスケープの特許一覧

特許7472158メッセージにデジタル署名を提供するための方法
<>
  • 特許-メッセージにデジタル署名を提供するための方法 図1
  • 特許-メッセージにデジタル署名を提供するための方法 図2
  • 特許-メッセージにデジタル署名を提供するための方法 図3a
  • 特許-メッセージにデジタル署名を提供するための方法 図3b
  • 特許-メッセージにデジタル署名を提供するための方法 図4
  • 特許-メッセージにデジタル署名を提供するための方法 図5
  • 特許-メッセージにデジタル署名を提供するための方法 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-12
(45)【発行日】2024-04-22
(54)【発明の名称】メッセージにデジタル署名を提供するための方法
(51)【国際特許分類】
   G09C 1/00 20060101AFI20240415BHJP
【FI】
G09C1/00 650Z
【請求項の数】 10
(21)【出願番号】P 2021552496
(86)(22)【出願日】2020-02-07
(65)【公表番号】
(43)【公表日】2022-04-20
(86)【国際出願番号】 EP2020053101
(87)【国際公開番号】W WO2020177977
(87)【国際公開日】2020-09-10
【審査請求日】2022-12-27
(31)【優先権主張番号】19160731.6
(32)【優先日】2019-03-05
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】521393960
【氏名又は名称】ブロックデーモン・アンパルツセルスケープ
【氏名又は名称原語表記】Blockdaemon ApS
(74)【代理人】
【識別番号】100145403
【弁理士】
【氏名又は名称】山尾 憲人
(74)【代理人】
【識別番号】100135703
【弁理士】
【氏名又は名称】岡部 英隆
(72)【発明者】
【氏名】ヤコブセン,トマス ペレ
(72)【発明者】
【氏名】ダムゴー,イヴァン ビェアア
(72)【発明者】
【氏名】エスタゴー,ミケール ベクスヴァング
(72)【発明者】
【氏名】ニールセン,イェスパー ブース
【審査官】行田 悦資
(56)【参考文献】
【文献】国際公開第2019/034951(WO,A1)
【文献】特開2002-175009(JP,A)
【文献】特開2001-142397(JP,A)
【文献】米国特許第09489522(US,B1)
【文献】国際公開第2013/001021(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
複数のサーバ装置により実行される、デジタル署名アルゴリズムDSAまたは楕円曲線デジタル署名アルゴリズムECDSAにしたがってメッセージMにデジタル署名を提供するための方法であって、前記方法は、
関数Fと、関数Hと、位数qの巡回群Gの生成元gとを提供するステップであって、ここで、g∈Gであり、g、G、FおよびHはDSAまたはECDSAによって規定される、ステップと、
少なくとも2つのサーバ装置間のランダムな秘密シェア[x]として秘密鍵xを生成するステップと、
前記少なくとも2つのサーバ装置間のランダムな秘密シェア[a]および[k]を生成し、[w]=[a][k]を計算するステップと、
kを明らかにすることなく、R=gとして値Rを計算するステップであって、
前記少なくとも2つのサーバ装置のそれぞれが、前記値RのシェアRをR=gk_jとして計算し、他のサーバ装置のそれぞれに前記シェアを分配するステップと、
前記シェアRから前記値Rを計算するステップと、
前記少なくとも2つのサーバ装置が実行することで、計算するステップと、
オネストなサーバ装置から発信された[k]の少なくともt+1個のシェアからR=gが計算されることを検証することで、前記少なくとも2つのサーバ装置のそれぞれが、他のサーバ装置から受信した前記シェアRに基づいて、Rが正しいことを確認することで、Rが正しいと保証するステップと、
を計算することで、aまたはkを明らかにすることなく、W=gakとして認証符号Wを計算するステップであって、
前記少なくとも2つのサーバ装置のそれぞれが、前記認証符号WのシェアWをW=Ra_jとして計算し、他のサーバ装置のそれぞれに前記シェアを分配するステップと、
前記シェアWから前記認証符号Wを計算するステップと、
前記少なくとも2つのサーバ装置が実行することで、計算するステップと、
オネストなサーバ装置から発信された[a]の少なくともt+1個のシェアからW=Rが計算されることを検証することで、前記少なくとも2つのサーバ装置のそれぞれが、他のサーバ装置から受信した前記シェアWに基づいて、Wが正しいことを確認することで、Wが正しいと保証するステップと、
=Wであるかどうかを確認することで[w]を検証するステップと、
[k-1]=[a]・w-1を計算し、[x・k-1]=[x]・[k-1]を計算し、M、R、[k-1]および[x・k-1]の関数として前記少なくとも2つのサーバ装置間のシェア[s]を生成することで、[s]=m・w-1・[a]+r・w-1・[a]・[x]+[d]を計算することで、前記メッセージMに署名するステップであって、ここでr=F(R)、m=H(M)および[d]はゼロのランダムなシェアであり、sは署名対(r,s)の一部を形成する、ステップと、
前記複数のサーバ装置が実行することを含む、方法。
【請求項2】
RまたはWが正しくないことが明らかになった場合、署名処理を中止するステップを前記複数のサーバ装置が実行することをさらに含む、請求項1に記載の方法。
【請求項3】
[w]を検証するステップがg≠Wであることを明らかにした場合、署名処理を中止するステップを前記複数のサーバ装置が実行することをさらに含む、請求項1または請求項2に記載の方法。
【請求項4】
メッセージMに署名するステップは、[s]=m・w-1・[a]+r・w-1・[a]・[x]+「d」+m・[e]を計算することで前記複数のサーバ装置により実行され、ここで、r=F(R)、m=H(M)であり、[d]および[e]はゼロのランダムなシェアである、請求項1から請求項3のいずれか一項に記載の方法。
【請求項5】
少なくとも、秘密鍵xを生成するステップと、ランダムな秘密シェア[a]および[k]を生成するステップと、値Rを計算するステップと、認証符号Wを計算するステップとは、前記メッセージMの生成の前に、前処理によって実行される、請求項1から請求項4のいずれか一項に記載の方法。
【請求項6】
公開鍵yをy=gとして計算するステップと、yを前記少なくとも2つのサーバ装置のそれぞれに明らかにするステップと、を前記複数のサーバ装置が実行することをさらに含む、請求項1から請求項5のいずれか一項に記載の方法。
【請求項7】
前記公開鍵yを用いて、前記署名を検証するステップを前記複数のサーバ装置が実行することをさらに含む、請求項6に記載の方法。
【請求項8】
前記署名を検証するステップは、r=F(gm/s・yr/s)であるかどうかを確認するステップをさらに含む、請求項7に記載の方法。
【請求項9】
前記署名を検証するステップは、R=g・yであるかどうかを確認するステップをさらに含む、請求項7または請求項8に記載の方法。
【請求項10】
yの正しさを確認するステップを前記複数のサーバ装置が実行することをさらに含む、請求項6から請求項9のいずれか一項に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、デジタル署名アルゴリズム(DSA)または楕円曲線デジタル署名アルゴリズム(ECDSA)に従って、メッセージにデジタル署名を提供するための方法に関する。本発明によれば、デジタル署名は、多数関係者(マルチパーティ)閾値DSAまたはECDSAプロトコルを使用して生成される。
【背景技術】
【0002】
デジタル署名は、データおよび/またはエンティティをオンラインで認証するために、オンラインの送信されたデータの整合性を確保するためなどに使用できる。単一の関係者が秘密署名鍵全体を保持できるようにする代わりに、多数の関係者(パーティ)のそれぞれが秘密署名鍵のシェアを保持して、関係者間の秘密のシェア(share:分散物)として生成される秘密署名鍵を使用することにより、署名システムが危険にさらされるリスクが軽減される。このような方式は、「マルチパーティ署名方式」と呼ばれることもある。マルチパーティ署名方式では、一部の関係者が利用できない、破損している、または危殆化されている場合でも、デジタル署名を生成し得る。セキュリティに違反することなく許容され得る破損した関係者の最大数は、方式のセキュリティ閾値と呼ばれることもあり、「t」で示され得る。
【0003】
デジタル署名アルゴリズムは、デジタル署名の生成に従来使用されてきた。一例はDSA標準である。これは、素数位数qの巡回群Gと生成元g∈G、および2つの関数H:{0,1}→ZとF:G→Zによってパラメータ化された署名方式を考案する。秘密署名鍵xはZからランダムに選択され、対応する公開検証鍵はy=gとして計算される。メッセージMに署名するには、最初にランダムなノンスk∈Zを選択し、次に署名を(r,s)として計算する。ここで、r=F(g)およびs=k-1・(H(M)+r・x)である。公開検証鍵yと署名(r,s)が与えられると、m=H(M)を計算し、r=F(gm/s・yr/s)を確認することで署名を検証できる。
【0004】
別の例は、基本的にDSAと同じように機能する署名方式を定める、ECDSA標準であるが、Gは代わりに楕円曲線上の点gによって生成される。楕円曲線暗号を適用するデジタル署名アルゴリズムは、通常、楕円曲線デジタル署名アルゴリズムまたはECDSAと呼ばれ、デジタル署名の生成に従来使用されてきた。このようなアルゴリズムは、信頼性の高いデジタル署名を提供するのに適していることが知られている。
【0005】
DSAを説明するときは乗法表記を使用するのが一般的であるが、ECDSAの場合は加法表記を使用する。本明細書では、DSAとECDSAの両方にこの方法を適用できる場合でも、乗法表記を使用する。つまり、群Gの要素a、bについては、a・b、または単にabを使用して、2つの要素に適用される群演算を示す。体Z内の要素の計算は、体の内で行われると想定される。つまり、r・xまたはm/sを書くと、暗黙的に、qを法として考える。
【先行技術文献】
【特許文献】
【0006】
【文献】国際公開第2015/160839号
【非特許文献】
【0007】
【文献】Rosario Gennaro, et al.: “Robust Threshold DSS Signatures”, Information and Computation, vol. 164, pages 54-84 (2001)
【発明の概要】
【発明が解決しようとする課題】
【0008】
特許文献1は、楕円曲線デジタル署名アルゴリズム(ECDSA)に基づくデジタル署名を分散方式で生成するためのシステムおよび方法を開示する。秘密分散プロトコルは、クライアントとn台のサーバのセットとの間で初期化されて、n台のサーバのセット間の秘密鍵のシェアのセットを分散する。サーバのセットは、プロトコルを初期化して、秘密鍵を再構築または公開することなく、秘密鍵のシェアのセットを使用してメッセージにデジタル署名を生成する。n台のサーバのn/2以下の閾値t(つまり、t≦n/2)は、秘密鍵の機密性や生成された署名の正確性を危殆化することなく、悪意を持って完全に破損または危殆化される可能性がある。
【0009】
特許文献1に開示されているシステムおよび方法は、デジタル署名を生成するためにかなりのラウンド回数の相互作用を必要とする。さらに、システムおよび方法は、高い処理能力および通信帯域幅を必要とする。
【0010】
非特許文献1は、マルチパーティ閾値署名方式を使用してデジタル署名を提供するための方法を開示している。この論文に記載されたプロトコルは、多項式補間を適用し、関係者の数nが3t+1以上の場合、最大t個の悪意のある攻撃者に対して頑健であり偽造できない。したがって、1人の悪意のある敵を許容するには、関係者の数を少なくとも4個にする必要がある。さらに、この方法では、デジタル署名を生成するために、かなりのラウンド回数の相互作用が必要である。
【0011】
本発明の実施形態の目的は、機密性を危殆化することなくデジタル署名を生成するために必要な相互作用のラウンド回数が低減される、マルチパーティDSAまたはECDSAに基づくデジタル署名を提供するための方法を提供することである。
【0012】
本発明の実施形態のさらなる目的は、機密性を危殆化することなく処理能力への要件が低減される、マルチパーティDSAまたはECDSAに基づくデジタル署名を提供するための方法を提供することである。
【0013】
本発明の実施形態のさらなる目的は、機密性を危殆化することなく通信帯域幅への要件が低減される、マルチパーティDSAまたはECDSAに基づくデジタル署名を提供するための方法を提供することである。
【0014】
本発明の実施形態のさらなる目的は、悪意を持って破損された最大t個の関係者を許容できるマルチパーティDSAまたはECDSAに基づくデジタル署名を提供するための方法を提供することである。ここで、t>n/3である。
【課題を解決するための手段】
【0015】
本発明は、デジタル署名アルゴリズムDSAまたは楕円曲線デジタル署名アルゴリズムECDSAにしたがって、メッセージMにデジタル署名を提供するための方法を提供し、本方法は、
関数Fと、関数Hと、位数qの巡回群Gに生成元器gとを提供するステップであって、ここで、g∈Gであり、g、G、FおよびHは、DSAまたはECDSAによって規定される、ステップと、
少なくとも2つの関係者間のランダムな秘密シェア[x]として秘密鍵xを生成するステップと、
少なくとも2つの関係者間のランダムな秘密シェア[a]および[k]を生成し、[w]=[a][k]を計算するステップと、
kを明らかにすることなく、R=gとして値Rを計算するステップと、
オネストな(honest:適切な)関係者から発信された[k]の少なくともt+1個のシェアからR=gが計算されることを検証することでRが正しいと保証するステップと、
を計算することで、aまたはkを明らかにすることなく、W=gakとして認証符号Wを計算するステップと、
オネストな関係者から発信された[a]の少なくともt+1個のシェアからW=Rが計算されることを検証することでWが正しいと保証するステップと、
=Wであるかどうかを確認することで[w]を検証するステップと、
[k-1]=[a]・w-1を計算し、[x・k-1]=[x]・[k-1]を計算し、M、R、[k-1]および[x・k-1]の関数として、少なくとも2つの関係者間のシェア[s]を生成することで、メッセージMに署名するステップと、
を含む。
【0016】
したがって、本発明の方法は、メッセージMにDSAに基づくまたはECDSAに基づくデジタル署名を提供するための方法である。本発明の方法に従って適用されるデジタル署名は、例えば、オンライン金融取引中などに、例えば、送信者の信憑性を保証するために、送信されたデータの整合性を確保するために使用され得る。
【0017】
本発明の方法によれば、位数qの巡回群Gの生成元g、関数F、および関数Hが最初に提供される。生成元gは、巡回群Gの要素、つまりg∈Gである。巡回群G、生成元g、および関数F、Hは、すべてDSAまたはECDSAによって規定される。したがって、使用される特定のDSAまたはECDSAが決定されると、これらが定められる。
【0018】
次に、秘密鍵[x]は、少なくとも3つの関係者間など、少なくとも2つの関係者間でのランダムな秘密シェアとして生成される。本明細書では、「秘密シェア」という用語は、各関係者が秘密鍵のシェアを保持し、いずれの関係者も秘密鍵全体を保持しないように、秘密鍵が少なくとも2つの関係者に配布されることを意味すると解釈されるべきである。したがって、本発明の方法は、マルチパーティシステムを適用する。これにより、いずれの関係者も、信頼できる唯一の情報源を構成せず、秘密鍵全体にアクセスするために、いくつかの関係者、つまり少なくともt+1個の関係者が悪意を持って共謀する必要がある。これにより、特に機密性の観点から、システムのセキュリティが向上する。
【0019】
秘密分散法の例は、加法分散である。秘密xは、各関係者Pがx=x+x+…+xのようなランダムなシェアxを保持している場合、n個の関係者P、P、…、Pの間で加法的に分散されると言われる。秘密を再構築するにはn個のシェアの全てが必要であるため、加法分散は閾値t=n-1を有する。つまり、xを再構築するには、全てのn個の関係者の協力が必要であり、1つを除くすべてのシェアを所有しても、xを再構築できない。別の例は、シャミア(Shamir)の分散法である。ここで、秘密xは、各関係者Pがf(0)=xを条件とするランダム多項式fの値f(i)をシェアとして保持するときに分散される。シャミアのシェアの次数は、多項式fの次数として定められる。この次数がtの場合、任意のt+1個の関係者は、多項式補間を使用してシェアを秘密に再結合できるが、t個以下の関係者のサブセットによって保持されるシェアは、xについて何も明らかにしない。
【0020】
本明細書では、「ランダムな秘密シェア」という用語は、分散された秘密もランダムな値になるように、シェアがランダムに選択される秘密シェアであると解釈されるべきである。加法分散の場合、これはシェアが完全にランダムであることを意味する。閾値tのシャミアのシェアの場合、シェアがランダムな次数tの多項式上の点であることを意味する。
【0021】
この開示全体を通して、角括弧[]内に配置された文字は、多くの関係者間での要素のシェアを表している。角括弧のない同じ文字は、要素全体を表す。したがって、例えば、xは秘密鍵全体を表し、[x]は秘密鍵xの秘密シェアを表す。
【0022】
秘密を公開せずに、秘密シェアの計算を実行できる。これは、研究分野「安全なマルチパーティ計算」の主題である。ほとんどの種類の秘密シェアでは、関係者は2つの秘密シェアの合計を簡単に計算できる。つまり、[x]および[y]が与えられると、xまたはyを明らかにすることなくシェア[x+y]を計算できる。同様に、すべての関係者が公開定数cに同意する場合、xを明らかにすることなく、cおよび[x]からシェア[c・x]を簡単に計算できる。これらの演算には、表記[x]+[y]およびc・[x]を使用するだろう。
【0023】
[x]および[y]から積[xy]を計算することもできる。xとyを明らかにせずにそうすることは、特定のセキュリティ閾値(t)の関係者までが悪意を持って共謀する可能性がある場合、可能であるが、多くの場合、困難で非効率的である。このため、2つのランダムなシェア[x]と[y]には、乗算の「弱い」概念が使用されることがある。弱い乗算は、多くともt個の関係者が悪意のあるものである限り、xとyに関する情報が漏洩しないという意味で機密性を保証する。しかし、弱い乗算は結果の正確さを保証しない。むしろ、すべての関係者が正しく動作する場合にのみ、正しい結果[xy]を計算する。単一の悪意のある関係者が、例えば、結果のシェア[z]がxyのシェアではないように結果を台無しにすることができる。以下では、簡単にするために、特に明記しない限り、表記[z]=[x][y]を使用して弱い乗算を示す。
【0024】
例えば、セキュリティ閾値tがt<n/2を満たす限り、シャミアのシェアに対して弱い乗算を構築できる。より大きな閾値、つまり最大閾値t=n-1までの場合、ペイエ(Paillier)の暗号化方式などの加法準同型暗号化方式をいわゆるゼロ知識証明と組み合わせることにより、加法分散に対して弱い乗算を取得できる。弱い乗算のこのような構成の例は、安全なマルチパーティ計算の研究文献に記載されている。
【0025】
関係者は、例えば、互いに物理的に分離され得る別個のサーバの形態であり得る。関係者は、一方の関係者が利用できる情報が他方の関係者が利用できないという意味で、別個または独立していることが好ましい場合がある。しかし、t+1個以上の関係者のサブセットがすべての情報を所有していない限り、一部の関係者が一部の情報を分散することは除外されない。
【0026】
次に、ランダムな秘密シェア[a]と[k]が、少なくとも2つの関係者間で生成される。したがって、少なくとも2つの関係者のそれぞれは、aのシェアおよびkのシェアを保有する。さらに、[w]=[a][k]は、少なくとも2つの関係者間での秘密シェアとしても計算される。これは、aとkのシェアからwのシェアを計算する少なくとも2つの関係者のそれぞれによって実行され得る。さらに、[w]は「公開される」可能性がある。つまり、少なくとも2つの関係者のそれぞれに秘密wが明らかにされる可能性がある。これは、例えば、少なくとも2つの関係者のそれぞれが、他の関係者のそれぞれにwのシェアを明らかにすることによって得られる。[w]は、[a]および/または[k]を公開せずとも、つまりaとkの値を秘密にしたまま、公開され得ることに留意するべきである。
【0027】
次に、値Rは、kを明らかにせずに、R=gとして計算される。これは、例えば、少なくとも2つの関係者のそれぞれが、kのシェアに基づいてRのシェアを計算することを含むことができる。これについては、以下でさらに詳しく説明する。別の方法として、kが明らかにされないことが保証されている限り、Rは別の方法で計算され得る。しかし、Rは少なくとも2つの関係者のそれぞれに明らかにされる可能性がある。標準のDSA/ECDSAも基づいている「離散対数」の仮定として知られている一般的に受け入れられている暗号学的仮定のため、値R=gを見てkに関する何らかの情報を推測することはできないことに留意すべきである。
【0028】
さらに、Rが正しいことが保証される。本明細書では、これは、Rがgに等しいことを意味すると解釈されるべきである。ここで、kは秘密シェア[k]によって定められた一意の値kである。Rが正しいことを確認するステップは、R=gがオネストな関係者から発信された[k]の少なくともt+1個のシェアから計算されたことを検証することによって実行される。ここで、tは署名方式の閾値を示し、つまり最大t個の悪意のある、破損した、不正なまたは利用できない関係者は許容され得る。したがって、Rの正しさを確認する場合、関係者のオネストさが調査され、少なくともt+1個の関係者がオネストであることが証明できる場合にのみ、Rが正しいと結論付けられる。これについては、以下でさらに詳しく説明する。
【0029】
Rが正しくないことが判明した場合、署名処理が中止され得る。例えば、各オネストな関係者は、(1)値R=gを取得すること、または(2)この時点で中止を出力することが保証される。つまり、最大t個の関係者が破損している場合であっても、残りのn-t個の関係者はR=gを取得するか、中止するだろう。これについては、以下でさらに詳しく説明する。
【0030】
次に、認証符号WがW=gakとして計算される。これは、gakを直接計算するのではなくRを計算することによって、かつaまたはkを明らかにせずに、行われる。これは、Rがgの代わりに基礎として使用されることを除いて、Rが計算された方法と同じ方法で行われ得る。この場合も、オネストな関係者から発信された[a]の少なくともt+1個のシェアからW=Rが計算されることを確認することにより、Wが正しいことが保証される。そうでない場合は、署名処理が中止され得る。
【0031】
したがって、処理のこの段階では、正しいR=gと正しいW=gakが計算されているが、値kおよびaは秘密のままである。
【0032】
次に、g=Wであるかどうかを確認することで[w]を検証する。これは、各関係者へ[w]を公開することを含んでもよい。[w]の計算にはシェアの弱い乗算が使用されたため、すべての関係者がオネストで、この時点までプロトコルに従った場合にのみ、wは積akに等しくなることに留意すべきである。W=gakが正しいことがすでにわかっているため、g=Wであることを確認すると、w=akであることが保証される。この時点で、W、gおよびwはすべての関係者に知られているため、どの関係者もこの方法でその値wの正しさを検証できる。さらに、これは、aを明らかにすることなく、またkを明らかにすることなく行うことができる。
【0033】
したがって、処理のこの段階で、少なくとも2つの関係者のうちの各オネストな関係者によってwの正しい値が計算されていることが保証されている。
【0034】
上記のすべてのステップは、署名されるメッセージMの知識がなくても実行され得る。したがって、これらのステップは、前処理プロセスで、例えば非ピーク期間中に、実行され得る。これにより、処理装置の負荷が平準化され、ピーク時に実行され得るトランザクションの数を増加させ得る。また、メッセージMが表示されてから、Mの署名が計算されるまでの応答時間が短縮され得る。
【0035】
最後に、メッセージMは、[k-1]=[a]・w-1を計算し、[x・k-1]=[x]・[k-1]を計算し、M、R、[k-1]および[x・k-1]の関数として、少なくとも二つの関係者間での、シェア[s]を生成することで、署名される。
【0036】
MのDSAまたはECDSAデジタル署名は通常、対(r,s)で構成される。ここで、r=F(g)およびs=k-1(H(M)+rx)である。対(r,s)は、公開鍵yを使用して公開および検証され得る。生成されたシェア[s]は、署名対の後半部分sのシェアである。対の最初の部分rは、r=F(R)として生成され得る。ここで、Fは、ECDSAによって最初に提供および規定された関数の1つである。シェア[s]は、次のように生成される。最初に、kの逆数のシェアが[k-1]=w-1[a]として計算される。wがakに等しいことが確認されているため、w-1[a]=[aw-1]=[a(ak)-1]=[(aa-1)k-1]=[k-1]であるため、k-1が正しく分散される。さらに、シェア[x・k-1]は、[x]・[k-1]として計算される。シェア[s]は、例えば、最初に[A]=H(M)[k-1]、[B]=[k-1][x]を計算し、最後に[s]=[A]+r[B]を計算することによって計算される。
【0037】
さらに、本発明による方法では、処理の正確性に関して疑わしい場合、中止が許可される、すなわち、終了保証が提供されない。ただし、終了保証は、多くの従来技術の方法の要件である。このような疑いは、例えば、1以上の関係者が危殆化されているか悪意があることが原因であり得る。または、単に関係者間の通信中にパッケージが失われたことが原因であり得る。処理を中止すると、正しい署名を提供しようとするために処理が再起動されるだけである。
【0038】
終了保証が提供される署名方法は、通常、同期ネットワーク、すなわちパッケージ遅延の上限を保証するネットワークを想定することによって終了保証を実現する。インターネットなどのオープンな通信ネットワークを使用してこのような方法を適用するには、インターネットが本質的に非同期であるため、各関係者にローカルクロックを提供する必要がある。また、特定の一定の待ち時間内に関係者が予期されるメッセージを受信しない場合は、ローカルクロックにより、それは単に送信者を破損しているとして扱う。
【0039】
これはジレンマをもたらす。待ち時間が小さい場合、インターネット上で頻繁に発生するパッケージの遅延により、プロトコルが許容できるよりも多くの関係者が、例えばn個の関係者のn/2個またはn/3個以上が、破損したものとしてすぐに扱われるリスクが高くなる。その結果、秘密の署名鍵が漏洩する可能性がある。これを回避するには、待ち時間を非常に高く設定する必要がある。ただし、これには、単一の悪意のある関係者が他の関係者に送信する各メッセージを意図的に遅延させることにより、システムに非常に高い遅延をもたらすことができるという欠点がある。つまり、タイムアウトが発生しそうになるまでメッセージを保留できる。本発明による方法は、プロトコルに中止を許容することにより、当該ジレンマを回避する。これにより、非常に小さな待ち時間を使用できるようになり、システム全体の遅延がわずかになる。これが可能なのは、すべてのメッセージが遅延した場合でさえ、発生する可能性のある最悪の事態がプロトコルが停止することであり、先に開示されているいくつかの方法のように秘密署名鍵が漏洩しないことを保証するように設計されているためである。
【0040】
値Rを計算するステップは、
少なくとも二つの関係者のそれぞれが、値RのシェアRをR=gk_jとして計算し、シェアを他の各関係者に分配するステップと、
シェアRから値Rを計算するステップと、
を含んでもよく、
Rが正しいことを保証するステップは、
関係者のそれぞれが、他の関係者から受信したシェアRに基づいて、Rが正しいことを確認するステップ、
を含み得る。
【0041】
それぞれの関係者Pが、秘密kのシェアkを保持していることを想起する。本実施形態によれば、値Rは、以下の方法で少なくとも2つの関係者によって計算される。少なくとも2つの関係者のそれぞれは、RのシェアRを計算する。ここで、Rは、関係者jによって計算されるRのシェアを示す。RはR=gk_jとして計算される。ここで、k_jは、関係者jが保持する[k]のシェアを示す。したがって、各関係者は、[k]の独自のシェアに基づいて、Rのシェアを計算する。
【0042】
次に、少なくとも2つの関係者のそれぞれが、RのシェアRを他の各関係者に分配する。つまり、シェアRが公開される。しかし、離散対数の仮定により、シェアk_jは秘密のままであり、したがって秘密のノンスkは秘密のままである。
【0043】
次に、値Rは、公開されたシェアRから計算される。これは、例えば、「指数で」シェアRを補間することを含み得る。例えば、値Rは、少なくとも2つの関係者によって計算されてもよく、および/またはそれは中央でまとめてに計算されてもよい。本明細書において、「指数での補間」という用語は、たとえばgk_1、gk_2などからgを計算するなど、「指数での」秘密が再構築される多項式補間を意味すると解釈されるべきである。
【0044】
最後に、少なくとも2つの関係者のそれぞれが、他の関係者から受信したシェアRに基づいて、Rが正しいことを確認する。
【0045】
この方法の一実施形態によれば、シェアはシャミアのシェアであってもよく、少なくとも3つの関係者が存在し(すなわち、n≧3)、セキュリティ閾値tは、t<n/2を満たす。本実施形態では、少なくとも3つの関係者のそれぞれは、他の関係者から受信したシェアRのそれぞれが、第1のt+1個のシェアによって一意に定められる次数tの多項式fと一致することを確認することによって、Rが正しいことを検証できる。これは、例えば、シェアRt+2、Rt+3、…、Rのそれぞれを、例えば指数でのラグランジュ補間を使用する第1のt+1個のシェアR、R、…、Rt+1から算出され得る予想されるシェアと比較することによって実行され得る。全ての場合において、受信したシェアが予想されるシェアと等しい場合、受信した全てのシェアRは正しいと結論付けることができる。これは、シェアRの少なくともt+1個がオネストな関係者から受信したものであり、したがって正しいことがわかっているため、結論付けることができる。いずれかの関係者が、シェアRのいくつかが欠落しているか、第1のt+1個の受信したシェアによって決定された多項式と一致しないことを発見した場合、関係者はプロトコルを中止できる。
【0046】
当該方法の代替的な実施形態によれば、シェアは加法分散であってもよく、セキュリティ閾値は最大t=n-1であってもよい。当該実施形態では、各関係者Pのシェアgk_iは、ゼロ知識証明、例えば、非対話型ゼロ知識証明を含んでもよく、それにより、Pは、kに関する情報を明らかにすることなく、シェアRが正しく計算されたことを他の関係者に証明する。当該代替的な実施形態において、Rの正しさを検証することは、別の関係者からシェアRを受信する関係者がゼロ知識証明を検証し、証明が無効である場合に中止することを含んでもよい。
【0047】
一実施形態によれば、Rの正確さは、以下の方法で保証され得る。3つの参加関係者(n=3)があり、1つの危殆化された、または利用できない関係者が許容できる、つまりt=1、と想定する。この場合、Rの正しい値は、2つ以上のオネストな関係者から発信されたシェアRから計算できる。次に、3つの参加関係者のそれぞれは、それぞれのkのシェアに基づいてRのシェアを計算し、上記のように、計算されたRのシェアを他の2つの関係者のそれぞれに分配できる。それぞれの関係者は、Rの3つのシェア、つまり、関係者自体で計算されたシェアと、他の2つの参加関係者から受信した2つのシェアを所有する。3つの関係者全てがオネストである場合、Rはこれらのシェアの2つの任意の組み合わせから正しく計算され得る。したがって、関係者は、利用可能なシェアの2つの可能な組み合わせに基づいて、Rを計算する。この例では、(R,R)、(R,R)、および(R,R)の3つの組み合わせになる。3つの組み合わせ全てがRの同じ値になる場合、3つの関係者全てがオネストであり、Rが正しいと結論付けることができる。少なくとも1つの組み合わせに基づいて計算されたRの値が、他の組み合わせのいずれかに基づいて計算されたRの値と異なる場合、少なくとも1つの関係者が不正であると結論付けることができる。しかし、どの関係者が不正であるかを判断できないため、いずれのRの計算値が正しいかを判断することはできない。この場合、Rが正しくないと単純に判断され、署名処理が中止され得る。これにより署名処理が遅れる可能性があるが、秘密は明らかにされない。
【0048】
値Rを計算するステップ、およびRが正しいことを確認するステップは、逆の順序で実行できる。すなわち、関係者は、値Rを計算する前に、受信したシェアRが正しいことを確認できる。値Rは、正しいことがわかった場合にのみ計算されてもよい。
【0049】
値Rを計算するステップ、および認証符号Wを計算するステップは、同じプロトコルを使用して実行できる。例えば、認証符号Wを計算するステップは、本質的に、値Rに関連する上記の方法で実行され得るが、gの代わりにRを基礎として使用することによって実行され得る。したがって、この場合、少なくとも2つの関係者のそれぞれが認証符号WのシェアWをW=Ra_jとして計算し、シェアを他の関係者のそれぞれに分配し、認証符号WはシェアWから計算され、関係者のそれぞれは、他の関係者から受信したシェアWに基づいて、例えば上記の方法で、Wが正しいことを確認する。
【0050】
この方法は、RまたはWが正しくないことが明らかになった場合に、署名処理を中止するステップをさらに含み得る。これにより、秘密鍵が悪意のある関係者に公開されないことが保証される。しかし、署名処理が中止された場合、有効な署名の取得を再試行するために処理を再開しても安全であることが証明できる。
【0051】
この方法は、wを検証するステップがg≠Wを明らかにする場合、署名処理を中止するステップをさらに含み得る。g≠Wであることが判明した場合、w≠akであると結論付けることができ、その結果、[w]に基づいて有効な署名は取得され得ない。この場合、署名値sを計算して公開しようとすると、悪意のある関係者に秘密鍵xに関する情報が公開されることによって、機密性が損なわれる可能性がある。したがって、この場合、上記の状況と同様に、署名処理が中止され、署名処理が再開され得る。
【0052】
メッセージに署名するステップMは、[w]を開き、[s]=mw-1[a]+rw-1[a][x]+[d]+m[e]を計算することによって実行され得る。ここで、r=F(R)、m=H(M)、および[d]と[e]は、ゼロのランダムなシェア(いわゆる「ブラインダシェア」)である。
【0053】
いくつかの種類の秘密分散方式では、積[ax]=[a][x]が計算されると、[ax]のシェアが秘密aおよびxについてあまりにも多くの情報を明らかにし得るため、シェア[ax]を開くことは安全ではない。
【0054】
これは、例えば、シェアがシャミアのシェアであって、各関係者が[a]および[x]のシェアを乗算することによって[ax]の関係者のシェアが得られる、本方法の第1の実施形態の場合である。この場合、[ax]のシェアはランダムではなく、[ax]を公開するとaまたはxに関する情報を漏洩する可能性がある。これを回避するために、関係者はランダムなシェアを有することがわかっているゼロ[0]のシェアを最初に計算し、代わりに[ax]+[0]を開く。[0]を追加しても結果は変わらないが、値axが、[ax]を開いたときに公開される唯一の情報であることが保証される。
【0055】
したがって、[s]は、最初にmw-1[a]+rw-1[a][x]として計算される。この時点でwが正しいことがわかっているため、[a][x]が正しいと仮定すると、これは[s]=[k-1(m+rx)]、つまり[s]が、DSAまたはECDSAによって定められる正しい署名値sのシェアであることに留意すべきである。しかし、[s]を開く前に、ゼロシェア[d]が追加される、つまり、[s]+[d]が開かれる。d=0であるため、dをsに追加してもsの値は変更されない。
【0056】
上記されているように、wの正しさが確実とされるとすると、いくつかの実施形態では、乗算[a][x]が正しくない可能性がある弱い乗算である場合であっても、上記で計算された署名(r,s)を明らかにしても、正しく計算された署名以上に秘密鍵xについて何も漏洩しないことが数学的に証明され得る。[a][x]が正しくない場合に発生する唯一のことは、得られた値(r,s)が有効な署名ではないということである。これは、メッセージMと公開検証鍵yを使用して署名(r,s)を検証するだけで、各関係者によって決定され得る。無効な場合、関係者は署名処理を再開できる。
【0057】
いくつかの実施形態では、[s]+[d]を開くことは安全であると証明できるが、証明は、オネストな関係者が最初にメッセージMに署名することに同意することを前提としている。Mに同意しない場合、秘密鍵xに関する意図しない情報が漏洩し得る。したがって、本明細書に記載の第1の実施形態などのいくつかの実施形態では、関係者は、代わりに、[s]+[d]+m・[e]を計算して開くことができる。ここで、[d]および[e]は、ゼロのランダムなシェアであり、m=H(M)である。これらの実施形態では、オネストな関係者が全て同じ値Mを使用しなくても、当該シェアを開くことは安全であることが示され得る。オネストな関係者がMに同意する場合、[d]+m・[e]は、結果[s]がxに関する情報を公開することなく開かれ得ることを保証するゼロシェアに変化する。反対に、いくつかの関係者が異なる値のMを保持している場合、[d]+m・[e]を[s]に追加すると、[s]が完全にランダムなシェアになり、プロトコルが中止されるが、xに関する情報は漏洩しない。これにより、関係者が[s]を開く前にMの同じ値を使用することを最初に確認する必要がないという特性を実現する。これは、関係者が[s]を開く前にMの値に同意することを保証するために、さらなる相互作用のラウンドを費やす必要がないことを意味するため、これは実用上重要であり得る。
【0058】
本方法の代替の実施形態では、シェアは加法分散であり得、ペイエの暗号化方式などの加法準同型暗号化方式を使用して、乗算[ax]=[a][x]を実装する。ここで、aまたはxに関する情報を漏洩せずに、積[ax]=[a][x]のシェアを安全に明らかにできるようにするために、[ax]を計算する処理において、例えば非対話型ゼロ知識照明などの、ゼロ知識証明を含む必要があり得る。処理にそのようなゼロ知識証明を含めることは、例えば、ペイエの暗号化が使用される場合、当業者によって適用され得る公知の技術である。
【0059】
少なくとも、秘密鍵xを生成するステップと、ランダムな秘密シェア[a]および[k]を生成するステップと、値Rを計算するステップと、認証符号Wを計算するステップとは、メッセージMの生成の前に、前処理によって実行され得る。本実施形態によれば、例えば、鍵ペア([x],y)を生成するステップと、RおよびWを計算するステップと、RまたはWの正確さを保証するステップと、ゼロシェア[d]および[e]を生成するステップと、シェア[w]を計算するステップと、[w]を開くステップと、g=Wであることを確認するステップと、および/または[ax]=[a][x]を計算するステップとを含むステップのいくつかは、署名されるメッセージMが関係者に知られる前に実行され得る。上記のように、これにより、デジタル署名が提供されるときに、実行されるステップの数が減り、それによって、処理要件および応答時間が減る。
【0060】
シャミアの秘密シェアなど、多くの種類の秘密シェアには、次の特性がある。例えば[a]と[x]など、2つのシェアが与えられると、2つの秘密の合計のシェア[a+x]は関係者の間での相互作用なしに計算され得る。さらに、全ての関係者が特定の公開値cを知っている場合、関係者は相互作用なしに積[c・x]のシェアを計算できる。このような秘密分散方式は、「線形」秘密分散方式と呼ばれる。
【0061】
そのような線形秘密シェアが使用される本発明のいくつかの実施形態によれば、前処理段階において、署名されるメッセージMを知る前に、[x]、[a]、y、R、W、[ax]およびwを生成することによって、並びにRおよびwの正しさを検証することによって、Mが関係者に知られるようになると、関係者は相互作用なしにrと[s]を生成できる。この理由は、前処理ですでに生成および検証されたシェアおよび値を使用することにより、rがそれぞれの関係者によってr=F(R)として局所的に計算され得、さらに[s]がシェアの加算およびシェアと公開定数との乗算のみによって計算され得るからである。
【0062】
さらに、いくつかの実施形態によれば、前処理によっていくつかのステップを実行することによって、Mが関係者に知られると、最終的な署名(r,s)は、単一ラウンドの相互作用を行うことで受信側の関係者に公開されてもよく、このラウンドでは、それぞれの関係者がR、およびその[s]のシェアを受信側の関係者に送信する。
【0063】
さらに、いくつかの実施形態によれば、前処理によっていくつかのステップを実行することによって、Mが関係者に知られるようになると、最終的な署名(r,s)は、いくつかの関係者のみが、それらの[s]のシェアを受信関係者に送信する、単一ラウンドの相互作用を行うことで受信関係者に公開され得る。例えば、第1の実施形態では、[s]は、次数2tのシャミアのシェアであり、したがって、2t+1個の関係者が、それらのシェアを単一ラウンドの相互作用で受信関係者に送信することで十分である。
【0064】
線形秘密シェアが使用されるいくつかの実施形態によれば、さらなる前処理ステップを実行することによって、Mが与えられると、最終的な署名(r,s)は、関係者のt+1個のみが、R、およびそれらの[s]のシェアを受信関係者に送信する、単一ラウンドの相互作用で受信関係者に公開され得る。例えば、[ax]が次数2tのシャミアのシェアであるいくつかの実施形態では、安全なマルチパーティ計算の分野で知られている標準的な手法を使用して、前処理ステップで[ax]の次数をtに減らすことができる。これにより、[s]の次数は同様にtになるため、[s]のt+1個のシェアのみに基づいて、受信関係者がsを再構築できる。
【0065】
さらに、本発明の一実施形態によれば、シェア[ax]が値axの正しいシェアであることを確実にするために、さらなる前処理ステップが実行され得る。これは、安全なマルチパーティ計算の分野の標準的な手法で実行され得る。これを行うことにより、前処理ステップ中に処理が中止されない場合、特定の数のオネストな関係者、例えば2t+1個またはt+1個のオネストな関係者が、最大t個の悪意のある関係者が有効な署名の公開を妨げようとしても、有効な署名(r,s)を開くことができることが保証され得るという特性が達成される。
【0066】
このように通信を簡素化することにより、例えば、署名されるメッセージMが関係者に知られると必要となる、相互作用のラウンドの数、およびsの再構築に必要なシェアの数を最小限に抑えることで、マルチパーティ署名方式の実際の適用に利益をもたらすことができる。
【0067】
本方法は、公開鍵yをy=gとして計算し、少なくとも2つの関係者のそれぞれにyを公開するステップをさらに含み得る。本実施形態によれば、秘密鍵[x]および公開鍵y=gの形態の鍵ペアが生成される。当該鍵ペアは、デジタル署名を生成するために使用される。
【0068】
本方法は、公開鍵yを使用して署名を検証するステップをさらに含み得る。これは、例えば、r=F(gm/s・yr/s)であるかどうかを確認することを含み得る。代替的または付加的に、当該ステップは、R=g・yであるかどうかを確認することを含んでもよい。
【0069】
これは、例えば、少なくとも2つの関係者のそれぞれが、公開検証鍵yを使用して、署名の正しさを検証することを含み得る。これは、例えば、R=g・yを確認することを含み得る。関係者がこれが当該事例に該当すると判断した場合、関係者は、署名(r,s)を受け入れ、結果としてそれを出力する。そうでない場合、関係者は署名処理を中止してもよい。
【0070】
本方法の別の実施形態では、得られた署名(r,s)を受信する必要があるのは、関係者自体ではなく、外部の関係者である。この場合、各関係者Pは、上記のようにRと秘密シェア[s]のシェアsとを計算する。各関係者はRとsを外部の関係者に送信する。外部の関係者は、全ての受信した値Rを比較し、値が等しくない場合は中止する。次に、r=F(R)を計算し、多項式補間を介してシェアsからsを計算し、公開鍵yを使用してR=g・yであることを検証する。そうである場合、関係者は得られた署名として(r,s)を受け入れる。
【0071】
本方法は、yの正しさを確認するステップをさらに含み得る。本発明の一実施形態によれば、当該ステップは、ランダムなシェア[k]を生成し、公開し、R=gの正しさを検証するのと同じ方法で、最初にランダムなシェア[x]を生成し、次にy=gを公開しyの正しさを確認するステップを含み得る。
【図面の簡単な説明】
【0072】
図1図1は、本発明の第1の実施形態による方法を使用した鍵生成および署名生成を示すブロック図である。
図2図2は、本発明の第2の実施形態による方法を使用した鍵生成を示すブロック図である。
図3a図3aは、本発明の第3の実施形態による方法を使用した署名生成を示すブロック図である。
図3b図3bは、本発明の第3の実施形態による方法を使用した署名生成を示すブロック図である。
図4図4は、本発明の第4の実施形態による方法を使用した署名生成を示すブロック図である。
図5図5は、本発明の第5の実施形態による方法を使用した鍵生成および署名生成を示すブロック図である。
図6図6は、本発明の実施形態による方法を示すフローチャートである。
【発明を実施するための形態】
【0073】
本発明は、添付の図面を参照してさらに詳細に説明される。
【0074】
図1は、本発明の第1の実施形態による方法を使用した鍵生成および署名生成を示すブロック図である。本方法は、3つの関係者P1、P2およびP3をしようすることを含む。ここで、3つの関係者P1、P2およびP3は、関係者P1、P2、P3の一つに利用可能である情報が他の関係者P1、P2、P3に利用できないという意味で、個別または別個のものである。関係者P1、P2、P3は、例えば、互いに物理的に分離された複数のハードウェアサーバの形態であり得る。当該例では、セキュリティ閾値(t)は1である。つまり、関係者P1、P2、P3の一つが悪意のある場合、その関係者は、他の(オネストな)関係者がMに署名することを同意しない限り、xに関する情報を学習できず、または秘密鍵xを用いてメッセージMに署名できない。
【0075】
クライアント1は、要求「鍵生成」を関係者P1、P2、P3のそれぞれに送信し、関係者P1、P2、P3が秘密鍵[x]および公開鍵yを含む鍵ペア([x],y)を生成するように要求する。クライアント1は、3つの関係者P1、P2、P3を含むシステムを取り巻く環境に配置されている。すなわち、クライアントは、鍵および署名を生成するシステムの一部を形成していない。
【0076】
要求「鍵生成」の受信に応答して、3つの関係者P1、P2、P3は、3つの関係者P1、P2、P3間でのランダムな秘密シェアとして秘密鍵[x]を生成する。これは、例えば、関係者P1、P2、P3間のいくつかのラウンドの相互作用を含み得、そしてそれは、例えば、図2を参照して後述される方法で実行され得る。結果として、関係者P1、P2、P3のそれぞれが秘密鍵xのシェアx1、x2、x3を保持するが、関係者P1、P2、P3のいずれも秘密鍵x全体を所有していない。
【0077】
3つの関係者P1、P2、P3は、公開鍵yをy=gとしてさらに計算する。公開鍵yは、関係者P1、P2、P3のそれぞれがyを所有しているという意味で、およびyが関係者P1、P2、P3のそれぞれによってクライアント1に伝達されるという意味で公にされる。したがって、y=gは公にされまたは「公開される」が、xは秘密のままである。
【0078】
関係者P1、P2、P3のいずれも悪意がない、または損なわれていない場合、関係者P1、P2、P3のそれぞれによってクライアント1に通信される公開鍵yは同じになる。つまり、クライアント1は3つの関係者P1、P2、P3からのyの3つの同一バージョンを受信する。したがって、クライアント1が3つの同一バージョンのyを受信した場合、関係者P1、P2、P3のいずれも悪意がない、または損なわれていない、つまり、関係者P1、P2、P3の全てはこれまで正しく動作した、と結論付けることができる。一方、3つの関係者P1、P2、P3から受信したyの3つのバージョンが互いに異なる場合、関係者P1、P2、またはP3のうちの少なくとも1つは悪意があるか、または損なわれていると結論付けることができる。その場合、クライアント1は処理を中止させる。
【0079】
鍵ペア([x],y)が生成されると、生成された鍵ペア([x],y)を適用する署名処理が、クライアント1が要求、署名、および署名されるメッセージMを関係者P1、P2、P3のそれぞれに送信することによって開始される。
【0080】
要求、署名、およびメッセージMの受信に応答して、関係者P1、P2、P3は、関係者間のいくつかのラウンドの相互作用を必要とし得る署名生成処理に参加し、それぞれの関係者P1、P2、P3が他の関係者にシェアx1、x2、x3を公開することなく、[x]のシェアx1、x2、x3を適用する。署名生成処理の最後に、それぞれの関係者P1、P2、P3は、値Rと、[s]のシェアs1、s2、s3とを所有している。署名生成処理は、例えば、図3を参照して後述する方法で実行され得る。
【0081】
次に、それぞれの関係者P1、P2、P3は、Rと、[s]のシェアs1、s2、またはs3をクライアント1に返す。これに応答して、クライアント1は、例えば補間を使用して、受信したシェアs1、s2、s3からsを計算する。さらに、クライアント1は、r=F(R)を計算し、3つの関係者P1、P2、P3のうちの少なくとも2つから同一バージョンのRが受信された場合にのみ、有効な署名として(r,s)を受け入れることができる。さらに、クライアント1は、署名(r,s)を有効な署名として受け入れるために、さらなる検証確認(例えば、R=g・yの検証)を実行してもよい。
【0082】
図2は、本発明の第2の実施形態による方法を使用した鍵生成を示すブロック図である。図2に示される鍵生成は、例えば、図1に示される方法の一部として適用され得る。
【0083】
図2に示される実施形態では、3つの関係者P1、P2、P3は、鍵ペア([x],y)を計算する際に協働する。ここで、[x]は、3つの関係者P1、P2、P3間での秘密シェアの形態の秘密鍵であり、yは公開鍵である。本実施形態によれば、シェアはシャミアの秘密シェアであり、セキュリティ閾値は1、すなわちt=1である。
【0084】
関係者P1、P2、P3間の第1のラウンドの相互作用では、秘密鍵[x]が、関係者P1、P2、P3間でのランダムな次数tのシャミアの秘密シェアとして生成される。この目的のために、それぞれの関係者P1、P2、P3は、3つのランダム値を生成し、1つはそれ自体用であり、1つは他の関係者P1、P2、P3のそれぞれ用であり、生成された値をそれぞれの他の関係者P1、P2、P3に転送する。したがって、関係者P1は、値x1,1を生成してそれ自体を保持し、値x1,2を生成して関係者P2に転送し、値x1,3を生成して関係差P3に転送する。同様に、関係者P2は、値x2,1を生成して関係者P1に転送し、値x2,2を生成してそれ自体を保持し、値x2,3を生成して関係者P3に転送する。最後に、関係者P3は、値x3,1を生成して関係者P1に転送し、値x3,2を生成して関係者P2に転送し、値x3,3を生成してそれ自体を保持する。
【0085】
したがって、関係者P1、P2、P3間の第1のラウンドの相互作用の終わりに、それぞれの関係者P1、P2、P3は、3つのランダムな値、すなわち、それ自体によって生成された値および他の関係者P1、P2、P3のそれぞれから受信した値を所有している。これらの3つの値に基づいて、関係者P1、P2、P3のそれぞれは、[x]のシェアx1、x2、x3を生成する。
【0086】
関係者P1、P2、P3間の第2のラウンドの相互作用では、関係者P1、P2、P3は、公開鍵yを計算する。この目的のために、それぞれの関係者は、yi=gxiを計算する。ここで、gは、巡回群Gの生成元であり、yiは関係者Piによって生成された値であり、xiは関係者Piによって保持される[x]のシェアである。さらに、関係者P1、P2、P3のそれぞれは、値yiを他の関係者P1、P2、P3のそれぞれに伝達する。したがって、関係者P1はy1=gx1を計算し、y1を関係者P2およびP3に通信、等を行う。したがって、関係者P1、P2、P3のそれぞれは、3つの値y1、y2、およびy3のそれぞれを所有している。
【0087】
次に、関係者P1、P2、P3のそれぞれは、他の2つの関係者から受信した値yiが信頼できるものであることを確認する。これは、例えば、指数での補間の実行を含んでもよい。関係者P1、P2、P3の1つが、他の関係者の少なくとも1つから受信した値yiが信頼できないと結論付けた場合、その関係者P1、P2、P3は「中止」信号を出力し、署名処理は、その結果、中止される。
【0088】
上記のように関係者P1、P2、P3のいずれも「中止」を出力しない場合、署名処理を続行することが許可され、関係者P1、P2、P3のそれぞれは、値y1、y2、y3に基づいて、および補間を使用して、公開鍵yを生成する。DSA/ECDSA標準によると、y=1は不正な公開鍵であるため、この場合は処理を中止する必要がある。プロトコルを中止した場合、プロトコルが再起動され、別の鍵ペアが生成され得ることに留意すべきである。y≠1だと分かった場合、関係者P1、P2、P3のそれぞれは、関係者P1、P2、P3間の第3のラウンドの相互作用の一部として、「OK」信号を他の関係者P1、P2、P3のそれぞれに転送する。関係者P1、P2、P3のそれぞれは、他の関係者P1、P2、P3のそれぞれから「OK」信号を受信した場合にのみ、yの自身のバージョンを受け入れる。それ以外の場合、署名処理は中止される。
【0089】
上記のように他の関係者P1、P2、P3から「OK」信号が受信された場合、公開鍵yが出力される。
【0090】
図3は、本発明の第3の実施形態による方法を使用した署名生成を示すブロック図である。図2のように、秘密シェアはシャミアのシェアであり、セキュリティ閾値は1(t=1)である。処理は、図3aで始まり、図3bに続く。図3に示される署名生成は、例えば、図1に示される方法の一部として適用され得る。
【0091】
図3に示される実施形態では、3つの関係者P1、P2、P3は、秘密鍵[x]を使用して、3つの関係者P1、P2,P3間の秘密シェアの形で、メッセージMの署名(r,s)の生成に協働する。秘密鍵[x]は、例えば、図2に関する上記の方法で、次数tのシャミアのシェアとして生成され得る。
【0092】
図3aに示されている関係者P1、P2、P3間の第1のラウンドの相互作用では、関係者はランダムな次数tの秘密シェア[k]および[a]を生成する。これは、基本的に、[x]の生成について図2に関する上記で説明された方法で実行される。関係者はまた、3つのランダムな次数2tのゼロシェア[b]、[d]および[e]、つまりブラインドシェアを生成する。したがって、関係者P1、P2、P3間の第1のラウンドの相互作用の終了時に、それぞれの関係者P1、P2、P3は、[k]、[a]、[b]、[d]および[e]のそれぞれのシェアを保持し、および関係者P1、P2、P3のいずれも、秘密aおよびkに関する情報を所有していない。
【0093】
次に、図3aにも示されている関係者P1、P2、P3間の第2のラウンドの相互作用で、関係者P1、P2、P3のそれぞれが値RiをRi=gkiとして計算する。ここで、gは巡回群Gの生成元であり、Riは関係者Piによって計算された値であり、kiは関係者Piによって保持されている[k]のシェアである。したがって、関係者P1はR1=gk1を計算し、関係者P2はR2=gk2を計算し、関係者P3はR3=gk3を計算する。
【0094】
さらに、関係者P1、P2、P3のそれぞれは、値wiをwi=ki・ai+biとして計算する。ここで、wiは関係者Piによって計算された値であり、ki、aiおよびbiはそれぞれ、関係者Piによって保持されている[k]、[a]および[b]のシェアである。したがって、関係者P1はw1=k1・a1+b1を計算し、関係者P2はw2=k2・a2+b2を計算し、関係者P3はw3=k3・a3+b3を計算する。関係者によって保有されるシェアw1、w2、w3は、次数2tのシャミアのシェア[w]を形成する。ここで、全ての関係者が所定の動作を正しく実行した場合、wはakに等しくなる。
【0095】
関係者のそれぞれは、計算された値Riおよびwiを他の関係者のそれぞれに公開する。そのため、関係者P1、P2、P3のそれぞれは、3つの値R1、R2およびR3のそれぞれを所有し、3つのシェアw1、w2およびw3のそれぞれを所有しており、したがってR=gおよびw=k・a+bは、kとaのそれぞれが秘密のままであっても、関係者P1、P2、P3のそれぞれによって知られるようになる。これは、Rおよびwを「公開する(オープニング)」と呼ばれ得る。シェア[b]は、[ak]に追加しても秘密を変更せず、シェア[ak]の個々のシェアを「ブラインド」し、それによって、積akを除く[ak]のシェアを確認することによりaまたはkに関する情報を得ることを不可能にするため、「ブラインダシェア」と呼ばれ得る。
【0096】
関係者P1、P2、P3間の第2のラウンドの相互作用の最後に、関係者P1、P2、P3のそれぞれがRの正しさを確認する。これは、受信した値R1、R2およびR3に基づいて、指数の補間を使用して行われる。関係者P1、P2、P3の少なくとも1つがRが正しくないことを発見した場合、処理は中止される。それ以外の場合、処理は続行される。
【0097】
次に、図3bに示す関係者P1、P2、P3間の第3のラウンドの相互作用において、関係者P1、P2、P3のそれぞれが値WiをWi=Raiとして計算する。ここで、Wiは関係者Piによって計算された値であり、aiは関係者Piによって保持されている[a]のシェアである。さらに、それぞれの関係者P1、P2、P3は、計算された値Wiを他の関係者P1、P2、P3のそれぞれに明らかにする。したがって、関係者P1、P2、P3のそれぞれは、値W1、W2、W3のそれぞれを所有しており、指数の補間を使用することにより、W=Rは、関係者P1、P2、P3のそれぞれによって計算され得るが、値aは秘密のままである。これは、Wを「公開する」と呼ばれ得る。
【0098】
関係者P1、P2、P3間の第3のラウンドの相互作用の最後に、関係者P1、P2、P3のそれぞれは、受信した値W1、W2、W3に基づいて、指数の補間を使用して、Wの正しさを確認する。これは、第2のラウンドの相互作用で値Riを使用してRの正しさが確認されたのと同じ方法で、値Wiを使用して行われる。関係者P1、P2、P3の少なくとも1つがWが正しくないことを検出した場合、処理は中止される。それ以外の場合、処理は続行される。
【0099】
最後に、関係者P1、P2、P3間の第4のラウンドの相互作用では、関係者P1、P2、P3のそれぞれが、値w1、w2、およびw3に基づいて、補間を使用してwを計算する。
【0100】
さらに、関係者P1、P2、P3のそれぞれは、W=gであることを確認することによってwを検証する。上記のように、W=RおよびR=gであることが確実とされる。そうでない場合、処理は先に中止されていただろう。このことから、W=gkaとなる。したがって、g=Wを確認することにより、w=a・kであることが保証される。[w]は、[a][k]としてではなく、[a][k]+[b]として計算されたが、[b]はゼロのシェアであるため、つまり[b]=[0]であるため、[b]を追加しても当該確認には何ら違いはないことに留意するべきである。
【0101】
関係者P1、P2、P3の少なくとも1つがW≠gを検出した場合、署名処理は中止される。それ以外の場合、処理は続行され、関係者P1、P2、P3のそれぞれは、シェア[s]のシェアsiを次のように計算する。
si=m・hi+r・hi・xi+m・di+ei
ここで、hi=ai・w-1であり、r=F(R)であり、ここでFは事前定義された関数であり、m=H(M)、ここでMは署名されるメッセージであり、Hは事前定義された関数である。
【0102】
xi、diおよびeiは、それぞれ、関係者Piによって保持されている[x]、[d]、および[e]のシェアである。各関係者が上記のようにそのシェアsiを計算するとき、それは関係者が集合的に計算[s]=m[k-1]+r[k-1][x]+m[d]+[e]を実行することを意味する。全ての関係者が規定どおりに動作を実行すると、DSAまたはECDSAによって要求されるように[s]=[k-1(m+rx)]、つまりs=k-1(m+rx)になる。
【0103】
関係者P1、P2、P3のそれぞれは、他の関係者P1、P2、P3のそれぞれにシェアsiを明らかにし、関係者P1、P2、P3のそれぞれは、受信したシェアs1、s2およびs3に基づく補間を使用してsを計算する。そして、関係者P1、P2、P3は、公開鍵yを使用してメッセージMの署名を検証することにより、つまりR=g・yを確認することにより、sの正しさを確認する。sの正しさが確認されると、署名(r,s)はメッセージMの最終署名として受け入れられる。
【0104】
図4は、本発明の第4の実施形態による方法を使用した署名生成を示すブロック図である。図4に示されている処理は、3つの関係者P1、P2、P3間の6つのラウンドの相互作用を含む。関係者P1、P2、P3間の最初の3つのラウンドの相互作用は、図3に示され、上述された最初の3つのラウンドの相互作用と同じである。
【0105】
関係者P1、P2、P3間の第4のラウンドの相互作用では、関係者P1のみが図3に関する上記された方法でs1を計算する。すなわち、次の式である。
s1=m・h1+r・h1・x1+m・d1+e1
【0106】
次に、P1は、s1を関係者P2に転送し、関係者P1、P2、P3間の第5のラウンドの相互作用において、関係者P2は、図3に関する上記された方法でs2を計算し、s1およびs2を関係者P3に転送する。
【0107】
関係者P1、P2、P3間の第6のラウンドの相互作用では、関係者P3は図3に関する上記された方法でs3を計算し、3つのシェアs1、s2およびs3に基づいて、補間を使用して、sを計算する。そして、関係者P3はsの正しさを確認し、sが正しければ、署名(r,s)は、メッセージMの得られた署名(r、s)として関係者P3によって受け入れられる。
【0108】
したがって、図4に示される実施形態では、署名(r,s)は、関係者P3によってのみ受信され、一方、図3に示される実施形態では、関係者P1、P2、P3のそれぞれは、署名(r、s)を受信する。オンライン段階において、それぞれの関係者P1、P2、P3は1つの関係者に単一のメッセージを送信することだけが必要なのに対し、図3の実施形態では、それぞれの関係者は他の関係者のそれぞれにメッセージを送信する必要があるため、このような実施形態は実用的であり得る。
【0109】
図5は、本発明の第5の実施形態による方法を使用した鍵生成および署名生成を示すブロック図である。図5に示される実施形態は、図1に示される実施形態と非常に類似しているため、ここでは詳細に説明しない。
【0110】
しかしながら、図5に示される実施形態では、処理は、外部クライアントではなく、関係者の一つである関係者P1によって開始される。したがって、関係者P1は、図1の実施形態においてクライアントによって実行されるステップ、および図1の実施形態において関係者P1によって実行されるステップを実行する。
【0111】
図6は、本発明の実施形態による方法を示すフローチャートである。処理は、ステップ2で開始される。ステップ3では、巡回群G、および巡回群Gの生成元gが定められる。さらに、関数FとHが定義されている。G、g、FおよびHは全て、デジタル署名の生成に使用されるデジタル署名アルゴリズム(DSA)または楕円曲線デジタル署名アルゴリズム(ECDSA)によって指定される。
【0112】
ステップ4では、ランダムな秘密シェア[x]が少なくとも2つの関係者間で生成される。ここで、xは秘密鍵である。
【0113】
ステップ5では、ランダムな秘密シェア[a]および[k]が少なくとも2つの関係者間で生成される。
【0114】
ステップ6で、関係者は[w]=[a]・[k]を計算し、ステップ7で、関係者は値R=gを計算する。例えば、Rは、R=gk_jとしてシェアRを計算する関係者のそれぞれによって計算され得る。ここで、k_jは、関係者jによって保持されている[k]のシェアであり、シェアRから値Rを計算する。
【0115】
ステップ8では、Rが正しいかどうかが調査される。正しくない場合、処理はステップ9に進められ、署名処理が中止され、処理は、新しい秘密シェア[a]および[k]を生成するためにステップ5に戻される。
【0116】
ステップ8でRが正しいことが明らかになった場合、署名処理は続行され得、処理はステップ10に進められ、関係者は認証符号W=gakを計算する。これは、Rを計算することによって行われる。
【0117】
ステップ11では、Wが正しいかどうかが調査される。正しくない場合、処理はステップ9に進められ、署名処理が中止され、処理は、新しい秘密シェア[a]および[k]を生成するためにステップ5に戻される。
【0118】
ステップ11でWが正しいことを明らかになった場合、処理はステップ12に進められ、g=Wであるかどうかが調査される。W=RかつR=gであるため、W=gakである。w=a・kであるため、wが正しく計算されている場合、g=Wである。したがって、g=Wであることが確認できた場合、wは正しく計算されたと結論付けることができる。したがって、ステップ12においてg≠Wが明らかになった場合、処理はステップ9に進められ、署名処理が中止され、処理は、新しい秘密シェア[a]および[k]を生成するためにステップ5に戻される。
【0119】
ステップ12でg=Wであることが確認された場合、処理はステップ13に進められ、関係者間でシェア[s]が生成され、署名がメッセージに与えられる。最後に、署名はステップ14で終了する。
図1
図2
図3a
図3b
図4
図5
図6