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