(57)【要約】本発明は、エラー投入による攻撃に対して任意のアルゴリズムを実行する電子アセンブリを保護する方法に関する。本発明による方法は、計算署名を得るため少なくとも１つの中間結果に検証関数を用いる追加の計算を行うことと、前記署名を再計算し、起こりうるエラーを検知するためにそれらを比較するため、計算の全部または一部を少なくとも１回以上行うことを含む。
2005532728.tif 000002
【特許請求の範囲】
【請求項１】
計算処理を実行する電子アセンブリを保護する方法であって、計算署名を得るため少なくとも１つの中間結果に検証関数によって追加演算を行うことを含むことを特徴とする、方法。
【請求項２】
起こりうるエラーを検知するために前記署名を再計算しそれらを比較するために、計算の全部または一部を少なくとも１回以上実行することを含むことを特徴とする、請求項１に記載の方法。
【請求項３】
・より大きな集合から、および／またはより大きな集合に作用する別の「スーパー関数」演算を用いて基本的演算を行うことと、
・前記計算署名を得るために前記スーパー関数によって得られた結果を用いて前記検証関数による前記計算を行うことと、
を含むことを特徴とする、請求項１または２に記載の方法。
【請求項４】
基本的演算の計算がスーパー関数の計算を用いて見出されることを特徴とする、請求項３に記載の方法。
【請求項５】
ＦにおけるＥの基本的演算ｆがＦ’におけるＥ’の演算ｆ’に置き換えられ、
・Ｅ’とＦ’がＥとＦのスーパー集合であり、
・１対１関数ｈ１によりＥからＥ’へ移動し、
・上への関数ｈ２によりＦ’からＦへ移動し、
・Ｅの任意の要素ｘに関して：ｈ２（ｆ’（ｈ１（ｘ）））＝ｆ（ｘ）である、
ことを特徴とする、請求項３または４に記載の方法。
【請求項６】
計算処理の記憶手段と前記処理の処理手段を備える電子アセンブリであって、計算署名を得るために中間結果に追加の計算を行うため使用される検証関数の記憶手段を含むことを特徴とする、電子アセンブリ。
【請求項７】
プログラムがコンピュータシステム内で実行されるとき、請求項１から５のいずれか一項に記載の方法のステップを実行するプログラムコード命令を含むコンピュータプログラム。
【請求項８】
計算処理の記憶手段と前記処理の処理手段を備えるスマートカードであって、計算署名を得るために中間結果に追加の計算を行うため使用される検証関数の記憶手段を含むことを特徴とする、スマートカード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、中間のステップに関してであろうと中間のデータに関してであろうと、アルゴリズムが正しく実行されるように保証するためにチェックが行われねばならない場合に、任意のアルゴリズムを実行する電子アセンブリを保護する方法に関する。特に、この方法の目的は、差分誤り解析または拡張誤り解析として知られており、これは、１つ以上のエラーが投入されるときの電子アセンブリの算出手順を調査することにより、アルゴリズム計算に含まれる１つ以上のデータ項目または演算についての情報を得ようと試みることである、１つ以上のエラーの投入による特定の種類の攻撃に対して脆弱でないアルゴリズムのバージョンを生成することである。
【０００２】
本文書で以下検討するアルゴリズムは、入力情報に従い出力情報を算出する秘密鍵を用いる暗号化アルゴリズムの非限定的な例であり、これは、暗号化、復号、署名、署名確認、認証または非拒絶作業に関連する可能性がある。これらは、入力または出力を知っている攻撃者が、秘密鍵自体に関する任意の情報を実質的に推論することができないように構築されている。
【０００３】
しかし、本発明は、計算に含まれるすべての中間ステップおよびデータにエラーがないことを確認するために、テストが実行されなければならない場合のアルゴリズムを対象とする。
【背景技術】
【０００４】
エラー投入を用いる最初の攻撃は１９９６年に遡る。
【０００５】
・参考（０）：Ｎｅｗ  Ｔｈｒｅａｔ  Ｍｏｄｅｌ  Ｂｒｅａｋｓ  Ｃｒｙｐｔｏ  Ｃｏｄｅｓ−Ｄ．Ｂｏｎｅｈ，Ｒ．ＤｅＭｉｌｌｏ，Ｒ．Ｌｉｐｔｏｎ−Ｂｅｌｌｃｏｒｅ  Ｐｒｅｓｓ  Ｒｅｌｅａｓｅ
【０００６】
ＤＥＳ秘密鍵を伴う暗号化アルゴリズムに対するこの種の攻撃の例（参考（１））は、１９９６年にＥｌｉ  ＢｉｈａｍとＡｄｉ  Ｓｈａｍｉｒが発表した論文（参考（２））に見ることができる。
・参考（１）：ＦＩＰＳ  ＰＵＢ４６−２、Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ、１９９４
・参考（２）：Ａ  Ｎｅｗ  Ｃｒｙｐｔａｎａｌｙｔｉｃ  Ａｔｔａｃｋ  ｏｎ  ＤＥＳ，Ｄｒａｆｔ
【発明の開示】
【発明が解決しようとする課題】
【０００７】
提案される発明は、攻撃者が、特定の関数は入力よりも小さな出力を有し、同じ出力を生むいくつかの入力があるという事実を利用する場合の攻撃のように拡張された攻撃にも関する。したがって、入力を変更することによって、正しい結果を出力で得ることができ、そのことは時に興味深い。
【０００８】
本発明による方法の目的は、計算に含まれる関数を変更することにより、電子アセンブリまたはシステムへのＤＦＡ攻撃のリスクを除去することである。
【０００９】
本発明のもう１つの目的は、上記の基本的仮定がもはや満たされないように、すなわち、エラーが投入される可能性のある中間の変数または関数がシステムに検知されないまま残ることがないように保護された暗号電子アセンブリによって実行される、暗号算出プロセスを変更することである。
【課題を解決するための手段】
【００１０】
本発明は、情報処理手段と情報記憶手段を備える電子アセンブリ内でのプログラムの実行を保護する方法に関し、計算署名を得るために少なくとも１つの中間結果に検証関数によって追加の計算を行うことを含むことを特徴とする。
【００１１】
さらに、本発明は、電子アセンブリと、例えば、上記方法を実行するのに使用されるスマートカードとプログラムに関する。
【００１２】
本発明のその他の目的、特徴、および利点は、非限定例として与えられた、本発明による方法の実行と、この実行のために設計された電子アセンブリの実施形態に関して、以下の説明を読み、以下の添付図面を参照すると明白になるであろう。
【発明を実施するための最良の形態】
【００１３】
本発明による方法の目的は、電子アセンブリと、例えば、秘密鍵を用いる暗号計算処理を実行するスマートカードのようなオンボードシステムを保護することである。電子アセンブリは、プロセッサなどの情報処理手段とメモリなどの情報記憶手段とを含む。暗号計算処理は、上記アセンブリの例えばＲＯＭタイプのメモリにインストールされている。上記システムのプロセッサは、例えばＥＥＰＲＯＭタイプのメモリの秘密領域に記憶されている秘密鍵を用いて計算処理を実行する。
【００１４】
本発明の主題であり、図１および２に示される、エラー無しでなければならない従来の計算処理を実行する上記電子アセンブリを保護する方法は、計算で実行される関数ｆがより一般的な関数ｆ’（「スーパー関数」として知られている）によって変更されるが、関数ｆの正常な結果を発見しやすい点で注目に値する。計算に投入されるエラーは、「スーパー関数」と関連付けられた検証関数Ｖにより検知される。これらのスーパー関数ｆ’と検証関数Ｖを以下明白に説明し、多数の例も紹介する。
【００１５】
本発明によるスーパー関数ｆ’の原理を、図１および２を参照し以下説明する。電子装置により実行されるアルゴリズムは、常に一連の基本的演算である。ここで、これらの基本的演算のうちの１つについてのスーパー関数の原理を説明する。任意の基本的演算は、有限集合Ｅから有限集合Ｆへの関数ｆとして説明することができる（図２）。スーパー関数の原理は、Ｅ’からＦ’へのスーパー関数ｆ’を検討することである。ここで、以下のようになる。
【００１６】
・Ｅ’は、Ｅ’内にＥの１対１のマッピングｈ１が存在する（すなわち、Ｅ内の２つの異なる要素をとる場合、Ｅ’内のｈ１によるそれらのイメージも異なる）集合である。実質上、これは、Ｅ’が少なくともＥと同じ数の要素を有すると言っているのと同じである。
【００１７】
・Ｆ’は、Ｆ内のＦ’の上へのマッピングｈ２が存在する（すなわち、Ｆのすべての要素ｙについて、ｈ２（ｘ）＝ｙとなるようにＦ’のｘ要素が存在する）集合である。実質上、これは、Ｆ’が少なくともＦと同じ数の要素を有すると言っているのと同じである。
【００１８】
・そして、特に、Ｅの任意の要素ｘに対して、以下の等式ｈ２（ｆ’（ｈ１（ｘ）））＝ｆ（ｘ）が成り立たなければならない。これは、関数ｆが、関数ｆ’の計算を用いて、およびスーパー集合Ｅ’とＦ’により算出されることができると言っているのと同じである。
【００１９】
エラー検知は、検証関数Ｖにより実行される。検証関数は、アルゴリズムの中間結果（または重要であると考えられる結果）をチェックするために使用される関数である。
形式的に書くと、以下のようになる。
・Ｂ＝｛０，１｝＊二値ワードの集合
・Ｅ＝｛ｘｉ｝０＜ｉ＜ｎ＋１、ここで、要素ｘｉは実質上はＢの要素、我々が保護したいと考えるｎ個の中間結果の集合
検証関数Ｖは、固定長Ｎの二値ワードとＥのすべての要素とを関連付ける関数でありＶ：Ｅ→｛０，１｝Ｎ
【００２０】
実質上、より具体的には、
・Ｖは、計算「署名」と中間値の集合とを関連付ける関数であり、この計算を繰り返すことにより、この署名は起こりうるエラーを検知するために使用される。
【００２１】
・我々は、実際にはＮは８、３２、または６４の次数（演算処理では通常サイズ）であり、保護される値の集合はより大きいため、検証関数は１対１でありえないと明白に理解できる。したがって、異なる計算から、Ｖにより同様の結果が出る可能性がある（この特性は、本文書の後で衝突と呼ばれる）。したがって、Ｖは、衝突ができるだけ起こらず十分に分散されるように選択されるべきである。
【００２２】
本発明によるセキュリティの原理は、先述した２つの方法を組み合わせること、すなわち、最初に関数を個々に保護するためスーパー関数の原理が適用され、次に検証関数が適用されることにある。これは計算署名を生成する。全ての、または一部の計算は、新しい署名を再計算するために１回以上繰り返されてよく、任意のエラーを検出するために署名が比較される。検証関数は、計算処理またはスーパー関数の演算からの少なくとも１つの中間結果に関して計算を実行する。中間結果は、最終結果に対向する、暗号計算処理の実行中に得られる結果である。説明のため、特別な実施形態によると、検討されるアルゴリズムの実行中に重要な点で得られる中間結果に１つ以上の検証関数を適用することが推奨される。
【００２３】
本発明によるセキュリティの方法をＤＥＳアルゴリズムに適用する第１の例を、以下に述べる。
【００２４】
スーパー関数に関しては、１つのみがＳボックスを保護するために使用される。Ｓボックスは実際に、１つの６ビットの入力と１つの４ビットの出力を有する。したがって、いくつかの６ビットの値が、４ビットで同じ結果を出す可能性があり、これは攻撃者が使用できる。この場合、
・Ｅ＝｛０．１｝６とＦ＝｛０．１｝４
であり、次いで、
・Ｅ’＝Ｅとｈ１識別関数
・Ｆ’＝｛０，１｝６と単にＦのワードの最上位ビットと最下位ビットを除去することから成るｈ２
を導入する。
【００２５】
・ｆ’は以下のように構築される。ｘがＥ’の要素である（すなわち６ビットの）場合、ｆ’（ｘ）の最初のビットと最後のビットはｘのビットである。中間の４ビットはボックスの通常の結果により与えられるビットである。Ｓボックスで使用される演算モードの簡単な分析は、Ｅのすべての要素に関して、ｈ２（ｆ’（ｈ１（ｘ））＝Ｓ−ｂｏｘ（ｘ）であることを示す。検証関数に関しては、それは最初に各ラウンド（６４ビット）から出力される結果にそして関数ｆ’の連結された出力（６４とみなされる４８ビット）に使用される。
【００２６】
このような検証関数がその後に選択されねばならない。いくつかの例を以下に示す。
【００２７】
本文書の以下に、チェックされる値の集合Ｘ＝｛ｘｉ｝０＜ｉ＜ｎ＋１と検証関数Ｖを示す。最初のｊの値ｘｉを考慮に入れる中間検証値は、Ｖｊと書かれる場合がある。従って、Ｖ（ｘ）＝Ｖｎである。
【００２８】
検証関数の第１の例は、値の連結である。これは、計算の全体にわたってトレースが保持されることを意味し、メモリの点からは費用がかかるが、衝突のリスクがないため効率的である。
Ｖｊ＋１＝Ｖｊ｜｜ｘｊ＋１
【００２９】
第２の例は、値の排他的論理和である。
Ｖ（ｘ１，．．．，ｘｎ）＝ｘ１ＸＯＲ．．．ＸＯＲｘｎ
【００３０】
第３の例は、２Ｎを法とする加算剰余算（Ｎは結果の長さ）である。これは、中間結果を加算し、所望の長さで結果を切り捨てることと同じである。
Ｖｊ＋１＝（Ｖｊ＋ｘｊ＋１）ｍｏｄｕｌｏ２Ｎ
【００３１】
第４の例は、値の通常ＣＲＣである。
Ｖ（ｘ１，．．．，ｘｎ）＝ＣＲＣ（ｘ１，．．．，ｘｎ）
【００３２】
第５の例は、循環シフトが乱数のビット（例えば１）の中間結果に実行される場合の、値の排他的論理和である。
Ｖｊ＋１＝（Ｖｊ＜＜１）ＸＯＲ  ｘｊ＋１
【００３３】
第６の例は、乗算を有する値の排他的論理和である。各ステップで、ＸＯＲは切り捨てられた中間検証値と現在のｘｊとの積を有する中間検証値で実行される。
Ｖｊ＋１＝ＶｊＸＯＲ（（Ｖｊｘｘｊ＋１）ｍｏｄｕｌｏ２Ｎ）
【００３４】
第７の例は、暗号関数によるデータハッシュである。例えば、すべての値は、ＳＨＡ−１関数を用いて連結されハッシュされることができ、結果の必須ビット数を保持することができる。
Ｖ＝ＳＨＡ−１（Ｘ）
【００３５】
本発明によるセキュリティ方法をＲＳＡアルゴリズムに適用する第２の例を以下に説明する。この例では、変数Ｍ、Ｃ１、Ｃ２、Ｎとビット列Ｄを用いて以下のループが実行されることがある。
Ｃ１＝１
Ｆｏｒ  ｉ＝０  ｔｏ  Ｎ  ｄｏ：
Ｃ２＝Ｃ１×Ｃ１
Ｃ１＝Ｃ２×Ｍ
Ｉｆ  ｂｉｔ  ｉ  ｏｆ  Ｄ＝０  ｔｈｅｎ
Ｃ１＝Ｃ２
Ｅｎｄ  Ｉｆ．
Ｅｎｄ  ｌｏｏｐ．
Ｏｕｔｐｕｔ  ｔｈｅ  ｒｅｓｕｌｔ  Ｃ１．
【００３６】
攻撃者が例えば「Ｉｆ」の前のＣ１を変更し、Ｉｆ命令が実行されれば、結果が正しく、したがって攻撃者はＤの値に関する情報を得ることができると分かる。
【００３７】
この場合には、スーパー関数が使用されない。単純な排他的論理和の中間値Ｃ１およびＣ２への適用がいかなるエラーも検知する。
【００３８】
攻撃者がエラー投入を完全に制御しない場合がある。より大きなスペースで作業し、結果の一貫性をチェックすることによって、投入されたエラーが不可能な結果を生み出すため、投入されたエラーを検知することができる。例えば、２つの８ビット数が追加され、その結果が１６ビットで記憶されると、結果に関して投入されたエラーが、７の最上位ビット（演算の法則を用いて通常０）に影響を及ぼす大きな変化を有し、それはエラーが検知されることを意味する。
【図面の簡単な説明】
【００３９】
【図１】本発明による方法の実施形態を概略的に図示したものである。
【図２】本発明による方法の実施形態を概略的に図示したものである。
【図１】
2005532728.tif 000003
【図２】
2005532728.tif 000004
【手続補正書】
【提出日】平成17年3月8日(2005.3.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
計算処理を実行する電子アセンブリを保護する方法であって、
・より大きな集合から、および／またはより大きな集合に作用する別の「スーパー関数」演算を用いて基本的演算を行うことと、
・計算署名を得るため少なくとも１つの中間結果に検証関数によって追加演算を行うことと、
を含むことを特徴とする、方法。
【請求項２】
起こりうるエラーを検知するために前記署名を再計算しそれらを比較するために、計算の全部または一部を少なくとも１回以上実行することを含むことを特徴とする、請求項１に記載の方法。
【請求項３】
計算署名を得るために計算処理またはスーパー関数の演算からの少なくとも１つの中間結果に、前記検証関数による前記追加の計算を行うことを含むことを特徴とする、請求項１または２に記載の方法。
【請求項４】
前記計算署名を得るために前記スーパー関数によって得られた結果を用いて、前記検証関数による前記追加の計算を行うことを含むことを特徴とする、請求項１から３のいずれか一項に記載の方法。
【請求項５】
基本的演算の計算がスーパー関数の計算を用いて見出されることを特徴とする、請求項１から４のいずれか一項に記載の方法。
【請求項６】
ＦにおけるＥの基本的演算ｆがＦ’におけるＥ’の演算ｆ’に置き換えられ、
・Ｅ’とＦ’がＥとＦのスーパー集合であり、
・１対１関数ｈ１によりＥからＥ’へ移動し、
・上への関数ｈ２によりＦ’からＦへ移動し、
・Ｅの任意のの要素ｘに関して：ｈ２（ｆ’（ｈ１（ｘ）））＝ｆ（ｘ）である、
ことを特徴とする、請求項１から５のいずれか一項に記載の方法。
【請求項７】
計算処理の記憶手段と前記処理の処理手段を備える電子アセンブリであって、基本的演算を実行するために使用され、より大きな集合から、および／またはより大きな集合に作用する「スーパー関数」演算のおよび計算署名を得るために中間結果に追加の計算を行うため使用される検証関数の記憶手段を含むことを特徴とする、電子アセンブリ。
【請求項８】
プログラムがコンピュータシステム内で実行されるとき、請求項１から６のいずれか一項に記載の方法のステップを実行するプログラムコード命令を含むコンピュータプログラム。
【請求項９】
計算処理の記憶手段と前記処理の処理手段を備えるスマートカードであって、基本的演算を実行するために使用され、より大きな集合から、および／またはより大きな集合に作用する「スーパー関数」演算のおよび計算署名を得るために中間結果に追加の計算を行うため使用される検証関数の記憶手段を含むことを特徴とする、スマートカード。
【国際調査報告】
2005532728.tif 000005
2005532728.tif 000006