(57)【要約】  本発明は、電子部品のデータ機密保護の分野に関する。本発明は、ソフトウェアを実行するための少なくとも1つのバス、処理装置、およびメモリを備える電子回路で、故障を検出するために、１Ｘ個のビットにコード化されたソフトウェアの項目のデジタルデータＸを処理する方法、およびこの目的を達成するために提供されたハードウェア構造に関する。本発明は、デジタルデータＸを、１Ｘ＋１Ｙ個のビットにコード化されたデジタルデータＺに変換するステップと、１Ｙ個の追加ビットは、前記データＸに適用されるインテグリティ関数ｆの結果であり、前記回路のハードウェア資源群によりデジタルデータＺを処理する処理ステップと、ここで、前記ハードウェア資源は、１Ｘ＋１Ｙ個のビットのワードに作用し、前記処理ステップ中、データＺのインテグリティを検証する少なくとも１回のステップと、を含む。【選択図】図１
2009502070.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアプログラムを実行するためのバス、プロセッサユニット、およびメモリを少なくとも備えるハードウェア資源を含む電子回路で、少なくとも１つの故障を検出するために、ソフトウェアワード内の１Ｘ個のビットにコード化されたソフトウェアワードの少なくとも１つのデジタルデータ項目Ｘを処理する方法であって、
前記少なくとも１つのデジタルデータ項目Ｘを、総数１Ｘ＋１Ｙ個のビットにコード化された少なくとも１つのハードウェアワードＺのデジタルデータ項目に変換する変換ステップと、ここで、前記総数は、ソフトウェアワードの１Ｘ個のビットと、追加的な１Ｙ個の追加ビットとの和に対応し、‘インテグリティ’データ項目Ｙの前記１Ｙ個の追加ビットは、前記少なくとも１つのデジタルデータ項目Ｘに適用されるインテグリティ関数ｆの結果であり、
前記電子回路の全体ハードウェア資源群により前記少なくとも１つのハードウェアワードＺのデジタルデータ項目を処理する処理ステップと、ここで、前記ハードウェア資源は、総数１Ｘ＋１Ｙ個のビットの少なくとも１つのハードウェアワードＺに作用し、
前記処理ステップ中および／または前記処理ステップ後に、前記少なくとも１つのハードウェアワードＺのデジタルデータ項目のインテグリティを検証する、少なくとも１回のインテグリティ検証ステップと、
を含むことを特徴とする処理方法。
【請求項２】
前記少なくとも１つのハードウェアワードＺのデジタルデータは、前記少なくとも１つのデジタルデータ項目Ｘと、前記少なくとも１つのデジタルデータ項目Ｘに適用されるインテグリティ関数ｆからのインテグリティデータＹとの連結からなることを特徴とする請求項１記載の方法。
【請求項３】
前記少なくとも１つのハードウェアワードＺのデジタルデータ項目を処理する前記処理ステップは、算術論理演算ユニット（ＡＬＵ）により行われ、
前記少なくとも１つのハードウェアワードＺのデジタルデータ項目のうちの前記少なくとも１つのデジタルデータ項目Ｘに関する演算ＯＰを計算する‘第１’の計算ステップと、
前記少なくとも１つのハードウェアワードＺのデジタルデータの追加インテグリティビットに関する前記演算ＯＰを計算する‘第２’の計算ステップと、
を含んでおり、
ここで、前記インテグリティ関数ｆは、下記の式
ｆ（Ｘ１  ＯＰ  Ｘ２）＝ｆ（Ｘ１）  ＯＰ  ｆ（Ｘ２）
を満足し、
前記第１および第２の計算ステップは、同時に行われることを特徴とする請求項１または２記載の方法。
【請求項４】
前記少なくとも１つのハードウェアワードＺのデジタルデータ項目を処理する前記処理ステップは、算術論理演算ユニット（ＡＬＵ）により行われ、
前記少なくとも１つのハードウェアワードＺのデジタルデータ項目のインテグリティを検査する第１のステップと、
前記少なくとも１つのハードウェアワードＺのデジタルデータ項目のうちの少なくとも１つのデジタルデータ項目Ｘに関する演算ＯＰを計算する次のステップと、
前記演算ＯＰからのデジタルデータ項目を、総数１Ｘ＋１Ｙ個のビットにコード化されたデジタルデータ項目Ｚ’に変換するステップと、
を含んでおり、
ここで、前記総数は、ソフトウェアワードの１Ｘ個のビットと、１Ｙ個の追加ビットとの和に対応し、前記１Ｙ個の追加ビットは、前記演算ＯＰからの前記データ項目に適用されるインテグリティ関数ｆの結果であることを特徴とする請求項１〜３のいずれか記載の方法。
【請求項５】
前記関数ｆは、ｆ（Ｘ）＝Ｘ／１Ｘにより定義され、
１Ｘは二進ワードＸのビットで表した長さであり、
‘／’は割り算であることを特徴とする請求項１〜４のいずれか記載の方法。
【請求項６】
ソフトウェアワードの１Ｘ個のビットにコード化されたソフトウェアワードの少なくとも１つのデジタルデータ項目Ｘを、総数１Ｘ＋１Ｙ個のビットにコード化された少なくとも１つのハードウェアワードＺのデジタルデータ項目に変換する変換手段と、ここで、前記総数は、前記ソフトウェアワードの１Ｘ個のビットと、追加的な１Ｙ個の追加ビットとの和に対応し、“インテグリティ”データ項目Ｙの前記１Ｙ個の追加ビットは、前記少なくとも１つのデジタルデータ項目Ｘに適用されるインテグリティ関数ｆの結果であり、
前記少なくとも１つのハードウェアワードＺのデジタルデータ項目を処理する少なくとも１回の処理ステップを行うための、少なくともバス、プロセッサユニット、およびメモリを備えるハードウェア資源と、ここで、電子回路の全体ハードウェア資源群は、前記総数１Ｘ＋１Ｙ個のビットの少なくとも１つのハードウェアワードＺに作用し、
前記処理ステップ中および／または前記処理ステップ後に、前記少なくとも１つのハードウェアワードＺのデジタルデータ項目のインテグリティを検証する手段と、
を備える、電子回路で少なくとも１つの故障を検出するハードウェア構造。
【請求項７】
前記ハードウェア資源は、中央処理装置（ＣＰＵ）と連結されたレジスタを少なくとも備えており、前記レジスタは、１Ｘ＋１Ｙ個のビットのサイズのワードの形態で、前記少なくとも１つのハードウェアワードＺのデジタルデータを格納し、前記中央処理装置（ＣＰＵ）は、前記少なくとも１つのデジタルデータ項目Ｘと、前記インテグリティデータ項目Ｙとに関して演算する手段を備えることを特徴とする請求項６記載の構造。
【請求項８】
前記ハードウェア資源は、前記少なくとも１つのデジタルデータ項目Ｘ、および少なくとも１つのハードウェアワードＺのデジタルデータの追加インテグリティビットＹに関して、別々に演算ＯＰを計算する少なくとも１つの算術論理演算ユニット（ＡＬＵ）を備え、前記インテグリティ関数ｆは、下記の式
ｆ（Ｘ１  ＯＰ  Ｘ２）＝ｆ（Ｘ１）  ＯＰ  ｆ（Ｘ２）
を満足することを特徴とする請求項６または７記載の構造。
【請求項９】
前記物質資源は、少なくとも１つの算術論理演算ユニット（ＡＬＵ）を備えており、前記算術論理演算ユニット（ＡＬＵ）は、
前記少なくとも１つのハードウェアワードＺのデジタルデータ項目のインテグリティを検査し、
前記少なくとも１つのハードウェアワードＺのデジタルデータ項目のうちの少なくとも１つのデジタルデータ項目Ｘに関する演算ＯＰを計算し、
前記演算ＯＰからのデジタルデータ項目を、総数１Ｘ＋１Ｙ個のビットにコード化されたデジタルデータ項目Ｚ’に変換する
手段を備えており、
前記１Ｙ個の追加ビットは、前記演算ＯＰからの前記データ項目に適用されるインテグリティ関数ｆの結果であることを特徴とする請求項６または７記載の方法。
【請求項１０】
請求項６〜９のいずれか記載のハードウェア構造を含むスマートカード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子部品内でデータを安全に保存する分野に関する。
特に、本発明は、故障利用攻撃（ｆａｕｌｔ  ａｔｔａｃｋ）からハードウェア集積回路を保護できる方法および構造に関する。
【背景技術】
【０００２】
スマートカード、より一般的に、ある携帯用電子部品は、アプリケーションを保全する目的で、秘密および／または極秘データを計算および格納するユニットとして使用される場合が多い。識別、携帯電話、支払い、運搬またはアクセス制御は、スマートカードが運用において重要な役割を担うあらゆるアプリケーション分野である。
【０００３】
限定されていないがその中でも、その役割は、カードの保有者および／またはカードの発行者を認証することにある。カードは更に、アプリケーションにより、ロイヤルティポイント、お金（例えば、テレフォンユニット）、または地下鉄のチケットに対応することができる‘ユニット’を含む。
【０００４】
したがって、スマートカードは、ある不正な個人および組織が不正に処理するか、会社のブランドイメージを損傷させる傾向における対象になる。
【０００５】
このように利用されるので、スマートカードは、電力または電流消費観察（サイドチャンネル分析）からの攻撃や、近来には一時的な故障を与えることによる攻撃からの脅威を処理しなければならなかった。このような攻撃は検出が比較的複雑であり、またこのような攻撃に対応することは難しい。現在、電子部品は、外部障害に関係なく正確な演算を発揮できない。その結果、カードに埋め込まれたソフトウェアは、故障により発生するいかなる部品故障からも自己を保護しなければならない。
【０００６】
従来技術から、例えば、電子部品の演算に故障を引き起こす異常（電圧スパイク）のような障害を検出するための解決策が知られている。部品が、不安定であるので故障の面で危険であると見なされる演算領域を入力する前に反応するために、障害（異常に低い電圧、高すぎる光度）を検出する環境センサ（温度、クロック周波数、電源供給電圧、または光を感知するための）を集積させる、ハードウェア的解決策があるという点に留意すべきである。これらの解決策は、特定センサの開発（経済的費用）、および、このようなセンサが時々非常に小さいサイズの回路に集積される（サイズダウン費用）必要があるので、費用がかかる。
【０００７】
例えば修正データビットの存在により、障害の影響を検出する解決策も更に知られている。
【０００８】
他のものの中では、処理に冗長性を与えるタイプのソフトウェア的またはハードウェア的解決策がある。冗長性とは単純に、２つの処理の結果を比較するために同じ演算（計算、伝送など）を２回実施することにある。ソフトウェアモードにおいて、冗長性は、データの二重計算になり得る。ハードウェアモードにおいて、この冗長性は、例えば、演繹的に同じ値を格納する２つの重複レジスタの存在により表され得る。結果が異なる場合、処理のうちで１つが適切に行われず、おそらく結果として障害（故障）が発生すると結論を出すことができる。これらの解決策の欠点は、ある時点でのみ保護または検出が行われ、また反復演算のために性能が損傷されるという事実にある。冗長性は、重複実行される演算にだけ保証を与える。
【０００９】
インテグリティ検査タイプのソフトウェア的またはハードウェア的解決策もある。不揮発性メモリに格納されたデータの一項目にチェックサムが追加されて、チェックサムによってデータが故障により損傷されるか否か検出され、かつ、データとチェックサムとが不一致の場合にチェックサムを検証することが可能になる。例えばデータ伝送のために、インテグリティデータの追加がソフトウェア層において広く使われる。従来技術で発見されているように、ハードウェアチェックサムは、メモリブロックレベルでだけ実行され、多くの場合‘パリティビット’と称される。基本マシンワード（８ビット部品の８ビット）は、メモリの９つのビットに格納されるが、その９番目のビットは、ワードのパリティが組織的に偶数／奇数であるように位置するパリティビットである。読み取り時、パリティが検証されて、８ビットワードがデータバスに配置される。書き込み時、データバスに配置された８ビットワードがメモリに書き込まれ、同時にパリティビットが生成される。問題は、データバスで、伝送されたワードがいかなるインテグリティデータも含まないということである。一旦メモリに転送されて、中央処理装置（ＣＰＵ）またはキャッシュに転送された値がまだ正確であるということを検証する方法がない。
【００１０】
最適のセキュリティについては、理想的状態はその効果とは関係なく故障を検出することができるという点に留意すべきである。残念なことに、それは、前記従来技術のシステム（冗長性、およびチェックサム）で適切な費用では不可能である。
【００１１】
通常、従来技術の解決策では、データに対して永久にインテグリティを検査することができない。いかなる解決策も、ハードウェアレベルでデータに対する永久なインテグリティ検査を提案していない。
【００１２】
したがって、故障が組織的に検出されること、また、ハードウェア要素による操作中にデータのインテグリティが永久保障されること、が必要である。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
本発明の目的は、故障を検出するためのデータの処理方法、および、このような目的で提供されるハードウェア構造を提案することで、従来技術の問題点を解決することである。前記方法および構造は、インテグリティデータを含むワードに対する組織的作用を可能にする。インテグリティ機能Ｙが全てのハードウェア処理ステップに永久に組み込まれるように、ワードのビット数は、１Ｘ個の初期データ項目Ｘより大きい。
【課題を解決するための手段】
【００１４】
本発明の方法は、特に故障検出に対する必要性を満足しているが、その理由は、前記方法が処理性能を維持すると共に、処理チェーンを通じて、またデータの寿命を通じて、データのインテグリティを保障するためである。
【００１５】
各ハードウェア部品は、検出を最適で組織的にするために１Ｘ＋１Ｙ個のビットで組織的に作用するように設計されている。これは、各ソフトウェアワードＸはメモリの１Ｘ＋１Ｙ個のセルに格納され、前記ソフトウェアワードＸはその関連チェックサムと共に１Ｘ＋１Ｙ個のラインのバスで１つのハードウェアモジュールから他のハードウェアモジュールに転送されるということを意味する。このように、ソフトウェアワードは、そのタイプ（アドレス、データ、命令、オペランドなど）を問わず保護される。
【００１６】
このために、その最も一般的に受け入れられるもので、本発明は、ソフトウェアを実行するためのバス、プロセッサユニット、およびメモリを少なくとも備える電子回路の故障を検出するために、１Ｘ個のビットにコード化されたソフトウェアのデジタルデータＸを処理する方法を提供する。前記方法は、以下のステップからなる。
【００１７】
−前記デジタルデータＸを、総数１Ｘ＋１Ｙ個のビットにコード化されたデジタルデータ項目Ｚに変換する変換ステップ。ここで、１Ｙ個の追加ビットは、前記データＸに適用されるインテグリティ関数ｆの結果である。
−前記回路の全体ハードウェア資源群により前記デジタルデータＺを処理する処理ステップ。ここで、前記ハードウェア資源は、１Ｘ＋１Ｙ個のビットのワードに作用する。
−前記処理ステップ中に前記データＺのインテグリティを検証する、少なくとも１回のインテグリティ検証ステップ。
【００１８】
一実施形態において、前記データＺは、前記データＸと、前記データＸに適用されるインテグリティ関数ｆからのインテグリティデータＹとの連結からなる。Ｚ＝Ｘ｜Ｙ＝Ｘ｜ｆ（Ｘ）。‘｜’は、２つの要素（前記ＸおよびＹ）の連結を示す演算である。
【００１９】
他の実施形態において、前記インテグリティ関数ｆは、前記デジタルデータＸで‘１’または‘０’に設定されたビットの数を計算する。
【００２０】
特に、前記デジタルデータＺを処理する処理ステップは、算術論理演算ユニット（ＡＬＵ）により行われ、以下のステップからなる。
【００２１】
−前記データＺのデータＸに関する演算ＯＰを計算する計算ステップ。
−前記データＺの追加インテグリティビットに関する前記演算ＯＰを計算する計算ステップ。
【００２２】
前記インテグリティ関数ｆは、下記の式を満足する。
ｆ（Ｘ１  ＯＰ  Ｘ２）＝ｆ（Ｘ１）  ＯＰ  ｆ（Ｘ２）
【００２３】
一実施形態において、前記デジタルデータＺを処理する処理ステップは、算術論理演算ユニット（ＡＬＵ）により行われ、以下のステップからなる。
【００２４】
−前記データＺのインテグリティを検査する第１のステップ。
−前記デジタルデータＺのデータＸに関する演算ＯＰを計算する次のステップ。
−前記演算ＯＰからのデジタルデータを、総数１Ｘ＋１Ｙ個のビットにコード化されたデジタルデータＺ’に変換するステップ。ここで、前記１Ｙ個の追加ビットは、前記演算ＯＰからの前記データ項目に適用されるインテグリティ関数ｆの結果である。
【００２５】
特に、前記関数ｆは、ｆ（Ｘ）＝Ｘ／１Ｘにより定義される。１Ｘは二進ワードＸのビットで表した長さである。
【００２６】
本発明は、更に、電子回路の故障を検出するハードウェア構造を提供する。前記構造は、以下の構成からなる。
【００２７】
−ｘ個のビットにコード化された、ソフトウェアのデジタルデータ項目Ｘを、総数１Ｘ＋１Ｙ個のビットにコード化されたデジタルデータ項目Ｚに変換する変換手段。ここで、前記１Ｙ個の追加ビットは、前記データ項目Ｘに適用されるインテグリティ関数ｆの結果である。
−前記デジタルデータＺを処理するためのバス、プロセッサユニット、およびメモリを少なくとも備えるハードウェア資源。ここで、全体ハードウェア資源群は、１Ｘ＋１Ｙ個のビットのワードに作用する。
−前記データ項目Ｘが操作されるたびに、前記処理ステップ中に前記データＺのインテグリティを検証する手段。
【００２８】
実施例において、前記バスは、前記バスにより転送された前記データＺのインテグリティを検証する少なくとも１つの手段を備える。
【００２９】
特定の実施例において、前記ハードウェア資源は、１Ｘ＋１Ｙ個のビットのサイズのワードの形態（ソフトウェアワードのサイズ＋インテグリティ検査ワードのサイズ）で前記データＺを格納するメモリを少なくとも備える。
【００３０】
実施例において、前記ハードウェア資源は、中央処理装置（ＣＰＵ）と連結されたレジスタを少なくとも備えており、前記レジスタは、１Ｘ＋１Ｙ個のビットのサイズのワードの形態で前記データＺを格納し、前記中央処理装置（ＣＰＵ）は、前記データＸと、前記追加インテグリティビットＹとに関して別々に演算する。
【００３１】
特に、前記ハードウェア資源は、前記データＺのデータＸ、および前記データＺの追加インテグリティビットに関して、別々に演算ＯＰを計算する少なくとも１つの算術論理演算ユニット（ＡＬＵ）を備え、前記インテグリティ関数ｆは、下記の式
ｆ（Ｘ１  ＯＰ  Ｘ２）＝ｆ（Ｘ１）  ＯＰ  ｆ（Ｘ２）
を満足する。
【００３２】
任意に、前記物質資源は、少なくとも１つの算術論理演算ユニット（ＡＬＵ）を備えており、前記ＡＬＵは、以下の構成からなる。
【００３３】
−前記データＺのインテグリティを検査し、
−前記データＺのデータＸに関する演算ＯＰを計算し、
−前記演算ＯＰからのデジタルデータ項目を、１Ｘ＋１Ｙ個のビットにコード化されたデジタルデータ項目Ｚ’に変換する手段。ここで、前記１Ｙ個の追加ビットは、前記演算ＯＰからの前記データに適用されるインテグリティ関数ｆの結果である。
【００３４】
一実施形態において、前記インテグリティ関数ｆは、前記ソフトウェアワードで“１”または“０”に設定されたビットの数を計算するか、ｆ（Ｘ）＝Ｘ／１Ｘにより定義される。１Ｘは二進ワードＸのビットで表した長さである。
【００３５】
本発明は、先行するハードウェア構造のうちの１つを含む、例えばスマートカードのような電子部品を更に備える。
【００３６】
本発明は、単に説明のために与えられた下記の実施例および添付の図面を参考にして、よりいっそう理解できる。
【発明を実施するための最良の形態】
【００３７】
下記の記述において、用語‘データ’は、データが２値変数、メモリアドレス、命令などで構成されるか否かに関係なく、集積回路を通過する、または集積回路で実行、格納、または処理されるすべてのデジタル情報を意味する。本発明で、データの項目ごとに、チェックサムが割り当てられる。
【００３８】
同様に、‘チェックサム’、‘パリティビット’、‘インテグリティビット／データ’、または‘検査ワード’は、同意語と見なされ、データの一項目を含んでデータの追加項目を示す。データの追加項目は、例えばある関数によってデータ項目の関数として定められる。このようなインテグリティデータは、ファイルまたはデータブロックのインテグリティを検査して、データが正確に伝送されたか否かを、より高い精度、またはより低い精度で検証する。従来方法は、周期的冗長検査（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋｉｎｇ、ＣＲＣ）である。
【００３９】
‘ソフトウェアワード’は、例えば変数のような、ソフトウェアによって使用されるデータの項目を代表するバイナリーサクセション（ｂｉｎａｒｙ  ｓｕｃｃｅｓｓｉｏｎ）を意味し、あらゆる特定の処理全般を通じて考慮される。例えば、ソフトウェアワードは、８、１６または３２ビットのサイズを有することができる。下記の記述において、文字‘Ｘ’は、このようなソフトウェアワードを表し、‘１Ｘ’は、ソフトウェアワードのサイズを表す。
【００４０】
‘ハードウェアワード’または‘マシンワード’は、ソフトウェア命令中にソフトウェアワードを操作するために電子回路のハードウェア要素によって使用されるバイナリーサクセッションを意味する。電子回路は、少なくともデータ／アドレスバス、メモリ、およびプロセッサユニット（ＣＰＵ、ＡＬＵ、その他）からなる。マシンワードは、ソフトウェアワードと同じサイズを有することができるが、本発明では、それらは、より大きいサイズ、例えばそれぞれ８、１６、または３２ビットのソフトウェアワードのための、１０、１８または３６ビットのサイズになることができる。追加、または‘付加’ビットは、故障検出の確率を増加させるために、１つの、または複数のビットにより構成できるチェックサムを符号化するインテグリティビットである。下記の記述において、Ｚ＝Ｘ｜Ｙになるように、文字‘Ｚ’はハードウェアワードを表し、文字‘Ｙ’はインテグリティビットを表し、‘１Ｚ’および‘１Ｙ’は、その関連サイズを表す。
【００４１】
Ｙ＝ｆ（Ｘ）になるように、インテグリティデータ項目Ｙは、‘インテグリティ関数’と呼ばれる関数ｆによって、ソフトウェアワードＸに基づいて計算される。インテグリティ関数ｆの一例は、ソフトウェアワードＸの‘１’（‘０’）でのビット数である。
【００４２】
ソフトウェアワードＸそれ自体は、そのビットのいかなる不適当な修正も検出できないので、保護されていないと考えられる。反対に、マシンワードＺ＝Ｘ｜Ｙで、ソフトウェアワードＸは、そのいかなる修正もインテグリティデータＹとワードＸとの間の不一致を含むので、保護される。
【００４３】
図１に、電子部品の電子回路のための構造の一実施例を提案する。示されるハードウェア構成は、ソフトウェアワードＸおよびインテグリティデータＹを含むハードウェアワードに拡張される。
【００４４】
取られたハードウェア経路、または格納に関係なく、インテグリティデータ項目は、ソフトウェアワードと永久に関連される。
【００４５】
アドレスおよびデータバスは、１Ｘ＋１Ｙサイズであり、メモリ内のワードは、１Ｘ＋１Ｙサイズのメモリセルを使用し、中央処理装置（ＣＰＵ）は、レジスタおよび１Ｘ＋１Ｙサイズのデータ項目を使用する。
【００４６】
不揮発性メモリ（ＮＶＭ）タイプ、またはロム（Ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ、ＲＯＭ）メモリタイプの格納メモリ１０、１１は、１Ｘ＋１Ｙ個のビットのマシンワードの形態で、データおよびコンピュータプログラムを格納する。伝送されたデータ項目がインテグリティ検査ユニット１３によって検証された後に、このようなデータの項目は外部コンピュータステーション１２から記録される。検査ユニット１３は、ステーション１２によって伝送されたデータがいかなる不一致も含まないということを検証する。図２に、検査ユニット１３の一実施例を提案する。検査ユニット１３は、入力として、ソフトウェアワードＸ、およびインテグリティデータ項目Ｙで構成されたマシンワードを受信する。検査ユニットは、インテグリティ関数ｆを認識している。Ｘおよびｆに基づいて、検査ユニットは演繹的に予想されるＹの値を計算する。その値と、入力として受信されたＹの値とが比較２２される。その後、検査ユニット１３は、比較結果がプラスであると、出力としてデータＸおよびＹを伝送する。データＸおよびＹは、相互に矛盾がないと考えられる。
【００４７】
図１に戻って、メモリ１１に格納されたプログラムの実行時、インタープリタ型言語の場合、命令、例えばバイトコード、が伝送されて、命令レジスタ１４に格納される。また、伝送および格納は、マシンワードＸ｜Ｙに関する作用により実行される。その後、命令デコーダ１５は、レジスタ１４に含まれるマシンワードＺに基づいて命令を解釈し、検査ユニット１３がデータのインテグリティを再び検証した後に、命令ラインに情報を伝送する。
【００４８】
更に、マシンワードＸ｜Ｙの形態のデータ項目が１Ｘ＋１Ｙ個のビットのデータ／アドレスバス１６上で伝送される。したがって、データバス１６は、インテグリティ情報により保護されるデータを搬送する。それぞれの機能的ハードウェア構造（例えば、ＲＯＭ領域、バス、およびＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を区分するために、インテグリティ検査ユニット１３は、互いに異なる２つの機能的ハードウェア構造間のそれぞれの連結に使用することができる。これは、メモリ領域１０とデータバス１６との間で適用される。データのインテグリティは、バスで伝送前、および／またはバスからの受信時に検査される。
【００４９】
更に、１Ｘ＋１Ｙサイズのマシンワードと共に作用する、周辺機器１７およびＲＡＭタイプの読み取り／書き込みメモリ１８は、前記構造の一部であり、アクセス制御バス１９および検査ユニット１３を介してデータバス１６と対話する。
【００５０】
更に、汎用レジスタ２０が使用可能であり、それらは、例えば中央処理装置（ＣＰＵ）によって１Ｘ＋１Ｙサイズのセルで送信されたデータを格納する。このレジスタ２０は、算術論理演算ユニット（ＡＬＵ）２１にデータ項目Ｘ｜Ｙを入れる。このＡＬＵ２１は、ハードウェアワードＸ｜Ｙに作用し、また１Ｘ＋１Ｙ個のビットのデータの項目を送るために、論理および／または算術演算を行う。
【００５１】
図３は、インテグリティデータに対してトランスペアレントなＡＬＵ２１の一実施例を示す。用語‘トランスペアレント’は、ＡＬＵ２１がインテグリティデータＹを、インテグリティデータとしてのそれらの状態と関係なく、それらの権利内にあるデータ項目であると考える事実を表現する。算術論理演算ユニットは、保護されていないソフトウェアワードＸ上のインテグリティデータＹを再計算しないために、Ｘ｜Ｙに関する演算を全体または一部において処理する能力がある。
【００５２】
ＡＬＵ２１は、入力として２つのハードウェアワード、Ｚ１＝Ｘ１｜Ｙ１、Ｚ２＝Ｘ２｜Ｙ２、を受信し、出力として１つのハードウェアワード、Ｚ＝Ｘ｜Ｙを送信する。ＡＬＵ２１は、自己の関数にしたがってソフトウェアワードＸ１およびＸ２に関して演算ＯＰを行い、結果ワードＸ＝Ｘ１  ＯＰ  Ｘ２を送信する。インテグリティデータ項目は、演算ＯＰ’：Ｙ＝Ｙ１  ＯＰ’  Ｙ２によって同等に処理される。
【００５３】
ＡＬＵ２１から出力されたマシンワードＺのインテグリティを保障するためには、以下の式が満足される必要があるという点に留意すべきである。
ｆ（Ｘ１  ＯＰ  Ｘ２）＝Ｙ１  ＯＰ’  Ｙ２＝ｆ（Ｘ１）  ＯＰ’  ｆ（Ｘ２）
【００５４】
各デジタルデータ項目Ｘは、インテグリティデータ項目Ｙに関連があり、‘冗長検査データ項目’と呼ばれる。更に、デジタルデータ項目Ｘについて行われる演算のそれぞれは、デジタルデータ項目Ｘに関するインテグリティ関数または演算と関連付けられる。
【００５５】
インテグリティの検証と、演算終了時の結果データの獲得とは、並列に、および／または連続的に起こるので、いかなる演算レベルで行われる故障利用攻撃も、演算終了時に獲得した結果データと、それに対応する並列に獲得されたインテグリティデータとの間に不一致を発生させる。
【００５６】
このように、所定の演算終了時に獲得したデータ間の単なる検証と、問題の演算が実行終了した時のインテグリティ検証とは、演算全体にわたっての、および／または演算後の故障利用攻撃の存在の検出に充分である。
【００５７】
以下の段落において、周知のアルゴリズム、即ち、モンゴメリーモジュラ掛け算アルゴリズム（Ｍｏｎｔｇｏｍｅｒｙ  Ｍｏｄｕｌａｒ  Ｍｕｌｔｉｐｌｉｃａｔｉｏｎ  Ａｌｇｏｒｉｔｈｍ）は、演算ＯＰの一例である。
【００５８】
ハードウェア実装の演算は例えば約１０２４ビットのサイズの整数のような大きい整数を扱うことの難しさに基づくということを考えなければならない。
モンゴメリーモジュラ掛け算の本質によって、モンゴメリーモジュラ掛け算の終了時に獲得したデータのインテグリティは効率的に検証できる。
【００５９】
２つの整数ｘとｙの掛け算ｍｏｄ  ｍのための、当業者に公知のモンゴメリーモジュラ掛け算では、入力として以下のデータの３つの項目（またはオペランド）を有する。関数‘ｍｏｄ．  ｍ’は、ある数字を数字ｍで割り算した時の余りである。
【００６０】
・ｍ＝（ｍｎ−１．．．ｍ１ｍ０）ｂ）  ｎは、例えば３２ビットワードの、数ｍ、ｘ、およびｙの表現におけるワードの数である。
・ｘ＝（ｘｎ−１．．．ｘ１ｘ０）ｂ）
・ｙ＝（ｙｎ−１．．．ｙ１ｙ０）ｂ）
・（０≦ｘ、ｙ＜ｍ）
・Ｒ＝ｂｎ  または
・ＨＣＤ（ｍ、ｂ）＝１  ＨＣＤは、最大公約数である。および
・Ｍ＝−ｍ−１  ｍｏｄ  ｂ  ｂは、ワードのベースである。ｂに対する既知の基準における選択は、４バイトでワードサイズとして２３２、および１０２４ビットの数ｍ、ｘ、およびｙに関するｎ＝３２である。ｎは、ＣＰＵが処理を行うビットの数を表す。
【００６１】
次に、モンゴメリーモジュラアルゴリズムは以下のように進行する。
１．Ａ←０（表記Ａ＝（ａｎａｎ−１．．．ａ１ａ０）ｂ  当業者にとって良く知られている記号‘←’は、計算値の割り当て、または本記号の右または左のデータ項目の割り当てに対応する。
２．０ないし（ｎ−１）の範囲のｉについて、次を実行：
（ａ）ｕｉ←（ａ０＋ｘｉｙ０）Ｍ  ｍｏｄ  ｂ
（ｂ）Ａ←（Ａ＋ｘｉｙ＋ｕｉｍ）／ｂ
３．Ａ＝ｍである場合、Ａ←Ａ−ｍ  および
４．Ａのリターン
モンゴメリーモジュラ掛け算アルゴリズムの出力時、以下の結果が得られる。
Ａ＝ｘｙＲ−１  ｍｏｄ  ｍ
【００６２】
本発明で、モンゴメリーモジュラ掛け算を遂行するデータ項目は、データ項目ｘに適用される以下のインテグリティ関数を並列に行う。ｆ（ｘ）＝ｘ  ｍｏｄ  （ｂ−１）このような関数は、更に、ｘ  ｍｏｄｕｌｏ  （ｂ−１）の表現、例えば、
【００６３】
【数１】
2009502070.tif 000003
・ここで、ｘ＝（ｘｋ．．．ｘ１ｘ０）ｂ）
におけるあらゆるワードの和を表す。
入力ｍ、ｘ、およびｙは、並列にインテグリティ関数を受ける。
・ｍ’＝ｍ  ｍｏｄ  （ｂ−１）
・ｘ’＝ｘ  ｍｏｄ  （ｂ−１）  および
・ｙ’＝ｙ  ｍｏｄ  （ｂ−１）
【００６４】
このようなインテグリティ関数は、同形のｍｏｄｕｌｏ  （ｂ−１）、例えばｆ（ｘ＋ｙ）＝ｆ（ｘ＝＋ｆ（ｙ）  ｍｏｄ  （ｂ−１）  およびｆ（ｘ＊ｙ）＝ｆ（ｘ）＊ｆ（ｙ）  ｍｏｄ  （ｂ−１）である。
【００６５】
データワードが修正されると、修正が検出される。複数のワードが修正されると、修正は、確率
１−（１／（ｂ−１））
で検出される。
【００６６】
データワードが合計されるので、最新の修正は、すでに考慮された全ての修正の逆元になる（１／（ｂ−１））の確率を表す。
【００６７】
インテグリティ検証は、１回以上の故障利用攻撃中は除外してわずか１回の場合でだけ失敗する。並列に得られた２つの結果、即ち、モンゴメリーモジュラ掛け算からのデータと、インテグリティ関数からのデータとは、例えば全てのバイトが値‘０ｘ００’に再設定される場合、初期値に再初期化される。しかし、その後、０データ項目は、特に攻撃者が見る時にはいかなる重要情報も搬送しない。
【００６８】
本発明によって修正されたモンゴメリーモジュラアルゴリズムは、下記のように進行する。
１．Ａ←０（表記Ａ＝（ａｎａｎ−１．．．ａ１ａ０）ｂ）
２．Ａ’←０（表記Ａ’＝（ａ’０）ｂ．）
３．０ないし（ｎ−１）の範囲のｉについて、次を実行：
（ａ）ｕｉ←（ａ０＋ｘｉｙ０）Ｍ  ｍｏｄ  ｂ
（ｂ）Ａ←（Ａ＋ｘｉｙ＋ｕｉｍ）／ｂ
（ｃ）Ａ’←Ａ＋ｕｉｍ’）  ｍｏｄ  （ｂ−１）
４．Ａ’←（Ａ’＋ｘ’ｙ’  ｍｏｄ  （ｂ−１）
５．Ａ＝ｍである場合、Ａ←Ａ−ｍ    Ａ’←（Ａ’−ｍ’  ｍｏｄ  （ｂ−１）  
６．ＡとＡ’のリターン
【００６９】
同時に実行される、モンゴメリーモジュラ掛け算およびインテグリティ関数の終了時、それぞれ以下の結果が得られる。
Ａ＝ｘｙＲ−１  ｍｏｄ  ｍとＡ’
【００７０】
次にｆ（Ａ）がＡ’に対応するインテグリティ関数の検証は、まだ可能である。したがって、ｆ（Ａ）とＡ’との対応が検証される場合、故障利用攻撃が発生中であったり、発生していたということはない。反対に、ｆ（Ａ）とＡ’との対応が検証されない場合、１つ以上の故障利用攻撃が電子回路に発生中であったり、発生していた。
【００７１】
一般的に、ハードウェアワードＺの、インテグリティデータ項目Ｙと関連されたデジタルデータ項目Ｘの処理は、メモリから読み取り、および／またはメモリに書き込み、プロセッサユニットでの操作、電子回路資源特有のバスを介したハードウェアワードＺの転送になり得るという点に留意すべきである。
【００７２】
現在の表記と、一般的な方式で使用された表記との間の相関関係は以下の通りである。
Ｘ１＝ｘ；Ｘ２＝ｙ  まだ導入されていない、他のオペランドＸ３＝ｍ；ＯＰは、モンゴメリーモジュラ掛け算  Ｙ１＝ｘ’；Ｙ２＝ｙ’  およびＹ３＝ｍ’；Ａ＝Ｘ、およびＡ’＝Ｙ
【００７３】
特にデータに対する少なくとも１回のモンゴメリーモジュラ掛け算を伴なう、図示しないＲＳＡ（Ｒｉｖｅｓｔ−Ｓｈａｍｉｒ−Ａｄｌｅｍａｎ）暗号計算におけるいかなる計算も、いつでも、モンゴメリーモジュラ掛け算を行う間および／またはその後にも、インテグリティ機能Ｙ＝ｆ（ｘ）の検証の対象となれる。ここでＸは、モンゴメリーモジュラ掛け算の対象である。
【００７４】
このようなＲＳＡ計算は、例えば、ＲＳＡ暗号計算のハードウェア実装を加速する目的で実行される。
【００７５】
演算ＯＰがＯＰ’、例えば加算と同じく選択される。インテグリティ関数ｆは自由に選択されない。ｆ（Ｘ１  ＯＰ  Ｘ２）＝ｆ（Ｘ１）  ＯＰ  ｆ（Ｘ２）を条件にする。
【００７６】
例えば、ＯＰが加算演算である場合、ｆ（Ｘ）＝｜Ｘ／８｜を選択できる。Ｘが８ビットの値である場合、Ｙは５ビットの値（したがって、Ｚは１３ビット）。一般的に、関数ｆの例としてｆ（Ｘ）＝Ｘ／１Ｘが選択可能である。１Ｘは、ワードＸのビット（長さ）の数である。
【００７７】
このような実施形態において、ソフトウェアワードＸｉとインテグリティデータＹｉに関する演算は並列に行われる。したがって、最後の回路は、データ項目がインテグリティ情報によって保護されていないバージョンにおけるのと同程度に高速である。反対に、ＡＬＵ２１（あらゆるハードウェア要素のような）のハードウェア実装は、同程度の性能のために、より多い量のシリコン（ＸおよびＹ間の比率に比例して）を必要とする。
【００７８】
図４に、ＡＬＵ２１の他の実施例を提案する。入力時のデータＺ１およびＺ２のインテグリティが、２つの検査ユニット１３によって検証される。ソフトウェアワードＸ１およびＸ２だけが、演算ＯＰによるＸの計算に使用される。その結果のソフトウェアワードＸに関数ｆを適用することで、インテグリティデータ項目Ｙが計算される。その後、ＡＬＵ２１は完全なハードウェアワードＸ｜Ｙを送信する。一群のハードウェアゲートは、インテグリティ情報を計算するために、ソフトウェアワードに関数ｆを適用することを可能にする。
【００７９】
出力時のインテグリティデータ項目が、演算からのソフトウェアワードＸに基づいて再計算されるので、本実施例は安全性が低い。したがって、演算ＯＰ中にエラーを検出できる手段はない。
【００８０】
図１には図示していないが、ＣＰＵはＡＬＵ  ２１と同じ原理で動作する。ＣＰＵによって管理されるレジスタ、およびＣＰＵによって送受信されるデータ項目は、１Ｘ＋１Ｙサイズのマシンワードに適している。演算および命令は、ソフトウェアデータに対する強い保護を保障するためにＣＰＵによってトランスペアレントに実行されるか、処理終了時にインテグリティデータを再計算することで実行される。
【図面の簡単な説明】
【００８１】
【図１】本発明のハードウェア構造の一実施例の全体図である。
【図２】図１の構造で実現される検査ユニットを示す。
【図３】インテグリティ関数においてトランスペアレントな（ｔｒａｎｓｐａｒｅｎｔ）算術論理演算ユニット（ＡＬＵ）の一実施例を示す。
【図４】インテグリティ情報項目が再計算された算術論理演算ユニット（ＡＬＵ）の、安全性の低い実施例を示す。
【図１】
2009502070.tif 000004
【図２】
2009502070.tif 000005
【図３】
2009502070.tif 000006
【図４】
2009502070.tif 000007
【国際調査報告】
2009502070.tif 000008
2009502070.tif 000009
2009502070.tif 000010
2009502070.tif 000011
2009502070.tif 000012
2009502070.tif 000013