(57)【特許請求の範囲】
【請求項１】
グリッチに抵抗する態様で秘密ノンスを伴うデジタル署名を発生させるためのコンピュータにより実施される方法であって、少なくとも１つのプロセッサ及び少なくとも１つのメモリを備えるシステムによって実行される前記方法が、
第１の秘密鍵と前記少なくとも１つのメモリの第１の位置に記憶されたカウンタ値とに基づいて、有効な非ゼロのノンスを発生させることと、
前記カウンタ値を更新し、前記第１のメモリ位置が前記更新したカウンタ値を含むことを確認することと、
前記有効な非ゼロのノンスと第２の秘密鍵とに基づいてデジタル署名を発生させることと、
前記有効な非ゼロのノンスの逆数を発生させることと、
前記有効な非ゼロのノンスの前記逆数に基づいてチェックデジタル署名を発生させることと、
前記発生させたデジタル署名を前記チェックデジタル署名と比較することによって、前記デジタル署名がグリッチなしで発生されたか否かを判定することと、
を備え、前記第２の秘密鍵が鍵ペアの私有鍵である、方法。
【請求項２】
前記発生させたデジタル署名が前記チェックデジタル署名と一致すると判定された場合に、前記発生させたデジタル署名を外部のデバイスに送信することを更に備える、請求項１に記載の方法。
【請求項３】
前記カウンタ値を更新することにより、同一の非ゼロのノンスが１度だけ用いられ、反復されない、請求項１に記載の方法。
【請求項４】
前記有効な非ゼロのノンスを発生させるステップが、差分電力解析（ＤＰＡ）に対して耐性を有する、請求項１に記載の方法。
【請求項５】
前記ノンスが可逆暗号動作を用いて発生される、請求項１に記載の方法。
【請求項６】
前記ノンスが、
前記第１の秘密鍵及び前記カウンタ値の関数として２つ以上の一時変数を演算することと、
前記２つ以上の一時変数に基づいて前記ノンスを発生させることと、
によって発生される、請求項１に記載の方法。
【請求項７】
前記２つ以上の一時変数に基づいて前記ノンスを発生させることが、前記２つ以上の一時変数を組み合わせること及びその結果をＱを法として還元することを備える、請求項６に記載の方法。
【請求項８】
前記デジタル署名が第１の部分及び第２の部分を備え、前記チェックデジタル署名を発生させるステップが、前記第１又は第２の部分の少なくとも一方のチェック値を発生させることを備え、前記デジタル署名がグリッチなしで発生されたか否かを判定することが、前記第１又は第２の部分の前記少なくとも一方の前記チェック値を前記デジタル署名の前記発生させた第１又は第２の部分と比較することを備える、請求項１に記載の方法。
【請求項９】
秘密ノンスを用いるアルゴリズムを用いてデジタル署名を発生させるための耐タンパー性デバイスであって、前記デバイスが、
（ａ）予測不可能な情報のソースと、
（ｂ）第１の秘密鍵及びカウンタ値を記憶するためのメモリと、
（ｃ）前記デジタル署名を発生させるためのプロセッサであって、
前記第１の秘密鍵及び前記カウンタ値に基づいて有効な非ゼロのノンスを発生させ、
前記カウンタ値を更新し、前記第１のメモリ位置が前記更新したカウンタ値を含むことを確認し、
前記有効な非ゼロのノンス及び第２の秘密鍵に基づいて前記デジタル署名を発生させ、
前記有効な非ゼロのノンスの逆数を発生させ、
前記有効な非ゼロのノンスの前記逆数に基づいてチェックデジタル署名を発生させ、
前記発生させたデジタル署名を前記チェックデジタル署名と比較することによって、前記デジタル署名がグリッチなしで発生されたか否かを判定する、プロセッサと、
（ｄ）前記デジタル署名を外部のデバイスに供給するための出力インタフェースと、
を備える、デバイス。
【請求項１０】
前記発生させたデジタル署名が前記チェックデジタル署名と一致すると判定された場合に、前記発生させたデジタル署名を外部のデバイスに送信するための入出力インタフェースを更に備える、請求項９に記載のデバイス。
【請求項１１】
前記カウンタ値を更新することにより、同一の非ゼロのノンスが１度だけ用いられ、反復されない、請求項９に記載のデバイス。
【請求項１２】
前記有効な非ゼロのノンスを発生させるステップが、差分電力解析（ＤＰＡ）に対して耐性を有する、請求項９に記載のデバイス。
【請求項１３】
前記ノンスが可逆暗号動作を用いて発生される、請求項９に記載のデバイス。
【請求項１４】
前記ノンスが、
前記第１の秘密鍵及び前記カウンタ値の関数として２つ以上の一時変数を演算し、
前記２つ以上の一時変数に基づいて前記ノンスを発生させる、
ことによって発生される、請求項９に記載のデバイス。
【請求項１５】
前記２つ以上の一時変数に基づいて前記ノンスを発生させることが、前記２つ以上の一時変数を組み合わせること及びその結果をＱを法として還元することを備える、請求項１４に記載のデバイス。
【請求項１６】
前記デジタル署名が第１の部分及び第２の部分を備え、前記チェックデジタル署名を発生させるステップが、前記第１又は第２の部分の少なくとも一方のチェック値を発生させるステップを備え、前記デジタル署名がグリッチなしで発生されたか否かを判定するステップが、前記第１又は第２の部分の前記少なくとも一方の前記チェック値を前記デジタル署名の前記発生させた第１又は第２の部分と比較するステップを備える、請求項９に記載のデバイス。
【請求項１７】
前記デジタル署名が、差分電力解析（ＤＰＡ）に対して耐性を有する態様で発生される、請求項１から８のいずれか１項に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
[001]  機密データに対して動作を行うシステムでは、そのようなデータに対する不正アクセス又はそのようなデータの開示もしくは改変に対して保護する必要がある。機密データの完全性及び信憑性を証明するために、デジタル署名を用いることができる。機密データの署名に用いられる耐タンパー性（tamper resistant）暗号デバイスは、このデバイスに攻撃者が物理的にアクセスし得る環境において用いることができる。攻撃者は、暗号鍵及び他の秘密事項を入手すると、偽のデータを発生したり、署名を偽造したり、又は機密データを盗取したり他の方法で改ざんを行ったりする恐れがあり、これが、システムの重要な動作の破壊や、機密情報もしくは専有情報の暴露、又は物理リソースに対する意図的でないアクセスの露呈等の深刻な結果をもたらすことがある。
【０００２】
[002]  「故障利用攻撃（fault attack）」において、攻撃者は、動作にエラー又はフォールト（「グリッチ」）を起こして秘密鍵を入手することを期待して、デバイス又はその環境の何らかの面を故意に変更しようとする。いくつかの非一時的な故障利用攻撃は、集束イオンビームステーションを用いてデバイス回路を物理的に変更する。一時的なフォールトは、ターゲットデバイスを永久的に変更することは意図していない。最もよく知られている一時的なフォールト注入技法には、供給電圧、クロック周波数、温度を変動させること、又は強烈なレーザもしくは他の光パルスを回路に与えることがある。
【０００３】
[003]  フォールトは多くの影響を及ぼす可能性がある。フォールトによって、演算中のある工程がスキップされたり、ある工程が反復されたり、ある動作の代わりに別の動作が実行されたりすることがある。フォールトによって、メモリ内の値の変更、又はバスの横断、例えばデータ又は命令がロードされるアドレスの変更が生じる場合がある。フォールトによって、値がゼロになったり、他の何らかの値に設定されたりすることがある。このようなフォールトがあると、暗号動作において、部分的に正しい結果が部分的に破損した状態と混合される場合がある。部分的に破損した状態を解析することで、多くのフォールトは悪用される。
【０００４】
[004]  別の種類の攻撃は、あるタイプの演算を妨害するが別の演算には影響を及ぼさない一時的なフォールトに頼るものである。例えば、ある特定の物理グリッチは、タイプ「Ａ」の動作を停止させるが、タイプ「Ｂ」の動作中に誘発されても何の影響も与えない。どの時間位置が「安全である」か、すなわち演算結果に影響を及ぼさないかを観察することで、攻撃者は動作「Ｂ」の位置を推論することができ、これによってセキュリティを脅かす可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００５】
[005]  故障利用攻撃を防止するために多くの対抗策が開発されている。いくつかの手法は、追加の回路を加えてフォールトを検出することに基づいている。他の手法は、クロックをランダム化することで精密なタイミングのグリッチの付与を難しくする。二重回路によって計算を２回行い、結果の相違を引き起こす一方の回路でのフォールトを検出することができる。ソフトウェア技法においては、追加の検証ステップの実行、又は暗号アルゴリズムの実施によるフォールトへの抵抗もしくはフォールトの検出が行われる。例えば、ある初期の対抗策では、単に計算を２回行い（おそらく２回の異なる実施によって）、それらの結果が同一であることを確認した。別の手法では、復号化等の計算を行い、次いで暗号化等の対応する逆の動作を行って、この逆の動作の出力が、復号化結果に処理を行う前の最初の入力と等しいことを確認する。署名システム（ＤＳＡを含む）は、公開鍵検証を実行することによって署名結果をチェックすることができる。これは特に、署名のチェックが署名の計算よりもはるかに高速であるＲＳＡでは効率的である（これに対してＤＳＡでは、公開鍵検証は署名よりもはるかに低速である）。この公開鍵検証ステップは、署名が、署名されているメッセージ（又はメッセージハッシュ）に本当に対応していることを確認する。しかしながらＤＳＡシステムでは、公開鍵検証ステップは、ノンスが再使用されていないこと又は他の方法で改ざんされていないことを証明するために何もしない。
【０００６】
[006]  ＲＳＡ−ＣＲＴに限定された多くの対抗策が提案されている。これらの対抗策には、計算に用いられるモジュラス（modulus）のいくつかを展開して、少数の余分な還元（reductions）を用いて迅速な「サニティチェック」を実施可能とするものがある。更に別のものは、暗号アルゴリズムを「フェールセーフ」で、すなわち秘密鍵を回復する際に不良の（faulty）出力が役に立たないように、実施しようとする。
【０００７】
[007]  しかしながら、離散対数問題ベースのデジタル署名システム（例えばエルガマル（ElGamal）署名アルゴリズム、デジタル署名アルゴリズム（ＤＳＡ）、及び楕円曲線を用いたもの）は、ＲＳＡ−ＣＲＴとは著しく異なる原理に基づいており、別のグリッチ攻撃を受けやすい。例えばＤＳＡ署名システムは、ランダムな一意の値（ノンス）を用いて各署名のセキュリティを保護する。ＤＳＡのセキュリティは、これらのノンス値が秘密のままであって決して再使用されないことを要求する。攻撃者がｎ個の署名を集めると、それらを用いて、未知数が（ｎ＋１）個であるｎ個の方程式を構築することができる。ノンスが再使用された場合、又はノンスの値が既知になった場合、ｎ個の連立方程式が有する未知数はｎ個のみとなり、攻撃者は標準的な代数的方法を用いて、署名鍵とも呼ばれる私有鍵ｄについて解くことができる。これらのアルゴリズムを用いたデバイスに対する故障利用攻撃は、ノンス値の再使用を引き起こす「フォールト」又は「グリッチ」をデバイスの動作に発生させることによって成功する可能性がある。他のフォールト又はグリッチ攻撃では、ノンスは強制的に既知の値にされるか、又は未知の値となって多数回にわたり用いられる場合がある。更に別のフォールト又はグリッチ攻撃では、べき剰余（modular exponentiation）（又は曲線乗算（curve multiplication））の間に動作の１つがスキップされることがある。他のフォールトでは、演算の後半の段階で乗算又は還元が行われない場合がある。
【０００８】
[008]  ノンス値は各メッセージについて一意である必要があるので、ＤＳＡ署名が署名されているメッセージ（ハッシュ）に対応することを確認しても、セキュリティを脅かすフォールトが生じていないことは証明されない。
【図面の簡単な説明】
【０００９】
[009]  本明細書に組み込まれてその一部を構成する添付図面は、記載と共に、本明細書に記述する実施形態の原理を説明するように機能する。
【００１０】
【図１】[010]  標準的な楕円曲線デジタル署名アルゴリズム（ＥＣＤＳＡ）又はデジタル署名アルゴリズム（ＤＳＡ）を用いてどのようにメッセージＭの署名を発生させるかを示すフローチャートである。
【図２Ａ】[011]  本明細書に記載する実施形態の原理に基づいて変更した、ＥＣＤＳＡ又はＤＳＡを用いて署名を発生させるための方法を示すフローチャートである。
【図２Ｂ】[011]  本明細書に記載する実施形態の原理に基づいて変更した、ＥＣＤＳＡ又はＤＳＡを用いて署名を発生させるための方法を示すフローチャートである。
【図３】[012]  ＥＣＤＳＡ又はＤＳＡに基づいた例示的な実施形態のフローチャートであり、この場合、ＡＥＳ等の可逆関数を用いてカウンタ又は秘密定数からノンスを導出することができる。
【図３Ａ−１】[013]  図３の耐グリッチ性暗号署名方法をカウンタ検証プロセスと組み合わせた別の例示的な実施形態を示す。
【図３Ａ−２】[013]  図３の耐グリッチ性暗号署名方法をカウンタ検証プロセスと組み合わせた別の例示的な実施形態を示す。
【図３Ｂ】[014]  ノンスを反転（invert）させた後にノンスの検証を行う、本明細書に開示する原理の別の実施形態を示す。
【図３Ｃ】[015]  図３Ｂの検証プロセスをカウンタチェック値と組み合わせた更に別の実施形態を示す。
【図４】[016]  本明細書に開示する耐グリッチ暗号署名の原理と一致する例示的なデバイスを示す。
【発明を実施するための形態】
【００１１】
[017]  これより、添付図面に示す例示的な実施形態について詳細に述べる。可能な場合はいつでも、図面全体及び以下の記載を通して、同一の参照番号を用いて同一又は同様の部分を示す。これらの実施形態は、当業者が本発明を実施することを可能とするために充分に詳しく記載するが、他の実施形態も利用することができ、本発明の範囲から逸脱することなく変更を行い得ることは理解されよう。従って、以下の詳細な説明は、限定の意味で解釈されるものではない。
【００１２】
[018]  本明細書に開示する方法及びデバイスは、離散対数ベースの署名を演算する際にグリッチ攻撃に抵抗すると共にこれを検出するための技法を用いる。上述のように、離散対数問題に基づいたデジタル署名システムは、一意のランダム値（ノンスとも呼ばれる）を用いて署名を発生させる。これらのシステムにおける主な脆弱性は、既知のノンスを用いること、又は２つ以上の異なるメッセージでノンスを再使用することである。本明細書に記載する方法及びシステムは、再使用攻撃に抵抗するような方法でノンスを生成する。いくつかの実施形態は、特定の署名が本当にノンスの特定の値に対応していることを検証するための試験を組み込んでいる。いくつかの実施形態は、ノンスに構造を導入する（すなわち、ノンスの全部又は一部を、疑似ランダムプロセスを用いて秘密鍵又はカウンタから導出する）。ノンスにおけるどんな種類の予測可能性も署名スキームにおける暗号の弱さを招き得るので、これらの実施形態のいくつかの態様では、攻撃者にとってノンス値を予測可能とすることなくノンスの形態を検証することができるノンスを導出するための様々な新規の手法を組み込んでいる。いくつかの実施形態は、使用可能性のある（potential）署名を送信する前に、多数の試験を実施することで、それがシステムのセキュリティを脅かさないことを保証する。いくつかの実施形態は、検証ステップにおいて私有署名鍵（又はその逆数）を用いた試験を使用可能性のある（prospective）署名に行う。いくつかの実施形態は、ノンス（又はその逆数）の使用を伴う試験を使用可能性のある署名に行う。
【００１３】
[019]  本明細書に記載するいくつかの実施形態で採用する手法は、公開鍵検証を補足する（すなわち署名及びメッセージの同一の暗号特性を確認する）試験を実行するが、著しい性能の高速化を達成するために秘密鍵の知識を利用する。これらの試験のいくつかを可能とするため、本明細書に記載するいくつかの実施形態では、ノンスを導出する方法に構造を導入することで、署名デバイスがランダムに見える数を評価すること、更にそれが現在のノンスの予想値に実際に対応しているか否かを判定することを可能とする。
【００１４】
[020]  いくつかの実施形態においては、カウンタの値を用いてノンスの一部を発生させる。メモリ内にカウンタを記憶することは、以前のノンスの集合を全て記憶するよりも必要な空間が少なくて済む。ノンス導出プロセスでは、カウンタを混合又はスクランブル（暗号化）して予測不可能な出力を生成する関数が用いられる。スクランブルプロセスは、秘密プリミティブに基づくものとするか、又は鍵使用暗号プロセス（ＭＡＣ構築におけるブロック暗号又はハッシュ関数）を利用することができる。いくつかの実施形態では、暗号プロセスはＤＰＡ対抗策を用いる。いくつかの実施形態では、ＭＡＣ構築はＤＰＡに抵抗するような構造となっている。これは例えば、Ｐａｕｌ  Ｋｏｃｈｅｒ、Ｐａｎｋａｊ  Ｒｏｈａｔｇｉ、及びＪｏｓｈｕａ  Ｍ．  Ｊａｆｆｅによる「Ｖｅｒｉｆｉａｂｌｅ，  Ｌｅａｋ−Ｒｅｓｉｓｔａｎｔ  Ｅｎｃｒｙｐｔｉｏｎ  ａｎｄ  Ｄｅｃｒｙｐｔｉｏｎ」と題する同時係属中の米国特許出願第２０１１／０１３８１９２号に記載されている。予測不可能性（従ってセキュリティ）を高めるために、本明細書に記載する実施形態のいくつかは、鍵使用暗号プロセス（秘密鍵を用いたＡＥＳ復号化、又はＨＭＡＣ−ＳＨＡ）を用いてノンスの一部を導出し、他の実施形態は、差分電力解析（ＤＰＡ）に抵抗するハッシュツリーを利用することができる。
【００１５】
[021]  本発明の多くの実施形態は、可逆関数を用いてカウンタからノンスを導出する。ノンスはカウンタから発生され、次いで署名を発生させるために用いられる。セキュリティの高い実施形態では、カウンタを更新してメモリに記憶した後にノンスを導出する。他の実施形態では、ノンスを導出した後にカウンタを更新する。これらの実施形態のいくつかは、次いで検証ステップを実行する。このステップでは、使用可能性のある署名を取得し、その成分を操作してノンスをチェックするための一連の動作を実行する。これらの動作には、使用可能性のある署名と私有鍵を混合することで導出したノンスを回復させ、導出したノンスを取得して反転関数を適用し、次いで反転関数の結果がカウンタの予想値を含むか否かをチェックすることが含まれる。
【００１６】
[022]  本発明のいくつかの実施形態は、可逆でない関数を用いてカウンタからノンスを導出する。これらの実施形態は、暗号的にセキュアな疑似乱数発生器を用いてカウンタの値からノンスを導出することができる。いくつかの実施形態では、ノンスをランダムに発生させ、以前用いた全てのノンスのデータベースを維持する。署名を完了する前に、ノンスをデータベースに追加する。再使用が検出された場合、ノンスは拒否され、署名プロセスは再起動される。
【００１７】
[023]  いくつかの実施形態では、導出したノンスの値を記憶し、記憶した値を、後に用いられる値と比較することができる。いくつかの実施形態では、署名プロセス中にノンスのモジュラ逆数（modular inverse）を用い、このモジュラ逆数を演算した後にノンスの値を記憶するか又は再導出して検証することができる。いくつかの実施形態では、ノンスを導出するプロセスは２回以上実行することができる。いくつかの実施形態では、ノンスの値を検証ステップ中に再導出し、この値を用いて、署名から演算された「チェックノンス」の値が本当に予想カウンタに対応していることを確認する。
【００１８】
[024]  いくつかの対抗策は、１／ｋの乗算をスキップさせるアクション、又は１／ｋ以外のもの（すなわち既知又は再使用の値）をｒの導出に使用させるアクションの検出に焦点を当てている。これには、ｋの逆数の演算を妨げるグリッチが含まれ、更に、例えばｒの演算中に異なる（一定の）値をメモリから読み出させる恐れのあるアドレスライングリッチが含まれる。更に別の対抗策は、Ｑを法とした還元（複数回の還元）を妨害した可能性のあるフォールトを検出するように設計されている。
【００１９】
[025]  いくつかの検証ステップは、署名が特定のノンスに対応していることを確認する。他の検証では、ノンスが衝突を防止する特定の構造を有することを確認する。
【００２０】
[026]  本明細書の実施形態は、カウンタからノンス値を導出するために鍵を用いることができる。いくつかの実施形態では、ＤＰＡ対抗策を用いて、システム内の各静的鍵の使用を保護することができる。（本明細書で述べる場合、「静的鍵（static key）」は、ノンス導出鍵及び私有署名鍵を含む。いくつかの実施形態では、これらの鍵は同一とすることができる。）
【００２１】
[027]  以下で詳述するように、本明細書において記載する方法及びシステムは、全ての離散対数及び楕円曲線（ＥＣ）ベースの署名システムと共に用いるのに適している。例示的な実施形態は、ある特定の離散対数又はＥＣベースの署名アルゴリズムとの関連で記載することができるが、同じ原理を他の実施形態で用いることも可能である。
【００２２】
[028]  本開示は、デジタル署名規格（又はＤＳＳ）としても知られるＤＳＡの詳しい理解を想定している。この規格は、連邦情報処理規格（ＦＩＰＳ）発行１８６−３（アメリカ国立標準技術研究所、２００９年６月）の「デジタル署名規格（ＤＳＳ）」で規定され、Ｍｅｎｅｚｅｓ等（ＣＲＣ  Ｐｒｅｓｓ社、１９９７年）によるＨａｎｄｂｏｏｋ  ｏｆ  Ａｐｐｌｉｅｄ  Ｃｒｙｐｔｏｇｒａｐｈｙの４５２〜４５４ページに詳細に記載されている。また、当業者が、ＦＩＰＳ１８６−３及び他の多くのリソース（例えば、Ｈａｎｋｅｒｓｏｎ、Ｍｅｎｅｚｅｓ、及びＶａｎｓｔｏｎｅによる「Ｇｕｉｄｅ  ｔｏ  Ｅｌｌｉｐｔｉｃ  Ｃｕｒｖｅ  Ｃｒｙｐｔｏｇｒａｐｈｙ」の１８３〜１８６ページ、並びにＩＥＥＥ１３６３，  Ｓｔａｎｄａｒｄ  Ｓｐｅｃｉｆｉｃａｔｉｏｎｓ  ｆｏｒ  Ｐｕｂｌｉｃ−Ｋｅｙ  Ｃｒｙｐｔｏｇｒａｐｈｙ、２０００年等。）に記載されたＤＳＡの楕円曲線を用いた変種（ＥＣＤＳＡ）を知っていて理解していることも想定している。本明細書に提示した標準的なＤＳＡ、ＥＣＤＳＡ、又は他の署名アルゴリズムのいずれの記載も、包括的であることすなわちアルゴリズムの完全な記述であることでなく、本明細書に記載する本発明の理解に関連するか又はその理解に役立つステップのみを記述することを意図している。また、本発明は、例えばＩＥＥＥｐ１３６３、ＰＫＣＳ＃１１、ＫＣＤＳＡ、Ｎｙｂｅｒｇ−Ｒｕｅｐｐｅｌ（ナイバーグ−リュッペル）、エルガマル、Ｓｃｈｎｏｒｒ（シュノル）等、類似の性質を持つ他のデジタル署名規格に適用される。
【００２３】
楕円曲線／デジタル署名アルゴリズム（ＥＣＤＳＡ）
[029]  図１は、標準的なＥＣＤＳＡ（ボックス１２０の式＃１）又はＤＳＡ（ボックス１２０の式＃２）を用いてメッセージＭの署名を発生させるためのフローチャートである。ある時点で、ステップ１３２に示すように、メッセージＭのハッシュ（Ｈ）を発生させる。ハッシュ関数は一般に、用いている署名システムによって選択される。例えばＮＳＡは、Ｓｕｉｔｅ  ＢセットにＳＨＡ−２５６及びＳＨＡ−３８４（ＦＩＰＳ１８０−３に記載されている）を選択している。
【００２４】
[030]  ＤＳＡ及びＥＣＤＳＡに用いられる一般的な表記は、どの規格又は出版物を読むかによって様々に異なる。この文書では、図１に用いる表記に従うことにする。ＤＳＡ及びＥＣＤＳＡにおいて、鍵ペア（ｄ、Ｙ）は、私有鍵ｄ及び公開鍵Ｙから成る。各システムは多数のドメインパラメータも含む。これらのドメインパラメータは、標準化団体によって又は署名システムが展開されるアプリケーションによって規定することができる。それらは、公開鍵の一部と見なすことも可能である。
【００２５】
[031]  ＥＣＤＳＡにおいて、ドメインパラメータは、曲線の記述、曲線上にある点Ｇ、及びＧから乗算により発生することができる曲線上の点群の位数である整数Ｑを含む。鍵ペアｄ、Ｙ及びドメインパラメータは、関係Ｙ＝ｄ．Ｇによって相互に数学的に関連している。ここでｄ．Ｇは、スカラーｄによる点Ｇの楕円曲線スカラー陪算を示す。ＤＳＡにおいて、ドメインパラメータは、素数Ｐ、基底Ｇ、及びＧのべき乗（powers）により発生するＰを法とした数群の位数である整数Ｑを含む。また、鍵ペアは、関係Ｙ＝ＧｄｍｏｄＰよって、ドメインパラメータと数学的に関連している（すなわち、Ｙと指数ｄに累乗した基底Ｇの値とはＰを法として合同である）。
【００２６】
[032]  ＥＣＤＳＡ又はＤＳＡを用いてメッセージＭの署名を発生させるため、ステップ１０５において、「ノンス」とも呼ばれる新しい非ゼロの秘密乱数ｋを発生させる。乱数ｋ及びその逆モジュロＱ、ｋ−１は、１から−１までの範囲内の整数である。ｋの選択は、規定した範囲全体を通して一様な分布を有すると考えられる。
【００２７】
[033]  ステップ１１０では、試験を行って、発生させたノンスｋが有効であるか否か、すなわちｋがゼロより大きくかつＱ未満であるか否かを判定する。ｋが有効でない場合、プロセスはステップ１０５に戻り、ｋの別の値を発生させる。ｋが有効である場合、ステップ１２０において、ノンスｋを用いてデジタル署名の第１の部分を演算する。ＥＣＤＳＡ（式＃１）では、楕円曲線の点Ｘ＝ｋＧ＝（ｘＲ，ｙＲ）を発生させることによってＲを決定する。ここで、Ｇは楕円曲線のシード点である。ＤＳＡ（式＃２）では、Ｒ＝（ＧｋｍｏｄＰ）ｍｏｄＰとしてＲを計算する。
【００２８】
[034]  ステップ１２５において、デジタル署名の第１の部分ｒを発生させる。ＥＣＤＳＡでは、Ｒは曲線上の点であり、そのｘ座標（ｘＲ）をＱを法とした整数に変換することによってｒを発生させる。ＤＳＡでは、ＲはすでにＱを法とした整数であり、ＥＣＤＳＡの場合との表記の対称のためにｒという新しい名称を付ける。
【００２９】
[035]  ステップ１３０では、試験を実行する。ｒがゼロである場合はこれを使用せず、プロセスはステップ１０５に戻って新しいｋを発生させる。
【００３０】
[036]  ｒが非ゼロである場合、ステップ１３５におけるように、
【数１】
0006366595.tif 000002
【００３１】
によって、デジタル署名の第２の部分ｓを発生させる。ｈは、ステップ１３３に示すように、Ｈ（Ｍ）から整数に変換されたメッセージＭのハッシュである。ステップ１６０において、ｓの値をチェックする。ｓがゼロである場合はｓを使用せず、プロセスはステップ１０５に戻って新しいｋを発生させる。
【００３２】
[037]  ｓが非ゼロである場合、メッセージＭの署名に用いるために、署名成分（ｒ，ｓ）を戻す（ステップ１８５）。
【００３３】
[038]  ＤＳＡ及びＥＣＤＳＡのいくつかの実施では、ｒのチェック（ステップ１３０）及びｓのチェック（ステップ１６０）が省略されることに留意すべきである。いくつかの実施では、ノンスｋの試験（ステップ１１０）は、ｋが１より大きいか否かのチェックである場合がある。更に、ＤＳＡと同様の署名プロセスを実行するいくつかの暗号デバイスでは、ハッシュを演算するステップを除外し、署名される入力がハッシュであるのに適切なサイズの整数であることが要求されることがある。
【００３４】
疑似ランダムノンスを用いた署名発生
[039]  本明細書に開示するのは、デジタル署名を脅かす恐れのあるいくつかのグリッチが発生していないことを判定するための方法及デバイスである。
【００３５】
[040]  いくつかの実施形態では、試験を実行して、ノンス及びその結果として得られる署名が正しいこと、すなわち、ノンスが再使用されたり攻撃者が予想し得る値に変更されたりしていないことを判定する。本明細書に開示する方法及びシステムは、署名を検証することができ、更に、発生した署名が実際に発生したノンスに対応していること及び発生したノンスを用いて発生されたことを検証することができる。
【００３６】
[041]  いくつかの実施形態では、ランダムノンスを疑似ランダムノンスに置き換える。疑似ランダムノンスは、セキュリティの一部として、使用したノンスが特定の導出構造に従って生成されたことの検証が含まれるので、「構造化（structured）」ノンスとも称することができる。ノンスは、攻撃者にとって予測不可能であるがデバイスによって再発生可能な方法で発生される。
【００３７】
[042]  いくつかの実施形態では、ノンスは何らかの内部状態情報から確定的な方法で導出し、その発生が反復可能であるようになっている。また、本明細書に記載する方法及びシステムは、導出されたノンス値が一意であることを強く保証するように内部状態情報を更新する。セキュリティを強化するため、ノンス発生はモジュラフィールド（modular field）全体にわたって一様でなければならない。
【００３８】
[043]  本明細書に記載する原理は、以下の例示的な実施形態に示すように、署名発生のための多種多様な方法に適用することができる。
【００３９】
[044]  図２Ａ及び図２Ｂは、本明細書に記載した原理に一致する、疑似ランダムノンスを用いてデジタル署名を発生させるための例示的な方法を示す。図２Ａに示すように、カウンタＣを用いてｋを発生させる。「カウンタ」は、自明でない数の要素を含むシーケンスで更新されるメモリ内に記憶されたいずれかの値を指すことができ、その中で「最終値」を認識することができる。いくつかの実施形態では、カウンタは、例えば線形フィードバックシフトレジスタ（ＬＦＳＲ）によって発生させることができる。カウンタはいずれかの適切な長さとすればよいが、多くの実施形態では、６４ビット又はもっと大きいカウンタを用いると、一様性が高まると共に衝突が減る。カウンタの使用により、ノンスのシーケンスが短いサイクルを有しないことが保証されるが、モジュロＱに衝突がないことは保証されない。カウンタの値は秘密である必要はないが、その値を署名と署名との間で更新することは必須である。値が更新されたことを確実とするために、１つの手法として原子メモリ書き込みがある。原子メモリ書き込みの前後の試験を用いて、これが成功したことを保証することができる。
【００４０】
[045]  ステップ２０１において、署名発生プロセスの開始時にカウンタを更新する。いくつかの実施形態では、カウンタは原子書き込みによって更新され、その結果を検証してからプロセスを継続する。現在の署名に用いるカウンタが以前に使用されたことがないことを保証するため、ここでカウンタを更新する。いくつかの実施形態では、カウンタを前回の署名発生プロセスの終了時に更新しても同じ結果を得ることができる。
【００４１】
[046]  ステップ２０３では、カウンタＣ及びいずれかの適切な暗号化アルゴリズムを用いて、一時値Ｔ０及びＴ１を計算する。１つの適切な暗号化アルゴリズムは、ＡＥＳ（Advanced Encryption Standard）、すなわちＦＩＰＳ承認の対称ブロック暗号であり、これは暗号化のために１２８、１９２、及び２５６ビットの暗号鍵を用いることができる。ＡＥＳを用いて、Ｔ０はＴ０＝ＡＥＳ＿ｅｎｃ（ｋｎｏｎｃｅ，Ｃ０）と演算し、Ｔ１はＴ１＝ＡＥＳ＿ｅｎｃ（ｋｎｏｎｃｅ，Ｃ１）と計算する。いくつかの実施形態では、モジュラ還元（modular reduction）の前に値Ｔ０及びＴ１を記憶する。ステップ２０５では、これらの一時値を用いて疑似ランダムノンスｋを演算する。これは、ｋ＝（Ｔ０｜｜Ｔ１）ｍｏｄＱとして計算される。
【００４２】
[047]  多くの実施形態において、モジュラ還元に対する入力（すなわちＴ０｜｜Ｔ１）は、バイアスを回避するためにＱよりも大きくなければならない。上述のように、充分な長さのカウンタを選択して、Ｔ０｜｜Ｔ１をＱより少なくとも６４ビット大きくすることで、バイアスを軽減することができる。この例では、Ｔ０｜｜Ｔ１は２５６ビット長であるので、入力の長さはＱの長さより９６ビット大きい。
【００４３】
[048]  図２ＡのプロセスはＴ０及びＴ１を用いて例示しているが、ノンスｋを決定する前にカウンタから計算する中間一時値はいくつであってもよい。結果をＱを法として還元して疑似ランダムノンスｋが形成される限り、多数の一時値を組み合わせたり連結したりすることができる。例えば、ノンスｋは以下のように計算することができる。
【００４４】
【数２】
0006366595.tif 000003
【００４５】
【数３】
0006366595.tif 000004
【００４６】
ここで、ハッシュ関数の出力サイズはＱよりも充分に大きい。
【００４７】
[049]  一般に、本明細書に記載する実施形態において、図２Ａのステップ２０１〜２０５は、任意の署名発生方法における図１のステップ１０５の代わりに用いることができる。その後、特別に演算した値ｋ及び他のＥＣパラメータを用いて、図２Ａ及び図２Ｂのステップ２１０〜２６０を、図１のステップ１１０〜１６０におけるように実行することができる。更に、いくつかの実施形態では、任意選択として、ステップ２４０で計算するようなＱを法としたｋの逆数をメモリに記憶する。この値を後に一貫性チェックで用いて、グリッチが発生したか否かの判定を支援することができる。
【００４８】
[050]  図２Ａ〜図２Ｂに戻ると、本明細書に記載する実施形態は、署名値と比較するためのチェック値を演算することによって、グリッチに対する保護を提供する。ステップ２６５では、ノンスｋをカウンタＣから再演算することができ、この値をｋ’と称する。
【００４９】
[051]  ステップ２７０では、ｒｃｈｅｃｋを以下のように演算することができる。
【数４】
0006366595.tif 000005
【００５０】
これを、先に演算した署名成分ｒと比較する（ステップ２７５）。２つの値が等しい場合（ｒ＝ｒｃｈｅｃｋ）、グリッチが発生していない信頼性が高い。署名成分（ｒ，ｓ）を、メッセージＭの署名に使用するために戻すことができる。しかしながら、ｒがｒｃｈｅｃｋに等しい場合、エラー（又はグリッチ）が発生したか又は意図的に引き起こされている（ステップ２８０）。この場合、プロセスは、例えばエラーコードを戻すこと又は故障カウンタを増分すること、及び／又はこの署名プロセスをステップ２０１から再起動することによって、エラーを知らせることができる。
【００５１】
[052]  ｒｃｈｅｃｋを他の方法で計算してもよいことは認められよう。例えばいくつかの実施形態では、ｒｃｈｅｃｋを以下のように計算することができる。
【数５】
0006366595.tif 000006
【００５２】
いくつかの用途では、数学的に等価な異なる順序で計算を実行することによって、速度及び／又は効率を上げることができる。また、いくつかの実施形態では、ｄの逆数を予め演算して記憶することができる。この値を記憶すると、アルゴリズムは、署名発生アルゴリズムの反復ごとに１／ｄを計算する必要性を回避することができる。また、これは、例えば１＝（ｄ・１／ｄ）ｍｏｄＱをチェックすることによる追加の一貫性チェックとして使用可能である。
【００５３】
[053]  いくつかの実施形態では、ノンスｋは、カウンタ及び乱数の関数のように、多数の入力の関数として発生させることができる。以下の例では、例えばＶをランダムな２５６ビットの数とすることができる。疑似乱数ｋを以下のように発生することができる。
【００５４】
【数６】
0006366595.tif 000007
【００５５】
しかしながら、この実施形態では、ｋ又はチェック値の再発生を可能とするためにＶを記憶する必要がある。
【００５６】
[054]  図３は、耐グリッチ暗号署名方法の例示的な実施形態を示す。ここでは、ＡＥＳ等の可逆関数を用いてカウンタ及び秘密定数からノンスを導出することができる。図３はＥＣＤＳＡ及びＤＳＡに関連付けて示すが、この原理は他の離散対数署名アルゴリズムにも適用可能である。図３において、ノンスは以下のように計算することができる。
【００５７】
[055]  ステップ３０１において、カウンタを更新する。上述のように、署名発生ごとにフレッシュなカウンタを用いることは必須である。カウンタの更新は、例えば署名を戻す直前、又は署名発生プロセスの開始時に行えばよい。（また、ステップ３１０、３３０、３６０、及び３８０等で起こり得るようにプロセスが冒頭に戻った場合はいつでもカウンタを更新しなければならない。）この例では、カウンタは署名発生の開始時に更新する。ステップ３０３において、Ｑより小さい乱数ｖ’を取得する。多くの場合、この数は１からＱ−１の範囲にわたって一様又はほぼ一様である。例えばいくつかの実施形態では、Ｑよりも少なくとも６４ビット大きいランダムな２進数ｖ’’を発生し、Ｑを法としてｖ’’を還元してｖ’を取得する。
【００５８】
[056]  ステップ３０４では、ｖ’の低位ビットのある数（Ｌ）をゼロに設定して、新しい名称を付けた変数ｖを生成する。
【００５９】
[057]  ステップ３０５では、秘密鍵ｋｎｏｎｃｅと、ｋｎｏｎｃｅの値を知らない攻撃者がＣを知っていても予測することが難しい出力を生成する可逆関数とを用いて、カウンタからＬビット量Ｕを発生させる。このような関数の一例は、Ｌビット出力のブロック暗号である（すなわちＡＥＳはＬ＝１２８で動作し、ＤＥＳはＬ＝６４に適している）。図３Ａ−１に示す実施形態では、ＵはＵ＝ＡＥＳ＿ｅｎｃ（ｋｎｏｎｃｅ，Ｃ）として演算することができる。
【００６０】
[058]  ＡＥＳの例では、以下の動作すなわちｖ＝ｖ’−（ｖ’ｍｏｄ２１２８）を実行することによってｖ’の最下位１２８ビットをゼロに設定することができるが、メモリ内のビット数をゼロに設定することは、通常は減算及びモジュラ演算を必要としない自明な動作である。
【００６１】
[059]  次いで、ｖ’の高次ビット（すなわちｖ）をＬビット出力Ｕと組み合わせることで、ノンスｋを発生させることができる。例えばｖをＵに加える。あるいは、ゼロに設定することなく、ｖ’のＬビット以外の全ビットをＵのビットと組み合わせること等によって、ノンスｋを生成することができる。いずれの場合でも、これらの離散対数ベースの署名システムは全て、ノンスに著しいバイアスが存在する場合にセキュリティが脅かされる恐れがある。Ｑを法として一様な数を取得し、そのビットの一部を２進数と置換すると、ある程度のバイアスが生じるが、このバイアスは、ＬがＱより充分に短い場合には極めて小さい。（多くの場合、例えばバイアスは２−（ｌｇ（Ｑ）−Ｌ）のオーダーである）。Ｑよりも３２ビット又は６４ビット長いランダムな２進数を取得し、これをＱを法として還元することで、Ｑを法として「基本的に一様な」数を発生させることは一般的である。実際、Ｑを法として一様な数を取得し、高位３２ビット又は６４ビット以外の全ビットをランダムビットで置換すると、同等のバイアスレベルで「基本的に一様」となる。
【００６２】
[060]  ステップ３４０において、Ｑを法としたノンスｋの逆数に等しい変数ｔを計算する。この値は、後に使用するために記憶することができる。
【００６３】
[061]  ステップ３１０では、疑似ランダムノンスｋにチェックを行って、発生させたノンスｋが有効であるか否か、すなわちｋがゼロより大きくかつＱより小さいか否かを判定することができる。ｋが有効でない場合、プロセスはステップ３０１に戻る。カウンタを更新し、ｋの別の値を発生させる。ｋが有効である場合、ステップ３２０において、ノンスｋを用いてデジタル署名の第１の部分Ｒを演算する。
【００６４】
[062]  ステップ３２５では、Ｒを整数ｒに変換する。ｒがゼロである場合（ステップ３３０）、プロセスはステップ３０１に戻り、別のノンスｋを演算する。ｒが非ゼロである場合（ステップ３３０）、プロセスは続いてステップ３３５において、以下に示すようにデジタル署名の第２の部分ｓを決定する。
【００６５】
【数７】
0006366595.tif 000008
【００６６】
[063]  図３では図１及び図２のように示していないが、ｈは、整数に変換されたメッセージＭのハッシュＨ（Ｍ）を表す。
【００６７】
[064]  ｓがゼロである場合（ステップ３６０）、プロセスはステップ３０１に戻り、別のノンスｋを演算する。ｓが非ゼロである場合（ステップ３６０）、デジタル署名（ｒ、ｓ）を戻し（ステップ３８５）、使用することができる。
【００６８】
カウンタ検証プロセス
[065]  図３Ａ−１及び図３Ａ−２は、図３の耐グリッチ暗号署名方法をカウンタ検証プロセスと組み合わせた別の例示的な実施形態を示す。図３Ａ−１において、ステップ３０１〜３６０は図３のステップ３０１〜３６０と同じである。図３Ａ−２において、カウンタのためにチェック値を演算する試験を実行する。チェックカウンタ値は以下のように演算することができる。
【００６９】
[066]  ステップ３６１において、Ｑを法とした（ｒ×ｔ）としてｘを演算する。Ｑを法とした（ｘ×ｄ）として値ｙを計算し（ステップ３６２）、Ｑを法とした（ｓ−ｙ）としてｚを計算する（ステップ３６３）。値Ｗは、Ｑを法としたｚの逆数として計算することができる（ステップ３６４）。Ｑを法として値ｗにメッセージのハッシュｈを乗算して、チェック値の演算に用いるために〔回復した〕ノンス値ｋｃｈを得ることができる（ステップ３６５）。Ｕｃｈを、回復したノンス値の低位Ｌビットと等しくする（ステップ３６６）。次いでステップ３６７において、ｋｎｏｎｃｅを用いてステップ（３０５）で適用した「ｕｎｐｒｅｄｉｃｔａｂｌｅ＿ｒｅｖｅｒｓｉｂｌｅ＿Ｌ−ｂｉｔ＿ｅｎｃｏｄｉｎｇ」関数（これは、ステップ３０５で用いたものと同一のノンス導出鍵であるか、又は非対称関数では逆鍵（inverse key）である場合がある）の逆数を適用することで、回復したカウンタ値Ｃｃｈを演算することができる。例えば、いくつかの実施形態は、ステップ３０５における関数としてＤＥＳ暗号化を用い、ステップ３６７における関数としてＤＥＳ復号化を用いる。
【００７０】
[067]  カウンタチェック値が元のカウンタ値と等しくない場合には（ステップ３７５）、エラー（又はグリッチ）が発生したか又は意図的に引き起こされている。この場合、プロセスは、例えばエラーコードを戻すか又は故障カウンタを増分することによってエラーを示すことができる（ステップ３８０）。ＣがＣｃｈに等しい場合、グリッチは検出されていない。デジタル署名（ｒ，ｓ）を戻して（ステップ３８５）、使用することができる。
【００７１】
[068]  いくつかの実施形態では、図３Ａ−２のステップ３６１〜３６５は、チェック値を計算する代替的な方法で置き換えることができる。例えばこの実施形態では、一時値Ｔ０、Ｔ１、及びＴ２を以下のように計算することができる。
【００７２】
【数８】
0006366595.tif 000009
【００７３】
[069]  すると、ｋｃｈ＝Ｔ２Ｔ０ｍｏｄＱとなる。その後、ステップ３６６におけるようにＵ（低位ビット）を得るために、ＵｃｈをＵｃｈ＝ｋｃｈｍｏｄ２１２８として計算することができる。ステップ３６７におけるように、ＣｃｈをＣｃｈ＝ｒｅｖｅｒｓｅ＿ｏｆ＿ｕｎｐｒｅｄｉｃｔａｂｌｅ＿ｒｅｖｅｒｓｉｂｌｅ＿Ｌ−ｂｉｔ＿ｅｎｃｏｄｉｎｇ（ｋｃｈ，Ｕｃｈ）として演算すればよい。
【００７４】
[070]  ステップ３７５において、ＣｃｈをＣと比較して（ステップ３７５）、再演算した値がチェック値と等しいことを確認することができる。これらが等しい場合、デジタル署名（ｒ，ｓ）を戻せばよい（ステップ３８５におけるように）。
【００７５】
ノンス反転後の検証
[071]  図３Ｂは、本明細書に開示する原理の別の実施形態を示す。図３Ｂに示すプロセスにおいては、ノンスの反転後であるが、いずれかのデジタル署名部分の計算の前に、ノンスの検証を行う。ノンス発生の直後に試験を行うことで、ノンス発生中にグリッチが発生した場合の時間とコンピュータサイクルとの無駄を防ぐことができる。
【００７６】
[072]  図３Ｂにおいて、図示するステップ３０１〜３０４は、図３のステップ３０１〜３０４と同一である。図３Ｂのステップ３０５では、図３のステップ３０５に示したｕｎｐｒｅｄｉｃｔａｂｌｅ＿ｒｅｖｅｒｓｉｂｌｅ＿Ｌ−ｂｉｔ＿ｅｎｃｏｄｉｎｇの一例として、ＡＥＳ暗号化を用いる。ステップ３１０では、試験を行って、ｋが有効であって自明でないこと、すなわち１よりも大きいことを保証する。
【００７７】
[073]  ｋが有効である場合、Ｑを法としたノンスｋの逆数として一時変数ｔを演算することができる（ステップ３４０）。値ｔはメモリに記憶することができる（ステップ３４１）。メモリは、レジスタ、ゲートアレイ、ワイヤセット、ＢＵＳ構成、又は他の揮発性もしくは不揮発性メモリとすればよい。次に、ｔ＊ｋ  ｍｏｄＱを演算することができる（ステップ３４２）。この結果得られる値が１以外である場合、グリッチ又はエラーが発生したか又は検出されている。プロセスはカウンタを更新し、別のノンスｋを演算する（ステップ３０１）。
【００７８】
[074]  ステップ３４２において値が１である場合、これまでのところエラー（又はグリッチ）は検出されていないので、プロセスは続いてステップ３２０（すなわちデジタル署名部分の計算）を実行することができる。
【００７９】
[075]  図３Ｃは、図３Ｂの検証プロセスをカウンタチェックと組み合わせた更に別の実施形態を示す。図３Ｃにおいて、図示するステップ３１０〜３４２は、図３Ｂのステップ３１０〜３４２と同じである。また、図３Ｃのプロセスでは、図３Ｂに示すプロセスを用いてノンスを発生させること、すなわちＵ＝ＡＥＳ＿ｅｎｃ（ｋｎｏｎｃｅ，Ｃ）及びｋ＝ｖ＋Ｕを想定している。
【００８０】
[076]  ステップ３４２で試験を実行し、これまでのところエラー（又はグリッチ）が検出されていないと判定された後、この方法はカウンタチェック値を計算することができる。ステップ３４３において、ｋの低位１２８ビットを用いてＵ’を発生させる。次いで、Ｕ’をｋの低位１２８ビットに等しくし、ステップ３０５と同じ鍵ｋｎｏｎｃｅを用いてＵ’の復号値としてＣ’を計算することで、カウンタチェック値Ｃ’を計算することができる。すなわちＣ’＝ＡＥＳ＿ｄｅｃ（ｋｎｏｎｃｅ，Ｕ’）である（ステップ３４４）。ステップ３４５においてＣ’＝Ｃである場合、グリッチは検出されていないので、プロセスは続いてステップ３２０（すなわちデジタル署名部分の計算）を実行することができる。カウンタチェック値がカウンタに等しくない場合、カウンタを破棄するか又は更新し、新しいノンスｋを演算する（ステップ３０１）。
【００８１】
代替的な実施形態
[077]  図２〜図３は、本明細書に記載した原理の具体的な実施形態を示している。しかしながら、ｋを発生させるための他の方法も使用可能である。例えば、いくつかの実施形態においては、Ｐａｕｌ  Ｃ．  Ｋｏｃｈｅｒによる「Ｌｅａｋ−Ｒｅｓｉｓｔａｎｔ  Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｉｎｄｅｘｅｄ  Ｋｅｙ  Ｕｐｄａｔｅ」と題する米国特許第６，５３９，０９２号に記載されたもの等の鍵ツリー発生プロセスを用いて、ノンスを発生させることができる。
【００８２】
[078]  他の実施形態では、記憶された状態値は必ずしもカウンタである必要はなく、他の利用可能な内部状態情報としてもよい。これは例えば、メッセージ自体、又はメッセージから適切な暗号変換によって導出された情報とすることができる。ノンスがメッセージの予測不可能な関数である限り、特定のメッセージに２回目に署名する際に同一のノンスが用いられたとしても、ＤＳＡ及び他のスキームはセキュアである。
【００８３】
[079]  いくつかの実施形態では、カウンタを何らかの変数データと混合させてノンスを発生させることができる。セキュアハッシュアルゴリズム（ＳＨＡ）のアルゴリズムファミリー（例えばＳＨＡ−２２４、ＳＨＡ−２５６、ＳＨＡ−３８４、及びＳＨＡ−５１２を含む）、又は例えばブロック暗号ベースのハッシュ関数のような他のいずれかの適切な暗号プリミティブ等、いずれかの適切な暗号ハッシュ関数を用いて、多数のタイプの記憶データのハッシュ関数として、中間の新しい状態を発生させることができる。
【００８４】
[080]  以下に示すように、中間の新しい状態は、以前の状態、カウンタ、及び鍵ｋｎｏｎｃｅの組み合わせにハッシュ関数（ＳＨＡ−２２４又はＳＨＡ−２５６）を適用することによって発生させることができる。新しい状態ｍｏｄＱをノンスとして用いることができる。
【００８５】
【数９】
0006366595.tif 000010
【００８６】
[081]  しかしながらこの方法では、ハッシュ関数の出力サイズである状態データブロックを維持する必要がある。この情報は記憶する必要があり、適切に保護されない場合は以前のノンスに関する情報が漏れることがある。出力関数は、別の秘密定数とのモジュラ乗算、又はランダム変数のＸＯＲ、又は非ゼロのランダムに発生させた数との乗算を含む場合がある。
【００８７】
[082]  別の実施形態では、既知の変数データのハッシュを演算することによってノンスを発生させることができ、これは場合によっては、以下に示すような以前の署名の部分ｒを含む。
【００８８】
【数１０】
0006366595.tif 000011
【００８９】
[083]  いくつかの実施形態では、以前の署名の部分のような既知の変数データを用い、これをランダム変数Ｖと混合させて、以下のように演算することで、ノンスを発生させることができる。
【００９０】
【数１１】
0006366595.tif 000012
【００９１】
[084]  既知のデータを新しいランダムデータと混合させてノンスを発生すると、（例えばＤＰＡによって）ｋｎｏｎｃｅを発見する可能性のある攻撃者を妨害するのに役立つ。攻撃者は、必ずしもある特定のノンスの値に関する情報を取得可能なわけではないからである。ＤＰＡ耐性は、署名発生を実行する多くのデバイスにとって重要な基準である。ＤＰＡに対するこの対抗策は、発生させているノンスが経時的に何らかの特定の定数値と一致する必要はないという事実を利用している。
【００９２】
[085]  図４は、デバイス（４００）において具現化された、本明細書に記載した原理の適用を示す。便宜上、文脈に応じて、参照番号は、プロセス内のステップ及び／又はそのようなプロセスステップによって用いられる（又は生成される）量を示すことがある。図４に示すように、少なくとも１つの実施形態において、デバイス４００は、不揮発性メモリ４０１、少なくとも１つのプロセッサ４０２、少なくとも１つの命令及びデータキャッシュ４０３、暗号ハードウェア４１０、入出力インタフェース４２０を備えている。
【００９３】
[086]  図４に示すように、ＮＶＭ４０１を用いて、例えば鍵「ｄ」、カウンタ、又はノンスの１つ以上を必要に応じて記憶して、本明細書に記載する様々な実施形態を実施することができる。
【００９４】
[087]  プロセッサ４０２は、例えば高性能マルチコア楕円曲線暗号プロセッサとすることができる。
【００９５】
[088]  キャッシュ４０３は、デバイス又はチップ内のローカルメモリである。例えばキャッシュ４０３は、プロセッサ４０２が動作を行うデータ又は命令を一時的に記憶するオンチップメモリとすればよい。
【００９６】
[089]  暗号ハードウェア４１０は、例えば暗号機能を実行するハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせとすることができる。暗号ハードウェア４１０は、例えば乱数発生器（ＲＮＧ）４１１、１つ以上のカウンタ４１２、鍵ツリー処理モジュール４１２、ＡＥＳモジュール４１３、及びＳＨＡモジュール４１４の全部又は一部を備えることができる。
【００９７】
[090]  入出力インタフェース４２０は、入力としてメッセージ又はそのハッシュを読み取り、デジタル署名を更に処理するために他のコンポーネントに提供するソフトウェア又はハードウェアである。
【００９８】
[091]  本明細書に記載した方法及びシステムは、記憶した値からノンスを導出することを含み、更に、メモリ内の値を更新してカウンタ又はシーケンスの繰り返しを防ぐことを含む。カウンタ又は状態が更新された場合はいつでも、グリッチが引き起こされる可能性がある。システムのセキュリティは、例えば原子書き込みを用いて向上させることができる。原子書き込みにおいては、既存の記憶値はすぐに上書きされず、更新された値が第２の記憶位置に書き込まれて以前の記憶値と比較される。この比較によって、状態又はカウンタ値が変更されたか否かを示すことができる。
【００９９】
[092]  また、状態を示すためのビット又はフラグの使用等によって、更新プロセス中に書き込み動作のステータスを常時監視することが推奨される場合がある。例えば、書き込み動作を開始する際にフラグをセットして、書き込みの開始を示すことができる。書き込みが完了したらフラグをクリアすることができる。このように、このフラグのステータスをチェックすることで、以前の書き込み動作が中断されたか否かを判定することができる。更にセキュリティを高めるため、及び、書き込まれている値のビットを全てゼロ又は全て１にする可能性のある攻撃者を妨害するため、ゼロ及び１の双方を含むマルチビット値を用いてフラグを表すことができる。そのような方法で、鍵、カウンタ、又は他の値のビットを記憶してもよい。場合によっては、「全てゼロ」及び「全て１」の値を、エラーを示すために確保しておくこともできる。（例えば「０１」は「書き込み保留」を示し、「１０」は書き込み完了／書き込み保留なしを示し、「００」及び「１１」は「無効状態」を示す。）
【０１００】
[093]  いくつかの実施形態では、メッセージの関数としてノンスを発生させることができる。メッセージからノンスを発生させることが許容可能である理由は、同一のメッセージには同一のノンスのみが発生され、従ってこの再使用を悪用して鍵に関する情報を取得することはできないからである。しかしながらノンスは、秘密かつバイアスなしに維持されなければならず、これはモジュラス全体で一様に発生させなければならないことを意味する。いくつかの実施形態では、メッセージを整数に変換し、そのモジュラスを法とする秘密定数によって累乗することができる。
【０１０１】
[094]  以下は、モジュラスＱよりも著しく大きい出力を生成する暗号関数ｌａｒｇｅ＿ｂｌｏｃｋｓｉｚｅ＿ＥＮＣを用いて、メッセージの確定的関数としてノンスを発生させる例を示す。
【０１０２】
【数１２】
0006366595.tif 000013
【０１０３】
ここで、ｈは署名されるメッセージのハッシュであり、ｋｎｏｎｃｅは秘密ノンス発生鍵であり、これはＤＳＡ署名私有鍵と同一であり得る。しかしながらこの暗号化プロセスは、ｌａｒｇｅ＿ｂｌｏｃｋｓｉｚｅ＿ＥＮＣ（）関数において高レベルのＤＰＡセキュリティを必要とする。この戦略は、例えば強力なＲＮＧを有しないデバイスにおいて、又は小さいメモリサイズを有するものに用いるのに適切である場合がある。これには、カウンタに基づく戦略を用いたデバイスのＥＥＰＲＯＭ要求がない。しかしながらこれには、ＥＥＰＲＯＭを必要とし得る強力なＤＰＡ対抗策が必要である。ｌａｒｇｅ＿ｂｌｏｃｋｓｉｚｅ＿ＥＮＣ関数の例は、Ｒｉｊｎｄａｅｌ、Ｋｅｃｃａｋ、及びＴｈｒｅｅｆｉｓｈを含む。
【０１０４】
[095]  既知であるグリッチ攻撃の１つに、「ループ拡張」グリッチ攻撃がある。これは、ループを終わらせず、メモリから数バイトを送信しているループを「拡張」させて、デバイスのメモリの大部分を送信させる可能性がある。（これは「メモリダンプ」攻撃とも呼ばれる。）これらのグリッチ攻撃から保護するため、クロックジッタ、電圧の平坦化、及び／又はランダム化のようなプロセッサレベルの対抗策を採用することが有用であり得る。これらの対抗策は、悪用されるループ特性を起動しにくくすることができる。
【０１０５】
[096]  他の実施形態では、メモリを暗号化することができる。例えば「メモリダンプ」グリッチに対して更に防護するため、秘密鍵アルゴリズムをデバイス又はチップ自体（例えばメモリでなく回路内）に内蔵することができ、これを用いてメモリに記憶された値を復号化する。こうするための１つの戦略は、Ｋｏｃｈｅｒ等の「Ｍｅｔｈｏｄ  ａｎｄ  ａｐｐａｒａｔｕｓ  ｆｏｒ  ｐｒｅｖｅｎｔｉｎｇ  ｐｉｒａｃｙ  ｏｆ  ｄｉｇｉｔａｌ  ｃｏｎｔｅｎｔ」と題する米国特許第６，２８９，４５５号に記載された暗号ファイアウォールソリューションである。例えば、デジタル署名鍵及びノンス発生鍵を、疑似非対称関数発生器（ＰＡＦＧ）に対する入力値としてメモリに記憶することができる。ＰＡＦＧの出力は、デジタル署名動作を実行するための回路の入力に直接供給することができる。あるいは、ＰＡＦＧの出力は、メモリダンプがアクセスすることができないセキュアなバス又はレジスタセットに直接供給することができる。
【０１０６】
[097]  グリッチ攻撃に対してセキュアである必要があるデバイスは、差分電力解析（ＤＰＡ）に対してもセキュアである必要があり得る。従って、本明細書に記載した方法及びシステムはＤＰＡ対抗策を用いて実施可能である。例えば、いずれかの実施形態のカウンタが線形フィードバックシフトレジスタ（ＬＦＳＲ）を用いて更新された値である場合、これは、ＬＦＳＲを用いて個別に更新された多数の値の排他的ＯＲとして表すことができ、これによってＤＰＡ攻撃に対する耐性を向上させることができる。ＬＦＳＲを用いるこの技法は、耐グリッチ対抗策とは独立して適用可能であり、デジタル署名を実行しないシステムでは一般的なＤＰＡ対抗策として適用可能である。
【０１０７】
[098]  この特許は、本明細書に記載した技法を用いない同様のコスト及び複雑さのデバイスよりも、攻撃に対して著しく高い耐性を有するデバイスの構築を可能とする関連技法ファミリを包含する。更に、システムをセキュアにするために多数のセキュリティ技法が必要となる場合があり、従って、本明細書に記載した技法は他のセキュリティ方法又は対抗策と関連付けて使用可能である。
【０１０８】
[099]  更に、本発明はＤＳＡ及びＥＣＤＳＡと関連させて記載したが、本明細書に記載した本発明の原理は、他のデジタル署名アルゴリズムにも適用及び適合させることができる。そういった他のアルゴリズムには、限定ではないが、エルガマル署名システムの変種、ＩＥＥＥｐ１３６３、ＰＫＣＳ＃１１、ＫＣＤＳＡ、Ｎｙｂｅｒｇ−Ｒｕｅｐｐｅｌ、Ｓｃｈｎｏｒｒ、ＩＢＥベースの署名（ＩＢＥはＩＤベース暗号（Identity Based Encryption）を表す）、ＩＢＥベースの鍵導出、ノンスを用いるペアリングベースの暗号スキーム、ノンスベースの格子署名、ＥｄＤＳＡ２５５１９、及び本発明の技法を適用するのに適した動作を伴う他の暗号アルゴリズムが含まれる。
【０１０９】
[0100]  当業者には認められようが、上述の技法は、特定のホスト環境にもフォームファクターにも限定されず、限定でなく以下を含む多種多様な用途において使用可能である。それらの用途には、ＩＳＯ７８１６−１、ＩＳＯ７８１６−２、及びＩＳＯ７８１６−３に実質的に準拠するスマートカード（「ＩＳＯ７８１６準拠スマートカード」）を限定でなく含むあらゆる種類の暗号スマートカード、非接触型及び近接型のスマートカード及び暗号トークン、記憶値カード及びシステム、暗号によりセキュアとなったクレジットカード及びデビットカード、顧客ロイヤルティカード及びシステム、暗号により認証されたクレジットカード、暗号アクセラレータ、賭博システム、セキュアな暗号チップ、耐タンパー性マイクロプロセッサ、ソフトウェアプログラム（限定でないが、パーソナルコンピュータ、サーバ等で用いられるプログラムや、暗号デバイス上にロード又はその内部に埋め込むことができるプログラムを含む）、鍵管理デバイス、銀行鍵管理システム、セキュアなウェブサーバ、電子決済システム、少額決済システム及びメータ、プリペイド電話カード、暗号識別カード及び他のアイデンティティ検証システム、電子資金移動用システム、現金自動預払機、ＰＯＳ端末、証明書発行システム、電子バッジ、入室システム、暗号鍵を用いたあらゆる種類の物理ロック、あらゆる種類の映像信号を保護するためのシステム、知的財産保護及びコピー保護システム（映画、オーディオコンテンツ、コンピュータプログラム、ビデオゲーム、画像、テキスト、データベース等の不正なコピー又は使用を防ぐために用いるもの等）、携帯電話スクランブル及び認証システム（電話認証スマートカードを含む）、セキュアな電話（そのような電話用の鍵記憶デバイスを含む）、暗号ＰＣＭＣＩＡカード、携帯型暗号トークン、暗号データ監査システムが含まれる。
【０１１０】
[0101]  前記の全ては例示的な実施形態及び用途を示し、それらから、本明細書に開示した特定の技法の精神及び範囲から逸脱することなく、関連する変更、強化、及び変形が明らかとなろう。従って、本発明は、前述の開示に限定されるものではなく、添付の特許請求の範囲によって解釈されるものとする。
【図１】
0006366595.tif 000014
【図２Ａ】
0006366595.tif 000015
【図２Ｂ】
0006366595.tif 000016
【図３】
0006366595.tif 000017
【図３Ａ−１】
0006366595.tif 000018
【図３Ａ−２】
0006366595.tif 000019
【図３Ｂ】
0006366595.tif 000020
【図３Ｃ】
0006366595.tif 000021
【図４】
0006366595.tif 000022