(57)【要約】  一部の実施形態は、入力データに暗号演算を行って出力データを得るようになされた電子暗号装置を対象とする。暗号装置は、内部状態をシェアの集合として記憶する。このシェアの集合に対応するフーリエ係数は、それらの間で所定の関係を満たす。暗号演算は、内部状態を反復的に更新することによって行われる。
2020521392.tif 000002
【特許請求の範囲】
【請求項１】
入力データに暗号演算を行って出力データを得る電子暗号装置であって、前記電子暗号装置は、
前記入力データを受け取る入力インターフェースと、
内部状態を記憶するメモリであって、前記内部状態は１つ又は複数のデータ要素を含み、各データ要素は、前記メモリ内で、対応するシェアの集合として表され、前記メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、前記メモリ内の前記シェアの集合に対応する前記フーリエ係数の集合間で所定の関係が満たされる、メモリと、
前記内部状態を反復的に更新することによって前記暗号演算を行うことであって、前記入力データから初期内部状態が導出され、前記出力データは最終内部状態から導出され、前記内部状態の前記シェアの集合に対応する前記フーリエ係数の集合間で前記所定の関係が満たされる場合に、更新後の前記内部状態の前記シェアの集合に対応する更新後の集合のフーリエ係数間で前記所定の関係が満たされる、前記暗号演算を行うことと、
前記最終内部状態に出力演算子を適用して前記出力データを導出することであって、前記出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付け、前記歪みは、当該シェアの集合の前記フーリエ係数が前記所定の関係を満たす場合にゼロであり、前記歪みは、当該シェアの集合の前記フーリエ係数に依存する、前記出力データを導出することと、
を行うプロセッサ回路と、
を備える、電子暗号装置。
【請求項２】
シェアの集合が、前記シェアの集合に対応する前記フーリエ係数の部分集合によって決定されるデータ要素を表す、請求項１に記載の電子暗号装置。
【請求項３】
シェアの集合が、前記シェアの集合に対応する前記フーリエ係数のうちの１つに等しいデータ要素を表す、請求項１又は２に記載の電子暗号装置。
【請求項４】
前記所定の関係は、異なるフーリエ係数の集合の少なくとも２つのフーリエ係数が等しいことを含む、請求項１から３のいずれか一項に記載の電子暗号装置。
【請求項５】
フーリエ係数の集合中の各フーリエ係数は、１つを除いて、その他のフーリエ係数の集合中のそれぞれのフーリエ係数に等しい、請求項４に記載の電子暗号装置。
【請求項６】
前記内部状態を前記更新することが、前記異なるフーリエ係数の集合に対応するシェアの集合によって表されるデータ要素に非線形演算を適用することを有し、非線形演算は、前記内部状態のデータ要素を表す対応するシェアの集合中にある前記メモリ内のシェアに作用することによって、前記データ要素に作用し、同じ非線形演算が、前記データ要素に対応する前記シェアの集合に作用する、請求項４又は５に記載の電子暗号装置。
【請求項７】
前記非線形演算が前記有限体における多項式であり、前記プロセッサ回路は、シェアの集合のべき乗を、前記シェアの集合自体同士の畳み込みとして算出する、請求項６に記載の電子暗号装置。
【請求項８】
前記内部状態を前記更新することが、前記内部状態に線形演算を適用することを有し、前記線形演算は、前記内部状態の少なくとも２つのデータ要素を表す前記メモリ内の少なくとも２つのシェアの集合に同時に作用する、請求項１から７のいずれか一項に記載の電子暗号装置。
【請求項９】
前記線形演算が作用するシェアの集合ごとにフーリエ係数の集合を生じさせるフーリエ演算子と、
前記所定の関係を保持しつつ前記フーリエ係数に作用する１つ又は複数の線形演算子と、
逆フーリエ演算子と、
を連結することによって、前記線形演算が構築される、請求項８に記載の電子暗号装置。
【請求項１０】
フーリエ係数の前記集合は、インデックスを有する前記集合中の係数で順序付けされ、前記１つ又は複数の線形演算子は、異なるインデックスのフーリエ係数とは無関係に、同じインデックスのフーリエ係数に作用する、請求項９に記載の電子暗号装置。
【請求項１１】
フーリエ係数の各集合は、前記データ要素を表す１つ又は複数のフーリエ係数と、１つ又は複数の保護フーリエ係数とを含み、前記出力演算子は、１つ又は複数の演算子を連結することによって構築され、前記演算子のうちの１つは、前記１つ又は複数の保護フーリエ係数を前記歪みに対応付ける、請求項１から１０のいずれか一項に記載の電子暗号装置。
【請求項１２】
前記出力演算子が、
前記最終内部状態の符号化を除去する復号演算子と、
前記最終内部状態を、前記出力演算子によって対応付けられた前記シェアの集合に対応するフーリエ係数の集合に変換するフーリエ変換と、
前記データ要素に対応する前記フーリエ係数を、対応する前記データ要素に対応付ける演算子と、
前記保護フーリエ係数を前記歪みに対応付ける前記演算子と、
を連結することによって構築される、請求項１１に記載の電子暗号装置。
【請求項１３】
前記暗号演算を行うことが、前記内部状態のすべて又は一部に鍵を追加することを有し、前記鍵は、前記メモリ内で、対応するシェアの集合として表され、前記シェアの集合は、前記有限体における前記離散フーリエ変換に従って、前記鍵の前記シェアの集合に対応する前記フーリエ係数間で前記所定の関係を満たす、請求項１から１２のいずれか一項に記載の電子暗号装置。
【請求項１４】
シェアの集合の合算ビットサイズが、少なくとも前記入力データのビットサイズと同じ大きさである、請求項１から１３のいずれか一項に記載の電子暗号装置。
【請求項１５】
前記暗号演算がブロック暗号である、請求項１から１４のいずれか一項に記載の電子暗号装置。
【請求項１６】
データ要素を表すシェアの集合中の前記シェアが線形符号化で符号化される、請求項１から１５のいずれか一項に記載の電子暗号装置。
【請求項１７】
前記プロセッサ回路が、平文入力データに入力演算子を適用し、前記入力演算子は、前記初期内部状態を表すシェアの複数の集合を生じさせ、前記シェアの複数の集合は前記所定の関係を満たす、請求項１から１６のいずれか一項に記載の電子暗号装置。
【請求項１８】
入力データに暗号演算を行って出力データを得る電子暗号方法であって、前記電子暗号方法は、
前記入力データを受け取るステップと、
内部状態を記憶するステップであって、前記内部状態は１つ又は複数のデータ要素を含み、各データ要素は、メモリ内で、対応するシェアの集合として表され、前記メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、前記メモリ内の前記シェアの集合に対応する前記フーリエ係数の集合間で所定の関係が満たされる、記憶するステップと、
前記内部状態を反復的に更新することによって前記暗号演算を行うステップであって、前記入力データから初期内部状態が導出され、前記出力データは最終内部状態から導出され、前記内部状態の前記シェアの集合に対応する前記フーリエ係数の集合間で前記所定の関係が満たされる場合に、更新後の前記内部状態の前記シェアの集合に対応する更新後の集合のフーリエ係数間で前記所定の関係が満たされる、前記暗号演算を行うステップと、
前記最終内部状態に出力演算子を適用して前記出力データを導出するステップであって、前記出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付け、前記歪みは、当該シェアの集合の前記フーリエ係数が前記所定の関係を満たす場合にゼロであり、前記歪みは、当該シェアの集合の前記フーリエ係数に依存する、前記出力データを導出するステップと、
を有する、電子暗号方法。
【請求項１９】
請求項１８に記載の方法をプロセッサシステムに行わせる命令を表す一時的又は非一時的なデータを備えた、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号装置、暗号方法、及びコンピュータ可読媒体に関する。
【背景技術】
【０００２】
暗号プリミティブは、ブラックボックスモデルにおいて、当該プリミティブの入力及び出力の知識のみを持つ攻撃者が、例えば秘密鍵を入手する、メッセージを暗号化する、メッセージを解読するなど、自身の権限を高めることができない場合に安全であるとされる。しかし、現実には、攻撃者はブラックボックスモデルで動作せず、実際、単なる入力及び出力よりも多くの情報を持つことが多い。例えば、グレーボックスモデルでは、攻撃者がプリミティブの実行に関係する何らかの情報にアクセスできることが想定される。このような情報の追加的な入手源は「サイドチャネル」と呼ばれる。例えば、サイドチャネルには、演算に要した時間量、又は消費された電力量等が含まれる。さらに強いモデルである、いわゆるホワイトボックスモデルでは、攻撃者がプリミティブのすべての内部変数に完全にアクセスすることができる。また、攻撃者はプログラムの実行中であっても変数を改変する場合がある。それでも、ホワイトボックス実施は、プログラムからの秘密鍵の抽出を防止することを狙いとする。
【０００３】
ホワイトボックス攻撃に対抗する実施は、符号化されたデータに働く符号化されたテーブルネットワークとして実施されることがある。Ｓ．Ｃｈｏｗらによる論文「Ｗｈｉｔｅ−Ｂｏｘ  Ｃｒｙｐｔｏｇｒａｐｈｙ  ａｎｄ  ａｎ  ＡＥＳ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ」には、ブロック暗号ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）のホワイトボックス実施が提示される（以下「Ｃｈｏｗ」と参照し、参照により本明細書に援用される）。Ｃｈｏｗは、テーブル参照動作だけから構成されるＡＥＳの実施を形成する。いくつかの中間方法を通じて、通常の暗号をこの形態の実施へと変形させ、テーブルネットワークを使用してＡＥＳを算出できるようにする。テーブルネットワーク内でテーブルを符号化することにより、分析及び攻撃に対するシステムの耐性が高められる。Ｃｈｏｗで使用される技術は、他のブロック暗号にも適用することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
テーブルネットワークを使用したホワイトボックス実施は分析するのが難しいが、テーブルを利用したブロック暗号の実施は、一部の攻撃に対しては依然として脆弱である。次第に、グレーボックスモデルの文脈で開発された攻撃が、ホワイトボックス実施に対しても効果を持つようになりつつある。そのため、グレーボックスモデル下の攻撃を回避することは、ホワイトボックスモデルでも有効な対策となり得る。そのような攻撃の一例は、Ｊｏｐｐｅ  Ｗ．Ｂｏｓらによる論文「Ｄｉｆｆｅｒｅｎｔｉａｌ  Ｃｏｍｐｕｔａｔｉｏｎ  Ａｎａｌｙｓｉｓ：  Ｈｉｄｉｎｇ  ｙｏｕｒ  Ｗｈｉｔｅ−Ｂｏｘ  Ｄｅｓｉｇｎｓ  ｉｓ  Ｎｏｔ  Ｅｎｏｕｇｈ．」に見られる。
【０００５】
暗号プリミティブのコンピュータ実施を攻撃からより好適に保護すること、特にホワイトボックス実施に加えられるグレーボックス型の攻撃からのより好適な保護が、必要とされている。
【０００６】
ＰＣＴ特許出願公開ＷＯ２０１７／０６３９８６（Ａ１）（「Ａ  Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｄｅｖｉｃｅ  ａｎｄ  ａｎ  Ｅｎｃｏｄｉｎｇ  Ｄｅｖｉｃｅ」）が参照される。
【課題を解決するための手段】
【０００７】
上記及びその他の懸念に対処する、改良された暗号装置が提示される。
【０００８】
暗号装置は電子装置である。例えば、装置は移動可能な電子装置、例えば携帯電話である。電子装置は、セットトップボックス、スマートカード、コンピュータ等である。本明細書に記載される暗号装置及び／又は暗号方法は、幅広い実用的用途に適用される。そのような実用的用途には、セキュリティ、暗号法、コンテンツ保護、コピー保護、金融アプリケーション、プライバシー保護、通信アプリケーション等が含まれる。
【０００９】
本発明による方法は、コンピュータ実施方法として、又は専用ハードウェア内に、又は両者の組み合わせとして、コンピュータ上で実施される。本発明による方法の実行可能コードは、コンピュータプログラム製品に記憶されてよい。コンピュータプログラム製品の例には、メモリ装置、光学記憶装置、集積回路、サーバ、オンラインソフトウェア等が含まれる。好ましくは、コンピュータプログラム製品は、プログラム製品がコンピュータ上で実行されたときに本発明による方法を行うための、コンピュータ可読媒体に記憶された非一時的なプログラムコードを備える。
【００１０】
好ましい実施形態において、コンピュータプログラムは、コンピュータプログラムがコンピュータで実行されたときに、本発明による方法のすべてのステップを行うように適合されたコンピュータプログラムコードを備える。好ましくは、コンピュータプログラムは、コンピュータ可読媒体に具現化される。
【００１１】
本発明の別の態様は、コンピュータプログラムをダウンロード可能な状態にする方法を提供する。この態様は、コンピュータプログラムが、例えばＡｐｐｌｅのＡｐｐ  Ｓｔｏｒｅ、ＧｏｏｇｌｅのＰｌａｙ  Ｓｔｏｒｅ、又はＭｉｃｒｏｓｏｆｔのＷｉｎｄｏｗｓ  Ｓｔｏｒｅにアップロードされ、コンピュータプログラムがそのようなストアからダウンロード可能な状態であるときに使用される。
【００１２】
本発明のさらなる詳細、態様、及び実施形態について、図面を参照して単なる例として説明する。図の要素は、簡潔性及び明瞭性のために示されており、必ずしも一定の縮尺で描かれていない。図において、すでに説明された要素に対応する要素は、同じ参照符号を有することがある。
【図面の簡単な説明】
【００１３】
【図１】暗号装置の一実施形態の例を概略的に示す図である。
【図２】内部状態の更新の一実施形態の例を概略的に示す図である。
【図３】内部状態の表現の一実施形態の例を概略的に示す図である。
【図４】暗号方法の一実施形態の例を概略的に示す図である。
【図５ａ】一実施形態によるコンピュータプログラムを備える書込み可能部分を有するコンピュータ可読媒体を概略的に示す図である。
【図５ｂ】一実施形態によるプロセッサシステムの表現を概略的に示す図である。
【発明を実施するための形態】
【００１４】
本発明には多くの異なる形態の実施形態が可能であるが、本開示は本発明の原理の例示と考えるべきであり、図示され、記載される特定の実施形態に本発明を限定する意図はないことを理解した上で、１つ又は複数の特定の実施形態が図面に示され、本明細書で詳細に説明される。
【００１５】
以下では、理解のために、実施形態の要素が動作しているものとして説明される。しかし、それぞれの要素は、それらによって行われるものとして説明される機能を行うようになされることは明らかであろう。
【００１６】
さらに、本発明は実施形態に限定されず、本発明は、本明細書に記載される、又は互いに異なる従属請求項に記載されるそれぞれのあらゆる新規な特徴又は特徴の組み合わせにある。
【００１７】
本発明の実施形態は、ブロック暗号などの暗号プリミティブの実施を可能にする。ブロック暗号は例えば、既知のサイドチャネル攻撃のホワイトボックス一般化、並びにいくつかの純粋なホワイトボックス攻撃を含む、広い部類の鍵復元攻撃に対抗する高い回復性を提供するＡＥＳアルゴリズムである。本発明による実施は、ホワイトボックスモデルだけでなくグレーボックスモデルにおいても向上したセキュリティを有することに留意されたい。
【００１８】
本発明を紹介するために、初めにホワイトボックス実施に対する攻撃をいくつか説明する。本文書を通じて、ブロック暗号ＡＥＳに着目する。ＡＥＳは、有力で、広く使用される暗号プリミティブである。しかし、以下の技術は他の暗号プリミティブにも適用可能であることを強調しておく。例えば、他のブロック暗号が実施形態として実施されてよい。特にＡＥＳ（Ｒｉｊｎｄａｅｌ）、３−Ｗａｙ、Ｋｕｚｎｙｅｃｈｉｋ、ＰＲＥＳＥＮＴ、ＳＡＦＥＲ、ＳＨＡＲＫ、及びＳｑｕａｒｅなどのＳＬＴ設計（換字・置換ネットワーク（ＳＰＮ：Ｓｕｂｓｔｉｔｕｔｉｏｎ−ｐｅｒｍｕｔａｔｉｏｎ  ｎｅｔｗｏｒｋ）ブロック暗号と呼ばれることもある、換字／線形変換ブロック暗号）のブロック暗号は、少ない労力で適合させることができる。暗号プリミティブは、対称プリミティブであってよく、例えば、暗号鍵／解読鍵が同じであるか、又は署名鍵／検証鍵が同じである。暗号プリミティブは、ハッシュ関数など、鍵なしであってもよい。ハッシュ関数を保護することは、ハッシュ関数が秘密データに適用されるため、重要である。実際、ハッシュ関数は、ハッシュ関数がＨＭＡＣで使用される場合などに、鍵付き設計の一部をなす。
【００１９】
Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ（ＡＥＳ）については、Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ，  Ｆｅｄｅｒａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｔａｎｄａｒｄｓ  Ｐｕｂｌｉｃａｔｉｏｎ  １９７，２００１に記載される。以下で、実行中のプログラム及びその環境にアクセスすることができ、メモリに出現するすべてのプログラム変数を読み取って改変することが可能な「ホワイトボックス」攻撃者によってＡＥＳの実施に対して仕掛けられ得る、主要な攻撃について概説する。
【００２０】
純粋なホワイトボックス攻撃であるメモリ・スクレープ（scraping）攻撃を別にすれば、主要な攻撃はサイドチャネル分析から始まり、これらの「グレーボックス」攻撃はホワイトボックス環境でも適用され得る。
【００２１】
メモリ・スクレープ攻撃では、鍵がプログラムメモリから読み出される。これは最も単純なホワイトボックス攻撃である。この攻撃を阻止するためには、鍵は、決して「平文で」プログラムメモリに出現してはならず、何らかの符号化された形態でのみ出現しなければならない。
【００２２】
差分電力分析／差分計算分析／相互情報分析／衝突等に基づく攻撃は、すべて衝突の原理に基づく。衝突は、内部プログラム変数がプログラムの２つの異なる入力又は出力に対して同じ値を取るときに発生する。プログラムの入力又は出力だけでなく鍵にも依存する変数に衝突が発生すると、衝突が発生するという事実だけから、鍵についての情報が明らかになる。すべてのＡＥＳ状態及び鍵バイトを符号化すること、例えば、集合｛０，１，Ｋ，２５５｝への可逆マッピングの集合Ｅを選定し、各状態及び鍵バイトｘを、何らかのＥ∈ＥについてのＥ（ｘ）に入れ替えること自体では、衝突攻撃を阻止できないことに留意されたい。すなわち、符号化Ｅはバイトｘの値を難読化するが、バイトｘに衝突が発生すると、衝突はプログラム変数Ｅ（ｘ）にも発生する。
【００２３】
差分故障分析に基づく攻撃では、攻撃者が、同じ入力に対してプログラムを２回実行し、その実行のうち一方で１つ又は複数のプログラム変数を変更することによって故障を導入し、両方の出力を記録する。２つの出力が異なる方式から、鍵についての情報が明らかになる。
【００２４】
後者のタイプの攻撃を防御する対策の一つは、変数を表す複数のシェアを使用することによって変数をマスキングするものである。例えば、変数ｘは、ｎ個のシェアｘ０，Ｋ，ｘｎ−１によって加算的に表すことができ、ここでｎ≧２であり、
【数１】
2020521392.tif 000003
である。ここで、加算はＸＯＲ演算である。例えば、ハードウェア実施では、シェアのうちｎ−１個をランダムに選定し、ｎ個のシェアが変数ｘを表すように残りの一つを計算する。すると、ｋ個（ここでｋ＜ｎ）のシェアのいずれかの集合に同時の衝突が起きても、変数ｘに衝突が発生するかどうかについてのどのような情報も明らかにならない。同時の衝突がｎ個のシェアすべてに発生した場合のみ、攻撃者は、衝突がｘに発生することを推測することができる。したがって、鍵を抽出するにはｎ次のＤＰＡ攻撃が必要となる。
【００２５】
ホワイトボックス環境では、シェアを符号化しなければならない。すなわち、攻撃者が、単にシェアを合計する（すなわちシェアの排他ＯＲを計算する）ことで、変数ｘ又はｘの符号化Ｅ（ｘ）を復元できる場合、攻撃者は、シェアを合計することにより、シェアＸによって表される変数ｘに衝突があるかどうかを確かめることができる。この攻撃を防止するために、プログラム内に出現する値は、シェアの符号化Ｅｉ（ｘｉ）であるべきであり、各シェアｘｉは、異なる符号化Ｅｉ∈Ｅを使用して符号化される。すると、和
【数２】
2020521392.tif 000004
はｘに関係しない。本明細書に記載される対策が、ホワイトボックスモデルではなく、グレーボックスモデルのみでセキュリティを高めるために適用される場合、各シェアの別個の暗号化は必要とされない場合もあることに留意されたい。この結果、例えば符号化されたシェアに働くテーブル参照動作を回避することにより、より効率的な実施につながる。
【００２６】
本発明者らの洞察は、一つの変数を複数の符号化されたシェアとして表す後者は、同じ集合Ｘからの２つ以上のシェアに故障を導入し、プログラムの出力が変化するかどうかを確かめることにより、依然としてホワイトボックス攻撃者によって出し抜かれ得るということであった。すなわち、出力が変化しなければ、それぞれ故障があるものとないものである２つのシェアの集合Ｘ＊及びＸは、同じバイトを表す。実際、ξｉ＝Ｅｉ（ｘｉ）であるシェア（ξ０，Ｋ，ξｎ−１）がバイトｘを表す場合、最後のｎ−１個のシェアが符号化値０を有し、同じ値ｘを表すシェアの集合（ξ’，０，０，Ｋ，０）が存在する。よって、２つのシェアの集合Ｘ及びＸ＊が同じ値を表すかどうかを確かめるには、攻撃者は、Ｘを０≦ξ＜２５６についての（ξ，０，Ｋ，０）に変更し、どのξの値について出力が変化しないままであるかを調べ、次いで、Ｘ＊と（ξ＊，０，Ｋ，０）とが同じ出力を与えるようなξ＊を見つけ、ξ＝ξ＊である場合かつその場合に限り、Ｘ及びＸ＊が同じ値を表すと結論付ける。
【００２７】
上記の攻撃を用いると、シェアを使用することによる付加的なセキュリティが無効化され、グレーボックス型攻撃の多く、特に衝突を見つけることに基づく攻撃を有効に実行することが可能となる。一実施形態では、このシェア減少攻撃が回避される。
【００２８】
実施形態は、有限体における離散フーリエ変換を利用する。例えば、データ要素がバイトである場合、有限体はＦ２５６であってよく、有限体は２５６個の要素を有する。一実施形態では、データ要素は、複数ビットからなる二値ワードであり、この場合、標数が２の有限体が適当であり、２のビット数乗のサイズを有する。ただし、これは必須ではない。例えば３値ビットからなるワードに働くブロック暗号を構築することができ、その場合、有限体は標数３等を有する。以下で、シェアの集合を用いた算出を紹介し、それらがどのようにフーリエ変換に関係するのかを説明する。
【００２９】
シェアを用いたデータ要素の表現は、線形変換に理想的に適する。線形変換は、
【数３】
2020521392.tif 000005
という性質を有し、そのため、Ｌを変数ｘに適用するには、各シェアにＬを個別に適用することができる。シェアは通例は符号化され、そのため演算Ｌ（ｘｉ）及び総和がテーブル参照によって行われ得ることに留意されたい。シェアの符号化が線形であるとき、演算子Ｌは、シェア内のビット、例えば「シェアの数」×「データ要素当たりのビット数」のビットに働く行列として、シェア上に表現することができることに留意されたい。以下で、線形演算子のより精緻な実施を論じる。例えば、シェアは、符号化を線形演算に統合できるように、線形符号化、例えばランダム線形符号化を用いて符号化される。
【００３０】
線形演算子に対して機能する上記の算出は、非線形演算子、特にＡＥＳのＳボックスなどの換字ボックスには機能しない。ＡＥＳ  Ｓボックスは非線形変換である。興味深い点として、データ要素に対する任意の非線形演算は、多項式として表され得る。例えば、バイトに対する非線形変換ｆは、有限体Ｆ２５６に対する多項式である。
【数４】
2020521392.tif 000006
ただしｆｊ∈Ｆ２５６。
【００３１】
ここで、和（Σ）は、Ｆ２５６に対する加算、すなわちバイトの排他ＯＲであり、・はＦ２５６に対する乗算を表す。非線形変換は、畳み込みを利用してシェアに適用することができる。２つのシェアの集合Ｘ＝（ｘ０，Ｋ，ｘｎ−１）及びＹ＝（ｙ０，Ｋ，ｙｎ−１）の畳み込みは、
【数５】
2020521392.tif 000007
と定義される。
【００３２】
【数６】
2020521392.tif 000008
が成立し、すなわち、シェアの畳み込みは、積のシェア表現である。したがって、関数ｆは、関数
【数７】
2020521392.tif 000009
としてシェアに実施できることになり、ここで、ｘｊは、Ｘ自体とのＸのｊ乗の畳み込みであり、ｘ０は、１，Ｘ１＝Ｘ，Ｘ２＝Ｘ＊Ｘ，Ｘ３＝Ｘ＊Ｘ＊Ｘ等のシェア表現であり、Ｆｊはｆｊのシェア表現である。
【００３３】
ＡＥＳ  Ｓボックスは、
【数８】
2020521392.tif 000010
と書くことができ、ここで、ｌ（ｘ）＝ｘ２５４はＦ２５６の逆元であり、ＭはＦ２５６に対する加算演算子であり、演算
【数９】
2020521392.tif 000011
は、Ｆ２５６に対するその入力にＳ（０）＝０ｘ６３を足す。加算演算子Ｍは、加算多項式
【数１０】
2020521392.tif 000012
と書くことができ、ｍ０＝０ｘ０５，ｍ１＝０ｘ０９，ｍ２＝０ｘｆ９，ｍ４＝０ｘ２５，ｍ５＝０ｘ０１，ｍ６＝０ｘｂ５，ｍ７＝０ｘ８ｆである。
【００３４】
以下では、シェアの数で、有限体中の要素の数から１を引いた値を割り切れる場合、例えばバイト２５５の場合の離散フーリエ変換についてさらに論じる。以下ではバイトについての場合について論じるが、他の分野でも状況は同様である。ある要素ｘ∈Ｆ２５６＼｛０｝に対して、ｏｒｄ（ｘ）と表記されるｘの次数が、ｘｋ＝１となるような最も小さい正の数ｋとして定義される。すべてのｘについて、ｏｒｄ（ｘ）は、Ｆ２５６＼｛０｝の要素の数である２５５を割り切れる。ｎを２５５の除数とし、すなわちｎ∈｛１，３，５，１５，１７，５１，８５，２５５｝であり、Ωを次数ｎの要素とする。
【数１１】
2020521392.tif 000013
のフーリエ変換
【数１２】
2020521392.tif 000014
は、
【数１３】
2020521392.tif 000015
０≦ｋ＜ｎ
と定義される。
【００３５】
数
【数１４】
2020521392.tif 000016
、Ｋ、
【数１５】
2020521392.tif 000017
をシェアの集合Ｘのフーリエ係数と呼ぶ。逆フーリエ変換は、
【数１６】
2020521392.tif 000018
０≦ｊ＜ｎ
によって与えられる。
【００３６】
Ｃｎに対する従来のフーリエ変換と比較すると、Ｆ２５６が標数２を有し、ｎが奇数であるため、全体の因数１／ｎが欠落している。シェアの集合を置換したものはいずれも同じデータ要素を表すものの、フーリエ変換の目的で、集合を順序付きとみなすことに留意されたい。同様に、フーリエ変換の集合が順序付けされる。フーリエ係数の集合を置換したものが依然として同じデータ要素を表す可能性は低いことに留意されたい。フーリエ係数の集合中の特定のフーリエ係数を識別する必要がある場合には、その係数のインデックス、例えばその下付き文字を参照する。
【００３７】
シェアの和が表現されるデータ要素に等しいという規定でシェア表現が使用されるときに、フーリエ変換との間には次のような興味深い関係がある。シェアの集合Ｘによって表される値は、ゼロ番目のフーリエ係数
【数１７】
2020521392.tif 000019
に等しく、そのため上記の結果は、Ｚ＝Ｘ＊Ｙであれば、
【数１８】
2020521392.tif 000020
であることを示唆する。実際、この関係は、ゼロ番目だけでなく、次のようにすべてのフーリエ係数に成立する。
【数１９】
2020521392.tif 000021
０≦ｋ＜ｎ。
【００３８】
このことは、マッピング
【数２０】
2020521392.tif 000022
がフーリエ係数
【数２１】
2020521392.tif 000023
を、
【数２２】
2020521392.tif 000024
に有効に対応付けることを示唆し、ここで、
【数２３】
2020521392.tif 000025
は、シェアの集合Ｆｊのｋ番目のフーリエ係数である。実施形態では、データ要素を表すインデックス０のフーリエ係数と、攻撃から保護するためのより大きいインデックスをもつフーリエ係数とを使用することにより、シェア表現の集合と対応するフーリエ係数の集合との間のこの自然なマッピングを活用する。しかし、これは全く必要でない。すなわち、フーリエ係数のうちいずれか１つ、例えば１つのみ又は２つ以上が共にデータ要素を表し、残りのフーリエ係数は攻撃から保護するために使用され得る。例えば、一実施形態では、データ値は、ゼロ番目のフーリエ係数だけによって決定されるのではなく、１つ若しくは複数の異なるフーリエ係数により、又はゼロ番目のフーリエ係数と１つ若しくは複数の異なるフーリエ係数とにより決定される。
【００３９】
本発明者らは、シェア減少攻撃が成功するのは、シェアの集合中の２つ以上のシェアを、そのシェアの集合が表す値とプログラム出力との両方が同じままになるように変更することが可能な場合であることを認識した。出力が変化しないという事は、攻撃者が注入した故障が、シェアの集合によって表される値を変えなかったことの合図として攻撃者によって使用される。この攻撃を阻止する方式の１つは、シェアの集合Ｘに対して変更が行われたときに、その変更がシェアの集合（例えば値
【数２４】
2020521392.tif 000026
）によって表される値を同じままにする場合でも、好ましくは攻撃者によって予測不可能な形で、出力を変化させる仕組みである。
【００４０】
図１は、暗号装置１００の一実施形態の例を概略的に示す図である。装置１００は、入力データに暗号演算を行い、出力データを得るようになされ、出力データは、入力データに暗号演算を適用した結果である。一実施形態では、入力データ及び出力データは両方とも平文データである。平文データは、秘密符号化、例えば攻撃に知られていない符号化、例えば装置１００にプライベートであるプライベート符号化、で符号化されていないデータを言う。暗号演算は、暗号化又は解読演算、例えば対称の、例えばブロック暗号、例えばＡＥＳ、又は例えば対称の署名若しくは検証演算である。後者は、ハッシュ関数から、又はブロック暗号から構築されるＭＡＣであり、例えばＣＢＣ−Ｍａｃモードで実行されるブロック暗号である。装置１００は、何らかの目的のために暗号演算を使用する装置に統合され得る。例えば、装置１００は、暗号化されたコンテンツを受け取るようになされる。暗号演算を使用して、コンテンツが解読される。ホワイトボックス実施の性質上、コンテンツが解読された場合でも、そのコンテンツが解読されるための鍵を入手することは難しい。例えば、装置１００は、例えば署名又はＭＡＣをメッセージに適用することによって金融取引を認証するようになされる。攻撃者にとって、その演算が行われたときに用いられた鍵を、装置から、例えば装置で実行されるソフトウェアから抽出することは難しい。
【００４１】
プリミティブの実行は、プロセッサ回路内で実施され、その例が以下に示される。図１は、プロセッサ回路の機能ユニットであり得る機能ユニットを示す。例えば、図１は、プロセッサ回路の可能な機能編成の設計図として使用される。プロセッサ回路は、図１で、ユニットと別個には図示していない。例えば、図１に示す機能ユニットはその全体又は一部が、装置１００に記憶された、装置１００のマイクロプロセッサによって実行可能なコンピュータ命令として実施される。混合型の実施形態では、機能ユニットは、一部が、ハードウェア、例えばコプロセッサ、例えば暗号コプロセッサとして実施され、一部が、装置１００に記憶されて実行されるソフトウェアとして実施される。
【００４２】
装置１００は、内部状態ストレージ１３０を備える。内部状態ストレージ１３０は、メモリ、例えば電子メモリとして実施される。内部状態ストレージ１３０は、内部状態を記憶するようになされる。内部状態は、１つ又は複数のデータ要素を備える。データ要素は、二値のデータ要素であり得る。例えば、データ要素は、バイト、ニブル、又はより大きなワードであり、例えば一実施形態では、データ要素は、複数ビット、例えば少なくとも４ビットを備え、少なくとも１６個の異なる可能な値を有する。通例は、すべてのデータ要素が同じサイズである。内部状態は反復的に更新される。例えば、ＡＥＳの場合、内部状態は１６個のデータ要素、この場合は１６バイトを備え、合計１２８ビットになる。内部状態のデータ要素は、本明細書にさらに説明されるように、内部状態ストレージ１３０に直接記憶されることはない。
【００４３】
これを図２に示す。図２は、内部状態の更新の一実施形態の例を概略的に示す図である。図２には、内部状態２１１、２１２、２１３、２１４が示される。線形又は非線形演算子を適用することにより、内部状態が更新される。図２には、内部状態２１１から内部状態２１２への、内部状態２１２から内部状態２１３への更新を示している。入力データから初期内部状態が導出される。図２で、入力データは２１０に表され、初期内部状態は内部状態２１１である。同様に、出力データ２１５は、最終内部状態２１４から導出される。内部状態に対する演算の一部は鍵に依存する。多くの場合、入力データ及び出力データ２１０、２１５は平文であり、例えば秘密符号化で符号化されていない。装置１００がブロック暗号暗号化用に構成される場合でも、平文の出力データはなお、入力データを暗号化したもの、例えば平文の暗号化されたデータである。ただしこれは必須ではない。装置１００は、より大きい暗号システム、例えばデジタル著作権管理（ＤＲＭ）システムに統合されてよい。そのようなシステムでは、コンテンツは、デジタル著作権によって許される場合にのみレンダリングされる。暗号プリミティブに入るデータは、さらに他の暗号処理又は意思決定への入力の結果であるデータである。これらの演算は、符号化されたデータにも行われてよい。そのような場合、入力データ及び出力データの一方又は両方が符号化され、平文ではない。さらに、入力データ及び出力データが符号化されないが、対応する変換ステップを省くことにより、符号化された入力／出力データを用いる実施形態が作り出されることが想定される。
【００４４】
内部状態は、内部状態ストレージ１３０内で特殊な形で表される。図３は、内部状態の表現の一実施形態の例を概略的に示す図である。図３は、同じ内部状態を異なるように見た大きいテーブルを示す。３４０にある左下のボックスだけが、内部状態ストレージ１３０、例えばメモリに物理的に記憶されている実際のデータを示す。ボックス３４０内の個々のデータ要素、例えばバイトは、それらが符号化されていることを示すために破線で示している。例えば、それらは、何らかの秘密、例えばコンパイル時に選択されるランダム符号化で符号化される。右の列は、左の列をフーリエ変換したものである。
【００４５】
ボックス３１０には平文内部状態を示している。内部状態のデータ要素、例えばバイト３１１、３１２、３１３が示されている。例えば、ＡＥＳの場合、バイト数は１６以上である。例えば、内部状態３１０は、Ｆｉｐｓ１９７に定義されるように「状態の配列」である。
【００４６】
ボックス３１０に示される各データ要素は、メモリ内で対応するシェアの集合として表される。例えば、データ要素３１１はシェアの集合３２１に対応し、データ要素３１２はシェアの集合３２２に対応し、データ要素３１３はシェアの集合３２３に対応する。データ要素とシェアの集合との間の関係は、一対多である。シェアの集合のデータサイズは、データ要素のサイズの倍数である。例えば、シェアの集合は複数のシェアを備え、その各々がデータ要素と同じサイズを有し、例えばそれらは両方ともバイトである。
【００４７】
ボックス３２０に示されるシェアの集合は符号化されていない。したがって、これらのシェアの集合がホワイトボックス実施においてこのように使用された場合、攻撃者は単にメモリからシェアを読み出し、正しいデータ要素に対応付けることができる。
【００４８】
ボックス３３０には、３２０のシェアの集合を離散フーリエ変換したものが示される。フーリエ係数の集合３３１、３３２、及び３３３が示されている。例えば、フーリエ係数の集合３３１は、有限体における離散フーリエ変換をシェアの集合３２１に適用することによって得られる。ボックス３３０のフーリエ係数の集合も符号化されておらず、ホワイトボックス実施ではこのようにメモリに記憶されることもできない。ボックス３４０は、符号化されたシェアの集合として表される内部状態を示す。ボックス３４０のデータは、各集合の各シェアを別々に符号化することによってボックス３２０から得られる。例えば、集合３２１の第１のシェアを符号化することにより、集合３４１の第１のシェアが得られる等である。一実施形態では、ボックス３４０に示されるデータのみが直接見ることができ、例えば物理的にメモリに記憶される。
【００４９】
興味深い点として、符号化はシェア領域で行われるのに対し、シェアの集合の意味はフーリエ領域に表される。シェアは別々に符号化され、通常はそれにより、大半の演算をそれらに行うことを妨害する。しかし、フーリエ係数は、シェアの集合全体によって決定される大域的性質である。つまり、シェアの集合が別々に符号化されていても、フーリエ変換と畳み込みとの間の関係を通じて、シェアの集合の意味が操作されることが可能である。
【００５０】
ボックス３２０又は３４０のシェアの集合は、内部状態のデータ要素を表す。どのデータ要素が表されるかはフーリエ係数に依存する。一実施形態では、ボックス３３０のフーリエ係数の集合各々に対してフーリエ係数のうち１つが、それが表すデータ要素として選択される。例えば、データ要素の値を与えるシェアの集合に対応するフーリエ係数のうち所定の１つを選定し、例えばこのフーリエ係数はデータ要素に等しい。一実施形態では、対応するデータ要素の値を決定するのは、ゼロ番目のフーリエ係数（例えばインデックス０のフーリエ係数）である。この選定は、対応するシェアの集合の和によってもデータ要素が決定される（例えばデータ要素に等しい）という結果を有するので、分析及び実施を単純化する。しかし、これは必要とはされず、一実施形態では、何らかの他のフーリエ係数、例えばインデックス１の係数が、データ要素を決定する。同じ係数が異なる集合に対応するデータ要素を表すことは必要とさえされず、例えば集合３３１では、インデックス０のフーリエ係数であり、一方集合３３２ではインデックス１のフーリエ係数である等である。実際、どのフーリエ係数がデータ値を表すかは、ラウンドごとに異なることさえあり、例えば内部状態の更新ごとに異なる。例えば、次の更新後には、集合３３１ではインデックス２のフーリエ係数になり、一方、集合３３２ではインデックス３のフーリエ係数になる等である。
【００５１】
さらに一般的には、単一のフーリエ係数がデータ要素を決定することは必要とされない。例えば、一実施形態では、フーリエ係数の部分集合、例えば２つ以上の要素をもつ部分集合が、データ要素を決定する。この部分集合は真部分集合であり、例えば、多くともフーリエ係数の半分がデータ値を決定する。残りのフーリエ係数は、シェア減少攻撃などの攻撃から保護するために使用される。
【００５２】
メモリ内のシェアの集合に対応するフーリエ係数の集合は、それらの間で所定の関係を満たす。この所定の関係は、不変量として更新によって保持される。一実施形態では、所定の関係は、フーリエ係数のいくつかが等しいことを含む。基本的な考え方は、異なる変数を表すシェアの集合間で関係を強制するための変数を表すシェアの選択に利用できる自由度を部分的に使用することである。関係は、有限体Ｆ２５６におけるフーリエ変換として表される。
【００５３】
例えば、一実施形態では、関係は、異なるフーリエ係数の集合の２つ以上のフーリエ係数が等しいことを含む。例えば、コンパイル時に特定のフーリエ係数が選択される。例えば、一実施形態では、フーリエ係数の集合が順序付けられ、集合中の係数がインデックスを有する。所定の関係は、少なくともいずれかのインデックスについて、同じインデックスのフーリエ係数のうち少なくとも２つが等しいことを含む。例えば、集合３３１及び３３２のゼロ番目のフーリエ係数が等しいことを要求する。所定の関係は、少なくともいずれかのインデックスについて、そのインデックスのフーリエ係数のすべてが等しいことを含んでもよい。例えば、所定の関係は、集合３３１、３３２、３３３及びフーリエ係数のすべての他の集合のゼロ番目のフーリエ係数同士が等しいことを要求する。
【００５４】
この関係は、好ましくはより多くのシェアの集合、より好ましくはすべてのシェアの集合に拡張される。例えば、一実施形態では、フーリエ係数の集合ごとにインデックスが選択され、関係は、それら集合から選択されるフーリエ係数が等しいことを含む。例えば、１６個の集合がある場合は、各集合に１つずつ、１６個のインデックスを選択し、対応するフーリエ係数が等しいことを要求する。例えば、フーリエ係数の第１、第２、及び第３の集合．．．にそれぞれある、インデックス１、５、７．．．をもつ係数が等しい。
【００５５】
所定の関係に対する要件が厳格であるほど、攻撃者が衝突を見つけるのが難しくなる。例えば、所定の関係は、フーリエ係数の集合中の各フーリエ係数が、１つを除いて、その他のフーリエ係数の集合中のそれぞれのフーリエ係数に等しいことであり、１つの例外はデータ要素を表すために使用される。これを行う１つの方式は、同じインデックスのフーリエ係数が、１つのインデックス、例えばゼロ番目のインデックスを除いて、等しいことを要求するものである。例えば、集合３３１、３３２、３３３．．．中の１番目のフーリエ係数同士が等しく、集合３３１、３３２、３３３．．．中の２番目のフーリエ係数同士が等しい等である。
【００５６】
上記の例は、同じ集合のフーリエ係数間の関係は課さない。例えば、シェアの集合のうち１つに対する任意の内部状態及び任意の選定、例えば集合３２１に対する任意の選定、又は代わりに例えば集合３３１などフーリエ係数の集合のうち１つに対する任意の選定について、内部状態が有効に表され、関係が満たされるように残りの集合を選定する方式がある。換言すると、内部状態における単一のデータ要素の有効な表現の数は、フーリエ係数間の関係を要求することによっては減らないが、内部状態全体の有効な表現の数は減る。
【００５７】
したがって、関係を選択する際には大きな選定がある。例えば、集合当たり１６個のデータ要素及びｎ個のシェアを仮定し、集合当たり１つのフーリエ係数をデータ表現を表すものとして使用し、残りを保護のために使用すると、データ要素を表すために第１の集合中のフーリエ係数を選択し（ｎ個の選定）、どの係数がデータ要素を表し、残りがどの係数に等しいかを示すようにフーリエ係数のその他の集合を順序付けすること（ｎ！個の選定）により、ｎ（ｎ！）１５を得ることができる。この大きな空間からランダムな関係を選択すると、攻撃者の作業がさらに複雑化する。例えば、各装置１００は異なる関係を受け取り、これは、例えば装置に透かしを入れる役割も果たす。
【００５８】
演算子は、それらが関係を保持するように選択される。線形演算子の場合、フーリエ変換が線形であり、関係が線形であるため、これを行うことができる。非線形演算子についての関係を維持することは、マッピング
【数２５】
2020521392.tif 000027
が、フーリエ係数
【数２６】
2020521392.tif 000028
を
【数２７】
2020521392.tif 000029
に有効に対応付け、ここで、
【数２８】
2020521392.tif 000030
は、シェアのｋ番目のフーリエ係数である、という洞察を使用して行うことができる。換言すると、シェアの集合へのマッピングは、フーリエ係数に対する並列した多項式になる。したがって、異なる集合にある同じインデックスの２つのフーリエ係数が等しければ、この関係は、単に両方のシェアの集合に同じマッピングを作用させることによって保持される。同じ非線形演算子が内部状態内のすべてのデータ要素に適用され、関係が、同じインデックスをもつフーリエ係数についての相等性関係のみを示唆する実施形態では、関係の保持は、単にすべてのシェアの集合に同じマッピングを適用することにより、自動的に行われる。この場合、
【数２９】
2020521392.tif 000031
のシェアの集合Ｆｊは、暗号プリミティブのための正しい多項式係数を偶然表す任意のシェアの集合として選択することができる。例えば、コンパイル時に、係数を表すためのランダムなシェアの集合Ｆｊを選択する。ただし、一実施形態では、Ｆｊ中の要素の１つを除くすべてが０として選択される。例えば、ＡＥＳで使用される逆元の一実施では、Ｆｊ中のすべてのエントリが０又は１のいずれかである。
【００５９】
他の関係を保持することは、Ｆｊの適切な選定によって行うことができる。例えば、関係に従って、集合３３１の１番目のフーリエ係数が、集合３３２の２番目のフーリエ係数に等しいとする。この場合、集合３３１に作用する非線形演算子の
【数３０】
2020521392.tif 000032
を、集合３３２に作用する非線形演算子の
【数３１】
2020521392.tif 000033
と等しく選定することができる（すべてのｊについて）。例えば、ゼロ番目のフーリエ係数がデータ要素の実際の値に対応する場合は、データ要素に行う所望の非線形演算、例えば所望のＳボックスに従って、それら集合に
【数３２】
2020521392.tif 000034
を選定する。
【００６０】
また、例えばデータ要素を決定するために、データ要素をフーリエ係数の部分集合によって表すことも可能であり、例えば２つ以上の要素をもつ部分集合が使用される。例えば、データ要素は、ゼロ番目のフーリエ係数と１番目のフーリエ係数の和に等しい。これは、各自の係数
【数３３】
2020521392.tif 000035
及び
【数３４】
2020521392.tif 000036
を通じて表され、それらの和がデータ要素に対する所望の演算、例えば所望のＳボックスと等しい多項式を選択することによって実施することができる。
【００６１】
どのような非線形演算も多項式として表すことが可能であることに留意されたい。非線形演算子が各自のフーリエ係数を使用して定義される場合でも、非線形演算子は、シェアの集合の（符号化された）シェアを用いて評価される。例えば、シェアの集合自体とのシェアの集合の反復的な畳み込みとして、シェアの集合のべき乗が算出される。
【００６２】
内部状態ストレージ１３０における内部状態を更新することは、非線形演算子及び線形演算子を伴う。図１は、非線形演算１４１、１４２、１４３を示す。内部状態に働く非線形演算は、内部状態のデータ要素のうち１つのみに作用する別個の非線形演算、例えば非線形の下位演算としてなされる。例えば、これらの下位演算は、すべてのデータ要素、例えば同じＳボックスについて同じであり、又は異なる。データ要素のレベル、例えばボックス３１０のレベルで行われるＳボックスが同じであっても、シェアの集合のレベルで、例えばボックス３２０に行われる演算、又はボックス３４０に対する実際の符号化は、異なってよい。例えば、それらは、関係の一部ではないフーリエ係数、例えばデータ値を表すために使用されるフーリエ係数に対して異なる関数を行う。単一のデータ要素に作用する非線形演算子は、対応するシェアの集合中のシェアにのみ作用する。
【００６３】
図１は、線形演算１４６、１４７、１４８を示す。内部状態を更新する線形演算は、内部状態の少なくとも２つのデータ要素を表すメモリ内の少なくとも２つのシェアの集合に同時に作用する。例えば、線形演算は行列として、例えば２つの要素（ビット）をもつ体、又は例えばＦ２５６などのより大きい有限体に対して表される。関係及びフーリエ変換はどちらも線形演算なので、線形演算は、以下を連結することによって構築される。
−  線形演算が作用するシェアの集合ごとにフーリエ係数の集合を生じさせるフーリエ演算子、
−  不変量を保持しつつフーリエ係数に作用する１つ又は複数の線形演算子、及び
−  逆フーリエ演算子。
【００６４】
線形演算への入力は、例えば、シェアの２つ以上の集合のシェアを要素としてもつベクトルである。例えば、線形演算子は、データ値を表すフーリエ係数に作用する限り、例えば規格の必要に応じて、暗号プリミティブに必要とされる線形演算を行うことができるが、１つ又は複数の線形演算子が、データ値を表さないフーリエ係数に作用する限り、関係が保持されている以上は、線形演算子は任意の線形演算、例えばランダムな線形演算を行うことができる。例えば故障攻撃が原因で、第１の場所で関係が満たされなかった場合には、関係が無効なままであること、又は、少なくとも、関係を偶然復元する可能性が一様ランダム分布を用いた場合以下であることが好ましいことに留意されたい。
【００６５】
例えば、データ値を表す１つの（又は複数の）フーリエ係数を除いて、同じインデックスのフーリエ係数同士が等しいことを関係が要求する実施形態では、以下を使用してよい。
−  線形演算が作用するシェアの集合ごとにフーリエ係数の集合を生じさせるフーリエ演算子。フーリエ係数の集合は、あるインデックスを有する集合中の係数で順序付けられる。
−  異なるインデックスのフーリエ係数とは無関係に、同じインデックスのフーリエ係数に作用する１つ又は複数の線形演算子。１つ又は複数の線形演算子は、不変量を保持しつつフーリエ係数に作用するようになされる。
−  逆フーリエ演算子。
【００６６】
このような演算子の分離は可能であるが、必要ではない。例えば、１つ又は複数の線形演算子は、データ要素を表すフーリエ係数に作用する、例えば集合当たり１つ又は複数のフーリエ係数に作用する１つの演算子と、それが関係を保持するという要件を除いてすべての残りのフーリエ係数に作用する１つの線形演算子、例えばランダム線形演算とを含む。
【００６７】
行列積を評価する際の低レベルの乗算は、シェアが符号化されている場合にはテーブル参照によって行われてよいことに留意されたい。それに代えて、シェアの復号及び再符号化は、符号化が線形であれば、線形演算に統合されてもよい。
【００６８】
指摘したように、演算の一部は鍵付きとされてよい。例えば、演算時にラウンド鍵が内部状態のすべて又は一部に追加される。鍵は、符号化された形態で装置１００に記憶されてよい。好ましくは、鍵は、例えば集合のフーリエ係数に制約が課された（符号化された）シェアの集合として、内部状態と同じタイプの符号化を使用する。例えば、鍵は、対応するシェアの集合として装置１００のメモリ内に表現され、シェアの集合は、有限体における離散フーリエ変換に従って、鍵のシェアの集合に対応するフーリエ係数間の所定の関係を満たす。
【００６９】
図１に戻ると、同図はさらに、入力データを受け取るようになされた入力インターフェース１００を示している。例えば、入力インターフェース１００は、コンピュータネットワーク接続、コンピュータ記憶ユニット等を備える。入力インターフェース１００は、アプリケーションプログラミングインターフェース（ＡＰＩ）を備えてよく、さらなる例が本明細書に与えられる。一実施形態では、入力データは、内部状態に適する形ですでに符号化されている。以下では、入力インターフェースがプライベート符号化に従って符号化されていない状況を説明する。その場合、装置１００は、平文入力データに対する任意選択の入力演算子１１２を備えてよい。入力演算子１１２は、初期内部状態を表すシェアの複数の集合を生じさせる。シェアの複数の集合は所定の関係を満たす。
【００７０】
例えば、入力演算子は、次のようないくつかの線形演算子を連結することによって構築される。
−  入力データを、関係を満たすフーリエ係数の集合に対応付ける演算子。例えば、演算子は、入力データを、データ要素を表すフーリエ係数に対応付ける。例えば、１つのフーリエ係数がデータ要素を表す場合、演算子は、入力のデータ要素を、対応するフーリエ係数に直接対応付ける。複数のフーリエ係数が共に一つの入力データ要素を表す場合（例えば和として）、フーリエ係数のうち１つを除くすべてがランダムに選択され、最後の１つは、入力データ要素及び選択されたランダムなフーリエ係数から算出される。残りの保護フーリエ係数については、関係を満たすようにランダムな選定が行われる。ランダムなフーリエ係数は、ランダム演算子を入力データに適用することによって選択される。ホワイトボックス実施では、別個の乱数発生器を使用することは、多くの場合、勧められない。唯一、グレーボックス実施では、ランダムフーリエ係数を乱数発生器によって選択することができる。
−  逆フーリエ変換
−  例えばシェアの各々を符号化するための符号化演算。符号化は線形に選択されてよい。
【００７１】
これには、シェアの集合のビットサイズが少なくとも入力データのサイズと同じ大きさであれば、利点がある。この場合、衝突が発生する、すなわち、２つの異なる入力データがシェアの集合上の衝突を引き起こす可能性は低い。入力演算子を各シェアの集合に対して可逆にすることにより、より良好な保証が得られる。すなわち、入力演算子は、単一のデータ要素を表すシェアの単一の集合の内容から入力データが一意に決定されることが可能となるように選択される。ＡＥＳの場合、これは１７個のシェアを取り出すことによって実現できる。そのような１７個のシェアを用いるＡＥＳの実施では、すべての衝突が回避され、そのため、相互情報分析（ＭＩＡ）に対して十分に安全であることが予想される。
【００７２】
装置１００はさらに、最終内部状態から出力データを導出するための出力演算子１２２を備える。出力演算子１２２は、シェアの集合を、その集合が表すデータ要素に歪みを足したものに対応付ける。歪みは、フーリエ係数が所定の関係を満たす場合に歪みがゼロになるように、シェアの集合のフーリエ係数に依存する。出力データは、平文出力データであるか、又は出力データを利用する次のアプリケーションによって期待される符号化で符号化された出力データである。ここでは出力データが平文出力データであると仮定する。
【００７３】
例えば、出力演算子は、以下を連結することによって構築される。
−  内部状態の符号化を除去する復号演算子
−  内部状態をフーリエ係数の集合に変換するフーリエ変換
−  データ要素を表すフーリエ係数を、それらが表すデータ要素に対応付ける演算子
−  保護フーリエ係数を、歪み、例えば歪みベクトルに対応付ける演算子。この演算子は、関係を満たすフーリエ係数を０に、例えば歪み無しに対応付けるように構築される。例えば、関係を表すベクトルは、演算子のカーネル中にあってよい。
【００７４】
任意選択で、後続のアプリケーションが、データが符号化で搬送されることを期待する場合には、符号化演算子が追加され得る。
【００７５】
以下に、本発明による暗号装置又は方法において実施された暗号プリミティブの詳細な実施形態が与えられる。選択された暗号プリミティブはＡＥＳブロック暗号であり、これは例示として選択されたものである。以下の説明は暗号化演算に関するが、解読演算が平易に理解される。多くの要素に変形の実施が可能であることに留意されたい。ｎ個のシェアを用いるＡＥＳ実施を構築することが可能であり、ここで、ｎは２５５の除数であり、すべてのＡｄｄＲｏｕｎｄＫｅｙ、ＳｈｉｆｔＲｏｗ、ＭｉｘＣｏｌｕｍｎｓ、及びＳｕｂＢｙｔｅｓ演算（又はＡＥＳ解読のためのそれらの逆元）の前及び後に、各ｋ、１≦ｋ＜ｎについて、状態バイト
【数３５】
2020521392.tif 000037
を表すシェアの集合Ｓｒ，ｃのｋ番目のフーリエ係数
【数３６】
2020521392.tif 000038
が、すべての行インデックス及び列インデックスｒ，ｃについて等しいという性質を有する。行インデックス及び列インデックスは、例えば４つの行及び４つの列をもつ、状態配列としてのＡＥＳの内部状態の表現を言う。加算変換ＡｄｄＲｏｕｎｄＫｅｙ、ＳｈｉｆｔＲｏｗｓ、及びＭｉｘＣｏｌｕｍｎｓについて、これは、本明細書で詳細に述べられるように、フーリエ係数に対する変換の適切な選定によって実現することができ、一方、ＳｕｂＢｙｔｅｓ演算については、フーリエ変換はシェアの集合に作用する多項式と互換性があるため、この性質を保証することができる。この実施形態では、関係について１つの特定の選定が行われる。さらに、内部状態のデータ要素を表すためにゼロ番目のフーリエ係数が使用される。
【００７６】
そのような実施において、攻撃者が、シェアの集合、例えばＳ０，０の中のいくつかのシェアを、
【数３７】
2020521392.tif 000039
が変化しないような方式で変更すると仮定する。すると、その他のフーリエ係数
【数３８】
2020521392.tif 000040
、Ｋ、
【数３９】
2020521392.tif 000041
のうち少なくとも１つが変化しているはずである（何故ならばそうでなければ攻撃者は何も変化させられないため）。変更の前に、１≦ｋ＜ｎについて、１６個の状態バイトｓｒ，ｃを表す１６個のシェアの集合Ｓｒ，ｃのｋ番目のフーリエ係数
【数４０】
2020521392.tif 000042
がすべて互いと等しい場合には、変更の後に、変化したシェアの集合Ｓ０，０のｋ番目のフーリエ係数が１５個のその他のシェアの集合のｋ番目のフーリエ係数と異なるような、１≦ｋ＜ｎであるｋの少なくとも１つの値がある。
【００７７】
最後のＡＥＳ演算の後の１６個のシェアの集合から１６バイトで構成されるＡＥＳ出力を生成する際、少なくとも１つの
【数４１】
2020521392.tif 000043
がその他の
【数４２】
2020521392.tif 000044
と異なるときに出力が間違いとなる（すなわちｉの少なくとも１つの値について
【数４３】
2020521392.tif 000045
となる）ように、各出力バイトｏｕｔｉが、１≦ｋ＜ｎ、０≦ｒ＜４、０≦ｃ＜４である
【数４４】
2020521392.tif 000046
及びすべての
【数４５】
2020521392.tif 000047
に依存するように注意を払わなければならない。
【００７８】
この仕組みは、通常のＤＦＡ攻撃をも、より難しくすることに留意されたい。すなわち、攻撃者の目標は、出力が変化する方式から鍵に関する情報を得ることができるような方式で何らかのシェアの集合Ｘを変更することになる。しかし、この仕組みが実施されると、攻撃者が有用であると考える出力を与える、攻撃者が行うことができる唯一の変更は、シェアの集合のゼロ番目のフーリエ係数のみを変更し、その他のフーリエ係数を不変のままにするものである。１つのみのフーリエ成分を変化させようとする場合には、Ｘのすべてのシェアを適当な方式で変化させなければならず、このことは、攻撃者が、成功するためにはｎ次のＤＦＡを行う必要があることを示唆する。
【００７９】
ここでは、先に述べた成分を使用するＡＥＳ実施を提示する。ＡＥＳ実施は、実行時に１２８ビットの入力を１２８ビットの出力に変換する。この実施は、コンパイル時に作成される。実施のセキュリティは、主としてシェアの数ｎに依存する。まず、ＡＥＳ暗号化を構築するための詳細を述べる。
【００８０】
コンパイル時に実施者は以下を行う。
【００８１】
１．シェアの数ｎを選定する。ここで、ｎは２５５の除数である。ｎ＝１を選定することは、デフォルトのＡＥＳ実施を上回るセキュリティ上の利点を提供せず、ｎ∈｛５１，８５，２５５｝は、実用には大き過ぎ、そのため好ましくはｎ∈｛３，５，１５，１７｝である。実施者は、ｏｒｄ（Ω）＝ｎである要素Ω∈Ｆ２５６も選定する。指摘したように、ｎ＝１７の選定が特に有益である。
【００８２】
２．実施者は、ＡＥＳ規格で指定されるように、ＡＥＳ鍵を（Ｎｒ＋１）個のラウンド鍵へと拡張する。各ラウンド鍵は、４×４配列に配置された１６バイトで構成される。ラウンド鍵バイトは、
【数４６】
2020521392.tif 000048
と表記され、０≦ｒ＜Ｎｒ、０≦ｉ＜４、０≦ｊ＜４である。
【００８３】
０≦ｒ＜Ｎｒである各ラウンドインデックスｒについて、実施者は、１≦ｋ＜ｎである
【数４７】
2020521392.tif 000049
で表記されるｎ−１バイトをランダムに選定する。各ラウンドｒ及び位置ｉ，ｊについて、実施者は、
【数４８】
2020521392.tif 000050
及び
【数４９】
2020521392.tif 000051
、Ｋ、
【数５０】
2020521392.tif 000052
を有するｎ成分のラウンド鍵シェア
【数５１】
2020521392.tif 000053
をフーリエ係数として作成し、よって
【数５２】
2020521392.tif 000054
となり、ただし、
【数５３】
2020521392.tif 000055
である。
【００８４】
３．各ラウンドｒ、位置ｉ，ｊ、及び各シェアインデックスｍについて、実施者は、可逆加算符号化
【数５４】
2020521392.tif 000056
をランダムに選定する。ＡＥＳ実施のサイズは、使用されるラウンド符号化の数と共に線形に増大する。実施のサイズを減らすために、実施者は、各ラウンドで同じ符号化を使用することを選ぶことができ、そのため符号化はｒに依存しなくなる。実施者は、ラウンドごとに符号化を交互にすることを選定してもよく、それにより符号化がｒ  ｍｏｄ２を通じてのみｒに依存するようになる。これらの選択は、衝突及びＤＦＡ攻撃に対抗するセキュリティに影響を与えず、より多い数の異なる符号化を選定すると、一部のホワイトボックス攻撃がより難しくなると考える。各ラウンドｒに、１６ｎ個の符号化
【数５５】
2020521392.tif 000057
は、好ましくはすべてが異なる。
【数５６】
2020521392.tif 000058
の逆元を
【数５７】
2020521392.tif 000059
と表記する。
【００８５】
４．実施者は、符号化されたラウンド鍵シェア
【数５８】
2020521392.tif 000060
を計算し、符号化された鍵のシェアの集合
【数５９】
2020521392.tif 000061
を作成する。
【００８６】
５．実施者は、バイト
【数６０】
2020521392.tif 000062
を含んでいる符号化された乗算テーブルを計算する。
【００８７】
ここで、０≦ｒ＜Ｎｒ、０≦ｍ０、ｍ１＜ｎ、０≦ｅ０、ｅ１＜８である。乗算テーブルは、対称性
【数６１】
2020521392.tif 000063
を満たすので、実施者は、例えば、ｅ０≦ｅ１である乗算テーブルの要素のみを記憶することを選定してよい。
【００８８】
例えば、上記で使用される２のべき乗を、２＾０＝０００００００１、２＾１＝００００００１０、２＾２＝０００００１００、２＾３＝００００１０００、２＾４＝０００１００００、２＾５＝００１０００００、２＾６＝０１００００００、２＾７＝１０００００００として実施してよく、これらの数又はビット列は、体の基底を形成する。
【００８９】
６．０≦ｒ＜Ｎｒごとに、実施者は、Ｓ（０）のランダムシェア表現Ｓ（０）（ｒ）、入力が０に等しいときのＳボックスの出力、及びＳボックスにおける加算演算子Ｍの０≦ｋ＜８についての多項式係数ｍｋのランダムシェア表現
【数６２】
2020521392.tif 000064
を選定する。実施者は、これら表現のシェアを符号化し、それにより位置に依存する符号化されたシェアの集合
【数６３】
2020521392.tif 000065
及び
【数６４】
2020521392.tif 000066
が与えられる。
【００９０】
７．任意のラウンドインデックス０≦ｒ＜Ｎｒについて、実施者は、１６ｎバイトに対する加算演算子
【数６５】
2020521392.tif 000067
を
【数６６】
2020521392.tif 000068
として作成し、ここで、
−  任意のラウンドインデックスｒ，０≦ｒ＜Ｎｒについて、Ｄ（ｒ）は、１６ｎバイトのベクトル（Ｂ０，Ｋ，Ｂ１６ｎ−１）を入力として受け取り、０≦ｉ、ｊ＜４、及び０≦ｍ＜ｎについて、
【数６７】
2020521392.tif 000069
をＢｎ（ｉ＋４ｊ）＋ｍに適用する演算子として定義される。
−  任意のラウンドインデックスｒ，０≦ｒ＜Ｎｒについて、Ｅ（ｒ）は、１６ｎバイトのベクトル（Ｂ０，Ｋ，Ｂ１６ｎ−１）を入力として受け取り、０≦ｉ、ｊ＜４、及び０≦ｍ＜ｎについて、
【数６８】
2020521392.tif 000070
をＢｎ（ｉ＋４ｊ）＋ｍに適用する。
−  Ｆは、１６ｎバイトのシーケンス（Ｂ０，Ｋ，Ｂ１６ｎ）を入力として受け取り、各ｉ，ｊについてＸ＝Ｂ（Ｂｎ（ｉ＋４ｊ），Ｋ，Ｂｎ（ｉ＋４ｊ）＋ｎ−１）を設定し、Ｘにフーリエ変換を適用し、
【数６９】
2020521392.tif 000071
を設定する。
−  Ｔは、１６ｎバイトのベクトル
【数７０】
2020521392.tif 000072
を入力として受け取り、それらをシーケンス
【数７１】
2020521392.tif 000073
に置換し、ここで
【数７２】
2020521392.tif 000074
である。
−  Ｌ（ｒ）は、１６ｎバイトのベクトル
【数７３】
2020521392.tif 000075
を入力として受け取り、０≦ｋ＜ｎである各ｋについて、変換
【数７４】
2020521392.tif 000076
を１６バイトのベクトル
【数７５】
2020521392.tif 000077
に適用する。
【００９１】
変換
【数７６】
2020521392.tif 000078
は、その入力
【数７７】
2020521392.tif 000079
を
【数７８】
2020521392.tif 000080
、０≦ｉ、ｊ＜４である４×４行列Ａにする。０≦ｒ＜Ｎｒ−１である場合、変換は、ＭｉｘＣｏｌｕｍｎｓ  ｏ  ＳｈｉｆｔＲｏｗｓ演算をＡに適用する。ｒ＝Ｎｒ−１である場合、ＳｈｉｆｔＲｏｗｓ演算をＡに適用する。そして、列ごとに１６バイト分のＡを出力する。
【００９２】
１≦ｋ＜ｎについて、変換
【数７９】
2020521392.tif 000081
は、１６バイトに対するランダムに選択される加算可逆変換であり、エントリがすべて等しい１６バイトのベクトルに作用するとき、エントリがすべて等しい１６バイトのベクトルを出力するという性質を有する。そのような変換をどのようにすると効率的に生成できるかが以下に示される。
【００９３】
８．実施者は、１６バイトに作用し、１６ｎバイトを出力する加算演算子
【数８０】
2020521392.tif 000082
を
【数８１】
2020521392.tif 000083
として構築する。ここで、
【数８２】
2020521392.tif 000084
である。
各Ｒｉｎ，ｋ、１≦ｋ＜ｎは、１６バイトに作用し、１バイトを出力するランダムな加算演算子であり、Ｕｉｎにおいて１６回繰り返される。演算子Ｒｉｎ，ｋを構築する好適な方法の一つは、１６バイトに対するランダムな可逆演算子Ｒを選定し、Ｒｉｎ，ｋ（Ｂ０，Ｋ，Ｂ１５）＝Ｂ’ｋ−１とし、ここで（Ｂ’０，Ｋ，Ｂ’１５）＝Ｒ（Ｂ０，Ｋ，Ｂ１５）である。ｎ＝１７のとき、この構築は、１６個の入力バイト（Ｂ０，Ｋ，Ｂ１５）と１６個のバイト（Ｒ１（Ｂ０，Ｋ，Ｂ１５），Ｋ，Ｒ１６（Ｂ０，Ｋ，Ｂ１５））との間に全単射があることを保証する。したがって、１６個の入力バイトと１６個のフーリエ係数
【数８３】
2020521392.tif 000085
、Ｋ、
【数８４】
2020521392.tif 000086
との間に全単射があることになり、シェアの集合の非ゼロのインデックスが、任意の状態バイトを表し、よって、異なる入力は常に異なるシェアの集合を与えることになり、衝突が起こらない。
【００９４】
９．実施者は、演算子
【数８５】
2020521392.tif 000087
を
【数８６】
2020521392.tif 000088
として構築し、ここで
【数８７】
2020521392.tif 000089
である。
ここで、各Ｒｏｕｔ，ｋ，１≦ｋ＜ｎは、１６バイトに作用し、１６バイトを出力するランダムな加算演算子であり、エントリがすべて同じである１６バイトのベクトルに作用するとき、全ゼロベクトルが出力になるという性質を有する。
【００９５】
実施者は、演算子
【数８８】
2020521392.tif 000090
、
【数８９】
2020521392.tif 000091
、及び
【数９０】
2020521392.tif 000092
、符号化された鍵シェア
【数９１】
2020521392.tif 000093
、符号化された乗算テーブル
【数９２】
2020521392.tif 000094
、Ｓボックスオフセットシェア
【数９３】
2020521392.tif 000095
、並びに線形変換の定数シェア
【数９４】
2020521392.tif 000096
を使用するＡＥＳ暗号化プログラムを構築する。乗算テーブルを使用して、実施者は、関数Ｍｕｌ、Ｃｏｎｖ、及びＳｑｕａｒｅを作成する。
【００９６】
関数Ｍｕｌは、ラウンドｒ及び位置ｉ，ｊにおけるシェアｍｘ及びｍｙの符号化に従って符号化された、各自のインデックスｍｘ及びｍｙをもつ２つの個々に符号化されたシェアｘ及びｙを乗算し、ラウンドｒ及び位置ｉ，ｊにおけるシェアの符号化（ｍｘ＋ｍｙ）ｍｏｄ  ｎに従って符号化された符号化結果を返す。ｎ個のシェアを用いた畳み込みでは、積
【数９５】
2020521392.tif 000097
が、ｚ＝ｘｙのシェア
【数９６】
2020521392.tif 000098
に現れることに留意されたい。位置ｉ、ｊは、ＡＥＳ状態の４ｘ４配列内での位置である。擬似コード実施は、
Ｍｕｌ（ｒ，ｉ，ｊ，ｍｘ，ｍｙ，ｘ，ｙ）：
【数９７】
2020521392.tif 000099
となるようなビットξ０，Ｋ，ξ７を見つける
【数９８】
2020521392.tif 000100
となるようなビットη０，Ｋ，η７を見つける
【数９９】
2020521392.tif 000101
を返す
であり、ここで、総和はＦ２５６に対するものである。
【００９７】
関数Ｃｏｎｖは、ラウンドｒ及び位置ｉ，ｊにおける符号化に従って、２つの符号化されたシェアの集合Ｘ＝（ｘ０，Ｋ，ｘｎ−１）及びＹ＝（ｙ０，Ｋ，ｙｎ−１）の符号化された畳み込みを返す。擬似コード実施は、
Ｃｏｎｖ（ｒ，ｉ，ｊ，Ｘ，Ｙ）：
Ｚ←（０，Ｋ，０）
ｆｏｒ  ０≦ｍｘ＜ｎ
ｆｏｒ  ０≦ｍｙ＜ｎ
【数１００】
2020521392.tif 000102
ｒｅｔｕｒｎ  Ｚ
であり、総和はＦ２５６に対するものである。
【００９８】
関数Ｓｑｕａｒｅは、ラウンドｒ及び位置ｉ，ｊにおける符号化に従って、符号化されたシェアの集合Ｘ＝（ｘ０，Ｋ，ｘｎ−１）の自身との符号化された畳み込みを返す。擬似コード実施は、
Ｓｑｕａｒｅ（ｒ，ｉ，ｊ；Ｘ）：
Ｚ←（０，Ｋ，０）
ｆｏｒ  ０≦ｍｘ＜ｎ
【数１０１】
2020521392.tif 000103
ｒｅｔｕｒｎ  Ｚ
であり、ここで、総和はＦ２５６に対するものである。
【００９９】
これらの関数をサブルーチンとして使用して、実施者は関数Ｉｎｖｅｒｓｅを作成し、この関数は、ラウンドｒ及び位置ｉ，ｊにおける符号化に従って、符号化されたシェアの集合Ｘの自身との２５４重の符号化された畳み込みを返す。擬似コード実施は以下である。
Ｉｎｖｅｒｓｅ（ｒ，ｉ，ｊ；Ｘ）：
Ｙ  ←  Ｓｑｕａｒｅ（ｒ，ｉ，ｊ，Ｘ）
Ｚ  ←  Ｃｏｎｖ（ｒ，ｉ，ｊ，Ｘ，Ｙ）
Ｙ  ←  Ｓｑｕａｒｅ（ｒ，ｉ，ｊ，Ｙ）
Ｘ  ←  Ｃｏｎｖ（ｒ，ｉ，ｊ，Ｘ，Ｚ）
Ｙ  ←  Ｓｑｕａｒｅ（ｒ，ｉ，ｊ，Ｙ）
Ｚ  ←  Ｃｏｎｖ（ｒ，ｉ，ｊ，Ｘ，Ｙ）
Ｚ  ←  Ｓｑｕａｒｅ（ｒ，ｉ，ｊ，Ｚ）
Ｚ  ←  Ｓｑｕａｒｅ（ｒ，ｉ，ｊ，Ｚ）
Ｚ  ←  Ｓｑｕａｒｅ（ｒ，ｉ，ｊ，Ｚ）
Ｙ  ←  Ｃｏｎｖ（ｒ，ｉ，ｊ，Ｘ，Ｚ）
Ｙ  ←  Ｓｑｕａｒｅ（ｒ，ｉ，ｊ，Ｙ）
ｒｅｔｕｒｎ  Ｙ
【０１００】
関数ＳｈａｒｅＳｂｏｘは、ラウンドｒ及び位置ｉ，ｊにおける符号化に従って符号化された畳み込みを用いて、符号化されたシェアの集合Ｘに作用する、Ｓボックス演算子の出力の符号化されたシェア表現を返す。擬似コード実施は以下である。
ＳｈａｒｅＳｂｏｘ（ｒ，ｉ，ｊ，Ｘ）
Ｙ←Ｉｎｖｅｒｓｅ（ｒ，ｉ，ｊ，Ｘ）
【数１０２】
2020521392.tif 000104
ｆｏｒ  １≦ｋ  ＜  ８
Ｙ←Ｓｑｕａｒｅ（ｒ，ｉ，ｊ，Ｙ）
【数１０３】
2020521392.tif 000105
【数１０４】
2020521392.tif 000106
ｒｅｔｕｒｎ  Ｚ
【０１０１】
関数ＳｕｂＳｈａｒｅは、以下の擬似コードに従い、関数ＳｈａｒｅＳｂｏｘを各シェアの集合に適用する。
ＳｕｂＳｈａｒｅｓ（ｒ，Ｂ０，Ｋ，Ｂ１６ｎ−１）：
ｆｏｒ  ０≦ｉ＜４
ｆｏｒ  ０≦ｊ＜４
（Ｂｎ（ｊ＋４ｊ），Ｋ，Ｂｎ（ｊ＋４ｊ）＋ｎ−１）←ＳｈａｒｅＳｂｏｘ（ｒ，ｉ，ｊ（Ｂｎ（ｉ＋４ｊ），Ｋ，Ｂｎ（ｉ＋４ｊ）＋ｎ−１））
ｒｅｔｕｒｎ（Ｂ０，Ｋ，Ｂ１６ｎ−１）
【０１０２】
ＡＥＳ暗号化関数ＡＥＳは、平文の１６バイトの入力（ｉｎ０，Ｋ，ｉｎ１５）を暗号化し、平文の１６バイトの結果（ｏｕｔ０，Ｋ，ｏｕｔ１５）を返す。擬似コードでの実施は以下である。
ＡＥＳ（ｉｎ０，Ｋ，ｉｎ１５）
【数１０５】
2020521392.tif 000107
ｆｏｒ  ０≦ｒ＜Ｎｒ
ｆｏｒ  ０≦ｉ＜４
ｆｏｒ  ０≦ｊ＜４
【数１０６】
2020521392.tif 000108
（Ｂｎ（ｉ＋４ｊ），Ｋ，Ｂｎ（ｉ＋４ｊ）＋ｎ−１）←ＳｈａｒｅＳｂｏｘ（Ｂｎ（ｉ＋４ｊ）），Ｋ，Ｂｎ（ｉ＋４ｊ）＋ｎ−１）
【数１０７】
2020521392.tif 000109
ｆｏｒ  ０≦ｉ＜４
ｆｏｒ  ０≦ｊ＜４
【数１０８】
2020521392.tif 000110
【数１０９】
2020521392.tif 000111
ｒｅｔｕｒｎ（ｏｕｔ０，Ｋ，ｏｕｔ１５）
【０１０３】
１７個のシェアを用いるＡＥＳプログラムの重要な特徴は、状態バイトを表すどの符号化されたシェアの集合についても、１６個の入力バイトと、復号後のシェアの集合の１番目から１６番目のフーリエ係数との間に全単射があることである。このことは、２つの異なる入力について、そのようなシェアの集合のどれにおいても１７個のシェアへの同時の衝突は決してあり得ず、よってＭＩＡ／衝突攻撃が成功しないことを示唆する。より一般的に、一実施形態では、実施についての知識（符号化、鍵等）を使用して、次のラウンドにおけるシェアの集合から、以前のラウンドの内部状態が導出される。例えば、一実施形態では、あるラウンドの符号化されていない（シェアがない）内部状態（又は入力）と、次のラウンドの符号化された内部状態のシェアの集合との間に全単射がある。
【０１０４】
上記の構築は、一定の規定された性質をもつランダムな加算演算子を使用する。コンパイル時に、実施者は、ある性質をもつランダムな加算演算子を選定しなければならない。ここで、これをどのようにすると効率的に行うことができるかを示す。１バイトは８ビットを連結したものであるため、Ｎｂｙｔｅｓバイトに対する加算演算子と、サイズＮ×Ｎの二値行列との間には１対１のマッピングがあり、ここでＮ＝８Ｎｂｙｔｅｓである。
【０１０５】
任意のサイズＮ×Ｎのランダムな可逆二値行列を生成する。このアルゴリズムは、以下のステップで構成される。
１．対角線に１があり、対角線より上にゼロがあり、対角線より下にランダムビットがある、サイズＮ×Ｎの二値行列Ｌを構築する。
２．対角線に１があり、対角線より下にゼロがあり、対角線より上にランダムビットがある、サイズＮ×Ｎの二値行列Ｕを構築する。
３．Ａ＝ＬＵを返す。
【０１０６】
Ｎｂｙｔｅｓ回繰り返された８ビットのシーケンスに作用するとき、結果として、Ｎｂｙｔｅｓ回繰り返された８ビットのシーケンスを生じるという性質をもつ、サイズ８Ｎｂｙｔｅｓ×８Ｎｂｙｔｅｓのランダム可逆二値行列を生成する。このアルゴリズムは以下のステップで構成される。
１．サイズ８×８のランダムな可逆二値行列Ａを構築する。
２．サイズ８×８（Ｎｂｙｔｅｓ−１）のランダムな二値行列Ｂを構築する。
３．サイズ８（Ｎｂｙｔｅｓ−１）×８（Ｎｂｙｔｅｓ−１）のランダムな可逆二値行列Ｃを構築する。
４．Ｒを、ブロック行列
【数１１０】
2020521392.tif 000112
とする。
５．対角線に１があり、対角線より上にゼロがあり、対角線より下にランダムビットがある、サイズ８（Ｎｂｙｔｅｓ−１）×８（Ｎｂｙｔｅｓ−１）のランダムな二値行列Ｌ’を構築する。
６．８×８の単位行列Ｉ８×８のＬ個のコピーを積み重ねることによってサイズ８（Ｎｂｙｔｅｓ−１）×８のブロック行列Ｄを構築する。
７．ブロック行列
【数１１１】
2020521392.tif 000113
を構築する。
８．Ａ＝ＬＲＬ−１を返す。
【０１０７】
Ｎｂｙｔｅｓ回繰り返された８ビットのシーケンスに作用するときに、結果として全ゼロのビットシーケンスを生じるという性質をもつ、サイズ８Ｎｂｙｔｅｓ×８Ｎｂｙｔｅｓのランダム可逆二値行列を生成する。
１．行列Ａをサイズ８×８のゼロ行列とする。
２．項４．２のアルゴリズムのステップ２〜８を実行する。
【０１０８】
暗号装置の様々な実施形態において、入力インターフェースは様々な選択肢から選択されてよい。例えば、入力インターフェースは、ローカルネットワーク、又は例えばインターネットなどのワイドエリアネットワークへのネットワークインターフェース、内部又は外部のデータ記憶への記憶インターフェース、アプリケーションインターフェース（ＡＰＩ）等である。出力インターフェースは、ローカルネットワーク、又は例えばインターネットなどのワイドエリアネットワークへのネットワークインターフェース、内部又は外部のデータ記憶への記憶インターフェース、アプリケーションインターフェース（ＡＰＩ）、ディスプレイ、プリンタ等である。入力インターフェース及び出力インターフェースは、通信インターフェースとして組み合わせられてよい。
【０１０９】
暗号装置はユーザインターフェースを有してよく、ユーザインターフェースは、１つ又は複数のボタン、キーボード、ディスプレイ、タッチ画面等のよく知られた要素を含む。ユーザインターフェースは、暗号演算、例えば解読を行うためのユーザ対話に対応するようになされる。
【０１１０】
装置１００のメモリ、例えば内部状態ストレージ１３０は、例えばフラッシュメモリなどの電子メモリ、又はＲＡＭ、又は例えばハードディスクなどの磁気メモリ等である。ストレージ１３０は、共にメモリを構成する複数の離散したメモリを備えてよい。メモリは、一部が揮発性で、一部が不揮発性であってよい。例えば、テーブル及びコンピュータ命令が不揮発性の部分に記憶され、内部状態が揮発性の部分に記憶される。
【０１１１】
通例、装置１００は、装置１００に記憶された適当なソフトウェアを実行するマイクロプロセッサ（図１では別個には図示していない）を備える。例えば、そのソフトウェアは、ダウンロードされ、及び／又は対応するメモリ、例えばＲＡＭなどの揮発性メモリ、若しくはフラッシュなどの不揮発性メモリ（別個には図示していない）に記憶されている。それに代えて、装置１００は、全体又は一部が、プログラム可能ロジックに、例えばフィールドプログラム可能ゲートアレイ（ＦＰＧＡ）として実施されてもよい。装置１００は、全体又は一部が、いわゆる特定用途集積回路（ＡＳＩＣ）、すなわち回路の特定の用途に合わせてカスタマイズされた集積回路（ＩＣ）として実施されてよい。例えば、回路は、例えばＶｅｒｉｌｏｇ、ＶＨＤＬ等のハードウェア記述言語を使用して、ＣＭＯＳとして実施される。
【０１１２】
一実施形態では、装置１００は、入力インターフェース回路、入力演算子回路、出力インターフェース回路、出力演算子回路、内部状態記憶回路、複数の非線形演算回路、複数の線形演算回路、のうち１つ又は複数を備える。装置１００は、追加的な回路を備えてよい。回路は、本明細書に記載される対応するユニットを実施する。回路は、プロセッサ回路及び記憶回路であり、プロセッサ回路は、記憶回路内に電子的に表現された命令を実行する。回路は、ＦＰＧＡ、ＡＳＩＣ等であってもよい。
【０１１３】
プロセッサ回路は、分散式に、例えば複数の部分プロセッサ回路として実施されてよい。記憶は、複数の分散した部分記憶にわたって分散される。メモリの一部又はすべてが、電子メモリ、磁気メモリ等であってよい。例えば、記憶は、揮発性の部分及び不揮発性の部分を有する。記憶の一部は読出し専用であってよい。
【０１１４】
図４は、暗号方法４００の一実施形態の例を概略的に示す図である。方法４００は、入力データに暗号演算を行って出力データを得るようになされる。方法４００は、
−  入力データを受け取る（４１０）ステップと、
−  平文入力データに入力演算子を適用する（４１２）ステップであって、前記入力演算子は、初期内部状態を表すシェアの複数の集合を生じさせ、シェアの複数の集合は所定の関係を満たす、ステップと、
−  内部状態を記憶する（４３０）ステップであって、内部状態は１つ又は複数のデータ要素を含み、各データ要素は、メモリ内で対応するシェアの集合として表され、メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、メモリ内のシェアの集合に対応するフーリエ係数の集合はそれらの間で所定の関係を満たす、ステップと、
−  内部状態を反復的に更新するステップであって、内部状態を更新するステップは、更新後の内部状態のシェアの集合に対応する更新後のフーリエ係数の集合が、それらの間の所定の関係を不変量として満たすようになされ、更新するステップは、１つ若しくは複数の非線形演算子及び／又は１つ若しくは複数の非線形演算子４４６を適用する（４４１）ステップを有し、演算子が適用された後に、更新後の内部状態が４３０で再度記憶される、ステップと、
−  最終内部状態に出力演算子を適用して（４２２）出力データを導出するステップであって、出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付け、前記歪みは、フーリエ係数が所定の関係を満たす場合に歪みがゼロになるようにシェアの集合のフーリエ係数に依存し、例えば出力演算子は所定回数の更新ラウンドが内部状態で実行された後に適用される、ステップと、
−  出力データを出力する（４２０）ステップと、を有する。
【０１１５】
本明細書で指摘されるように、方法のステップの一部は任意選択である。例えば、入力データがすでに符号化されている場合には入力データの符号化は必要ない。
【０１１６】
当業者には明らかであるように、方法を実行する種々の方式が可能である。例えば、ステップの順序を変えることができ、又は一部のステップは並列に実行されてよい。さらに、ステップとステップの間に、他の方法のステップが挿入されてよい。挿入されるステップは、本明細書に記載されるような方法の精緻化に相当するか、又は方法に関係しないものである。例えば、更新ステップは、少なくとも部分的に並列に実行されてよく、例えば内部状態の異なるデータ要素に非線形演算子を適用することは、並列に行われてよい。さらに、所与のステップは、次のステップが開始される前に完全に完了していなくてよい。
【０１１７】
本発明による方法は、プロセッサシステムに方法４００を行わせる命令を備えたソフトウェアを使用して実行され得る。ソフトウェアは、システムの特定の下位エンティティによって行われるステップのみを含んでよい。ソフトウェアは、ハードディスク、フロッピー、メモリ、光学ディスク等の適切な記憶媒体に記憶される。ソフトウェアは、配線に沿って、又はワイヤレスで、又はデータネットワーク、例えばインターネットを使用して、信号として送られる。ソフトウェアは、ダウンロード及び／又はサーバ上でのリモート使用が可能にされる。本発明による方法は、方法を行うために、プログラム可能ロジック、例えばフィールドプログラム可能ゲートアレイ（ＦＰＧＡ）を構成するようになされたビットストリームを使用して実行されてよい。
【０１１８】
本発明は、本発明を実用化するために適合されたコンピュータプログラム、特にキャリア上のコンピュータプログラムにも適用されることが理解されよう。プログラムは、ソースコード、オブジェクトコード、コードの中間供給源、及び部分的にコンパイルされた形態などのオブジェクトコードの形態、又は本発明による方法を実施する際に使用するのに適した他の形態である。コンピュータプログラム製品に関する実施形態は、記載される方法のうち少なくとも１つ方法の各処理ステップに対応するコンピュータ実行可能命令を備える。これらの命令は、サブルーチンにさらに分割される、及び／又は静的若しくは動的にリンクされる１つ若しくは複数のファイルに記憶される。コンピュータプログラム製品に関する別の実施形態は、記載されるシステム及び／又は製品の少なくとも１つの各手段に対応するコンピュータ実行可能命令を備える。
【０１１９】
図５ａは、コンピュータプログラム１０２０を備える書込み可能部分１０１０を有するコンピュータ可読媒体１０００を示し、コンピュータプログラム１０２０は、プロセッサシステムに一実施形態による暗号方法を行わせる命令を備える。コンピュータプログラム１０２０は、物理的なマークとして、又はコンピュータ可読媒体１０００の磁化を利用して、コンピュータ可読媒体１０００上に具現化される。しかし、任意の他の適切な実施形態も考えられる。さらに、コンピュータ可読媒体１０００はここでは光ディスクとして示しているが、コンピュータ可読媒体１０００は、ハードディスク、固体状態メモリ、フラッシュメモリ等の任意の適切なコンピュータ可読媒体でよく、また記録不可能でも記録可能でもよいことが理解されよう。コンピュータプログラム１０２０は、プロセッサシステムに前記暗号方法を行わせる命令を備える。
【０１２０】
図５ｂは、暗号装置の一実施形態によるプロセッサシステム１１４０の概略表現を示す図である。プロセッサシステムは、１つ又は複数の集積回路１１１０を備える。１つ又は複数の集積回路１１１０のアーキテクチャは、図５ｂに概略的に示される。回路１１１０は、一実施形態による方法を実行する、及び／又はそのモジュール若しくは単位を実施するためにコンピュータプログラムコンポーネントを稼働させるための処理ユニット１１２０、例えばＣＰＵを備える。回路１１１０は、プログラミングコード、データ等を記憶するメモリ１１２２を備える。メモリ１１２２の一部は、読出し専用であってよい。回路１１１０は、例えばアンテナなどの通信要素１１２６、コネクタ、又はその両方等を備える。回路１１１０は、本方法に定義される処理の一部又はすべてを行うための専用集積回路１１２４を備える。プロセッサ１１２０、メモリ１１２２、専用ＩＣ１１２４、及び通信要素１１２６は、相互接続１１３０、例えばバスを解して互いと接続される。プロセッサシステム１１１０は、それぞれアンテナ及び／又はコネクタを使用した、接触型通信及び／又は無接触型通信を行うためになされる。
【０１２１】
例えば、一実施形態では、暗号装置は、プロセッサ回路及びメモリ回路を備え、プロセッサは、メモリ回路に記憶されたソフトウェアを実行するようになされる。例えば、プロセッサ回路は、Ｉｎｔｅｌ  Ｃｏｒｅ  ｉ７プロセッサ、ＡＲＭ  Ｃｏｒｔｅｘ−Ｒ８等である。一実施形態では、メモリ回路は、ＲＯＭ回路、又は不揮発性メモリ、例えばフラッシュメモリを含む。メモリ回路は、揮発性メモリ、例えばＳＲＡＭメモリであってもよい。後者の場合、装置は、ソフトウェアを提供するようになされた、不揮発性のソフトウェアインターフェース、例えばハードドライブ、ネットワークインターフェース等を備える。
【０１２２】
以下の項は請求項ではないが、企図される実施形態を含む。出願人は、これにより、本出願の、又はそこから導出されるさらに他の出願の経過中に、そのような項に合わせて、並びに／又はそのような項、及び／若しくは詳細な説明若しくは特許請求の範囲から取られる特徴の組み合わせに合わせて、新しい請求項を作成可能であることを通知する。
１．入力データに暗号演算を行って出力データを得るようになされた電子暗号装置であって、電子暗号装置は、
−  入力データを受け取るようになされた入力インターフェースと、
−  内部状態を記憶するようになされたメモリであって、内部状態は１つ又は複数のデータ要素を含み、各データ要素は、メモリ内で対応するシェアの集合として表され、メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、メモリ内のシェアの集合に対応するフーリエ係数の集合が、それらの間で所定の関係を満たす、メモリと、
−  プロセッサ回路であって、
−  内部状態を反復的に更新することによって暗号演算を行うことであって、入力データから初期内部状態が導出され、出力データは最終内部状態から導出され、内部状態を更新することは、更新後の内部状態のシェアの集合に対応する更新後のフーリエ係数の集合が、それらの間の所定の関係を不変量として満たすようになされる、行うことと、
−  最終内部状態に出力演算子を適用して出力データを導出することであって、出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付け、前記歪みは、フーリエ係数が所定の関係を満たす場合に歪みがゼロになるようにシェアの集合のフーリエ係数に依存する、導出することと、
を行うように構成されたプロセッサ回路と、を備える電子暗号装置。
２．所定の関係は、異なるフーリエ係数の集合の少なくとも２つのフーリエ係数が等しいことを含む、項１に記載の暗号装置。
３．内部状態を更新することが、内部状態のデータ要素に非線形演算を適用することを有し、非線形演算は、内部状態のデータ要素を表す対応するシェアの集合中にある、メモリ内のシェアに作用することによって、データ要素に作用するようになされる、項１又は２のいずれかに記載の電子暗号装置。
４．非線形演算が有限体における多項式であり、プロセッサ回路が、シェアの集合のべき乗を、シェアの集合自体とのシェアの集合の畳み込みとして算出するようになされる、項３に記載の暗号装置。
５．多項式が、フーリエ係数に対する並列の多項式を定義し、異なるフーリエ係数の集合の少なくとも２つのフーリエ係数に作用する並列の多項式のすべての係数が等しい、項２と項４との組み合わせに記載の暗号装置。
６．内部状態を更新することが、内部状態に線形演算を適用することを有し、線形演算は、内部状態の少なくとも２つのデータ要素を表すメモリ内の少なくとも２つのシェアの集合に同時に作用する、項１乃至５のいずれかに記載の電子暗号装置。
７．線形演算が、
−  線形演算が作用するシェアの集合ごとにフーリエ係数の集合を生じさせるフーリエ演算子であって、フーリエ係数の集合は、インデックスを有する該集合中の係数で順序付けされる、フーリエ演算子と、
−  異なるインデックスのフーリエ係数とは無関係に、同じインデックスのフーリエ係数に作用する１つ又は複数の線形演算子であって、不変量を保持しつつフーリエ係数に作用するようになされる、１つ又は複数の線形演算子と、
−  逆フーリエ演算子と、
を連結することによって構築される、項６に記載の暗号装置。
８．入力データに暗号演算を行って出力データを得る電子暗号方法（４００）であって、電子暗号方法は、
−  入力データを受け取る（４１０）ステップと、
−  内部状態を記憶する（４３０）ステップであって、内部状態は１つ又は複数のデータ要素を含み、各データ要素は、メモリ内で対応するシェアの集合として表され、メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、メモリ内のシェアの集合に対応するフーリエ係数の集合が、それらの間で所定の関係を満たす、ステップと、
−  内部状態を反復的に更新することによって暗号演算を行う（４４１、４４６）ステップであって、入力データから初期内部状態が導出され、出力データは最終内部状態から導出され、内部状態を更新することは、更新後の内部状態のシェアの集合に対応する更新後のフーリエ係数の集合が、それらの間の所定の関係を不変量として満たすようになされる、ステップと、
−  最終内部状態に出力演算子を適用して（４２２）、出力データを導出するステップであって、出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付け、前記歪みは、フーリエ係数が所定の関係を満たす場合に歪みがゼロになるようにシェアの集合のフーリエ係数に依存する、ステップと、を有する電子暗号方法。
９．項８に記載の方法をプロセッサシステムに行わせる命令を表す一時的又は非一時的なデータ（１０２０）を備えた、コンピュータ可読媒体（１０００）。
【０１２３】
上述の実施形態は、本発明を制限するのではなく例示するものであり、また当業者は多くの代替の実施形態を設計することが可能であることに留意すべきである。
【０１２４】
特許請求の範囲において、括弧に入った参照符号は請求項を制限するものとは解釈すべきでない。動詞「有する、含む」及びその活用形の使用は、請求項に述べられるもの以外の要素又はステップの存在を排除しない。単数形は、そのような要素が複数個存在することを排除しない。本発明は、いくつかの別個の要素を備えるハードウェアを利用して、及び適切にプログラムされたコンピュータを利用して実施される。いくつかの手段を列挙する装置クレームにおいて、それら手段のいくつかは、１つの同じハードウェア品によって具現化されてよい。単に特定の方策が相互に異なる従属請求項に記載されているということは、それら方策の組み合わせが有利に利用できないことを意味しない。
【０１２５】
特許請求の範囲において、括弧に入った参照は、例示を行う実施形態の図面中の参照符号又は実施形態の数式を指し、それにより請求項を理解し易くしている。このような参照は、請求項を制限するものとは解釈すべきでない。
【符号の説明】
【０１２６】
（図１〜図３）
１００  暗号装置
１１０  入力インターフェース
１１２  入力演算子
１２０  出力インターフェース
１２２  出力演算子
１３０  内部状態記憶
１４１、１４２、１４３  非線形演算
１４６、１４７、１４８  線形演算
２１０  平文入力データ
２１１、２１２、２１３、２１４  内部状態
２１５  平文出力データ
３１０  平文内部状態
３１１、３１２、３１３  データ要素
３２０  シェアの集合として表された内部状態（符号化されていない）
３２１、３２２、３２３  シェアの集合
３３０  内部状態についてのフーリエ係数
３３１、３３２、３３３  フーリエ係数の集合
３４０  シェアの集合として表された内部状態（符号化されている）
３４１、３４２、３４３  符号化されたシェアの集合
【図１】
2020521392.tif 000114
【図２】
2020521392.tif 000115
【図３】
2020521392.tif 000116
【図４】
2020521392.tif 000117
【図５ａ】
2020521392.tif 000118
【図５ｂ】
2020521392.tif 000119
【国際調査報告】
2020521392.tif 000120
2020521392.tif 000121
2020521392.tif 000122