(57)【特許請求の範囲】
【請求項１】
入力メッセージ（Ｍ）についての鍵（Ｋ）依存暗号化関数（ｆ）、（ｆＫ（Ｍ））を計算する暗号化デバイスであって、前記暗号化デバイスが、
前記暗号化デバイスが前記鍵（Ｋ）依存暗号化関数を計算するために作用する複数の変数（ｗ）を記憶するデータストアであって、前記変数（ｗ）は、複数のシェア（ｗｊ）に分散されて、前記データストアにおいて複数の符号化済みシェア（ｘｊ）として表され、前記符号化済みシェアは前記シェア（ｗｊ）とステート（ｓｊ）との符号化したもの（ｘｊ＝Ｅｎｃｊ（ｗｊ，ｓｊ））であり、同一の前記変数（ｗ）に対応する複数のステート（ｓｊ）が、前記入力メッセージ（Ｍ）から前記複数のステートへの単射写像（Σ）が存在するような（Σ（Ｍ）＝（ｓ０，．．．，ｓｎ−１））、前記入力メッセージ（Ｍ）との関係を有する、データストアと、
複数のルックアップテーブルを記憶するテーブルストアであって、前記ルックアップテーブルが１つ又は複数の変数の１つ又は複数の符号化済みシェアを入力とし、前記複数のルックアップテーブルが前記鍵（Ｋ）依存暗号化関数を実装するテーブルネットワークを共に形成し、前記テーブルネットワークが前記符号化済み変数（ｗ）の前記複数のシェア（ｗｊ）に演算を実施し、前記入力メッセージ（Ｍ）から前記複数のステートへの単射写像を維持する前記複数のステート（ｓｊ）に冗長な演算を同時に実施する、テーブルストアと、
前記データストアに表された前記変数に前記複数のルックアップテーブルを適用することによって、前記入力メッセージに前記鍵（Ｋ）依存暗号化関数を適用する制御ユニットと
を備える、暗号化デバイス。
【請求項２】
同一の前記変数（ｗ）に対応する前記複数のステート（ｓｊ）の合計ビットサイズが、少なくとも前記入力メッセージ（Ｍ）のビットサイズと同一の大きさである、請求項１に記載の暗号化デバイス。
【請求項３】
前記符号化が全単射である、請求項１又は２に記載の暗号化デバイス。
【請求項４】
結合関数（ｄ（ｗ０，．．．，ｗｎ−１）＝ｗ）が前記シェア（ｗｊ）を前記変数（ｗ）に写像し、前記結合関数は、任意の単一のシェア（ｗｋ）から前記変数（ｗ）への写像であって、他のシェア（ｗ０，．．．，ｗｋ−１，ｗｋ＋１，．．．，ｗｎ−１）の値を固定することによって得られる当該写像が全単射であるという特性を有する、請求項１乃至３のいずれか一項に記載の暗号化デバイス。
【請求項５】
前記複数のシェア（ｗｊ）の総和が対応する変数に等しい
【数５１】
0006517436.tif 000052
請求項１乃至４のいずれか一項に記載の暗号化デバイス。
【請求項６】
前記テーブルストアは、第１の複数のシェア（ｗｊ）に分散され、前記データストアに第１の複数の符号化済みシェア（ｘｊ）として表される第１の変数（ｗ）と、第２の複数のシェア（ｖｊ）に分散され、前記データストアに第２の複数の符号化済みシェア（ｙｊ）として表される第２の変数（ｖ）とを乗算するための乗算テーブルネットワークを記憶し、前記乗算テーブルネットワークが前記第１及び第２の複数の符号化済みシェア（ｘｊ、ｙｊ）に作用して、前記第１及び第２の変数の積を表す第３の複数の符号化済みシェア（ｚｊ）を取得し、
前記乗算テーブルネットワークが、前記第１の複数のシェアのうちの第１のシェア（ｗ１）と前記第２の複数のシェアのうちの第２のシェア（ｖ２）との積を計算するための１つ又は複数の外積テーブルサブネットワークを有し、前記外積テーブルサブネットワークが、対応する前記符号化済みシェアからの前記第１のシェア及び前記第２のシェアの積と、前記入力メッセージ（Ｍ）からのランダム化関数（Ｒ１，２）との和を計算する、
請求項１乃至５のいずれか一項に記載の暗号化デバイス。
【請求項７】
前記テーブルストアが、第１の符号化済み変数（ｗ１）及び第２の符号化済み変数（ｗ２）を入力とし、第３の符号化済み変数（ｗ３）を出力として生成する演算を実施するためのテーブルネットワークを記憶し、前記テーブルネットワークが、前記第３の符号化済み変数
【数５２】
0006517436.tif 000053
に符号化された前記複数のステートが、前記第１の符号化済み変数
【数５３】
0006517436.tif 000054
及び前記第２の符号化済み変数
【数５４】
0006517436.tif 000055
のうちの１つに符号化されたステートのみに依存するように構成される、
請求項１乃至６のいずれか一項に記載の暗号化デバイス。
【請求項８】
入力メッセージ（Ｍ）を符号化するための符号化デバイスであって、前記符号化デバイスは、
前記入力メッセージ（Ｍ）を受信するための受信ユニットであって、前記入力メッセージが複数の入力パートを有する（Ｍ＝（ｍ０，ｍ１，．．．））、受信ユニットと、
前記入力メッセージ（Ｍ）の各パート（ｍｉ）について、
前記入力メッセージ（Ｍ）の前記パート（ｍｉ）を複数のシェアに分散させることを、複数の分散関数
【数５５】
0006517436.tif 000056
を前記入力メッセージに適用して前記複数のシェア
【数５６】
0006517436.tif 000057
を取得することによって行い、前記分散関数
【数５７】
0006517436.tif 000058
に適用された結合関数が、前記入力メッセージ（Ｍ）の前記パート（ｍｉ）に等しく、
【数５８】
0006517436.tif 000059
前記入力メッセージ（Ｍ）からの単射写像（Σｉ）を適用して複数のステート
【数５９】
0006517436.tif 000060
を取得し、前記複数のシェア及び前記複数のステートの数が同一であり、
前記複数のシェアの各シェアを前記複数のステートの対応するステートと共に符号化して、前記パート（ｍｉ）を表す複数の符号化済みシェア
【数６０】
0006517436.tif 000061
を取得する
符号化ユニットと
を備える、符号化デバイス。
【請求項９】
前記単射写像（Σｉ）が複数のステート関数
【数６１】
0006517436.tif 000062
を有し、前記複数のステート
【数６２】
0006517436.tif 000063
を取得することが、前記複数のステート関数
【数６３】
0006517436.tif 000064
をそれぞれの複数の入力パートに適用することを有し、
【数６４】
0006517436.tif 000065
前記複数のステート関数が全単射である、
請求項８に記載の符号化デバイス。
【請求項１０】
請求項８又は９に記載の符号化デバイスを備える、請求項１に記載の暗号化デバイス。
【請求項１１】
入力メッセージ（Ｍ）についての鍵（Ｋ）依存暗号化関数（ｆ）、（ｆＫ（Ｍ））を計算する暗号化方法であって、前記暗号化方法が、
暗号化デバイスが前記鍵（Ｋ）依存暗号化関数を計算するために作用する複数の変数（ｗ）を記憶するステップであって、前記変数（ｗ）は、複数のシェア（ｗｊ）に分散されて、データストアにおいて複数の符号化済みシェア（ｘｊ）として表され、前記符号化済みシェアはシェア（ｗｊ）とステート（ｓｊ）との符号化したもの（ｘｊ＝Ｅｎｃｊ（ｗｊ，ｓｊ））であり、同一の前記変数（ｗ）に対応する複数のステート（ｓｊ）が、前記入力メッセージ（Ｍ）から前記複数のステートへの単射写像（Σ）が存在するような（Σ（Ｍ）＝（ｓ０，．．．，ｓｎ−１））、前記入力メッセージ（Ｍ）との関係を有する、記憶するステップと、
複数のルックアップテーブルを記憶するステップであって、前記ルックアップテーブルが１つ又は複数の変数の１つ又は複数の符号化済みシェアを入力とし、前記複数のルックアップテーブルが前記鍵（Ｋ）依存暗号化関数を実装するテーブルネットワークを共に形成し、前記ルックアップテーブルが符号化済み変数（ｗ）の前記複数のシェア（ｗｊ）に演算を実施し、前記入力メッセージ（Ｍ）から前記複数のステートへの単射写像を維持する前記複数のステート（ｓｊ）に冗長な演算を同時に実施する、記憶するステップと、
前記データストアに表された前記変数に前記複数のルックアップテーブルを適用することによって、前記入力メッセージに前記鍵（Ｋ）依存暗号化関数を適用するステップと
を有する、暗号化方法。
【請求項１２】
入力メッセージ（Ｍ）を符号化するための符号化方法であって、前記符号化方法は、
符号化デバイスが前記入力メッセージ（Ｍ）を受信するステップであって、前記入力メッセージが複数の入力パートを有する（Ｍ＝（ｍ０，ｍ１，．．．））、前記受信するステップと、
前記符号化デバイスが前記入力メッセージ（Ｍ）の各パート（ｍｉ）について、
前記入力メッセージ（Ｍ）の前記パート（ｍｉ）を複数のシェアに分散させることを、複数の分散関数
【数６５】
0006517436.tif 000066
を前記入力メッセージに適用して前記複数のシェア
【数６６】
0006517436.tif 000067
を取得することによって行う、分散させるステップであって、前記分散関数
【数６７】
0006517436.tif 000068
に適用された結合関数が、前記入力メッセージ（Ｍ）の前記パート（ｍｉ）に等しい、
【数６８】
0006517436.tif 000069
前記分散させるステップと、
前記符号化デバイスが前記入力メッセージ（Ｍ）からの単射写像（Σｉ）を適用して複数のステート
【数６９】
0006517436.tif 000070
を取得するステップであって、前記複数のシェア及び前記複数のステートの数が同一である、前記取得するステップと、
前記符号化デバイスが前記複数のシェアの各シェアを前記複数のステートの対応するステートと共に符号化して、前記パート（ｍｉ）を表す複数の符号化済みシェア
【数７０】
0006517436.tif 000071
を取得するステップと
を有する、符号化方法。
【請求項１３】
コンピュータ上で実行された場合に当該コンピュータに請求項１１に記載の方法を実施させる、コンピュータプログラム。
【請求項１４】
コンピュータ上で実行された場合に当該コンピュータに請求項１２に記載の方法を実施させる、コンピュータプログラム。
【請求項１５】
請求項１３に記載のコンピュータプログラムを備える、コンピュータ可読媒体。
【請求項１６】
請求項１４に記載のコンピュータプログラムを備える、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化デバイス、符号化デバイス、暗号化方法、符号化方法、コンピュータプログラム、及びコンピュータ可読媒体に関する。
【背景技術】
【０００２】
暗号化デバイスを構築する場合には、堅固な暗号プリミティブの選択だけでなく、サイドチャネルの防止についても気にかける必要がある。サイドチャネルを通じて、攻撃者は通常の入出力動作を超える暗号計算に関する情報を取得する。サイドチャネル攻撃は、暗号アルゴリズムの解析及び／又は総当たりだけではなく、暗号システムの物理的実装から得られる情報に基づく攻撃である。
【０００３】
特に強力なサイドチャネルは、いわゆるホワイトボックス攻撃モデルである。ホワイトボックス攻撃モデルでは、攻撃者はアルゴリズムの内部に実行中に完全にアクセスすることができる。具体的には、攻撃者は変数を監視することができ、実行中にデータを修正しさえする。秘密鍵などの秘密情報を保護することは、ホワイトボックスモデルでは特に困難である。
【０００４】
Ｇｏｕｂｉｎ及びＰａｔａｒｉｎによる論文「ＤＥＳ  ａｎｄ  ｔｈｅ  Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ，  Ｔｈｅ  “Ｄｕｐｌｉｃａｔｉｏｎ”  ｍｅｔｈｏｄ」では、いくつかのサイドチャネル攻撃を防ぐ手法について提案がなされている。この論文では、変数ｖは、ｖ＝Σｖｉとなるようなｋ個の変数ｖ１，．．．，ｖｋによって表される。この論文で検討されるサイドチャネルはマイクロコントローラの電力消費量である。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
発明者はこの解決策がホワイトボックスモデルでは十分ではなく破られ得ることを見出した。したがって、ホワイトボックス攻撃モデルの下で暗号化関数の実装の耐性を向上させることが課題である。
【課題を解決するための手段】
【０００６】
入力メッセージについての鍵依存暗号化関数を計算する暗号化デバイスが提供される。暗号化デバイスは、
−  暗号化デバイスが鍵依存暗号化関数を計算するために作用する複数の変数を記憶するように構成されたデータストアであって、変数が複数のシェアに分散され、データストアにおいて複数の符号化済みシェアとして表され、符号化済みシェアがシェアとステートとの符号化であり、同一の変数に対応する複数のステートが、入力メッセージから複数のステートへの単射写像が存在するような、入力メッセージとの関係を有する、データストアと、
−  複数のルックアップテーブルを記憶するテーブルストアであって、ルックアップテーブルが１つ又は複数の変数の１つ又は複数の符号化済みシェアを入力とし、複数のルックアップテーブルが鍵依存暗号化関数を実装するテーブルネットワークを共に形成する、テーブルストアと、
−  データストアに表された変数に複数のルックアップテーブルを適用することによって、入力メッセージに鍵依存暗号化関数を適用するように構成された制御ユニットと
を備える。
【０００７】
本明細書においてより完全に説明されるように、暗号化関数の実装に対する可能な攻撃は衝突攻撃である。衝突攻撃では、攻撃者は、２つの異なる入力メッセージであって、その両方について内部変数のいくつかが同一の値を有するようなものを発見しようとする。そのような発生は鍵に関する情報を与える。
【０００８】
符号化済みシェアは、変数のシェアと複数のステートとの両方を表す。入力メッセージから複数のステートへの単射写像が存在するので、２つの異なる入力メッセージであって、対応する２組の複数のステートが同一となるようなものは存在し得ない。ステートは符号化済みシェアの一部であるので、２つの異なる入力メッセージであって、対応する符号化済みシェアが同一となるようなものは存在し得ない。したがって、符号化済みシェアに対する衝突攻撃は回避される。結果として得られる暗号化デバイスは、ホワイトボックスモデルの下での攻撃に対してより弾力性がある。
【０００９】
また、暗号化デバイスは差分電力解析に対する保護メカニズムを提供する。ランダムな符号化は異なる発生値間の関係についての統計的解析の成功を不能にするが、依然として衝突に関する統計の成功を可能にする。後者が防止されるので、差分電力解析型の攻撃によって使用される統計的解析は妨害される。
【００１０】
一実施形態では、
−  テーブルストアが、第１の複数のシェアに分散され、データストアに第１の複数の符号化済みシェアとして表される第１の変数と、第２の複数のシェアに分散され、データストアに第２の複数の符号化済みシェアとして表される第２の変数とを乗算するための乗算テーブルネットワークを記憶し、乗算テーブルネットワークが第１及び第２の複数の符号化済みシェアに作用して、第１及び第２の変数の積を表す第３の複数の符号化済みシェアを取得し、
−  乗算テーブルネットワークが、第１の複数のシェアのうちの第１のシェアと第２の複数のシェアのうちの第２のシェアとの積を計算するための１つ又は複数の外積テーブルサブネットワークを有し、外積テーブルサブネットワークが、対応する符号化済みシェアからの第１のシェア及び第２のシェアの積と、入力メッセージからのランダム化関数との和を計算する。
【００１１】
本明細書で説明されるように、変数への計算は、符号化済みシェアへの計算に変換され得る。具体的には、符号化済みシェアとして表される２つの変数が乗算される。乗算の一実施形態では、外積、すなわち、第１の変数（たとえば、ｘｉと表される）のシェアと、第２の変数（たとえば、ｙｊと表される）のシェアとの積が必要とされる。この計算を難読化するために、ランダム性のソースが使用される。本発明者は、乱数発生器がソフトウェアで容易に識別及び回避されて、この難読化が無効になることを見出した。この問題は、入力メッセージからのランダム化関数を使用することで回避される。入力メッセージからのランダム化関数は、暗号化デバイス内で固定される。ランダム化関数は、暗号化デバイスが作成されるときに、ソフトウェア実装の場合にはソフトウェアのコンパイル時に、決定される。ランダム化関数が固定されているので、他のテーブルネットワーク内で容易に識別することはできない。同一の入力が２回使用される場合、ランダム化関数は同一の結果を生成するので、この関数はテーブルネットワークでは目立たない。
【００１２】
単射写像が存在することを保証する１つの手法は、鍵が使用される前であっても入力メッセージを符号化することである。次いで、単射写像は、変数ｗが作成される時点までの計算全体にわたって維持される。入力メッセージの符号化は、暗号化デバイスの外部のコンピュータによって行われる。たとえば、入力メッセージは、暗号化デバイスで復号されるように作成されるコンテンツを表す。入力メッセージは、複数組の符号化済みシェアの形態で暗号化デバイスによって受信される。しかしながら、たとえば、衝突攻撃を通じて鍵を公開することを保護するために、符号化は同様に暗号化デバイスにおいて行われる。
【００１３】
請求項１に記載の暗号化デバイスと共に使用するための、入力メッセージを符号化するための符号化デバイスが提供される。符号化デバイスは、
−  入力メッセージを受信するための受信ユニットであって、入力メッセージが複数の入力パートを有する、受信ユニットと、
−  入力メッセージの各パートについて、
−  入力メッセージのパートを複数のシェアに分散させることを、複数の分散関数を入力メッセージに適用して複数のシェアを取得することによって行い、分散関数に適用された結合関数が、入力メッセージのパートに等しく、
−  入力メッセージからの単射写像を適用して複数のステートを取得し、複数のシェア及び複数のステートの数が同一であり、
−  複数のシェアの各シェアを複数のステートの対応するステートと共に符号化して、パートを表す複数の符号化済みシェアを取得する
ように構成された符号化ユニットと
を備える。
【００１４】
符号化デバイスは、必須ではないが、暗号化デバイスに含まれる。
【００１５】
暗号化デバイス及び符号化デバイスは電子デバイスである。たとえば、それらはモバイル電子デバイス、たとえば、電話又はタブレットである。それらは、セットトップボックス、コンピュータ、メディアプレーヤー、テレビなどである。
【００１６】
本明細書に記載の暗号処理及び符号化の方法は、広範囲の実用的なアプリケーションにおいて適用される。そのような実用的なアプリケーションは、デジタルコンテンツ管理、セキュアバンキング、アクセス制御、電子ストレージの保護などを含む。
【００１７】
本発明による方法は、コンピュータ上でコンピュータ実施される方法として、若しくは専用ハードウェアで、又はその両方の組合せで実装される。本発明による方法の実行可能コードは、コンピュータプログラム製品に記憶される。コンピュータプログラム製品の例は、メモリデバイス、光記憶デバイス、集積回路、サーバ、オンラインソフトウェアなどを含む。好ましくは、コンピュータプログラム製品は、前記プログラム製品がコンピュータ上で実行された場合に本発明による方法を実施するためのコンピュータ可読媒体に記憶された非一時的プログラムコード手段を含む。
【００１８】
好ましい一実施形態では、コンピュータプログラムは、コンピュータプログラムがコンピュータ上で実行された場合に本発明による方法の全てのステップを実施するように適合されるコンピュータプログラムコード手段を含む。好ましくは、コンピュータプログラムはコンピュータ可読媒体上に具現化される。
【００１９】
本発明の別の態様は、コンピュータプログラムをダウンロード可能にする方法を提供する。この態様はコンピュータプログラムが、たとえば、ＡｐｐｌｅのＡｐｐ  Ｓｔｏｒｅ、ＧｏｏｇｌｅのＰｌａｙ  Ｓｔｏｒｅ、又はＭｉｃｒｏｓｏｆｔのＷｉｎｄｏｗｓ  Ｓｔｏｒｅにアップロードされた場合、及びコンピュータプログラムが、そのようなストアからダウンロード可能である場合に使用される。
【００２０】
本発明のさらなる詳細、態様、及び実施形態が、単なる例として図面を参照して説明される。図中の要素は簡潔かつ明瞭にするように示されており、必ずしも縮尺通りに描かれていない。図中では、説明済みの要素に対応する要素は同一の参照符号を有し得る。
【図面の簡単な説明】
【００２１】
【図１】変数を符号化する一例を概略的に示す図である。
【図２】暗号化デバイスの一実施形態の一例を概略的に示す図である。
【図３】符号化デバイスの一実施形態の一例を概略的に示す図である。
【図４ａ】テーブルネットワークの一実施形態の一例を概略的に示す図である。
【図４ｂ】テーブルネットワークの一実施形態の一例を概略的に示す図である。
【図５ａ】暗号化方法のフローチャートを概略的に示す図である。
【図５ｂ】符号化方法のフローチャートを概略的に示す図である。
【図６】ＤＥＳブロック暗号のフローチャートを概略的に示す図である。
【図７ａ】一実施形態によるコンピュータプログラムを含む書き込み可能部分を有するコンピュータ可読媒体を概略的に示す図である。
【図７ｂ】一実施形態によるプロセッサシステムの表現を概略的に示す図である。
【発明を実施するための形態】
【００２２】
本発明は多くの異なる形式の実施形態が可能であるが、図面に示され、本明細書で詳細に説明されるのは１つ又は複数の特定の実施形態であって、本開示が本発明の原理の例示と見なされるべきであり、本発明を図示及び説明される特定の実施形態に限定するものではないという了解の下でのものである。
【００２３】
以下では、理解のために、動作中の実施形態の要素が説明される。しかしながら、それぞれの要素が、それらによって実施されるように記載された機能を実施するように構成されることは明らかであろう。
【００２４】
さらに、本発明は実施形態に限定されず、本発明は上述の、又は相異なる従属請求項に記載された各々の新規の特徴又は特徴の組合せの中にある。
【００２５】
図２は暗号化デバイス２００の一実施形態の一例を概略的に示す。暗号化デバイス２００の態様の可能な実施形態が図１〜図４を参照して説明される。
【００２６】
暗号化デバイス２００は、入力メッセージＭについて鍵Ｋ依存暗号化関数を計算するように構成される。暗号化関数はｆＫと表される。計算の結果は出力メッセージｆＫ（Ｍ）である。鍵は関数の明示的な入力である必要はなく、たとえば部分評価を使用して内部に埋め込まれることに留意されたい。
【００２７】
鍵依存暗号化関数はいわゆる衝突攻撃に対して脆弱である。そのような攻撃では、攻撃者は、暗号化関数ｆの計算中のある時点でいくつかの内部鍵依存変数ｗが同一の値を有する２つの異なる入力メッセージＭ及びＭ’を発見することを試みる。
【００２８】
入力メッセージ及び鍵の両方に依存する内部変数ｗを考える。入力メッセージ、鍵及び変数の間の関係をｗ＝ｇＫ（Ｍ）と表すことにする。攻撃者がｇＫ（Ｍ）＝ｇＫ（Ｍ’）となる２つのメッセージＭ及びＭ’を発見したと仮定する。この情報は、たとえば相互情報量解析に基づく相関攻撃を使用して不正利用される。具体的には、攻撃者はこのとき式ｇＫ（Ｍ）＝ｇＫ（Ｍ’）を有しており、この式を満たさないいかなるＫも鍵ではあり得ない。さらに、鍵Ｋのみが未知であるので、Ｋについて解くことは直接、秘密鍵に関する情報を提供する。この攻撃をさらに悪化させるように、多くのブロック暗号は、秘密鍵Ｋの比較的少数のビットに依存する初期のラウンド中に特に変数を有する。
【００２９】
異なる入力メッセージに対して同一の値を有する内部変数は、サイドチャネルを使用して明らかにされる。たとえば、計算が実行されるハードウェアを探査することによる。暗号化機能がソフトウェアで実行される場合、衝突攻撃は特に強力であり、その理由は、攻撃者はいくつかの内部変数が同一の値を有するか否かをより簡単に検証するためである。攻撃者は、たとえば、スマートフォン又はデスクトップコンピュータなどのコンピューティングデバイス上で動作するソフトウェアに対して完全な制御を取得することができる。
【００３０】
鍵依存暗号化関数は、たとえば、入力メッセージＭを暗号化又は復号するためのブロック暗号である。他の例は、鍵付きハッシュ、メッセージ認証機能、ストリーム暗号などを含む。ブロック暗号の一例が図６に与えられている。
【００３１】
図６は、ＦＩＰＳ４６−３（引用により本明細書に組み込まれる）からコピーされたものであるが、特にＤＥＳブロック暗号を示し、一般にはＦｅｉｓｔｅｌブロック暗号を示す。ブロック暗号は、ブロック暗号ラウンドのシーケンスが作用するブロック暗号入力６０５を受信し、ＤＥＳの場合は１６ラウンドが存在し、トリプルＤＥＳでは４８である。第１のブロック暗号ラウンドはブロック暗号入力６０５に作用し、次のラウンドのそれぞれは前のラウンドの出力に作用する。ブロック暗号ラウンドでは、ラウンド関数が前のラウンドの出力の一部に適用される。ブロック暗号入力は、ＤＥＳの場合、６４ビットのデータサイズを有する。各ブロック暗号ラウンドは、そのブロック暗号ラウンド入力を修正して、ブロック暗号ラウンド出力を生成する。全てのブロック暗号ラウンド入力及び出力は同一のデータサイズを有する。データ暗号化規格には、６４ビットブロックの鍵付きブロック符号化が記述されている。この鍵は公式には６４ビットであるが、実際にはそのうちの５６ビットのみがラウンド鍵Ｋ１からＫ１６が依存する暗号化で使用される。中間データの大部分は入力メッセージ及び鍵の両方に依存し、これが上述のように不正利用されることに留意されたい。たとえば、Ｓボックスの出力は衝突攻撃に対して脆弱である（Ｓボックスは図６に別途示されていない）。たとえば、ラウンド関数（図６では「ｆ」として図示）の出力を表す変数は、衝突攻撃に対して脆弱である。
【００３２】
図６のブロック暗号の単純な実装に対する潜在的な改良は、変数ｗを場合によりステート変数ｓと共に符号化することである。ｗを直接計算する代わりに、そのような実装は値ｘ＝Ｅｎｃ（ｗ，ｓ）に作用する。しかしながら、それ自体の符号化は衝突を防がない。符号化済み変数ｘが同一となる２つの入力メッセージＭ及びＭ’は、依然として同一の式ｇＫ（Ｍ）＝ｇＫ（Ｍ’）を生じさせる。
【００３３】
もう１つの潜在的な改良は、変数ｗを複数のシェアｗｊに、たとえば、
【数１】
0006517436.tif 000002
となるように分散させることである。しかしながら、シェアｗｊの同時衝突は、依然としてｗの衝突へとつながり、これは同一の情報量を漏洩する。衝突はより稀になるが、排除はされない。
【００３４】
衝突攻撃が成功するためには、鍵が暗号化されているか、又は実装内に単に暗黙的に存在する、たとえば、部分評価によって埋め込まれているかは関係ないことに留意されたい。衝突攻撃がデータの符号化を迂回する場合、ホワイトボックス暗号にとって特に厄介であり、その理由は、たとえば変数、鍵、及び定数などの内部データの符号化に依存することが多いためである。
【００３５】
本発明者は重要なさらなる問題があることを認識した。ソフトウェア実装では、擬似乱数発生器（ＲＮＧ：ｐｓｅｕｄｏ−ｒａｎｄｏｍ  ｎｕｍｂｅｒ  ｇｅｎｅｒａｔｏｒ）を使用してｗのシェアの一部を生成する傾向があるが、これは賢明ではない。攻撃者は、ＲＮＧの出力を非ランダム値に置き換えることによってランダム性を除去することができる。ソフトウェア実装が真性乱数発生器を呼び出す場合であっても、これは傍受される。原理的には、この攻撃はハードウェア実装でも実施され得るが、これはかなり困難になる。
【００３６】
以下の例はこの問題を示す。鍵依存暗号化関数の実装が変数ｗをｎ個のシェアに分散させるが、シェアの大部分にはランダム値を使用することを仮定する。たとえば、ｗ０からｗｎ−２がソフトウェアの乱数発生器で生成され、
【数２】
0006517436.tif 000003
であることを仮定する。情報理論的には変数ｗがｎ個のシェアに完全に分散されているように見え、すなわち、ｗに関する情報を与えるｎ個のシェアのサブセットはないが、この選択肢は依然として衝突攻撃に対して脆弱である。攻撃者は乱数源を固定して、ｗ０からｗｎ−２に定数値を与える。この変更後、ｗｎ−１の衝突は、鍵に関する情報を取得するのに十分である。ｗｎ−１のみの衝突を得ることは、全てのシェアの同時衝突よりもはるかに稀ではない。
【００３７】
乱数源はソフトウェアで、そのソフトウェアを同一の入力に対して複数回実行することによって簡単に認識されることに留意されたい。相違する実行は乱数発生器を示す。ソフトウェアプログラムのそのような解析も自動化される。
【００３８】
図１は変数ｗを符号化する手法を示し、これはその変数の衝突を排除することができる。図１は変数１１０、ｗを示し、ｗの衝突が回避されるように、暗号化デバイス２００などの暗号化デバイスでの使用のためにｗが符号化される手法を示す。
【００３９】
変数１１０、ｗは複数のシェアｗｊに分散される。ｗのビットサイズをｋと呼ぶことにする。一実施形態では、シェアｗｊのビットサイズはｗのビットサイズに等しい。異なる変数は異なるビットサイズを有し得る。たとえば、ｋは４以上である。一実施形態では、ｋ＝４、５、６、７、８又はそれ以上である。図示されているのはシェア１２１、１２２及び１２３である。
【００４０】
シェアは、
【数３】
0006517436.tif 000004
となるように選択される。一実施形態では、この総和はＸＯＲ関数を使用して総和をとるが、他の選択肢も可能である。たとえば、総和は、算術加算モジュロ２ｋを使用する。
【００４１】
より一般的には、シェア（ｗｊ）を変数（ｗ）に写像する結合関数（ｄ（ｗ０，．．．，ｗｎ−１）＝ｗ）が定義される。結合関数は上述のＸＯＲ又は算術加算である。結合関数は、任意の単一のシェア（ｗｋ）から変数（ｗ）への写像であって、他のシェア（ｗ０，．．．，ｗｋ−１，ｗｋ＋１，．．．，ｗｎ−１）の値を固定することによって得られる写像が全単射であるという特性を有する。すなわち、関数
【数４】
0006517436.tif 000005
は全単射であり、要素
【数５】
0006517436.tif 000006
は固定値を表す。この特性は、ｗに関する情報を与えるシェアのサブセットが存在しないことを保証する。多数のそのような結合関数が存在する。たとえば、ｄはシェアの任意の線形結合
【数６】
0006517436.tif 000007
であり、ここで係数αｊは奇数であり、総和は算術加算モジュロ２ｋを使用する。結合関数は多項式である。
【００４２】
図１は複数のステートｓｊをさらに示す。図示されているのはステート１３１、１３２及び１３３である。シェア１２１〜１２３の数はステート１３１〜１３３の数と同一である。ステートは変数の符号化に冗長性を導入する冗長データである。シェアのそれぞれはステートの１つと共に並べられ、符号化済みシェアｘｊ＝Ｅｎｃｊ（ｗｊ，ｓｊ）に符号化される。一実施形態では、符号化Ｅｎｃｊは異なる。たとえば、符号化Ｅｎｃｊはコンパイル時にランダムに選択される。符号化は、ｗｊに関して可逆である限り、すなわち、Ｅｎｃｊ及びｘｊが既知であればシェアｗｊが回復され得る限り、全単射であることは厳密には必須ではない。それにもかかわらず、実施形態では、符号化Ｅｎｃｊは全単射である。後者は実装においてより現実的な選択肢であり、解析を簡素化する。どの変数がどの符号化によってどの時点で符号化されるかが決定されると、テーブルは符号化を考慮に入れるように単純に適合される。
【００４３】
図１は、シェア１２１及びステート１３１が符号化１６１を介して符号化済みシェア１４１へと符号化されることを示す。また、シェア１２２及びステート１３２は符号化１６２を介して符号化済みシェア１４２へと符号化され、シェア１２３及びステート１３３は符号化１６３を介して符号化済みシェア１４３へと符号化される。変数ｗを表すために共に符号化されるステート及びシェアを、その変数に対応するものとして参照することにする。
【００４４】
複数の符号化済みシェアが結果であり、そのうち、符号化済みシェア１４１、１４２、及び１４３が図示されている。変数ｗは暗号化デバイス２００において複数の符号化済みシェアとして表される。未符号化シェア１２１〜１２３もステート１３１〜１３３も暗号化デバイス内に存在してはならない。
【００４５】
本発明者は、ステートを特別な手法で選択することによりｗの衝突が回避されることを認識した。すなわち、全ての符号化済みシェア１４１〜１４３が同一となるような２つの異なる入力メッセージＭ及びＭ’は存在しない。
【００４６】
同一の変数ｗに対応する複数のステートｓｊは、入力メッセージＭから複数のステートへのΣと表される単射写像１５２が存在するように選択される（Σ（Ｍ）＝（ｓ０，．．．，ｓｎ−１）。単射写像は、Ｍ＝Ｍ’の場合にのみΣ（Ｍ）＝Σ（Ｍ’）となる特性を有する。特に、Σは全単射となるように選択され、その理由は、このより厳しい条件が単射性を含意するためである。図１は、複数のステート１３１〜１３３が入力メッセージ１００、Ｍ及び単射写像Σ、１５２にどのように依存するかを示す。
【００４７】
ステートが入力メッセージＭ、１００を符号化する場合、異なるＭは異なる符号化済み変数ｘ０，．．．，ｘｎ−１につながる。これは次のようにして行われ得る：ｎ・ｌ≧ｂｉｔｓｉｚｅ（Ｍ）となるような整数ｌを選択する。ここで、ｎはステートの数を示し、ｌはステートのビットサイズである。シェアの数もｎである。したがって、同一の変数ｗに対応する複数のステートｓｊの合計ビットサイズは、少なくとも入力メッセージＭのビットサイズと同一の大きさである。符号化Ｅｎｃｊは、たとえばランダムに、全単射関数
【数７】
0006517436.tif 000008
から選択される。ステートのビットサイズはシェアのビットサイズと等しい必要はない。
【００４８】
ＤＥＳを第１の例として取り上げる。ＤＥＳでは、入力メッセージは６４ビットである。内部変数が４ビット長であり、６個のシェアに分散されると仮定する。この場合、ステートのサイズは少なくとも
【数８】
0006517436.tif 000009
ビットでなければならない。この場合、変数は各４＋１１＝１５ビットの６つの符号化済みシェアで符号化される。この場合、ステートの合計ビットサイズは６・１１＝６６ビットとなる。６６は入力メッセージビットサイズ６４よりも大きいので、写像Σは単射となるが全単射ではない。
【００４９】
同様にＤＥＳを例として使用して、内部変数が４ビット長であり、１６個のシェアに分散されると仮定する。この場合、ステートのサイズは少なくとも
【数９】
0006517436.tif 000010
ビットでなければならない。ステートに対してビットを使用すると、この場合、符号化済みシェアは４＋４＝８ビットになる。同一の変数に対応するステートの合計ビットサイズは１６＊４＝６４ビットである。これは入力メッセージのビットサイズに等しいので、単射写像は全単射である。一般に、シェアの合計ビットサイズ、たとえば、ｎｋが、入力メッセージＭのビットサイズに等しい場合、シェアのビットサイズはシェアのビットサイズと等しくなる。
【００５０】
さらなる例として、入力メッセージのビットサイズが１２８のブロック暗号ＡＥＳを考える。変数が１６個のシェアに分散される場合、ステートは１２８／１６＝８ビットである。シェアも８ビットである場合、符号化済みシェアは１６ビットになる。
【００５１】
写像１５２は、大部分又は全ての変数について暗号化関数の実装において明示的である必要はない。たとえば、符号化済み変数が入力メッセージとの必要な単射関係を有すると、符号化済み変数のシェア部分ｗｊに実施される演算は、単射関係を保存するステート部分に対して冗長な演算を同時に実施する。符号化済み領域で計算が行われるので、ステートへの計算はシェアへの計算から分離することができない。
【００５２】
たとえば、第１及び第２の変数ｗ１及びｗ２の両方が上記のように複数の符号化済みシェア
【数１０】
0006517436.tif 000011
及び
【数１１】
0006517436.tif 000012
として符号化されることを考える。ｗ１及びｗ２への演算ｇが第３の変数ｗ３＝ｇ（ｗ１，ｗ２）を計算すると仮定する。変数ｗ３は符号化済みシェア
【数１２】
0006517436.tif 000013
と表される。一実施形態では、
【数１３】
0006517436.tif 000014
に符号化されたステートは、
【数１４】
0006517436.tif 000015
又は
【数１５】
0006517436.tif 000016
に符号化されたステートに等しい。この場合、入力が入力メッセージＭとの必要な関係を有する場合は、出力ｗ３も同様になる。このようにして、必要な関係はその計算全体にわたって保存される。その演算は、その演算を実施するためのテーブルネットワークとして実装され、このテーブルネットワークは暗号化関数を実装するテーブルネットワークのサブネットワークである。
【００５３】
入力のうちの１つのステートに等しい第３の変数のステートを取得する代わりに、さらなる単射写像Σ２が適用され、たとえば、
【数１６】
0006517436.tif 000017
であり、ここでｉは入力変数の１つを示し、たとえば、ｉ＝１又は２である。１つのステートのみを操作するｎ個の全単射の集合としてΣ２を構築することによって、これはテーブルネットワークを拡大せず、その理由は、その写像が既存のテーブルと統合されるためである。
【００５４】
したがって、一実施形態では、冗長演算は全単射演算である。全単射関数は、たとえばコンパイル時にランダムに選択される。一実施形態では、入力メッセージのみに依存する変数について、入力メッセージの単射関数としてステートが得られる。シェアが入力メッセージと単射関係を有する符号化済み変数に依存する変数について、新たなシェア
【数１７】
0006517436.tif 000018
が、全単射関数の集合（ｇｊ）を符号化済み変数の対応するシェアに適用することによって得られる。
【数１８】
0006517436.tif 000019
第３の変数のステートを入力変数のステートの両方に依存させ、依然として入力メッセージとの必要な関係を維持させることが可能である。しかしながら、これはテーブルネットワークを拡大する。
【００５５】
初期変数、たとえば、入力メッセージから直接得られるものなどは、正しい符号化された形式で暗号化デバイス２００によって受信される。代替的には、デバイス２００は後述の符号化デバイスを備える。
【００５６】
変数ｗの符号化は、暗号化関数の実行中に符号化された値の衝突が存在し得ないことを保証する。したがって、この時点では衝突攻撃は不可能である。入力メッセージだけでなく鍵にも依存する全ての変数が暗号化関数の計算全体にわたってこのように符号化される場合、衝突は完全に回避される。さらに、このシステムは単純で、効率的で、証明可能で、エレガントである。
【００５７】
実際的な一実施形態では、符号化済みシェアによる表現以外のｗの表現はない。さらに、より多くの機密変数がこのように保護される場合、保護はより効果的である。鍵及び入力メッセージの両方に依存する全ての変数は保護されることが好ましい。衝突攻撃を防止するために、鍵による演算が実施される前に、入力メッセージが符号化済みシェアとして表される必要はない。しかしながら、単射写像が存在し維持されることを保証することは、鍵が使用される前であっても、入力メッセージを複数組の符号化済みシェアとして符号化させることによって単純化される。
【００５８】
図２に戻ると、暗号化デバイス２００は、暗号化デバイスが暗号化関数を計算するために作用する複数の変数を記憶するように構成されるデータストア２２０を備える。変数２４０はデータストア２２０において複数の符号化済みシェアとして表される。図示されているのは符号化済みシェア２４１、２４２、及び２４３である。変数は両方とも複数のシェアに分散され、各シェアはステートと共に符号化される。図１を参照して説明されたように、入力メッセージ（Ｍ）から複数のステートへの単射写像（Σ）が存在する。
【００５９】
暗号化デバイス２００は、複数のルックアップテーブルを記憶するテーブルストア２３０を備える。図２に示されているのは、ルックアップテーブル２３１、２３２及び２３３である。ルックアップテーブルの少なくともいくつかは、１つ又は複数の変数の１つ又は複数の符号化済みシェアを入力とする。一実施形態では、ルックアップテーブルは、２つの異なる変数からの少なくとも１つの符号化済みシェアを入力とする。複数のルックアップテーブルは共に、暗号化関数を実装するテーブルネットワークを形成する。
【００６０】
テーブルネットワークは、ホワイトボックス暗号自体から知られている。たとえば、Ｃｈｏｗらによる「Ｗｈｉｔｅ−ｂｏｘ  ｃｒｙｐｔｏｇｒａｐｈｙ  ａｎｄ  ａｎ  ＡＥＳ  ｉｍｐｌｅｍｅｎｔａｔｉｏｎ」を参照されたい。テーブルネットワーク４２０の一例が図４ａに示されており、この場合、外積を計算するためのテーブルネットワークである。
【００６１】
テーブルネットワークは、１つ又は複数の入力、たとえば入力４１０を受信し、１つ又は複数の出力、たとえば出力４３０を生成する。テーブルネットワーク４２０には、複数のルックアップテーブルが示されており、図示されているのはテーブル４２１〜４２１である。テーブルは、入力４１０から直接的に、及び／又は他のテーブルの出力から入力を受け取る。テーブルは、１つの入力、２つの入力、又は３つ以上の入力を受け取る。
【００６２】
未符号化変数ｗへの計算を複数のシェアとして符号化された変数ｗへの計算に変換する便利な手法が、Ｃａｒｌｅｔらによる「Ｈｉｇｈｅｒ−Ｏｒｄｅｒ  Ｍａｓｋｉｎｇ  Ｓｃｈｅｍｅｓ  ｆｏｒ  Ｓ−ｂｏｘｅｓ」に提供されている。この論文は、衝突攻撃も、ステートと併せた符号化も論じていない。この論文はさらにＣａｒｌｅｔと呼ばれる。Ｃａｒｌｅｔは、複数のシェアとして符号化された変数の衝突を防がない。
【００６３】
以下、たとえば関数値Ｓ（ｗ）を計算するための変数ｗへの計算が、複数のシェアに符号化された変数ｗへの計算に変換される手法が説明される。関数Ｓは暗号化関数の計算の任意の内部ステップ、たとえば加算、乗算、Ｓボックスなどである。シェアのＳ（ｗ）を計算するテーブルネットワークを構築する手法を示す。まず、ここではＳが単一の入力ｗを有する場合を考える。複数のステートが同様に扱われ得る。また、最初はステートを無視し、後でステートが追加され得る手法を示す。
【００６４】
ｗがｎ個のシェアｗ０，．．．，ｗｎ−１で表される場合、その結果の変数にｗと同一の保護を与えるために、Ｓ（ｗ）もｎ個のシェアによって表すようにしたい。これは以下の事実を利用することによって、任意の関数に対して可能である。
【００６５】
説明のために、まず、値Ｓ（ｗ）もｗのようにｋビットの数であると仮定する。ｋビットの数は有限のガロア体
【数１９】
0006517436.tif 000020
の要素であり、関数Ｓは
【数２０】
0006517436.tif 000021
上の関数であると考えられ得る。有限体の全ての関数は多項式であるため、
【数２１】
0006517436.tif 000022
上の任意の関数Ｓに対して、係数
【数２２】
0006517436.tif 000023
が存在し、これは任意のｗについて、
【数２３】
0006517436.tif 000024
が成立するものである。
【００６６】
多項式は、以下のようなシェアへの計算として表される。シェアがＸ＝（ｘ０，．．．，ｘｎ−１）及びＹ＝（ｙ０，．．．，ｙｎ−１）によって与えられるとする。簡単のため、シェアの和が未符号化変数と等しいと仮定する。Ｘ及びＹの和はシェアｘｉ＋ｙｉで符号化され得る。スカラー倍αＸはシェアαｘｉで符号化される。最後に、ＺをＸ及びＹの積とする。０≦ｉ＜ｊ≦ｎ−１について、値ｒｉ，ｊ及びｒｊ，ｉを定義する。
【００６７】
たとえば、ランダムなｋビット列を選択することにより、ｒｉ，ｊに対して、
【数２４】
0006517436.tif 000025
のランダムな要素をとる。一実施形態では、ｒｉ，ｊについての乱数は、コンパイル時に入力メッセージＭから
【数２５】
0006517436.tif 000026
へのランダム化関数Ｒｉ，ｊを選択し、ｒｉ，ｊ＝Ｒｉ，ｊ（Ｍ）を設定することによって得られる。後者は実行時に乱数発生器への依存が回避されるという利点を有する。コンパイル時と呼ばれる、テーブルネットワークが構築されるときにのみ、ランダム性のソースが必要とされる。Ｃａｒｌｅｔは実行中にランダム性に依存することに留意されたい。これは実行中の乱数源の操作までＣａｒｌｅｔを開放する。具体的には、乱数発生器は傍受され定数値に置き換えられる。
【００６８】
ｒｊ，ｉ＝（ｘｉｙｊ＋ｒｉ，ｊ）＋ｘｊｙｉをとり、ここでの計算の順序は重要であり、括弧で示されている。ここで、０≦ｉ≦ｎ−１について、
【数２６】
0006517436.tif 000027
をとる。
【００６９】
外積テーブルサブネットワークはｒｊ，ｉを計算する。これらのテーブルは２つの外積ｘｉｙｊ及びｘｊｙｉを計算する。
【００７０】
一実施形態では、ｒｉ，ｊを計算するために計算するランダム化関数Ｒｉ，ｊは、入力メッセージを入力とするテーブルネットワークとして実装される。これは実行中に乱数源が必要となるのを回避する。
【００７１】
シェアｚｉはこのときＸ及びＹの積を表す。加算、スカラー乗算及び乗算演算を使用して、Ｓの多項式表現はシェアへの演算として表される。次いで、シェアへの演算は、１つ又は複数のシェア及び／又は乱数を入力とするルックアップテーブルとして実装される。
【００７２】
ｒｊ，ｉを計算するための可能なテーブルネットワーク４２０が図４ａに示されている。テーブル４２１〜４２４は協力してｒｊ，ｉを計算する。テーブルネットワーク４２０への入力は、参照符号４１０に示されている。テーブルネットワーク４２０の出力は、参照符号４３０に示されている。
【００７３】
たとえば、テーブル４２１及び４２２はそれらの入力を乗算するように構成され、テーブル４２３及び４２４はそれらの入力を加算するように構成される。各テーブルが異なる符号化を使用し得ることに留意されたい。
【００７４】
図４ｂは乗算テーブルネットワーク４４０の一実施形態の一例を概略的に示す。乗算テーブルネットワーク４４０は、上記で与えられた式を使用してＺ＝（ｚ０，．．．，ｚｎ−１）を計算するように構築される。乗算テーブルネットワーク４４０は、データストア２２０に第１の複数の符号化済みシェア（ｘｊ）として表される変数Ｘと、データストア２２０に第２の複数の符号化済みシェア（ｙｊ）として表される第２の変数Ｙとを乗算するように構成される。乗算テーブルネットワークは、第１及び第２の複数の符号化済みシェア（ｘｊ、ｙｊ）に作用し、第１及び第２の変数の積を表す第３の複数の符号化済みシェア（ｚｊ）を取得する。乗算テーブルネットワーク４４０は、暗号化関数を計算するためのテーブルネットワークの一部である。
【００７５】
乗算テーブルネットワーク４４０は、外積ｘｉｙｊを計算するための外積テーブルサブネットワークを含む。一実施形態では、外積は２つ一組、ｘｉｙｊ＋ｘｊｙで計算されるｉ。たとえば、乗算テーブルネットワーク４４０はテーブルネットワーク４２０を含む。乗算テーブルネットワーク４４０は、１つ又は複数のランダム化関数Ｒｉ，ｊを計算するためのテーブルネットワーク４５０をさらに含む。図４ｂにおいて、テーブルネットワーク４５０は入力メッセージ１１０に依存する。この依存性は破線で示されており、これはデータストア２２０に記憶された変数などの中間物を介して依存性が得られることを示す。テーブルネットワーク４４０はその入力を取得し、その出力をデータストア２２０に記憶する。
【００７６】
シェアに作用するテーブルは、符号化済みシェアに作用するテーブルに変換される。符号化済みシェアｘについて、Ｅｎｃ（ｔ（ｘ），ｓ（ｘ））＝ｘとなるようにｓ及びｔを定義する。関数ｓ及びｔは、ｘからそれぞれステート及びシェアを取得する。ｔ（ｘ）に対するテーブルＴを定義する。次いで、Ｅｎｃ’（Ｔ（ｔ（ｘ）），Ｐ（ｓ（ｘ）））は、ｘのシェア部分のテーブルＴとステート部分の関数Ｐとを実装するｘのテーブルを定義する。関数Ｐは冗長であり、コンパイル時などにテーブルネットワークを作成する場合に選択される。たとえば、Ｐは恒等関数である。複数の入力に対して同様の構成が可能である。ここで使用される符号化Ｅｎｃは入力符号化とも呼ばれる。符号化Ｅｎｃ’は出力符号化と呼ばれる。テーブルの出力に使用される出力符号化が、前記出力を入力として使用した次のテーブルの入力符号化と同一である限り、テーブルの入力及び出力符号化は同一である必要はない。
【００７７】
データストア２２０及びテーブルストア２３０は電子メモリである。それらは同一のメモリの２つの部分である。テーブルストア２３０は不揮発性ストレージである。データストア２２０は揮発性ストレージである。
【００７８】
暗号ユニット２００は、複数のルックアップテーブルをデータストアに表された変数に適用することによって、暗号化関数を入力メッセージに適用するように構成される制御ユニット２１０を備える。たとえば、テーブルストア２３０は、テーブルがどの順番でどの変数に適用されるかを示す命令を含む。
【００７９】
暗号ユニット２００はネットワークインタフェース２５０を備える。ネットワークインタフェース２５０は、コンピュータネットワークを介して符号化されたデータを受信するように構成される。たとえば、暗号化デバイス２００は、暗号化されたデータ、たとえば、暗号化されたコンテンツを受信し、これは暗号化デバイス２００によって復号される。ネットワークインタフェース２５０を介して受信される入力は、たとえば上述したように、符号化済みシェアとして表される。これは、符号化がデバイス２００の内部で行われるので、必要ではない。
【００８０】
図３は符号化デバイス３００の一例を示す。符号化デバイス３００は、請求項１に記載の暗号化デバイスと共に使用するために入力メッセージＭを符号化するように構成される。符号化デバイス３００は入力メッセージＭを受信するための受信ユニットを備える。入力メッセージは複数の入力パートＭ＝（ｍ０，ｍ１，．．．）を含む。たとえば、複数のパートはニブル又はバイトである。一実施形態では、パートのビットサイズは４と８との間である（包含的）。メッセージＭはメッセージパートの連結である。
【００８１】
符号化デバイス３００は符号化を実施する符号化ユニット３２０を備える。符号化ユニット３２０は入力メッセージＭの各パートを別々に符号化する。したがって、入力メッセージＭの各パートｍｉについて、符号化ユニットは以下を実施する。
【００８２】
入力メッセージＭのパートｍｉは複数のシェアに分散され、これは、複数の分散関数
【数２７】
0006517436.tif 000028
を入力メッセージに適用して、複数のシェアを取得することによって行われる。
【数２８】
0006517436.tif 000029
Ｍに適用された分散関数
【数２９】
0006517436.tif 000030
に適用された結合関数は、入力メッセージのパートｍｉに等しい。
【数３０】
0006517436.tif 000031
具体的には、結合関数がＸＯＲ又は算術和である場合、分散関数
【数３１】
0006517436.tif 000032
の総和は入力メッセージＭのパートｍｉと等しく、したがって、
【数３２】
0006517436.tif 000033
となる。
【００８３】
たとえば、偶数個のシェアが存在する場合、分散関数はｉ≠ｊについて
【数３３】
0006517436.tif 000034
として選択され、
【数３４】
0006517436.tif 000035
である。この例では、加算はＸＯＲである。他の多くの可能性があり得る。たとえば、所与のパートの分散関数のうちの１つを除く全てがランダムに選択され、最後のものが補正項、たとえば、Ｍからｍｉへの投射関数から他の分散関数を引いたものとして計算される。
【００８４】
また、符号化ユニット３２０は、入力メッセージＭからの単射写像Σｉを適用して複数のステート
【数３５】
0006517436.tif 000036
を取得し、複数のシェア及び複数のステートの数が同一である。一実施形態では、
【数３６】
0006517436.tif 000037
であり、この選択肢は、入力メッセージＭがステートに符号化されることを明確に保証する。全てのシェアの連結は、入力メッセージＭの単射写像である。
【００８５】
最後に、複数のシェアの各シェアは、複数のステートの対応するステートと共に符号化され、パートｍｉを表す複数の符号化済みシェア
【数３７】
0006517436.tif 000038
が得られる。たとえば、符号化ユニット３２０は、
【数３８】
0006517436.tif 000039
を計算する。
【００８６】
このステップの後、パートｍｉは複数の符号化済みシェア
【数３９】
0006517436.tif 000040
に符号化されて、入力メッセージ全体がステートの一部として、符号化済みシェアに符号化される。
【００８７】
暗号化関数を実施するテーブルネットワークは、入力メッセージと、変数に対応する符号化済みシェアのステートとの間の関係を保存するように構成される。符号化済み変数の組の衝突はステートの衝突を意味するので、これは異なる入力メッセージの衝突が不可能であることを意味する。
【００８８】
さらなる例として、符号化ユニットにおいてＭをステートに写像するために使用される単射写像Σｉは、複数のより小さい全単射関数から構成される。たとえば、単射写像Σｉは複数のステート関数
【数４０】
0006517436.tif 000041
を含む。複数のステート
【数４１】
0006517436.tif 000042
を取得することは、複数のステート関数
【数４２】
0006517436.tif 000043
をそれぞれの複数の入力パートに適用することを含み、
【数４３】
0006517436.tif 000044
ここで、複数のステート関数は全単射である。たとえば、
【数４４】
0006517436.tif 000045
である。これは全単射、ひいては単射関数を作成するための特に簡単な手法である。より多くのステートが満たされる必要がある場合、より多くのステート関数が追加され、その場合、関数Σｉは全単射ではなく厳密に単射になる。
【００８９】
典型的には、デバイス２００及び３００はそれぞれ、デバイス２００及び３０００に記憶された適切なソフトウェアを実行するマイクロプロセッサ（図１〜図４には図示せず）を備え、たとえば、そのソフトウェアは対応するメモリ、たとえばＲＡＭなどの揮発性メモリ、又はフラッシュなどの不揮発性メモリ（図１〜図４には図示せず）にダウンロード及び／又は記憶される。或いは、デバイス２００及び３０００は、たとえばフィールドプログラマブルゲートアレイ（ＦＰＧＡ）として、プログラマブルロジックに全体的又は部分的に実装される。デバイス２００及び３００は、いわゆる特定用途向け集積回路（ＡＳＩＣ）、すなわち、それらの特定の用途向けにカスタマイズされた集積回路（ＩＣ）として、全体的又は部分的に実装される。たとえば、回路は、たとえば、Ｖｅｒｉｌｏｇ、ＶＨＤＬなどのハードウェア記述言語を使用して、ＣＭＯＳで実装される。
【００９０】
一実施形態では、デバイス２００は、データストア回路及びテーブルストア回路、たとえば電子メモリ、及び制御ユニット回路を備える。回路は本明細書に記載された対応するユニットを実装する。回路はプロセッサ回路及び記憶回路であり、プロセッサ回路は記憶回路内で電子的に表される命令を実行する。回路もＦＰＧＡ、ＡＳＩＣなどである。システムは追加の回路、たとえば、ネットワークインタフェース回路などを備える。
【００９１】
図５ａは、入力メッセージＭについての鍵Ｋ依存暗号化関数ｆ、ｆＫ（Ｍ）を計算するように構成された暗号化方法５００を示すフローチャートを示す。暗号化方法５００は、
−  暗号化デバイスが鍵Ｋ依存暗号化関数を計算するために作用する複数の変数ｗを記憶するステップ５１０であって、変数ｗが複数のシェアｗｊに分散され、データストアにおいて複数の符号化済みシェアｘｊとして表され、符号化済みシェアがシェアｗｊとステートｓｊとの符号化ｘｊ＝Ｅｎｃｊ（ｗｊ，ｓｊ）であり、同一の変数ｗに対応する複数のステートｓｊが、入力メッセージＭから複数のステートへの単射写像Σが存在するようなΣ（Ｍ）＝（ｓ０，．．．，ｓｎ−１）、入力メッセージＭとの関係を有する、記憶するステップ５１０と、
−  複数のルックアップテーブルを記憶するステップ５２０であって、ルックアップテーブルが１つ又は複数の変数の１つ又は複数の符号化済みシェアを入力とし、複数のルックアップテーブルが鍵Ｋ依存暗号化関数を実装するテーブルネットワークを共に形成する、記憶するステップ５２０と、
−  データストアに表された変数に複数のルックアップテーブルを適用することによって、入力メッセージに鍵Ｋ依存暗号化関数を適用するステップ５３０と
を有する。
【００９２】
図５ｂは、請求項１に記載の暗号化デバイスと共に使用するための、入力メッセージＭを符号化するための符号化方法５５０を示すフローチャートであり、符号化方法が、
−  入力メッセージＭを受信するステップ５６０であって、入力メッセージが複数の入力パートを有するＭ＝（ｍ０，ｍ１，．．．）、受信するステップ５６０と、
−  入力メッセージＭの各パートｍｉについて、
−  入力メッセージＭのパートｍｉを複数のシェアに分散させることを、複数の分散関数
【数４５】
0006517436.tif 000046
を入力メッセージに適用して複数のシェアを取得することによって行う、
【数４６】
0006517436.tif 000047
分散させるステップ５７０であって、分散関数
【数４７】
0006517436.tif 000048
に適用された結合関数が、入力メッセージのパートｍｉに等しい、
【数４８】
0006517436.tif 000049
分散させるステップ５７０と、
−  入力メッセージＭからの単射写像Σｉを適用して複数のステート
【数４９】
0006517436.tif 000050
を取得するステップ５８０であって、複数のシェア及び複数のステートの数が同一である、取得するステップ５８０と、
−  複数のシェアの各シェアを複数のステートの対応するステートと共に符号化して、パートｍｉを表す複数の符号化済みシェア
【数５０】
0006517436.tif 000051
を取得するステップ５９０と
を有する。
【００９３】
方法５５０には、入力メッセージのパートごとに作業を分散させる手法についていくつかの選択肢がある。たとえば、方法５５０は、まず全てのパートのシェアを計算し、次いで全てのパートのステートを計算し、最後に全てのパートの符号化を行う。しかしながら、方法５５０はまた、一度に１つのパートについて、シェア、ステート、及び符号化を計算する。他の組合せも可能である。
【００９４】
当業者には明らかであるように、方法を実行する多くの異なる手法が可能である。たとえば、ステップの順序は変更され得て、又はいくつかのステップは並行して実行される。さらに、ステップの間に、他の方法のステップが挿入される。挿入されたステップは、本明細書に記載されるような方法の改良を表し、又は方法と無関係である。たとえば、ステップ５７０及び５８０は、少なくとも部分的に並列に実行される。さらに、所与のステップは、次のステップが開始される前に完全に終了していない。
【００９５】
本発明による方法は、プロセッサシステムに方法５００又は５５０を実施させる命令を含むソフトウェアを使用して実行される。ソフトウェアは、システムの特定のサブエンティティによってとられるステップのみを含む。ソフトウェアは、ハードディスク、フロッピー、メモリ、光ディスクなどの適切な記憶媒体に記憶される。ソフトウェアは信号としてワイヤに沿って、若しくは無線で、又はインターネットなどのデータネットワークを使用して送信される。ソフトウェアは、ダウンロード及び／又はサーバ上でのリモート使用が可能にされる。本発明による方法は、方法を実施するためにフィールドプログラマブルゲートアレイ（ＦＰＧＡ）などのプログラマブルロジックを構成するようになされるビットストリームを使用して実行される。
【００９６】
本発明が、本発明を実施するように適合されたコンピュータプログラム、特に、キャリア上又は内のコンピュータプログラムにも拡張されることは理解されよう。プログラムは、ソースコード、オブジェクトコード、コード中間ソース、及びオブジェクトコード、たとえば部分的にコンパイルされた形式、又は本発明による方法の実施での使用に適した任意の他の形式のものである。コンピュータプログラム製品に関する一実施形態は、記載された方法のうちの少なくとも１つの処理ステップのそれぞれに対応するコンピュータ実行可能命令を含む。これらの命令はサブルーチンに細分され、及び／又は静的若しくは動的にリンクされる１つ又は複数のファイルに記憶される。コンピュータプログラム製品に関する別の実施形態は、記載されたシステム及び／又は製品のうちの少なくとも１つの手段のそれぞれに対応するコンピュータ実行可能命令を含む。
【００９７】
図７ａはコンピュータプログラム１０２０を含む書き込み可能部分１０１０を有するコンピュータ可読媒体１０００を示し、コンピュータプログラム１０２０は、プロセッサシステムに一実施形態による暗号化方法又は符号化方法を実施させるための命令を含む。コンピュータプログラム１０２０は、コンピュータ可読媒体１０００上に物理的なマークとして、又はコンピュータ可読媒体１０００の磁化によって具現化される。しかしながら、任意の他の適切な実施形態も考えられる。さらに、コンピュータ可読媒体１０００はここでは光ディスクとして示されているが、コンピュータ可読媒体１０００は、ハードディスク、ソリッドステートメモリ、フラッシュメモリなどの任意の適切なコンピュータ可読媒体であり、記録不可能又は記録可能であることは理解されよう。コンピュータプログラム１０２０は、プロセッサシステムに一実施形態による前記暗号化方法又は符号化方法を実施させるための命令を含む。
【００９８】
図７ｂは一実施形態によるプロセッサシステム１１４０の概略図を示す。プロセッサシステムは１つ又は複数の集積回路１１１０を備える。１つ又は複数の集積回路１１１０のアーキテクチャは図７ｂに概略的に示されている。回路１１１０は、一実施形態による方法を実行し、及び／又はそのモジュール若しくはユニットを実装するためのコンピュータプログラムコンポーネントを動作させるための、ＣＰＵなどの処理ユニット１１２０を備える。回路１１１０は、プログラミングコード、データなどを記憶するためのメモリ１１２２を備える。メモリ１１２２の一部は読み出し専用である。回路１１１０は通信素子１１２６、たとえば、アンテナ、コネクタ又はその両方などを備える。回路１１１０は、本方法で定義された処理の一部又は全部を実施するための専用集積回路１１２４を備える。プロセッサ１１２０、メモリ１１２２、専用ＩＣ１１２４及び通信素子１１２６は相互接続１１３０、たとえばバスを介して互いに接続される。プロセッサシステム１１１０は、アンテナ及び／又はコネクタを使用して、それぞれ接触及び／又は非接触通信用に構成される。
【００９９】
上記の実施形態は本発明を限定するものではなく例示するものであり、当業者は多くの代替的実施形態を考案できることに留意されたい。
【０１００】
特許請求の範囲において、括弧内に置かれた任意の参照符号は、特許請求の範囲を限定するものとして解釈されるべきではない。「備える」という動詞及びその活用形の使用は、請求項に記述された以外の要素又はステップの存在を排除するものではない。要素に先行する冠詞「ａ」又は「ａｎ」は、複数のそのような要素の存在を排除するものではない。本発明は、いくつかの個別の素子を含むハードウェアによって、及び適切にプログラムされたコンピュータによって実装される。いくつかの手段を列挙したデバイスの請求項において、これらの手段のいくつかは、同一のハードウェア項目によって具現化される。特定の対策が相異なる従属請求項に列挙されているという単なる事実は、これらの対策の組合せが有利に使用できないことを示すものではない。
【０１０１】
特許請求の範囲において、括弧内の参照は、実施形態の図面における参照符号又は実施形態の式を参照して、請求項の明瞭性を高めている。これらの参照は請求項を限定するものとして解釈されるべきではない。
【符号の説明】
【０１０２】
図１〜図４ｂ及び図６の参照符号のリスト
１００  Ｍ  入力メッセージ
１１０  ｗ  変数
１２１、１２２、１２３  ｗ０、ｗ１、．．．、ｗｎ−１  シェア
１３１、１３２、１３３  ｓ０、ｓ１、．．．、ｓｎ−１  シェア
１４１、１４２、１４３  ｘ０、ｘ１，．．．、ｘｎ−１  符号化済みシェア
１５１  ｈ  分散写像
１５２  Σ  単射写像
１６１、１６２、１６３  Ｅｎｃ１、Ｅｎｃ２、．．．、Ｅｎｃｎ−１  符号化
２００  暗号化デバイス
２１０  制御ユニット
２２０  データストア
２３０  テーブルストア
２３１、２３２、２３３  テーブル
２４０  変数
２５０  ネットワークインタフェース
３００  符号化デバイス
３１０  受信ユニット
３２０  符号化ユニット
４１０  テーブルネットワーク入力
４２０  テーブルネットワーク
４２１〜４２４  テーブル
４３０  テーブルネットワーク出力
４４０  テーブルネットワーク
４５０  テーブルネットワーク
６００  ＤＥＳブロック暗号のフローチャート
６０５  入力メッセージ
６０６  出力メッセージ
【図１】
0006517436.tif 000072
【図２】
0006517436.tif 000073
【図３】
0006517436.tif 000074
【図４ａ】
0006517436.tif 000075
【図４ｂ】
0006517436.tif 000076
【図５ａ】
0006517436.tif 000077
【図５ｂ】
0006517436.tif 000078
【図６】
0006517436.tif 000079
【図７ａ】
0006517436.tif 000080
【図７ｂ】
0006517436.tif 000081