本発明には多くの異なる形態の実施形態が可能であるが、本開示は本発明の原理の例示と考えるべきであり、図示され、記載される特定の実施形態に本発明を限定する意図はないことを理解した上で、1つ又は複数の特定の実施形態が図面に示され、本明細書で詳細に説明される。
以下では、理解のために、実施形態の要素が動作しているものとして説明される。しかし、それぞれの要素は、それらによって行われるものとして説明される機能を行うようになされることは明らかであろう。
さらに、本発明は実施形態に限定されず、本発明は、本明細書に記載される、又は互いに異なる従属請求項に記載されるそれぞれのあらゆる新規な特徴又は特徴の組み合わせにある。
本発明の実施形態は、ブロック暗号などの暗号プリミティブの実施を可能にする。ブロック暗号は例えば、既知のサイドチャネル攻撃のホワイトボックス一般化、並びにいくつかの純粋なホワイトボックス攻撃を含む、広い部類の鍵復元攻撃に対抗する高い回復性を提供するAESアルゴリズムである。本発明による実施は、ホワイトボックスモデルだけでなくグレーボックスモデルにおいても向上したセキュリティを有することに留意されたい。
本発明を紹介するために、初めにホワイトボックス実施に対する攻撃をいくつか説明する。本文書を通じて、ブロック暗号AESに着目する。AESは、有力で、広く使用される暗号プリミティブである。しかし、以下の技術は他の暗号プリミティブにも適用可能であることを強調しておく。例えば、他のブロック暗号が実施形態として実施されてよい。特にAES(Rijndael)、3−Way、Kuznyechik、PRESENT、SAFER、SHARK、及びSquareなどのSLT設計(換字/線形変換ブロック暗号。換字・置換ネットワーク(SPN:Substitution−permutation network)ブロック暗号と呼ばれることもある)のブロック暗号は、少ない労力で適合させることができる。暗号プリミティブは、対称プリミティブであってよく、例えば、暗号鍵/解読鍵が同じであるか、又は署名鍵/検証鍵が同じである。暗号プリミティブは、ハッシュ関数など、鍵なしであってもよい。ハッシュ関数を保護することは、ハッシュ関数が秘密データに適用されるため、重要である。実際、ハッシュ関数は、ハッシュ関数がHMACで使用される場合などに、鍵付き設計の一部をなす。
Advanced Encryption Standard(AES)については、Advanced Encryption Standard, Federal Information Processing Standards Publication 197,2001に記載される。以下で、実行中のプログラム及びその環境にアクセスすることができ、メモリに出現するすべてのプログラム変数を読み取って改変することが可能な「ホワイトボックス」攻撃者によってAESの実施に対して仕掛けられ得る、主要な攻撃について概説する。
純粋なホワイトボックス攻撃であるメモリ・スクレープ(scraping)攻撃を別にすれば、主要な攻撃はサイドチャネル分析から始まり、これらの「グレーボックス」攻撃はホワイトボックス環境でも適用され得る。
メモリ・スクレープ攻撃では、鍵がプログラムメモリから読み出される。これは最も単純なホワイトボックス攻撃である。この攻撃を阻止するためには、鍵は、決して「平文で」プログラムメモリに出現してはならず、何らかの符号化された形態でのみ出現しなければならない。
差分電力分析/差分計算分析/相互情報分析/衝突等に基づく攻撃は、すべて衝突の原理に基づく。衝突は、内部プログラム変数がプログラムの2つの異なる入力又は出力に対して同じ値を取るときに発生する。プログラムの入力又は出力だけでなく鍵にも依存する変数に衝突が発生すると、衝突が発生するという事実だけから、鍵についての情報が明らかになる。すべてのAES状態及び鍵バイトを符号化すること、例えば、集合{0,1,K,255}への可逆マッピングの集合Eを選定し、各状態及び鍵バイトxを、何らかのE∈EについてのE(x)に入れ替えること自体では、衝突攻撃を阻止できないことに留意されたい。すなわち、符号化Eはバイトxの値を難読化するが、バイトxに衝突が発生すると、衝突はプログラム変数E(x)にも発生する。
差分故障分析に基づく攻撃では、攻撃者が、同じ入力に対してプログラムを2回実行し、その実行のうち一方で1つ又は複数のプログラム変数を変更することによって故障を導入し、両方の出力を記録する。2つの出力が異なる方式から、鍵についての情報が明らかになる。
後者のタイプの攻撃を防御する対策の一つは、変数を表す複数のシェアを使用することによって変数をマスキングするものである。例えば、変数xは、n個のシェアx
0,K,x
n−1によって加算的に表すことができ、ここでn≧2であり、
である。ここで、加算はXOR演算である。例えば、ハードウェア実施では、シェアのうちn−1個をランダムに選定し、n個のシェアが変数xを表すように残りの一つを計算する。すると、k個(ここでk<n)のシェアのいずれかの集合に同時の衝突が起きても、変数xに衝突が発生するかどうかについてのどのような情報も明らかにならない。同時の衝突がn個のシェアすべてに発生した場合のみ、攻撃者は、衝突がxに発生することを推測することができる。したがって、鍵を抽出するにはn次のDPA攻撃が必要となる。
ホワイトボックス環境では、シェアを符号化しなければならない。すなわち、攻撃者が、単にシェアを合計する(例えばシェアの排他ORを計算する)ことで、変数x又はxの符号化E(x)を復元できる場合、攻撃者は、シェアを合計することにより、シェアXによって表される変数xに衝突があるかどうかを確かめることができる。この攻撃を防止するために、プログラム内に出現する値は、シェアの符号化E
i(x
i)であるべきであり、各シェアx
iは、異なる符号化E
i∈Eを使用して符号化される。すると、和
はxに関係しない。本明細書に記載される対策が、ホワイトボックスモデルではなく、グレーボックスモデルのみでセキュリティを高めるために適用される場合、各シェアの別個の暗号化は必要とされない場合もあることに留意されたい。この結果、例えば符号化されたシェアに働くテーブル参照動作を回避することにより、より効率的な実施につながる。
本発明者らの洞察は、一つの変数を複数の符号化されたシェアとして表す後者は、同じ集合Xからの2つ以上のシェアに故障を導入し、プログラムの出力が変化するかどうかを確かめることにより、依然としてホワイトボックス攻撃者によって出し抜かれ得るということであった。すなわち、出力が変化しなければ、それぞれ故障があるものとないものである2つのシェアの集合X*及びXは、同じバイトを表す。実際、ξi=Ei(xi)であるシェア(ξ0,K,ξn−1)がバイトxを表す場合、最後のn−1個のシェアが符号化値0を有し、同じ値xを表すシェアの集合(ξ’,0,0,K,0)が存在する。よって、2つのシェアの集合X及びX*が同じ値を表すかどうかを確かめるには、攻撃者は、Xを0≦ξ<256についての(ξ,0,K,0)に変更し、どのξの値について出力が変化しないままであるかを調べ、次いで、X*と(ξ*,0,K,0)とが同じ出力を与えるようなξ*を見つけ、ξ=ξ*である場合かつその場合に限り、X及びX*が同じ値を表すと結論付ける。
上記の攻撃を用いると、シェアを使用することによる付加的なセキュリティが無効化され、グレーボックス型攻撃の多く、特に衝突を見つけることに基づく攻撃を有効に実行することが可能となる。一実施形態では、このシェア減少攻撃が回避される。
実施形態は、有限体における離散フーリエ変換を利用する。例えば、データ要素がバイトである場合、有限体はF256であってよく、有限体は256個の要素を有する。一実施形態では、データ要素は、複数ビットからなる二値ワードであり、この場合、標数が2の有限体が適当であり、2のビット数乗のサイズを有する。ただし、これは必須ではない。例えば3値ビットからなるワードに働くブロック暗号を構築することができ、その場合、有限体は標数3等を有する。以下で、シェアの集合を用いた算出を紹介し、それらがどのようにフーリエ変換に関係するのかを説明する。
シェアを用いたデータ要素の表現は、線形変換に理想的に適する。線形変換は、
という性質を有し、そのため、Lを変数xに適用するには、各シェアにLを個別に適用することができる。シェアは通例は符号化され、そのため演算L(x
i)及び総和がテーブル参照によって行われ得ることに留意されたい。シェアの符号化が線形である場合、演算子Lは、シェア内のビット、例えば「シェアの数」×「データ要素当たりのビット数」のビットに働く行列として、シェア上に表現することができる。以下で、線形演算子のより精緻な実施を論じる。例えば、シェアは、符号化を線形演算に統合できるように、線形符号化、例えばランダム線形符号化を用いて符号化される。
線形演算子に対して機能する上記の算出は、非線形演算子、特にAESのSボックスなどの換字ボックスには機能しない。興味深い点として、データ要素に対する任意の非線形演算は、多項式として表され得る。例えば、バイトに対する非線形変換fは、有限体F
256に対する多項式である。
ただしf
j∈F
256。
ここで、和(Σ)は、F
256に対する加算、例えばバイトの排他ORであり、・はF
256に対する乗算を表す。非線形変換は、畳み込みを利用してシェアに適用することができる。2つのシェアの集合X=(x
0,K,x
n−1)及びY=(y
0,K,y
n−1)の畳み込みは、
と定義される。
が成立し、すなわち、シェアの畳み込みは、積のシェア表現である。したがって、関数fは、関数
としてシェアに実施できることになり、ここで、x
jは、X自体とのXのj重の畳み込みであり、x
0は、1,X
1=X,X
2=X*X,X
3=X*X*X等のシェア表現であり、F
jはf
jのシェア表現である。
AES Sボックスは、
と書くことができ、ここで、l(x)=x
254はF
256の逆元であり、MはF
256に対する加算演算子であり、演算
は、F
256に対するその入力にS(0)=0x63を足す。加算演算子Mは、加算多項式
と書くことができ、m
0=0x05,m
1=0x09,m
2=0xf9,m
4=0x25,m
5=0x01,m
6=0xb5,m
7=0x8fである。
以下では、シェアの数(n)で、有限体中の要素の数から1を引いた値を割り切れる場合、例えばバイトnで255を割り切れる場合の、離散フーリエ変換についてさらに論じる。以下ではバイトについての場合について論じるが、他の分野でも状況は同様である。ある要素x∈F
256\{0}に対して、ord(x)と表記されるxの次数が、x
k=1となるような最も小さい正の数kとして定義される。すべてのxについて、ord(x)は、F
256\{0}の要素の数である255を割り切れる。nを255の除数とし、例えばn∈{1,3,5,15,17,51,85,255}であり、Ωを次数nの要素とする。
のフーリエ変換
は、
0≦k<n
と定義される。
数、
,K,
をシェアの集合Xのフーリエ係数と呼ぶ。逆フーリエ変換は、
0≦j<n
によって与えられる。
Cnに対する従来のフーリエ変換と比較すると、F256が標数2を有し、nが奇数であるため、全体の因数1/nが欠落している。シェアの集合を置換したものはいずれも同じデータ要素を表すものの、フーリエ変換の目的で、集合を順序付きとみなすことに留意されたい。同様に、フーリエ変換の集合が順序付けされる。フーリエ係数の集合を置換したものが依然として同じデータ要素を表す可能性は低いことに留意されたい。フーリエ係数の集合中の特定のフーリエ係数を識別する必要がある場合には、その係数のインデックス、例えばその下付き文字を参照する。
本発明者らは、ホワイトボックス装置であれば暗号データをフーリエ係数の中に隠蔽し得るという洞察を得た。装置は、依然としてシェアの集合又はシェアの複数の集合に作用するが、関連するデータは、当該シェアの集合に対応するフーリエ係数の1つ又は複数の集合中に符号化される。これにはいくつかの結果がある。フーリエ係数の集合は、それ自体が装置に直接記憶されるのではない。フーリエ係数は、それらをシェアの集合から算出することによってのみ入手可能になる。しかし、フーリエ変換は線形なので、フーリエ変換は、暗号アルゴリズム及びシェアの符号化においてアフィン演算と組み合わせることによって効率的に隠蔽することができる。例えば、復号演算、フーリエ変換、1つ又は複数の線形演算、逆フーリエ変換、及び符号化演算をすべて1つの組み合わされた線形演算に組み合わせることができる。さらに、アフィン演算と非線形演算は両方とも、フーリエ係数に対して有効に算出することができる。指摘したように、アフィン演算は線形フーリエ変換と自然に組み合わさる。非線形演算、特に、例えばいわゆるsボックス層における換字ボックスの並列の適用は、sボックスを多項式として表すことによって算出することができる。畳み込みを使用すると、多項式をフーリエ係数に対して有効に算出することができる。一実施形態では、フーリエ係数のデータサイズ、例えばシェアの集合の要素のデータサイズ並びにフーリエ係数の集合のデータサイズは、sボックス層における換字ボックスの入力及び出力のサイズ以上である。
例えばマスキングで使用される一部の従来の符号化には、マスキングが一部の演算とは互換性があるが、他の演算と互換性がないという問題がある。すると、互換性のない演算は、脆弱な又は高費用の解決法を必要とする。しかし、フーリエ係数を使用すると、すべての必要とされる演算を効率的に行うことができる。
フーリエ係数を使用して、他の方式による攻撃への耐性も向上させることができる。攻撃者が、例えば故障攻撃を実行することを試みて、シェアの集合の単一のデータ要素を改変すると、対応するフーリエ係数の複数が変化する。これは種々の方式で利用され得る。例えば、複数の暗号データ要素をフーリエ係数の同じ集合中に符号化する。シェアの集合の単一のデータ要素を改変する攻撃者は、したがって、フーリエ係数の集合に記憶された暗号データ要素のうち2つ以上を改変する。故障攻撃の場合、攻撃者は通例、暗号データ要素のうち、複数個ではなく1つのみを変更したいと考える。例えば、17個のフーリエ係数からなる集合中の1つのフーリエ係数を改変するには、対応するシェアの集合中の少なくとも9個のシェアを改変する必要があることを数学的に証明することができる。
フーリエ係数を使用してセキュリティを向上させる別の方式は、暗号データを表すために必要とされないフーリエ係数に制約を課すものである。これは、例えば、故障検出に使用されるフーリエ係数のいくつかが何らかの不変量を満たすこと、例えばそれらが特定の値を有することを要求することにより、シェアの単一の集合の中で行うことができる。これは、シェアの複数の集合にわたって行うこともでき、例えば、シェアの第1の集合に対応するフーリエ係数のいくつか、及び第2の集合に対応するフーリエ係数のいくつかが共に何らかの不変量を満たすこと、例えば、第1の集合中のフーリエ係数が第2の集合中のフーリエ係数に等しいことを要求する。後者は、シェア減少攻撃にも対抗することを助ける。
一実施形態では、フーリエ係数の集合が、表現データ要素と、非表現データ要素、又はエラー検出データ要素との両方を含む。フーリエ係数の集合はすべてが、共に内部状態のすべてのデータ要素を表す。エラー検出要素を保護要素とも呼ぶ。例えば、フーリエ係数の集合の各々が、両方のタイプを有する。フーリエ係数の集合中の表現データ要素は、1つ又は複数の暗号データ要素、例えば内部状態のデータ要素を表す。例えば、表現データ要素は、それらが表すデータ要素に等しい。例えば、表現データ要素は、何らかの他の方式で表現されてもよく、例えば、表現データ要素を各自の相手に対応付ける符号化があり得る。特に、表現データ要素からそれらが表す要素へのアフィンマッピングがあり、後者は数が同じであるか、又はより少ない。
フーリエ係数の真部分集合(すなわち、フーリエ係数の全集合に等しくないフーリエ係数の部分集合。すなわち厳密な部分集合)が、そのシェアの集合によって表される1つ又は複数のデータ要素を決定する。換言すると、フーリエ係数の集合から、1つ又は複数のデータ要素を一意に決定することができ、実際、真部分集合ですでに十分である。一般に、1つ又は複数のデータ要素からフーリエ係数の(全)集合を一意に決定することは可能でない場合がある。一実施形態では、フーリエ係数の集合が複数個あり、したがって、同じ1つ又は複数のデータ要素をすべてが有効に表すシェアの集合が複数個ある。
エラー検出データ要素は、プログラムの実行中に、例えば改ざんなどの不正な変更を検出するようになされる。例えば、エラー検出データ要素は、改ざんを検出するようになされた冗長なデータを備える。一実施形態では、エラー検出データ要素は、それらの間で何らかの所定の関係を満たす。所定の関係は、フーリエ係数の集合を越えて及ぶ(複数個ある場合)。例えば、所定の関係は、例えば一部又はすべてのデータ要素が等しいこと、又はエラー検出データ要素の何らかの線形和がエラー検出データ要素の何らかの他の線形和と等しいこと等、エラー検出データ要素によって満たされる線形の関係である。例えば、所定の関係は、例えば一部又はすべてのデータ要素が特定の値に等しいことなど、エラー検出データ要素によって満たされるアフィン関係である。線形演算又はアフィン演算は、表現要素を含むことができ、例えば、関係は、表現要素及びエラー検出要素に適用されるアフィン演算が全ゼロベクトルであることを要求する。例えば、後者の演算は、エラー検出要素が固定値を有すること、及び/又はエラー検出要素が表現要素に等しいことを表す。これらの演算は、予想される関係を満たさない入力を受け取った場合には、例えば歪んだ出力や、例えばランダム化された出力など、有用な出力をそれ以上提供しないように構成される。一実施形態では、フーリエ係数の集合、さらにはフーリエ係数のすべての集合が、表現要素と保護要素との両方を備える。フーリエ係数の集合中の一部の要素は、表現要素でもエラー検出要素でもないことがあり得る。それらは単に無視され、ダミー値を埋められる。
一実施形態では、フーリエ係数の部分集合、例えばエラー検出要素が、所定の値に等しい。この集合を、特定の値をもつベクトルとみなし得る。アフィン演算は、この部分集合、例えばこのベクトルを、特定の値をもつさらに他のベクトルに対応付けるように構成される。同様に、非線形演算は、そのようなベクトルを1つの特定の値から別の特定の値に対応付けてもよい。エラー検出要素によって特定の値をもつように形成されるベクトルは、したがって、各ラウンドで特定の値を有しながらラウンドごとに対応付けられる。このベクトルによって取られる値は、各演算後に異なり、コンパイル時に例えばランダムに選択することができる。
以下に、フーリエ係数を使用して暗号アルゴリズムの実行に関連するデータを隠蔽するホワイトボックス装置の様々な実施形態が開示される。第1の一連の実施形態では、暗号アルゴリズムの内部状態のデータ要素が各々、各自のシェアの集合で符号化される。そのため、例えば、内部状態に存在するデータ要素と同じ数のシェアの集合がある。例えば、16バイトの内部状態及び17バイトのシェアの集合をもつAESの場合、内部状態を16×17バイトに符号化する。一つのシェアの集合に対応するフーリエ係数の各集合は、1バイト分の内部状態を符号化する。そのような実施形態では、例えばフーリエ係数の集合ごとに16バイトなど、多くの非表現要素、例えばエラー検出データ要素がある。エラー検出バイトに対して、不変量が維持される。その結果、攻撃者による不正な改変の強い検出が可能になる。これは、そのような改変が恐らくは不変量を保持しないからである。
フーリエ係数の集合中に1つのみのデータ要素を表すことは必要ではない。同じ集合中に複数のデータ要素を表し得る。例えば、さらに下記で、暗号アルゴリズムの内部状態全体がフーリエ係数の単一の集合中に符号化される実施形態が開示される。そのような実施形態には、全内部状態を符号化するために全体としてより少ないシェアの集合で済み、したがって内部状態の符号化に必要とされるデータが少なくなるという利点がある。これにより、ひいてはテーブルがより少なく、又は小さくなり、記憶要件が低減する。実施形態は、より少ない非表現データ要素を各自のフーリエ係数の集合中に有し得る。ただし、これは必ずしもより弱い実施にはつながらない。エラー検出データ要素がより少なくなることは、より弱いエラー検出能力を示唆するが、より多くのデータ要素、さらには内部状態全体をフーリエ係数の単一の集合中に表すと、シェアの集合のうち単一の要素を改変することが、故障攻撃で望まれるように単一のデータ要素ではなく、内部状態の複数のデータ要素の改変につながる可能性が高まる。さらに、フーリエ係数中の表現データ要素の数の増加は、より大きな集合を選定することによって補償することができる。後者は、必要とされるシェアの集合が減るため、符号化された内部状態のサイズの増大につながる必要はない。例えば、サイズ17又は51のシェアの集合は、各々が全内部状態を符号化することができる。
シェアの和が表現されるデータ要素に等しいという規定でシェア表現が使用されるときに、フーリエ係数中にデータ要素を隠蔽する第1の例を得ることができ、フーリエ変換との間には次のような興味深い関係がある。シェアの集合Xによって表される値は、ゼロ番目のフーリエ係数
に等しく、そのため上記の結果は、Z=X*Yであれば、
であることを示唆する。実際、この関係は、ゼロ番目だけでなく、次のようにすべてのフーリエ係数に成立する。
0≦k<n。
このことは、マッピング
がフーリエ係数
を、
に有効に対応付けることを示唆し、ここで、
は、シェアの集合F
jのk番目のフーリエ係数である。実施形態では、データ要素を表すインデックス0のフーリエ係数と、攻撃から保護するためのより大きいインデックスをもつフーリエ係数とを使用することにより、シェア表現の集合と対応するフーリエ係数の集合との間のこの自然なマッピングを活用する。しかし、これは全く必要でない。すなわち、フーリエ係数のうちいずれか1つ、例えば1つのみ又は2つ以上が共にデータ要素を表し、残りのフーリエ係数は攻撃から保護するために使用され得る。例えば、一実施形態では、データ値は、ゼロ番目のフーリエ係数だけによって決定されるのではなく、1つ若しくは複数の異なるフーリエ係数により、又はゼロ番目のフーリエ係数と1つ若しくは複数の異なるフーリエ係数とにより決定される。
本発明者らは、シェア減少攻撃が成功するのは、シェアの集合中の2つ以上のシェアを、そのシェアの集合が表す値とプログラム出力との両方が同じままになるように変更することが可能な場合であることを認識した。出力が変化しないという事は、攻撃者が注入した故障が、シェアの集合によって表される値を変えなかったことの合図として攻撃者によって使用される。この攻撃を阻止する方式の1つは、シェアの集合Xに対して変更が行われたときに、その変更がシェアの集合(例えば値
)によって表される値を同じままにする場合でも、好ましくは攻撃者によって予測不可能な形で、出力を変化させる仕組みである。フーリエ係数の集合中の保護要素を使用して、シェアの集合に変更が行われたかどうかを検出することができる。
フーリエ係数の集合ごとに単一の表現要素を使用する実施形態は、以下のように要約して説明される。次数qの何らかの有限体
上で秘密xを表すn個のシェアx=x
0,...,x
n−1を有するとする。
をプリミティブのn番目の根とし、例えば、
は、a
n≡1となるような最も小さいべき乗である。nがq−1を割り切れなければならないことを思い出されたい。xのフーリエ変換は、
と定義され、ここで、
である。
AES型のブロック暗号を詳細に観察すると、次のように構築されていることが分かる。
ここで、A
iは、ラウンドに依存するアフィン変換であり、Sは、SubByte層である。FIPS197によるSボックス層の定義(節5.1.1)では、Sボックスは、非線形部分(逆元)とアフィン部分との両方を含む。後者は、あるsボックスに隣接するアフィン演算A
iに組み込まれ得る。ここで、A
0は、その後に第1のラウンド(ダミー)鍵の加算が続く入力変換を表し、A
mは、その後に線形出力変換が続く最後のラウンド鍵の加算を表す。
X=x
0,...,x
15が、A
iの前の共有されるAES状態を表すとする。この実施形態では、n=17個のシェアについて選定が行われた。そのため、Xは、サイズが16*17=272バイトのベクトルを表す。残りの変換A
iは、以下のように構築される。
1.復号する(行列D
iを使用する)
2.フーリエ変換(行列Fを使用する)
3.置換を行い、実際には17個のフーリエ係数を互いの隣に並べる(行列Tを使用する)。例えば、
。
4.ラウンドに依存する線形演算を行う(行列L
iを使用する)
5.置換して元に戻す(行列T
−1を使用する)
6.逆フーリエ変換(行列F
−1を使用する)
7.符号化する(行列E
i+1を使用する)
8.ベクトルを加算する(ベクトルV
iを使用する)
一実施形態では、ステップ1〜7は、行列乗算によって実施される線形演算である。したがって、符号化が線形であるとすると、これらのステップは、行列
L’i=Ei+1F−1T−1LiTFDi
を使用した、1回の行列乗算によって実施することができる。
そして、演算Aiは、
Ai(X)=Vi+L’i(X)
と定義される。
ベクトルV
iは、鍵とSボックス層の加算部分との和に対応する。この実施形態は、表現要素だけでなく非表現要素に対しても非自明な作用を与える。ここで、差し当たりL
iが次のように構成されていると仮定する。Mが、ShiftRows及びMixColumns演算を表す、線形の16×16バイト行列を表すとする。次に、L
iを、対角線にあるMの17個のコピーから構成されるブロック対角行列、
とする。
したがって、L
iは、実際に17回のShiftRows及びMixColumnsを、0≦j≦16についての
に対して、並列に算出することになる。
次に演算Sを考える。各畳み込みがフーリエ係数に対する点別乗算を示唆するという性質は、積算も畳み込みとして実施される場合、Sの反転演算はすべてのフーリエ係数を並列に反転させることを意味する。したがって、Sの線形部分及び定数の加算が、すべてのフーリエ係数に対して同じ影響を与えるように選択されれば、Sは、すべてのフーリエ係数のSubBytes関数を算出するということになる。
非自明な演算、この場合はAES又はAESに似た演算を非表現係数に行うことは、実際のAESがどこで発生しているかを攻撃者が見つけるのをより難しくするため、利点と考えられる。実際、この実施形態は、17個のAES評価を並列に評価することが可能であることを示している。この観察は、...SASASASASA...構造として表されることが可能な任意のアルゴリズムに成立することに留意されたい。
さらに、畳み込みは、線形変換とは対照的にすべてのフーリエ係数の点別積を同時に算出し、ここで、各個別のフーリエ係数に何が起こるのかを指定する自由がある。各線形演算は、この行列に隠蔽することができる。実際、任意の2つの非線形関数を多項式として書くことができ、異なるフーリエ係数中で並列に評価することができる。事実、畳み込みネットワークを使用すると、入力のすべての関連するべき乗を並列に算出することができ、一方で多項式係数との内積(多項式間の唯一の違い)は線形であり、したがって行列積によって並列に算出することができる。
図1は、暗号装置100の一実施形態の例を概略的に示す図である。装置100は、入力データに暗号演算を行い、出力データを得るようになされ、出力データは、入力データに暗号演算を適用した結果である。一実施形態では、入力データ及び出力データは両方とも平文データである。平文データは、秘密符号化、例えば攻撃に知られていない符号化、例えば装置100にプライベートであるプライベート符号化、で符号化されていないデータを言う。暗号演算は、暗号化又は解読演算、例えば対称の、例えばブロック暗号、例えばAES、又は例えば対称の署名若しくは検証演算である。後者は、ハッシュ関数から、又はブロック暗号から構築されるMACであり、例えばCBC−MACモードで実行されるブロック暗号である。装置100は、何らかの目的のために暗号演算を使用する装置に統合され得る。例えば、装置100は、暗号化されたコンテンツを受け取るようになされる。暗号演算を使用して、コンテンツが解読される。ホワイトボックス実施の性質上、コンテンツが解読された場合でも、そのコンテンツが解読されるための鍵を入手することは依然として難しい。例えば、装置100は、例えば署名又はMACをメッセージに適用することによって金融取引を認証するようになされる。攻撃者にとって、その演算が行われたときに用いられた鍵を、装置から、例えば装置で実行されるソフトウェアから抽出することは難しい。
プリミティブの実行は、プロセッサ回路内で実施され、その例が以下に示される。図1は、プロセッサ回路の機能ユニットであり得る機能ユニットを示す。例えば、図1は、プロセッサ回路の可能な機能編成の設計図として使用される。プロセッサ回路は、図1で、ユニットと別個には図示していない。例えば、図1に示す機能ユニットはその全体又は一部が、装置100に記憶された、装置100のマイクロプロセッサによって実行可能なコンピュータ命令として実施される。混合型の実施形態では、機能ユニットは、一部が、ハードウェア、例えばコプロセッサ、例えば暗号コプロセッサとして実施され、一部が、装置100に記憶されて実行されるソフトウェアとして実施される。
装置100は、内部状態ストレージ130を備える。内部状態ストレージ130は、メモリ、例えば電子メモリとして実施される。内部状態ストレージ130は、内部状態の表現を記憶するようになされる。内部状態は、1つ又は複数のデータ要素を備える。データ要素は、二値のデータ要素であり得る。例えば、データ要素は、バイト、ニブル、又はより大きなワードであり、例えば一実施形態では、データ要素は、複数ビット、例えば少なくとも4ビットを備え、少なくとも16個の異なる可能な値を有する。通例は、すべてのデータ要素が同じサイズである。内部状態は反復的に更新される。例えば、AESの場合、平文内部状態は16個のデータ要素、この場合は16バイトを備え、合計128ビットになる。内部状態を表すシェアの集合も、データ要素にバイトを使用してよいが、通例はより大きなサイズを有し、例えば17バイト以上を使用する。内部状態のデータ要素は、本明細書にさらに説明されるように、内部状態ストレージ130に直接記憶されることはない。
これを図2に示す。図2は、内部状態の更新の一実施形態の例を概略的に示す図である。図2には、内部状態211、212、213、214が示される。線形又は非線形演算子を適用することにより、内部状態が更新される。図2には、内部状態211から内部状態212への、内部状態212から内部状態213への更新を示している。入力データから初期内部状態が導出される。図2で、入力データは210に表され、初期内部状態は内部状態211である。同様に、出力データ215は、最終内部状態214から導出される。内部状態に対する演算の一部は鍵に依存する。多くの場合、入力データ及び出力データ210、215は平文であり、例えば秘密符号化で符号化されていない。装置100がブロック暗号暗号化用に構成される場合でも、平文の出力データはなお、入力データを暗号化したもの、例えば平文の暗号化されたデータである。ただしこれは必須ではない。装置100は、より大きい暗号システム、例えばデジタル著作権管理(DRM)システムに統合されてよい。そのようなシステムでは、コンテンツは、デジタル著作権によって許される場合にのみレンダリングされる。暗号プリミティブに入るデータは、さらに他の暗号処理又は意思決定への入力の結果であるデータでる。これらの演算は、符号化されたデータにも行われてよい。そのような場合、入力データ及び出力データの一方又は両方が符号化され、平文ではない。さらに、入力データ及び出力データが符号化されないが、対応する変換ステップ、例えば符号化及び復号演算を省くことにより、符号化された入力/出力データを用いる実施形態が作り出されることが想定される。
内部状態は、内部状態ストレージ130内で特殊な形で表される。図3aは、内部状態の表現の一実施形態の例を概略的に示す図である。図3aは、同じ内部状態を異なるように見たテーブルを示す。340にある左下のボックスだけが、内部状態ストレージ130、例えばメモリに物理的に記憶されている実際のデータを示す。ボックス340内の個々のデータ要素、例えばバイトは、それらが符号化されていることを示すために破線で示している。例えば、それらは、何らかの秘密、例えばコンパイル時に選択されるランダム符号化で符号化される。右の列は、左の列をフーリエ変換したものである。
ボックス310には平文内部状態を示している。内部状態のデータ要素、例えばバイト311、312、313が示されている。例えば、AESの場合、バイト数は16以上である。例えば、内部状態310は、FIPS197に定義されるように「状態の配列」である。
ボックス310に示される各データ要素は、メモリ内で対応するシェアの集合として表される。例えば、データ要素311はシェアの集合321に対応し、データ要素312はシェアの集合322に対応し、データ要素313はシェアの集合323に対応する。データ要素とシェアの集合との間の関係は、一対多である。シェアの集合のデータサイズは、データ要素のサイズの倍数である。例えば、シェアの集合は複数のシェアを備え、その各々がデータ要素と同じサイズを有し、例えばそれらは両方ともバイトである。
ボックス320に示されるシェアの集合は符号化されていない。したがって、これらのシェアの集合がホワイトボックス実施においてこのように使用された場合、攻撃者は単にメモリからそれらのシェアを読み出し、正しいデータ要素に対応付けることができる。
ボックス330には、320のシェアの集合を離散フーリエ変換したものが示される。フーリエ係数の集合331、332、及び333が示されている。例えば、フーリエ係数の集合331は、有限体における離散フーリエ変換をシェアの集合321に適用することによって得られる。ボックス330のフーリエ係数の集合も符号化されておらず、ホワイトボックス実施ではこのようにメモリに記憶されることもできない。ボックス340は、符号化されたシェアの集合として表される内部状態を示す。ボックス340のデータは、各集合の各シェアを別々に符号化することによってボックス320から得られる。例えば、集合321の第1のシェアを符号化することにより、集合341の第1のシェアが得られる等である。一実施形態では、ボックス340に示されるデータのみが直接見ることができ、例えば物理的にメモリに記憶される。
興味深い点として、符号化はシェア領域で行われるのに対し、シェアの集合の意味はフーリエ領域に表される。シェアは別々に符号化され、通常はそれにより、大半の演算をそれらに行うことを妨害する。しかし、フーリエ係数は、シェアの集合全体によって決定される大域的性質である。つまり、シェアの集合が別々に符号化されていても、フーリエ変換と畳み込みとの間の関係を通じて、シェアの集合の意味が操作されることが可能である。
ボックス320又は340のシェアの集合は、内部状態のデータ要素を表す。どのデータ要素が表されるかはフーリエ係数に依存する。図3aに示す実施形態では、ボックス330のフーリエ係数の集合各々に対してフーリエ係数のうち1つが、それが表すデータ要素として選択される。表現フーリエ係数は、斜線の網掛けで示している。非表現フーリエ係数は、塗りつぶしなしで示している。この例では、フーリエ係数の集合ごとに正確に1つの表現フーリエ係数がある。例えば、集合330の表現係数は、内部状態310のデータ要素に等しい。
例えば、データ要素の値を与えるシェアの集合に対応するフーリエ係数のうち所定の1つを選定し、例えばこのフーリエ係数はデータ要素に等しい。この場合、対応するデータ要素の値を決定するのは、ゼロ番目のフーリエ係数(例えばインデックス0のフーリエ係数)である。この選定は、対応するシェアの集合の和によってもデータ要素が決定される(例えばデータ要素に等しい)という結果を有するので、分析及び実施を単純化する。しかし、これは必要とはされない。一実施形態では、何らかの他のフーリエ係数、例えばインデックス1の係数が、データ要素を決定する。同じ係数が異なる集合に対応するデータ要素を表すことは必要とさえされず、例えば集合331では、インデックス0のフーリエ係数であり、一方集合332ではインデックス1のフーリエ係数である等である。図3bは、フーリエ係数の1つが表現係数としてコンパイル時にランダムに選択された例を示す。実際、どのフーリエ係数がデータ値を表すかは、ラウンドごとに異なることさえあり、例えば内部状態の更新ごとに異なる。例えば、次の更新後には、集合331ではインデックス2のフーリエ係数になり、一方、集合332ではインデックス3のフーリエ係数になる等である。例えば、フーリエ係数は、ラウンド関数のアフィン部分で置換されるが、ラウンド関数の非線形部分の間は置換されない。
さらに一般的には、単一のフーリエ係数がデータ要素を決定することは必要とされない。例えば、一実施形態では、フーリエ係数の部分集合、例えば2つ以上の要素をもつ部分集合が、データ要素を決定する。この部分集合は真部分集合であり、例えば、多くともフーリエ係数の半分がデータ値を決定する。残りのフーリエ係数は、シェア減少攻撃などの攻撃から保護するために使用される。
フーリエ係数の集合が複数の表現要素を有するいくつかの実施形態が、図4a〜図4bとの関係で示される。これらの図には、フーリエ係数の1つ又は複数の集合のみが示され、対応するシェアの集合は示されていない。換言すると、これらの図に示されているものは、図3a及び図3bのボックス330に対応する。図3a及び図3bと同様に、これらの図に示されるボックス430は、それ自体が実施に存在することはない。代わりに、復号のフーリエ変換がボックス430に対応する実施では、符号化されたシェアの集合が存在する。同じことが図4c〜図4eにも当てはまる。
図4aは、フーリエ係数の複数の集合を示し、各集合は4つの表現要素、この場合は第1の4つの要素、例えばインデックス0、1、2、及び3を備える。表現要素の数又は位置は、変化し得る。例えば、各表現要素は、内部状態の一要素に等しい。
表現要素の数は、集合ごとに同じである必要はない。例えば、内部状態が16バイトであり、256個の要素をもつ利便な二値体に対してフーリエ変換が行われる実施形態では、各々が17バイトを有するフーリエ係数の集合を4つ取り出し、各々4バイトが、内部状態の16バイトを表す。残りの4*17−4*4=52バイトは、非表現バイトとして、例えばエラー検出バイトとして使用される。例えば、正常な実行、例えば改ざんされていない実行の場合には、何らかの所定の性質が非表現バイトに強制される。17個の要素からなる4つの集合に対応して、例えば同じくバイトである、17個のシェアの4つの集合がある。図4aに示す集合に関係するシェアの集合同士は、フーリエ変換を通じて関係付けられる。シェアの集合の符号化、例えば成分ごとの符号化は、メモリに記憶される。この例の利点は、16*17バイトの代わりに、図3aに従った同じサイズ、すなわち4*17のシェアの集合を使用して、はるかに少ないバイトを使用して同じサイズの内部状態を表せることである。さらに、図4aの実施形態には、図4aに対応するシェアの集合に行われる小さい改変が同時に複数のデータ要素を改変する可能性が高く、それによって故障攻撃を複雑化するという利点がある。
16バイトの内部状態を符号化する他の例は、各々が8個の表現バイトを有するフーリエ係数の2つの集合、並びに5、5、及び6個の表現バイトを有するフーリエ係数の3つの集合が含まれる。非線形演算は、すべての個々のシェアに畳み込みネットワークに適用することによって表現要素に行われ、一方、アフィン演算は、すべてのシェアの集合を入力として受け取るアフィン演算によって行われる。
図4bは、さらに他の実施形態を示す。この場合は、内部状態全体がフーリエ係数の単一の集合中に表される。例えば、16バイトの内部状態の場合には、例えば17個又は51個の要素をもつフーリエ係数の集合を使用し、それにより17−16=1又は51−16=35個の非表現要素が与えられる。
内部状態を符号化するこれらの例は、実施される暗号プリミティブの必要に応じて変化させる。例えば、より多い又は少ないバイトからなる内部状態は、より多い又は少ない表現係数を使用して表すことができる。例えば、上記の例では、内部状態のサイズの減少又は増大に対応するために表現係数を非表現係数にすることができ、その逆も同様である。実施形態では、シェアの集合のサイズは、フーリエ係数の集合のサイズに等しく、これは、離散フーリエ係数を適用したことの結果である。しかし、一実施形態では、集合にダミー要素を加えることによって、このことを隠蔽することができる。さらに、実施形態では、フーリエ係数の集合のサイズは、体のサイズから1を引いた値の除数として選択される。例えば、バイトであれば、適切な選定は、15、17、51、又は85など、255の除数である。集合が内部状態自体と同じ大きさであることを要求してもよい。これは必須ではないが、入力におけるエントロピーが集合内で完全に保持されるため、追加的なセキュリティの利点を与える。これは、サイズ17、51、85、又は255のシェアの集合を与える。基礎となる算術を実施する際の複雑性が増すという犠牲を払って、集合に対して他のサイズを得るために他の体を使用することができる。例えば、3値のロジックを使用すると、243個の要素をもつ体を使用することができ、これはひいては11個又は121個の要素の集合等を用いることを可能にする。
これらの例では、フーリエ係数の集合は各々、内部状態の要素を表すために必要とされない何らかの要素を含む。そのような要素は、通常の実行を用いて改ざんを検出するために使用される。例えば、非表現要素の一部又はすべてが何らかの期待される性質を満たす、シェアの1つ又は複数の集合を入力として受け取る演算を考える。この演算の正しい実行は、その性質が存在することに依存する。改ざんがこの性質を改変すると、正しい実行が損なわれ、その結果、攻撃者の予想に従わない結果が生じる。これがひいては、例えば故障攻撃や、衝突を見つける等の攻撃者の試みを頓挫させる。
一実施形態では、シェアの集合に対応するフーリエ係数の集合は、1つ又は複数の表現要素と1つ又は複数のエラー検出要素との両方を含み、表現要素は、内部状態の1つ又は複数のデータ要素を決定し、1つ又は複数のエラー検出要素は、シェアの集合の改ざんを検出するようになされた冗長なデータを含む。例えば、更新時、更新後の内部状態の表現要素の値は、以前の内部状態に対応する表現要素に依存する。また、例えば、エラー検出要素がエラーを検出しない場合にゼロとなる歪みを含める、例えば加えることにより、表現要素の値はエラー検出要素に依存する。歪みは、例えば冗長な情報をローカルに検証することが可能な場合には、例えば特定のラウンド又は最終ラウンドではなく、中間ラウンドの演算で行われる。これは、2つの係数が等しいか、特定の値を有する等の関係に該当する。これは、出力演算子において、又は関係が大域的である場合には何らかの特定の後のラウンドで行うこともでき、その例が以下で与えられる。
一実施形態では、メモリ内のシェアの集合に対応するフーリエ係数の集合は、それらの間で所定の関係を満たす。この所定の関係は、例えば不変量として更新によって保持される。基本的な考え方は、異なる変数を表すシェアの集合間で関係を強制するための変数を表すシェアの選択に利用できる自由度を部分的に使用することである。関係は、有限体F256におけるフーリエ変換として表される。例えば、一実施形態では、所定の関係は、フーリエ係数のいくつかが等しいことを含む。
これは、関係、特に相等性関係が、異なる集合の係数間にある場合に、利点を有する。これには、単一のシェアの集合についての有効なシェアの集合の数が減らないという利点がある。これは、特に、シェアの集合が比較的小さい、及び/又は比較的少ない表現要素を含んでいる場合に起こり得る。有効なシェアの集合の数が過度に減らされると、衝突攻撃のリスクが生じる。異なるフーリエ係数の集合のフーリエ係数が等しいことを要求することによって内部状態の符号化に冗長性を導入することでは、有効なシェアの集合の数は減らず、したがってシェアの単一の集合における衝突のリスクが増すことはない。それに対して、フーリエ係数の集合が多数の表現要素を含んでいる場合には、このリスクはより小さくなる。特に、内部状態の完全なコピーを含んでいる場合には、いずれにせよ衝突のリスクはなく、したがってより自由に関係を選定することができる。どれほど衝突の許容可能リスクが許されるかは用途に依存する。どれほどのリスクがなお許容できるかは、保護される鍵の経済値や、予想される攻撃者のリソースなどの要因に依存する。ホワイトボックス実施ではなくグレーボックスの場合には、より高いリスクも取られ得る。以下に関係の様々な例を与える。
例えば、一実施形態では、関係は、異なるフーリエ係数の集合の2つ以上のフーリエ係数が等しいことを含む。例えば、コンパイル時に特定のフーリエ係数が選択される。例えば、一実施形態では、フーリエ係数の集合が順序付けられ、集合中の係数がインデックスを有する。所定の関係は、少なくともいずれかのインデックスについて、同じインデックスのフーリエ係数のうち少なくとも2つが等しいことを含む。例えば、集合331及び332のゼロ番目のフーリエ係数が等しいことを要求する。所定の関係は、少なくともいずれかのインデックスについて、そのインデックスのフーリエ係数のすべてが等しいことを含んでもよい。例えば、所定の関係は、集合331、332、333及びフーリエ係数のすべての他の集合のゼロ番目のフーリエ係数同士が等しいことを要求する。
この関係は、好ましくはより多くのシェアの集合、より好ましくはすべてのシェアの集合に拡張される。例えば、一実施形態では、フーリエ係数の集合ごとにインデックスが選択され、関係は、それら集合から選択されるフーリエ係数が等しいことを含む。例えば、16個の集合がある場合は、各集合に1つずつ、16個のインデックスを選択し、対応するフーリエ係数が等しいことを要求する。例えば、フーリエ係数の第1、第2、及び第3の集合...にそれぞれある、インデックス1、5、7...をもつ係数が等しい。
所定の関係に対する要件が厳格であるほど、攻撃者が衝突を見つけるのが難しくなる。例えば、所定の関係は、フーリエ係数の集合中の各フーリエ係数が、1つを除いて、その他のフーリエ係数の集合中のそれぞれのフーリエ係数に等しいことであり、1つの例外はデータ要素を表すために使用される。これを行う1つの方式は、同じインデックスのフーリエ係数が、1つのインデックス、例えばゼロ番目のインデックスを除いて、等しいことを要求するものである。例えば、集合331、332、333...中の1番目のフーリエ係数同士が等しく、集合331、332、333...中の2番目のフーリエ係数同士が等しい等である。例えば図4a〜図4bに示すように、フーリエ係数の集合中に2つ以上の表現要素を有する実施形態でも、同じタイプの関係が使用される。
上記の例は、同じ集合のフーリエ係数間の関係は課さない。例えば、シェアの集合のうち1つに対する任意の内部状態及び任意の選定、例えば集合321に対する任意の選定、又は代わりに例えば集合331などフーリエ係数の集合のうち1つに対する任意の選定について、内部状態が有効に表され、関係が満たされるように残りの集合を選定する方式がある。換言すると、内部状態における単一のデータ要素の有効な表現の数は、フーリエ係数間の関係を要求することによっては減らないが、内部状態全体の有効な表現の数は減る。
関係は、フーリエ係数の同じ集合の中のフーリエ係数間に定義することもできる。これは、シェアの集合としての内部状態の有効な表現の数を減らし得るが、これは許容可能であり得る。例えば、有効な表現の数は依然として十分に大きい可能性があり、特に有効な表現の数は、例えば内部状態全体がフーリエ係数の集合中に表される場合に、暗号演算への入力データの全エントロピーを表すのに十分に大きい可能性がある。例えば、好適な選定は、連続するインデックスをもつフーリエ係数を保護要素として選択し、前記フーリエ係数の値を所定の固定値に設定するものである。所定の値をもつ異なるフーリエ係数の集合を、例えばb個の連続するフーリエ係数内に作成するには、攻撃者はシェアの集合の少なくともb+1バイトを変更しなければならないことを数学的に示すことができる。所定の固定値は、コンパイル時にランダムに選択される。一実施形態では、すべてが等しくはない所定の固定値が選択される。
また、同じ集合の中のフーリエ係数のうち2つ以上が等しいことを要求することもできる。これは、アフィン演算において保持されることが可能な線形関係である。相等性は、並列の非線形演算において自動的に保持される。このタイプの関係が使用される唯一の関係である場合、例えば唯一の要件がフーリエ係数の集合中のすべての非表現データ要素が等しいことである場合には、潜在的な脆弱性がある。この理由は、攻撃者が第1のシンボル、例えばインデックス0中のバイトを変更することができ、すべてのフーリエ係数が同じ量だけ変化してしまうためである。この場合、集合は改ざんされることになるが、関係はそれを検出することができない。しかし、例えば大域的関係、又は固定値を有する1つ若しくは複数のエラー検出要素など、1つ又は複数の相等性関係が、他の要件に加えて使用され得る。
既知の値及び/又は既知のアフィン関係若しくは線形関係(実行が改ざんされなかった場合)を有する、アフィン演算の開始時に受け取られるフーリエ係数の集合中の要素は、例えばカーネルが予想される値を有する線形演算子を選択することにより、アフィン演算子又は線形演算子によって全ゼロベクトルに対応付けることができる。ゼロベクトルは任意の長さを有することができ、特にその長さは、表現要素の数、フーリエ係数の集合中のすべての要素の数に等しい。要素がその要素に予想される値又は関係を有さない場合、演算子は、その要素を歪みベクトルに対応付ける。歪みベクトルは、予想外の値又は関係をもつ要素の少なくとも1つ又は複数の集合に対して非ゼロであるが、好ましくはすべてのそのような要素に対して非ゼロである。異なる演算子が、予想される値又は関係をもつ要素を、さらに他の予想される値又は他の関係を有する要素のさらに他の集合に対応付けることができる。さらに他の値及び関係は異なってよい。さらに他の要素は、内部集合の次の表現の中でエラー検出要素として使用される。
関係を選択する際には大きな選定があり得る。例えば、集合当たり16個のデータ要素及びn個のシェアを仮定し、集合当たり1つのフーリエ係数をデータ表現を表すものとして使用し、残りを保護のために使用すると、データ要素を表すために第1の集合中のフーリエ係数を選択し(n個の選定)、どの係数がデータ要素を表し、残りがどの係数に等しいかを示すようにフーリエ係数のその他の集合を順序付けすること(n!個の選定)により、n(n!)15個の関係を得ることができる。この大きな空間からランダムな関係を選択すると、攻撃者の作業がさらに複雑化する。例えば、各装置100は異なる関係を受け取り、これは、例えば装置に透かしを入れる役割も果たす。
演算子は、それらが関係を保持するように選択される。線形演算子の場合、フーリエ変換が線形であり、関係が線形であるため、これを行うことができる。非線形演算子についての関係を維持することは、以下の洞察を使用して行うことができる。マッピング
(ここで、X,F
0,...,F
255はシェアの集合である)は、フーリエ係数
を
に有効に対応付け、ここで、
は、シェアの集合F
jのk番目のフーリエ係数である。換言すると、シェアの集合へのマッピングは、フーリエ係数に対する並列した多項式になる。したがって、異なる集合にある同じインデックスの2つのフーリエ係数が等しければ、この関係は、単に両方のシェアの集合に同じマッピングを作用させることによって保持される。同じ非線形演算子が内部状態内のすべてのデータ要素に適用され、関係が、同じインデックスをもつフーリエ係数についての相等性関係のみを示唆する実施形態では、関係の保持は、単にすべてのシェアの集合に同じマッピングを適用することにより、自動的に行われる。この場合、
のシェアの集合F
jは、暗号プリミティブのための正しい多項式係数を偶然表す任意のシェアの集合として選択することができる。例えば、コンパイル時に、係数を表すためのランダムなシェアの集合F
jを選択する。
他の関係を保持することは、F
jの適切な選定によって行うことができる。例えば、関係に従って、集合331の1番目のフーリエ係数が、集合332の2番目のフーリエ係数に等しいとする。この場合、集合331に作用する非線形演算子の
を、集合332に作用する非線形演算子の
と等しく選定することができる(すべてのjについて)。このようにして、関係が保持される。例えば、ゼロ番目のフーリエ係数がデータ要素の実際の値に対応する場合は、データ要素に行う所望の非線形演算、例えば所望のSボックスに従って、それら集合に
を選定する。
また、例えばデータ要素を決定するために、データ要素をフーリエ係数の部分集合によって表すことも可能であり、例えば2つ以上の要素をもつ部分集合が使用される。例えば、データ要素は、ゼロ番目のフーリエ係数と1番目のフーリエ係数の和に等しい。これは、各自の係数
及び
を通じて表され、それらの和がデータ要素に対する所望の演算、例えば所望のSボックスと等しい多項式を選択することによって実施することができる。
関係は、シェアの集合が単一の場合にも強制されてよい。例えば、図4bの場合、非表現係数が特定の値を有する、例えばゼロである、又は何らかの他の値、例えばランダム値を有することを要求する。複数の非表現係数を用いる実施形態では、少なくとも1つ、少なくとも2つ等の非表現要素が、1つ又は複数の所定の値に等しい。所定の値は、ラウンドごとに異なってよい。対応する非表現係数を1つのみ有するシェアの集合が1つしかない場合でも、この係数が特定の値を有する、例えばゼロであることを要求してよい。
どのような非線形演算も多項式として表すことが可能であることに留意されたい。非線形演算子が各自のフーリエ係数を使用して定義される場合でも、非線形演算子は、シェアの集合の(符号化された)シェアを用いて評価される。例えば、シェアの集合自体とのシェアの集合の反復的な畳み込みとして、シェアの集合のべき乗が算出される。
内部状態ストレージ130における内部状態を更新することは、非線形演算子及び線形演算子を伴う。図1は、非線形演算141、142、143を示す。内部状態に働く非線形演算は、内部状態のデータ要素のうち1つのみに作用する別個の非線形演算、例えば非線形の下位演算としてなされる。例えば、これらの下位演算は、すべてのデータ要素、例えば同じSボックスについて同じであり、又は異なる。データ要素のレベル、例えばボックス310のレベルで行われるSボックスが同じであっても、シェアの集合のレベルで、例えばボックス320に行われる演算、又はボックス340に対する実際の符号化は、異なってよい。例えば、それらは、関係の一部ではないフーリエ係数、例えばデータ値を表すために使用されるフーリエ係数に対して異なる関数を行う。単一のデータ要素に作用する非線形演算子は、対応するシェアの集合中のシェアにのみ作用する。
図1は、線形演算146、147、148を示す。内部状態を更新する線形演算は、内部状態の少なくとも2つのデータ要素を表すメモリ内の少なくとも2つのシェアの集合に同時に作用する。例えば、線形演算は行列として、例えば2つの要素(ビット)をもつ体、又は例えばF256などのより大きい有限体に対して表される。関係及びフーリエ変換はどちらも線形演算なので、線形演算は、以下を連結することによって構築される。
− 線形演算が作用するシェアの集合ごとにフーリエ係数の集合を生じさせるフーリエ演算子、
− 不変量を保持しつつフーリエ係数に作用する1つ又は複数の線形演算子、及び
− 逆フーリエ演算子。
線形演算への入力は、例えば、シェアの2つ以上の集合のシェアを要素としてもつベクトルである。例えば、線形演算子は、データ値を表すフーリエ係数に作用する限り、例えば規格の必要に応じて、暗号プリミティブに必要とされる線形演算を行うことができるが、1つ又は複数の線形演算子が、データ値を表さないフーリエ係数に作用する限り、関係が保持されている以上は、線形演算子は任意の線形演算、例えばランダムな線形演算を行うことができる。例えば故障攻撃が原因で、第1の場所で関係が満たされなかった場合には、関係が無効なままであること、又は、少なくとも、関係を偶然復元する可能性が一様ランダム分布を用いた場合以下であることが好ましいことに留意されたい。
例えば、データ値を表す1つの(又は複数の)フーリエ係数を除いて、同じインデックスのフーリエ係数同士が等しいことを関係が要求する実施形態では、以下を使用してよい。
− 線形演算が作用するシェアの集合ごとにフーリエ係数の集合を生じさせるフーリエ演算子。フーリエ係数の集合は、あるインデックスを有する集合中の係数で順序付けられる。
− 例えば異なるインデックスのフーリエ係数とは無関係に、同じインデックスのフーリエ係数だけに作用する1つ又は複数の線形演算子。1つ又は複数の線形演算子は、不変量を保持しつつフーリエ係数に作用するようになされる。
− 逆フーリエ演算子。
このような演算子の分離は可能であるが、必要ではない。例えば、1つ又は複数の線形演算子は、データ要素を表すフーリエ係数に作用する、例えば集合当たり1つ又は複数のフーリエ係数に作用する1つの演算子と、それが関係を保持するという要件を除いてすべての残りのフーリエ係数に作用する1つの線形演算子、例えばランダム線形演算とを含む。
図4cは、関係のさらに他の例を与える。図4cは、ローマ数字I、II、及びIIIを標識として付した、3つの部分に分けられたフーリエ係数の集合を示す。図4cはこれらの部分を連続して示すが、これは必要ではなく、例えば3つの部分が、任意の形、例えばランダムに、フーリエ係数の集合430の要素に分散され得る。部分IIIはこの例では空であってよい。
標識Iの係数は内部状態を表す。この例では、内部状態全体がフーリエ係数の単一の集合中に表されている。標識IIの係数も内部状態を表す。この例では、内部状態全体がフーリエ係数の単一の集合中に二度表されている。例えば、バイト及び16バイトの内部状態の場合には、51、85、又は255個のシェアからなる集合を使用することができる。内部状態の更新は、係数Iに対するのと同じようにして係数IIに対して行われ、係数I及びIIは両方とも、同じようにして入力データから開始される。この結果は、最後のラウンドの後、係数I及びIIの両方が、暗号演算の最終結果を含んでいるというものになる。出力演算子は、I及びIIの係数が同じでない場合は出力を歪ませることによってこれを使用することができる。例えば、出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付ける。歪みは、2つの分岐におけるフーリエ係数が等しい場合に歪みがゼロになるように、シェアの集合のフーリエ係数に依存する。
一実施形態では、I及びIIの両方が内部状態全体を表す。例えば、部分Iは、以前の内部状態の符号化における対応する部分Iから更新する時に算出され、部分IIは、以前の内部状態の符号化における対応する部分IIから更新する時に算出され、又はその逆でもよい(例えば部分Iが部分IIから算出され、及びその反対)。最終以外のラウンド中の更新は、部分IとIIとが等しくない場合に歪みを導入する可能性があり、これは、最終ラウンドまで、又は出力演算子が適用されるまで遅らせることができる。
部分I及びIIの両方が内部状態全体を含んでいることは必要ではない。例えば、部分IIは、内部状態の選択されたデータ要素、例えば(0〜15のうち)バイト4、9、10、及び13のみを含み得る。この場合、新しい部分IIは、部分Iから取られた欠落しているデータ要素で拡張された、以前の部分IIから算出される。
部分I及びIIに対するブロック暗号の評価は並列である必要はなく、そのため同じラウンドにおける部分I及びIIは異なる。例えば、暗号演算自体の評価を開始する前に、部分I及びIIに対して等しくない数のダミーラウンドを実行する。この場合、部分I及びIIは異なるが、最後に、2つの分岐が再び同期すると、各自の値は等しくなる。これは、ローカルにチェックすることができないフーリエ係数間の大域的関係の例である。同期が発生した後には、演算子が歪みを導入し得るが、それより早く導入することはない。
非表現係数IIIは、他の手段を使用して、例えばそれらが所定の値に等しいこと等を要求することにより、改ざんを検出するために使用される。一実施形態では、すべての非表現係数が等しいのではない。2つの分岐I及びIIが等しい場合でも、これはコード中で直接見ることはできないことに留意されたい。1つには、フーリエ係数の集合は、シェアの集合の形態でのみ存在する。フーリエ変換は、フーリエ係数のいくつかが等しいかどうかを調べるためにシェアの集合に対して必要とされる。しかし、シェアの集合中のシェアは符号化されているため、シェアの集合でさえも一般にはコード中では見ることができない。例えば、シェアの集合中の異なる要素に対して、それぞれ別個の異なる符号化が使用され得る。グレーボックス実施には、使用される符号化を節約することができる。しかし、ホワイトボックス実施には、シェアの集合の符号化が必要となる。何故ならば、そうしなければ、攻撃は、既知のフーリエ変換を実行するだけで表現係数を得ることができるためである。
この特定の場合、係数IIは内部状態を表すが、それらは依然としてエラー補正として使用される。入力を使用して部分IIを初期化することの利点は、このようにすると、乱数発生器を使用せずにエントロピーが導入されることである。
図4dは、フーリエ係数の集合を示し、係数I及びIIIは図4cと同様である。係数IVに対して、一連のラウンド関数がラウンドの一部として適用され、このラウンド関数は、それらを連結したものが識別となるように選択される。例えば、ラウンドの前半でAESを通常通り評価し、ラウンドの後半にAESの逆元を使用することができる。使用されるブロック暗号はAESである必要はなく、任意のブロック暗号、例えばAESであってよいが、異なるアフィン及び非線形演算子をもつもの、例えば異なるsボックスであってよい。この結果は、最終ラウンドの後、係数IVが、係数IVへの元の入力と同じになるというものである。例えば、係数IVについての入力として固定された定数を選択してよく、その場合、同じ入力が出力にも発生しなければならない。また、係数Iと同じ入力係数IVを使用して元の入力が出力に存在するようにすることもできる。後者は、通常の出力を生じさせるのではなく、通常の出力に入力を足す(例えばXORする)ことによって使用される。通常の出力を得るには、入力を引かなければ(例えばXORしなければ)ならない。
図4eは、フーリエ係数の集合を示し、係数I及びIIIは図4cと同様である。係数Vに対して、所定のラウンド関数のシーケンスが適用され、固定された入力定数に適用される。この結果、係数Vについての正しい最終結果がどのようなものになるべきかを算出することができる。例えば、係数Vをすべてゼロで初期化し、それについてAESを評価することができる。最終結果は、初期入力のAES評価、この場合には全ゼロの入力となる。図4d及び図4eの両方において、出力演算子は、予想される値が係数IVにもVにも見られない場合に歪み得る。部分IV又はVにAESが使用される場合、それは代替のランダム鍵を使用してよい。部分IV及びVが内部状態と同じサイズを有することは必要ではなく、より小さくてもよい。そのような場合、より小さい入力サイズをもつカスタムのブロック暗号を使用して、この部分に働きかけてよい。例えば、より小さい演算子を選定することにより、より小さい入力サイズに働くようにAESを改変する。例えば、部分IV及びVは、16バイトの代わりに8バイトになるように選択することができる。それらはより大きくすることもできる。
図4a〜図4eに関して与えられる例は、複数のラウンドにわたって強制される大域的関係の例である。例えば、図4c〜図4eの場合、部分I、II、IV、及びVは、互いと異なってよい。
フーリエ係数が表現係数とエラー検出要素との両方とみなせることが起こり得ることに留意されたい。例えば、図4cで示される実施形態を考える。部分Iの要素は、内部状態を決定するので、表現要素とみなしてよい。部分IIの要素はエラー検出要素とみなしてよい。すなわち、これらのフーリエ係数は、内部状態を決定するために必要とされないので、冗長なデータを含んでいる。さらに、部分IIにある情報は、部分Iにある情報によって完全に決定されるので、エラー検出用である。部分Iが、対応する変化が部分IIに起こることなく変化した場合、又はその逆の場合、エラーが検出される。しかし、同等に部分IIを表現部分とみなし、部分Iをエラー検出部分とみなすこともできる。一実施形態では、エラー検出要素の1つ又は複数を表現要素から導出することができ、一実施形態では、エラー検出要素の1つ又は複数が表現要素から独立している。例えば、一実施形態では、エラー検出要素の少なくとも1つが表現要素に等しく、及び/又はエラー検出ビットの少なくとも1つが所定の値に等しい。例えば、一実施形態では、シェアの集合に対応するフーリエ係数の集合中の要素の一部が、内部状態の要素を表し、また部分的には、この又は他のシェアの集合に対する改変を検出するのに適した追加的な要素である。
上記の例は、シェアの単一の集合の単一の部分Iの中に内部状態を符号化するが、それに代えて、内部状態をシェアの2つ以上の集合にまたがって分割することもでき、非表現係数が部分II〜Vと同じようにして使用され得る。
また、これらの考え方を組み合わせる、又は他のホワイトボックス技術と組み合わせてもよいことが留意される。例えば、フーリエ係数の集合が、複数の部分、すなわち、内部状態の1つ又は複数のコピー、入力を再現する1つ若しくは複数の部分、及び/又は固定値を生じさせる1つ若しくは複数の部分を含む。出力演算子は、これらの関係のいずれかが満たされない場合に歪む。
例えば、2つの異なる内部状態の少なくとも一部をシェアの単一の集合中に表すことにより、複数のアルゴリズム、例えばブロック暗号の複数のコピーを同じシェアの集合に共に組み合わせることの利点は、いつどのアルゴリズムが動作しているかを示す制御フローが見えなくなることである。分岐ラウンド及び/又は再結合ラウンドが見える場合、これは、攻撃者の検索範囲を限定し得る。攻撃者は、内部状態で何回故障を注入しなければならないか、すなわち分岐の回数と、各分岐に1回であることとを知る。
行列積を評価する際の低レベルの乗算は、シェアが符号化されている場合にはテーブル参照によって行われてよいことに留意されたい。それに代えて、シェアの復号及び再符号化は、符号化が線形であれば、線形演算に統合されてもよい。前者は、線形性を回避するためより安全であるが、例えばテーブル又は多項式の数の増加としてコードサイズを大幅に増大させる、という不都合がある。
指摘したように、演算の一部は鍵付きとされてよい。例えば、演算時にラウンド鍵が内部状態のすべて又は一部に追加される。鍵は、符号化された形態で装置100に記憶されてよい。好ましくは、鍵は、例えば集合のフーリエ係数に制約が課された(符号化された)シェアの集合として、内部状態と同じタイプの符号化を使用する。例えば、鍵は、対応するシェアの集合として装置100のメモリ内に表現され、シェアの集合は、有限体における離散フーリエ変換に従って、鍵のシェアの集合に対応するフーリエ係数間の所定の関係を満たす。
図1に戻ると、同図はさらに、入力データを受け取るようになされた入力インターフェース110を示している。例えば、入力インターフェース110は、コンピュータネットワーク接続、コンピュータ記憶ユニット等を備える。入力インターフェース110は、アプリケーションプログラミングインターフェース(API)を備えてよく、さらなる例が本明細書に与えられる。一実施形態では、入力データは、内部状態に適する形ですでに符号化されている。以下では、入力インターフェースがプライベート符号化に従って符号化されていない状況を説明する。その場合、装置100は、平文入力データに対する任意選択の入力演算子112を備えてよい。入力演算子112は、初期内部状態を表すシェアの複数の集合を生じさせる。シェアの複数の集合は所定の関係を満たす。
例えば、入力演算子は、次のようないくつかの線形演算子を連結することによって構築される。
− 入力データをフーリエ係数の1つ又は複数の集合に対応付ける演算子。何らかの関係を満たすために非表現係数が使用される場合、入力演算子は、その関係を満たすフーリエ係数の1つ又は複数の集合に入力データが対応付けられるように構成される。例えば、演算子は、入力データを、データ要素を表すフーリエ係数に対応付ける。例えば、集合当たり1つのフーリエ係数がデータ要素を表す場合、演算子は、入力のデータ要素を、対応するフーリエ係数に直接対応付ける。複数のフーリエ係数が共に一つの入力データ要素を表す場合(例えば和として)、フーリエ係数のうち1つを除くすべてがランダムに選択され、最後の1つは、入力データ要素及び選択されたランダムなフーリエ係数から算出される。残りの保護フーリエ係数については、関係を満たすようにランダムな選定が行われる。ランダムなフーリエ係数は、ランダム演算子を入力データに適用することによって選択される。ホワイトボックス実施では、別個の乱数発生器を使用することは、多くの場合、勧められない。唯一、グレーボックス実施では、ランダムフーリエ係数を乱数発生器によって選択することができる。
− 逆フーリエ変換、及び
− 例えばシェアの各々を符号化するための符号化演算。符号化は線形に選択されてよい。複数の異なる符号化があってよい。例えば、シェアの1つ1つに対して異なる符号化が使用される。
これには、シェアの集合のビットサイズが少なくとも入力データのサイズと同じ大きさであれば、利点がある。この場合、衝突が発生する、すなわち、2つの異なる入力データがシェアの集合上の衝突を引き起こす可能性は低い。入力演算子を各シェアの集合に対して単射にすることにより、より良好な保証が得られる。すなわち、入力演算子は、単一のデータ要素を表すシェアの単一の集合の内容から入力データが一意に決定されることが可能となるように選択される。AESの場合、これは17個のシェアを取り出すことによって実現できる。そのような17個のシェアを用いるAESの実施では、すべての衝突が回避され、そのため、相互情報分析(MIA)に対して十分に安全であることが予想される。
装置100はさらに、最終内部状態から出力データを導出するための出力演算子122を備える。出力演算子122は、シェアの集合を、その集合が表すデータ要素に歪みを足したものに対応付ける。歪みは、フーリエ係数が所定の関係を満たす場合に歪みがゼロになるように、シェアの集合のフーリエ係数に依存する。出力データは、平文出力データであるか、又は出力データを利用する次のアプリケーションによって期待される符号化形態で符号化された出力データである。ここでは出力データが平文出力データであると仮定する。
例えば、出力演算子は、以下を連結することによって構築される。
− 内部状態の符号化を除去する復号演算子
− 内部状態をフーリエ係数の1つ又は複数の集合に変換するフーリエ変換
− データ要素を表すフーリエ係数を、それらが表すデータ要素に対応付ける演算子
− 保護フーリエ係数を、歪み、例えば歪みベクトルに対応付ける演算子。この演算子は、関係を満たすフーリエ係数を0に、例えば歪み無しに対応付けるように構築される。例えば、関係を表すベクトルは、演算子のカーネル中にあってよい。
任意選択で、後続のアプリケーションが、データが符号化された形態で搬送されることを期待する場合には、符号化演算子が追加され得る。
以下に、本発明による暗号装置又は方法において実施された暗号プリミティブの詳細な実施形態が与えられる。選択された暗号プリミティブはAESブロック暗号であり、これは例示として選択されたものである。以下の説明は暗号化演算に関するが、解読演算が平易に理解される。以下に詳細に示される実施形態は、フーリエ係数の集合ごとに単一の表現フーリエ係数を使用する。合計で、内部状態のための16*17バイトの符号化が使用される。
多くの要素に変形の実施が可能であることに留意されたい。n個のシェアを用いるAES実施を構築することが可能であり、ここで、nは255の除数であり、すべてのAddRoundKey、ShiftRow、MixColumns、及びSubBytes演算(又はAES解読のためのそれらの逆元)の前及び後に、各k、1≦k<nについて、状態バイト
を表すシェアの集合S
r,cのk番目のフーリエ係数
が、すべての行インデックス及び列インデックスr,cについて等しいという性質を有する。行インデックス及び列インデックスは、例えば4つの行及び4つの列をもつ、状態配列としてのAESの内部状態の表現を言う。加算変換AddRoundKey、ShiftRows、及びMixColumnsについて、これは、本明細書で詳細に述べられるように、フーリエ係数に対する変換の適切な選定によって実現することができ、一方、SubBytes演算については、フーリエ変換はシェアの集合に作用する多項式と互換性があるため、この性質を保証することができる。この実施形態では、関係について1つの特定の選定が行われる。さらに、内部状態のデータ要素を表すためにゼロ番目のフーリエ係数が使用される。
そのような実施において、攻撃者が、シェアの集合、例えばS
0,0の中のいくつかのシェアを、
が変化しないような方式で変更すると仮定する。すると、その他のフーリエ係数
,K,
のうち少なくとも1つが変化しているはずである(何故ならばそうでなければ攻撃者は何も変化させられないため)。変更の前に、1≦k<nについて、16個の状態バイトs
r,cを表す16個のシェアの集合S
r,cのk番目のフーリエ係数
がすべて互いと等しい場合には、変更の後に、変化したシェアの集合S
0,0のk番目のフーリエ係数が15個のその他のシェアの集合のk番目のフーリエ係数と異なるような、1≦k<nであるkの少なくとも1つの値がある。
最後のAES演算の後の16個のシェアの集合から16バイトで構成されるAES出力を生成する際、少なくとも1つの
がその他の
と異なるときに出力が間違いとなる(例えばiの少なくとも1つの値について
となる)ように、各出力バイトout
iが、1≦k<n、0≦r<4、0≦c<4である
及びすべての
に依存するように注意を払わなければならない。
この仕組みは、通常のDFA攻撃をも、より難しくすることに留意されたい。すなわち、攻撃者の目標は、出力が変化する方式から鍵に関する情報を得ることができるような方式で何らかのシェアの集合Xを変更することになる。しかし、この仕組みが実施されると、攻撃者が有用であると考える出力を与える、攻撃者が行うことができる唯一の変更は、シェアの集合のゼロ番目のフーリエ係数のみを変更し、その他のフーリエ係数を不変のままにするものである。1つのみのフーリエ成分を変更しようとする場合は、Xのすべてのシェアを適宜変更しなければならず、このことは、攻撃者が、成功するためにはn次のDFAを行う必要があることを示唆する。
ここでは、先に述べた成分を使用するAES実施を提示する。このAES実施は、実行時に128ビットの入力を128ビットの出力に変換する。この実施は、コンパイル時に作成される。実施のセキュリティは、主としてシェアの数nに依存する。まず、AES暗号化を構築するための詳細を述べる。
コンパイル時に実施者は以下を行う。
1.シェアの数nを選定する。ここで、nは255の除数である。n=1を選定することは、デフォルトのAES実施を上回るセキュリティ上の利点を提供せず、n∈{51,85,255}は、実用には大き過ぎ、そのため好ましくはn∈{3,5,15,17}である。実施者は、ord(Ω)=nである要素Ω∈F256も選定する。指摘したように、n=17の選定が特に有益である。
2.実施者は、AES規格で指定されるように、AES鍵を(N
r+1)個のラウンド鍵へと拡張する。各ラウンド鍵は、4×4配列に配置された16バイトで構成される。ラウンド鍵バイトは、
と表記され、0≦r<N
r、0≦i<4、0≦j<4である。
0≦r<N
rである各ラウンドインデックスrについて、実施者は、1≦k<nである
で表記されるn−1バイトをランダムに選定する。各ラウンドr及び位置i,jについて、実施者は、
,及び
,K,
を有するn成分のラウンド鍵シェア
をフーリエ係数として作成し、よって
となり、ただし、
である。
3.各ラウンドr、位置i,j、及び各シェアインデックスmについて、実施者は、可逆加算符号化
をランダムに選定する。AES実施のサイズは、使用されるラウンド符号化の数と共に線形に増大する。実施のサイズを減らすために、実施者は、各ラウンドで同じ符号化を使用することを選ぶことができ、そのため符号化はrに依存しなくなる。実施者は、ラウンドごとに符号化を交互にすることを選定してもよく、それにより符号化がr mod2を通じてのみrに依存するようになる。これらの選択は、衝突及びDFA攻撃に対抗するセキュリティに影響を与えず、より多い数の異なる符号化を選定すると、一部のホワイトボックス攻撃がより難しくなると考える。各ラウンドrに、16n個の符号化
は、好ましくはすべてが異なる。
の逆元を
と表記する。
4.実施者は、符号化されたラウンド鍵シェア
を計算し、符号化された鍵のシェアの集合
を作成する。
5.実施者は、バイト
を含んでいる符号化された乗算テーブルを計算する。
ここで、0≦r<N
r、0≦m
0、m
1<n、0≦e
0、e
1<8である。乗算テーブルは、対称性
を満たすので、実施者は、例えば、e
0≦e
1である乗算テーブルの要素のみを記憶することを選定してよい。
例えば、上記で使用される2のべき乗を、2^0=00000001、2^1=00000010、2^2=00000100、2^3=00001000、2^4=00010000、2^5=00100000、2^6=01000000、2^7=10000000として実施してよく、これらの数又はビット列は、体の基底を形成する。
6.0≦r<N
rごとに、実施者は、S(0)のランダムシェア表現S(0)
(r)、入力が0に等しいときのSボックスの出力、及びSボックスにおける加算演算子Mの0≦k<8についての多項式係数m
kのランダムシェア表現
を選定する。実施者は、これら表現のシェアを符号化し、それにより位置に依存する符号化されたシェアの集合
及び
が与えられる。
7.任意のラウンドインデックス0≦r<N
rについて、実施者は、16nバイトに対する加算演算子
を
として作成し、ここで、
− 任意のラウンドインデックスr,0≦r<N
rについて、D
(r)は、16nバイトのベクトル(B
0,K,B
16n−1)を入力として受け取り、0≦i、j<4、及び0≦m<nについて、
をB
n(i+4j)+mに適用する演算子として定義される。
− 任意のラウンドインデックスr,0≦r<N
rについて、E
(r)は、16nバイトのベクトル(B
0,K,B
16n−1)を入力として受け取り、0≦i、j<4、及び0≦m<nについて、
をB
n(i+4j)+mに適用する。
− Fは、16nバイトのシーケンス(B
0,K,B
16n)を入力として受け取り、各i,jについてX=B(B
n(i+4j),K,B
n(i+4j)+n−1)を設定し、Xにフーリエ変換を適用し、
を設定する。
− Tは、16nバイトのベクトル
を入力として受け取り、それらをシーケンス
に置換し、ここで
である。
− L
(r)は、16nバイトのベクトル
を入力として受け取り、0≦k<nである各kについて、変換
を16バイトのベクトル
に適用する。
変換
は、その入力
を
、0≦i、j<4である4×4行列Aにしである。0≦r<N
r−1である場合、変換は、MixColumns o ShiftRows演算をAに適用する。r=N
r−1である場合、ShiftRows演算をAに適用する。そして、列ごとに16バイト分のAを出力する。
1≦k<nについて、変換
は、16バイトに対するランダムに選択される加算可逆変換であり、エントリがすべて等しい16バイトのベクトルに作用するとき、エントリがすべて等しい16バイトのベクトルを出力するという性質を有する。そのような変換をどのようにすると効率的に生成できるかが以下に示される。
8.実施者は、16バイトに作用し、16nバイトを出力する加算演算子
を
として構築する。ここで、
である。
各R
in,k、1≦k<nは、16バイトに作用し、1バイトを出力するランダムな加算演算子であり、U
inにおいて16回繰り返される。演算子R
in,kを構築する好適な方法の一つは、16バイトに対するランダムな可逆演算子Rを選定し、R
in,k(B
0,K,B
15)=B’
k−1とし、ここで(B’
0,K,B’
15)=R(B
0,K,B
15)である。n=17のとき、この構築は、16個の入力バイト(B
0,K,B
15)と16個のバイト(R
1(B
0,K,B
15),K,R
16(B
0,K,B
15))との間に全単射があることを保証する。したがって、16個の入力バイトと16個のフーリエ係数
,K,
との間に全単射があることになり、シェアの集合の非ゼロのインデックスが、任意の状態バイトを表し、よって、異なる入力は常に異なるシェアの集合を与えることになり、衝突が起こらない。
9.実施者は、演算子
を
として構築し、ここで
である。
ここで、各R
out,k,1≦k<nは、16バイトに作用し、16バイトを出力するランダムな加算演算子であり、エントリがすべて同じである16バイトのベクトルに作用するとき、全ゼロベクトルが出力になるという性質を有する。
実施者は、演算子
、
、及び
、符号化された鍵シェア
、符号化された乗算テーブル
、Sボックスオフセットシェア
、
並びに線形変換の定数シェア
を使用するAES暗号化プログラムを構築する。乗算テーブルを使用して、実施者は、関数Mul、Conv、及びSquareを作成する。
関数Mulは、ラウンドr及び位置i,jにおけるシェアm
x及びm
yの符号化に従って符号化された、各自のインデックスm
x及びm
yをもつ2つの個々に符号化されたシェアx及びyを乗算し、ラウンドr及び位置i,jにおけるシェアインデックスの符号化(m
x+m
y)mod nに従って符号化された符号化結果を返す。n個のシェアを用いた畳み込みでは、積
が、z=xyのシェア
に現れることに留意されたい。位置i、jは、AES状態の4x4配列内での位置である。擬似コード実施は、
Mul(r,i,j,m
x,m
y,x,y):
となるようなビットξ
0,K,ξ
7を見つける
となるようなビットη
0,K,η
7を見つける
を返す
であり、ここで、総和はF
256に対するものである。
関数Convは、ラウンドr及び位置i,jにおける符号化に従って、2つの符号化されたシェアの集合X=(x
0,K,x
n−1)及びY=(y
0,K,y
n−1)の符号化された畳み込みを返す。擬似コード実施は、
Conv(r,i,j,X,Y):
Z←(0,K,0)
for 0≦m
x<n
for 0≦m
y<n
return Z
であり、総和はF
256に対するものである。
関数Squareは、ラウンドr及び位置i,jにおける符号化に従って、符号化されたシェアの集合X=(x
0,K,x
n−1)の自身との符号化された畳み込みを返す。擬似コード実施は、
Square(r,i,j;X):
Z←(0,K,0)
for 0≦m
x<n
return Z
であり、ここで、総和はF
256に対するものである。
これらの関数をサブルーチンとして使用して、実施者は関数Inverseを作成し、この関数は、ラウンドr及び位置i,jにおける符号化に従って、符号化されたシェアの集合Xの自身との254重の符号化された畳み込みを返す。擬似コード実施は以下である。
Inverse(r,i,j;X):
Y ← Square(r,i,j,X)
Z ← Conv(r,i,j,X,Y)
Y ← Square(r,i,j,Y)
X ← Conv(r,i,j,X,Z)
Y ← Square(r,i,j,Y)
Z ← Conv(r,i,j,X,Y)
Z ← Square(r,i,j,Z)
Z ← Square(r,i,j,Z)
Z ← Square(r,i,j,Z)
Y ← Conv(r,i,j,X,Z)
Y ← Square(r,i,j,Y)
return Y
関数ShareSboxは、ラウンドr及び位置i,jにおける符号化に従って符号化された畳み込みを用いて、符号化されたシェアの集合Xに作用する、Sボックス演算子の出力の符号化されたシェア表現を返す。擬似コード実施は以下である。
ShareSbox(r,i,j,X)
Y←Inverse(r,i,j,X)
for 1≦k < 8
Y←Square(r,i,j,Y)
return Z
関数SubShareは、以下の擬似コードに従い、関数ShareSboxを各シェアの集合に適用する。
SubShares(r,B0,K,B16n−1):
for 0≦i<4
for 0≦j<4
(Bn(j+4j),K,Bn(j+4j)+n−1)←ShareSbox(r,i,j(Bn(i+4j),K,Bn(i+4j)+n−1))
return(B0,K,B16n−1)
AES暗号化関数AESは、平文の16バイトの入力(in
0,K,in
15)を暗号化し、平文の16バイトの結果(out
0,K,out
15)を返す。擬似コードでの実施は以下である。
AES(in
0,K,in
15)
for 0≦r<N
r
for 0≦i<4
for 0≦j<4
(B
n(i+4j),K,B
n(i+4j)+n−1)←ShareSbox(B
n(i+4j)),K,B
n(i+4j)+n−1)
for 0≦i<4
for 0≦j<4
return(out
0,K,out
15)
17個のシェアを用いるAESプログラムの重要な特徴は、状態バイトを表すどの符号化されたシェアの集合についても、16個の入力バイトと、復号後のシェアの集合の1番目から16番目のフーリエ係数との間に全単射があることである。このことは、2つの異なる入力について、そのようなシェアの集合のどれにおいても17個のシェアへの同時の衝突は決してあり得ず、よってMIA/衝突攻撃が成功しないことを示唆する。より一般的に、一実施形態では、実施についての知識(符号化、鍵等)を使用して、次のラウンドにおけるシェアの集合から、以前のラウンドの内部状態が導出される。例えば、一実施形態では、あるラウンドの符号化されていない(シェアがない)内部状態(又は入力)と、次のラウンドの符号化された内部状態のシェアの集合との間に全単射がある。
上記の構築は、一定の規定された性質をもつランダムな加算演算子を使用し、それらはコンパイル時に定義される。ここで、これをどのようにすると効率的に行うことができるかを示す。1バイトは8ビットを連結したものであるため、Nbytesバイトに対する加算演算子と、サイズN×Nの二値行列との間には1対1のマッピングがあり、ここでN=8Nbytesである。
任意のサイズN×Nのランダムな可逆二値行列を生成する。このアルゴリズムは、以下のステップで構成される。
1.対角線に1があり、対角線より上にゼロがあり、対角線より下にランダムビットがある、サイズN×Nの二値行列Lを構築する。
2.対角線に1があり、対角線より下にゼロがあり、対角線より上にランダムビットがある、サイズN×Nの二値行列Uを構築する。
3.A=LUを返す。
N
bytes回繰り返された8ビットのシーケンスに作用するとき、結果として、N
bytes回繰り返された8ビットのシーケンスを生じるという性質をもつ、サイズ8N
bytes×8N
bytesのランダム可逆二値行列を生成する。このアルゴリズムは以下のステップで構成される。
1.サイズ8×8のランダムな可逆二値行列Aを構築する。
2.サイズ8×8(N
bytes−1)のランダムな二値行列Bを構築する。
3.サイズ8(N
bytes−1)×8(N
bytes−1)のランダムな可逆二値行列Cを構築する。
4.Rを、ブロック行列
とする。
5.対角線に1があり、対角線より上にゼロがあり、対角線より下にランダムビットがある、サイズ8(N
bytes−1)×8(N
bytes−1)のランダムな二値行列L’を構築する。
6.8×8の単位行列I
8×8のL個のコピーを積み重ねることによってサイズ8(N
bytes−1)×8のブロック行列Dを構築する。
7.ブロック行列
を構築する。
8.A=LRL
−1を返す。
Nbytes回繰り返された8ビットのシーケンスに作用するときに、結果として全ゼロのビットシーケンスを生じるという性質をもつ、サイズ8Nbytes×8Nbytesのランダム二値行列を生成する。
1.行列Aをサイズ8×8のゼロ行列とする。
2.項4.2のアルゴリズムのステップ2〜8を実行する。
以下の番号をつけた項は、企図される非制限的な実施形態を含む。
1.入力データに暗号演算を行って出力データを得るようになされた電子暗号装置であって、電子暗号装置は、
− 入力データを受け取るようになされた入力インターフェースと、
− 内部状態を記憶するようになされたメモリであって、内部状態は1つ又は複数のデータ要素を含み、各データ要素は、メモリ内で対応するシェアの集合として表され、メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、メモリ内のシェアの集合に対応するフーリエ係数の集合が、それらの間で所定の関係を満たす、メモリと、
− プロセッサ回路であって、
− 内部状態を反復的に更新することによって暗号演算を行うことであって、入力データから初期内部状態が導出され、出力データは最終内部状態から導出され、内部状態を更新することは、更新後の内部状態のシェアの集合に対応する更新後のフーリエ係数の集合が、それらの間の所定の関係を不変量として満たすようになされる、行うことと、
− 最終内部状態に出力演算子を適用して出力データを導出することであって、出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付け、前記歪みは、フーリエ係数が所定の関係を満たす場合に歪みがゼロになるようにシェアの集合のフーリエ係数に依存する、導出することと、
を行うように構成されたプロセッサ回路と、を備える電子暗号装置。
2.シェアの集合は、前記シェアの集合に対応するフーリエ係数の部分集合によって決定されるデータ要素を表す、項1に記載の暗号装置。
3.シェアの集合は、前記シェアの集合に対応するフーリエ係数の1つに等しいデータ要素を表す、項1又は2に記載の暗号装置。
4.所定の関係は、異なるフーリエ係数の集合の少なくとも2つのフーリエ係数が等しいことを含む、項1乃至3のいずれかに記載の暗号装置。
5.フーリエ係数の集合中の各フーリエ係数は、1つを除いて、その他のフーリエ係数の集合中のそれぞれのフーリエ係数に等しい、項4に記載の暗号装置。
6.内部状態を更新することが、内部状態のデータ要素に非線形演算を適用することを有し、非線形演算は、内部状態のデータ要素を表す対応するシェアの集合中にあるメモリ内のシェアに作用することによって、データ要素に作用するようになされる、項1乃至5のいずれかに記載の電子暗号装置。
7.非線形演算が有限体における多項式であり、プロセッサ回路が、シェアの集合のべき乗を、シェアの集合自体とのシェアの集合の畳み込みとして算出するようになされる、項6に記載の暗号装置。
8.内部状態を更新することが、内部状態に線形演算を適用することを有し、線形演算は、内部状態の少なくとも2つのデータ要素を表す、メモリ内の少なくとも2つのシェアの集合に同時に作用する、項1乃至7のいずれかに記載の電子暗号装置。
9.線形演算が、
− 線形演算が作用するシェアの集合ごとにフーリエ係数の集合を生じさせるフーリエ演算子であって、フーリエ係数の集合は、インデックスを有する該集合中の係数で順序付けされる、フーリエ演算子と、
− 異なるインデックスのフーリエ係数とは無関係に、同じインデックスのフーリエ係数に作用する1つ又は複数の線形演算子であって、不変量を保持しつつフーリエ係数に作用するようになされる、1つ又は複数の線形演算子と、
− 逆フーリエ演算子と、
を連結することによって構築される、項8に記載の暗号装置。
10.暗号演算を行うことが、内部状態のすべて又は一部に鍵を追加することを有し、前記鍵は、メモリ内で対応するシェアの集合として表され、シェアの集合は、有限体における離散フーリエ変換に従って、鍵のシェアの集合に対応するフーリエ係数間で所定の関係を満たす、項1乃至9のいずれかに記載の暗号装置。
11.シェアの集合の合算ビットサイズが、少なくとも入力データのビットサイズと同じ大きさである、項1乃至10のいずれかに記載の暗号装置。
12.演算がブロック暗号である、項1乃至11のいずれかに記載の暗号装置。
13.データ要素を表すシェアの集合中のシェアが線形符号化で符号化される、項1乃至12のいずれかに記載の暗号装置。
14.プロセッサ回路が、平文入力データに入力演算子を適用するようになされ、前記入力演算子は、初期内部状態を表すシェアの複数の集合を生じさせ、シェアの複数の集合は所定の関係を満たす、項1乃至13のいずれかに記載の暗号装置。
15.入力データに暗号演算を行って出力データを得る電子暗号方法(500)であって、電子暗号方法は、
− 入力データを受け取る(510)ステップと、
− 内部状態を記憶する(530)ステップであって、内部状態は1つ又は複数のデータ要素を含み、各データ要素は、メモリ内で対応するシェアの集合として表され、メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、メモリ内のシェアの集合に対応するフーリエ係数の集合が、それらの間で所定の関係を満たす、ステップと、
− 内部状態を反復的に更新することによって暗号演算を行う(541、546)ステップであって、入力データから初期内部状態が導出され、出力データは最終内部状態から導出され、内部状態を更新することは、更新後の内部状態のシェアの集合に対応する更新後のフーリエ係数の集合が、それらの間の所定の関係を不変量として満たすようになされる、ステップと、
− 最終内部状態に出力演算子を適用して(522)、出力データを導出するステップであって、出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付け、前記歪みは、フーリエ係数が所定の関係を満たす場合に歪みがゼロになるようにシェアの集合のフーリエ係数に依存する、ステップと、を有する電子暗号方法。
16.項15に記載の方法をプロセッサシステムに行わせる命令を表す一時的又は非一時的なデータ(1020)を備えた、コンピュータ可読媒体(1000)。
以下に、本発明による暗号装置又は方法において実施される暗号プリミティブのさらに詳細な実施形態が与えられる。選択される暗号プリミティブは、ここでもAESブロック暗号であり、これは例示として選択されたものである。以下の説明は暗号化演算に関するが、解読演算が平易に理解される。以下で詳細に示す実施形態は、AES内部状態全体をシェアの単一の集合中に表す。さらに、内部状態のデータ要素以上のものをシェアの集合の中に表すことの様々な利点について論じる。
この実施形態は、2つの独立した問題を扱う。第1に、ホワイトボックス又はグレーボックス攻撃に対する対策としての高次マスキングは、複雑さ、並びにその結果として実行時間及び/又は記憶に大きな代価を払って得られる。各符号化が、本明細書ではω、σと呼ぶ2つの独立した変数を含んでいるアルゴリズムの実施は、分解攻撃によって攻撃される恐れがある。これら2つの問題を、以下の実施形態でさらに対処する。
本明細書で論じられるように、シェア減少攻撃を阻止するには、フーリエ変換に基づいてシェアの一番上に不変量を追加することができる。例えば、S=s
0,...,s
15が、あるラウンドにおけるAES状態を表すとする。各s
iは、17個のシェア、例えば
によって、x
i=s
iのゼロ番目のフーリエ係数が状態バイトとなるように表される。その他の16個のフーリエ係数は、不変量を定義するために使用される。不変量は、入力全体に対して全単射となるように選択することができる(MIAを軽減する)。不変量は、シェア減少攻撃とDFAとの両方を軽減するために使用される。
DFA及びMIAの他に、単一の合同符号化の下で2つのアルゴリズムが並列に実行されるテーブル方式の実施では、分解攻撃も脅威である。分解の例については、A.Biryukov and A.Shamir.: Structural cryptanalysis of SASASを参照されたい(参照により本明細書に援用される)。2つのアルゴリズムが実行される対象の2つの部分を、ω及びσによって表す。これらの合同符号化の使用は、二つの部分からなる。すなわち、第1に、テーブルが複数の演算で構成されるようになるので、エンジニアテーブルを逆にたどることを試みる攻撃者を阻止する。第2に、それらの経路を共にまとめることにより、MIA及びDFAからの保護を得る。
しかし、ω経路とσ経路を分離しようとする分解攻撃が始動され得る場合には問題となる。実際、ω単位とσ単位の両方に対する非線形演算を伴うテーブルは、ω又はσのいずれかに依存する単一の演算に対応する2つのテーブルに分解され、したがって、ωとσを結合することによって提供されるセキュリティが破られる。以下で論じられる合同符号化は、並列アルゴリズムが合同で符号化される実施でのテーブルへの分解攻撃によって、並列のアルゴリズム実行における分岐及び線形再結合が明らかになるのを防ぐ助けとなり、時間及びメモリの複雑さを低減させる。
この考え方は次のように表現することができる。f:{0,1}2n→{0,1}2nとし、ここで、nビットにわたって働くいずれかのfω及びfσについて、f(x)=fω(ω(x))||fσ(σ(x))であり、ω(・)は、「xのω部分」を抽出し、σ(・)は「xのσ部分」を抽出する。a>2を、2n−1の除数とする。
がf
ωの多項式表現を表し、
がf
σの多項式表現を表すとする。べき乗
を与えられると、f
ωの算出の剰余は、
とuとの間の内積の中にあり、これは、c
ωを考えるとき線形である。
iω≠iσとなるような位置0≦iω<a及び0≦iσ<aを選ぶ。それぞれiω番目のフーリエ係数がω(x)と等しく、iσ番目のフーリエ係数がσ(x)を含むように、xについてa個のシェアを作成する。
畳み込みネットワークを使用して、ω(x)及びσ(x)のすべての必要とされるべき乗を算出することができる。結果に対して、多項式
及び
の係数を表す線形変換行列を適用することにより、2つの多項式を評価することができる。
分岐及び線形再結合は、以下の動作として表現することができる。
− 現在の状態を複数の状態にコピーする。
− すべてのコピーの中でアルゴリズムの別個のスレッドを実行する。
− x1=x2=・・・=xnである場合かつその場合に限りf(x1,...,xn)=x1となる性質をもつ線形マップfを選ぶ。
− すべての分岐の結果にfを適用する。
コピーすることは、1つのフーリエ係数の値を別のフーリエ係数の値にコピーすることとして実施され、これは線形であることに留意されたい。また、fの適用は、構築上、線形である。そのため、これら2つのステップは、それらを適切に線形変換行列にして、これらの演算を適切に隠蔽することによって適用することができる。最後に、すべてのスレッドをフーリエ係数上で並列に評価することは、アフィン演算が各スレッドで同じであることを保証することによって行うことができる。
Sボックスの反転部分は、すべてのフーリエ係数の逆元を算出する。AESのアフィン部分は、フーリエ係数にも作用するように実施され得る。すなわち、鍵を追加して、互いに異なるフーリエ係数の値を1つのアフィン変換に埋め込むことができる。したがって、以下のようにAESを実施することができる。
− 導入:入力を、シェアの集合の最初の16個のフーリエ係数にコピーする(少なくとも17個のシェアを必要とする)
− 例えば上記で説明したようにShareSboxを実施する。
− 例えば上記で説明したように鍵を実施する。
− ShiftRows及びMixColumnsが対応するフーリエ係数に適用されるように、線形変換Liを実施する。
− 再構築:暗号文が、結果の最初の16個のフーリエ係数によって表される。
MIAに関しては、フーリエ変換に起因して、すべてのシェアは1AES状態バイトを回復することを要求され、プログラム中の各シェアの集合は、構築上、すべての入力バイトに依存する。DFAに関しては、1つのバイトに1つの故障を導入すると、フーリエ変換に起因してすべてのフーリエ係数が影響を受ける。故障注入が上手くいくためには、最初の16個のフーリエ係数のうち1つのみが影響を受けることが必要とされる。これには、攻撃者が少なくとも9個のシェアに正しい方式でヒットすることが必要であることを示すことができる。
16*17個のシェアに対する上記の実施と比較すると、17個のみのシェア及び線形符号化を用いるこの実施形態は、MIAからの保護が弱い。この理由は、第1ラウンドのSボックスの結果を表す何らかの中間値、例えばシェアの集合の類似性を調べるMIA攻撃が存在するためである。この攻撃は、例えばAES状態バイトの算出に使用されないフーリエ係数によって得られる、シェアの集合のアフィン符号化に対する、ランダムな、入力に依存するオフセットを有することによって阻止され得る。17個のシェアに対するこのアプローチでは、1つのみの非表現係数を残しておく。
一方、さらに他の実施形態では、17個の代わりに51個のシェアを使用して全AES状態を記述することができ、これは上記の脆弱性を解決する。16*17バイト表現と比べて、依然として性能の利得が得られる。各畳み込みに、前者は16*172回の乗算を必要とし、対して51個のシェアでの実施は、512=9*172回の乗算しか必要としない。さらに、16*17バイトの表現における線形変換は、51個のシェアを用いる実施の512=32*172バイトと比較して、162*172バイトからなる行列を必要とする。
さらに別の代替として、17個のシェアに非線形符号化を使用してこの脆弱性を解決することもできる。この場合、比較的単純な行列乗算が、例えばテーブル参照の回路に置き換えられてよい。
AESの場合の例示的実施について説明するが、ここでは51個のシェアからなる各集合が2つのAES状態に対応する。そのため、2つのAES分岐が、51個のシェアからなる単一の集合に組み合わせられる。
p
0,...,p
15が平文を表すとし、c
0,...,c
15が最終的な暗号文を表すとする。bin:GF(256)→{0,1}
8×{0,1}
8が、体の要素βを、βでの乗算に対応する行列に変換する関数を表すとする。すなわち、GF(256)について基底α
0,...,α
7を固定する。(x
0,x
1,...,x
7)∈{0,1}
8について、
とし、ここで、(y
0,...y
7)=(x
0,...,x
7)bin(β)である。さらに、αが、AESの有限体の51番目の原始根であるとする。F:{0,1}
408×{0,1}
408が、フーリエ変換に対応する二値行列、
を表すとする。
Fの大きさは、51*8であるため、408である。この行列は、51バイトのシェアの集合のビットに作用する。さらに、Idは、128×128ビットの単位行列を表し、すべての状態バイトに作用するSボックスの線形変換は、128×128ビットの行列LSによって表され、すべての状態バイトに対する128ビットのSボックスオフセットはbSによって表され、0で、128ビットの全ゼロベクトルを表す。Mで、AESのShiftRows及びMixColumnsを表す128×128ビット行列を表し、MCで、MixColumnsを表す128×128ビット行列を表す。
ステップ1:回路を選定する。以下の構造を有する2つのAES分岐を実施する。
上の表中、1番目の行はラウンド番号を含んでいる。2番目及び3番目の行は、AESの2つの分岐を指す。ダミーラウンド、D0〜D5、R11〜R12が追加されているため、このAESの実施は20ラウンドを使用することに留意されたい。AESの2つの分岐についてのラウンド16の終了時における結果は、等しくなければならない。2つの分岐が等しくない場合は、この相等性が、歪みを導入することによって検証される。例えば、これは、ラウンド17のアフィン部分で行われる。ダミーラウンドについては、異なる鍵、例えばランダム鍵を用いる以外は、通常のAESラウンドを使用することができる。
ステップ2:ランダム符号化を選定する。
1.サイズ8×8ビットの20*51可逆行列、例えばi=0,...,19及びj=0,...,50についてのE
i,jを選定する。
2.i=0,...,19について、E
i=diag(E
i,0,...,E
i,19)を定義する。
3.
ステップ3:入力変換を作成する。
1.i=0,...,18について、ランダムな線形マッピングU
i:{0,1}
128→{0,1}
8を選定する。
2.I
jを、I
j(bin(x
0),...,bin(x
15))=bin(x
j)に対応する8×128行列と定義する。
3.
を定義する。
ステップ4:ダミーラウンドの変換及び鍵を作成する。
1.j=0,…,5について、
− 128×128のランダムな可逆二値行列LDiを生成する。
− 128ビットのランダムな二値ベクトルKDiを生成する。
ステップ5:ラウンド鍵を作成する
1.128ビットの鍵Kを与えられて、AESの鍵スケジュールに従ってラウンド鍵K’0=K,…,K’10を算出する。
2.i=0,...,9について、Ki=K’iとし、K10=MC*K’10とする(「最終AESラウンド」はmixcolumnsを有する)。
3.2つのランダムな128ビット鍵K11及びK12を生成する。
ステップ6:ラウンドアフィンマッピングを作成する。
1.A
i:{0,1}
408→{0,1}
408が、i=0,...,19についてA
i(x)=L
i(x)+b
iによって定義されるとする。
2.ラウンド0:
− ランダムな152ビットv
0及びランダムな152×152二値行列V
0を生成する
−
を算出する。
−
を算出する。
− L
0=E
0*F*L’
0*L
Iを算出する。
− 及びb
0=E
0*F*b’
0。
51−2*16=19、及び19*8=152であるため、v
0は152ビットであることに留意されたい。
は、ωのAES分岐を表し、L
D1はσのAES分岐を表し、V
0は残りの係数を表す。
3.ラウンド1:
− ランダムな152ビットv
1及びランダムな152×152二値行列V
1を生成する。
−
を算出する。
−
を算出する。
−
を算出する。
− 及びb
1=E
1*F*b’
1。
4.ラウンド2:
− ランダムな152ビットv
2及びランダムな152×152二値行列V
2を生成する
−
を算出する。
−
を算出する。
−
を算出する。
− 及びb
2=E
2*F*b’
2。
5.ラウンド3:
− ランダムな152ビットv
3及びランダムな152×152二値行列V
3を生成する。
−
を算出する。
−
を算出する。
−
を算出する。
− 及びb
3=E
3*F*b’
3。
6.ラウンド4:
− ランダムな152ビットv
4及びランダムな152×152二値行列V
4を生成する
−
を算出する。
−
を算出する。
−
を算出する。
− 及びb
4=E
4*F*b’
4。
7.ラウンドi=5,...,14:
− ランダムな152ビットv
i及びランダムな152×152二値行列V
iを生成する。
− L’
i=diag(M*L
S,V
i,M*L
S)を算出する。
− b’
i=(K
i−2+M*b
s,v
i,K
i−4+M*b
S)を算出する。
−
を算出する。
− 及びb
i=E
i*F*b’
i。
8.ラウンド15:
− ランダムな152ビットv
15及びランダムな152×152二値行列V
15を生成する。
−
を算出する。
−
を算出する。
−
を算出する。
− 及びb
15=E
15*F*b’
15。
9.ラウンド16:
− ランダムな152ビットv
16及びランダムな152×152二値行列V
16を生成する
− L’
16=diag(Id,V
16,M*L
S)を算出する。
− b’
16=(0,v
16,K
12+M*b
S)を算出する。
−
を算出する。
− 及びb
16=E
16*F*b’
16。
10.ラウンド17:
− ランダムな152ビットv
17及びランダムな152×152二値行列V
17を生成する。
− BとB+Idの両方が可逆となるように、ランダムな128×128ビット二値行列Bを生成する。
−
を算出する。
−
を算出する。
−
を算出する。
−
を算出する。
− 及びb
17=E
17*F*b’
17。
11.ラウンド18:
− ランダムな152ビットv
18及びランダムな152×152二値行列V
18を生成する。
−
を算出する。
−
を算出する。
−
を算出する。
− 及びb
18=E
18*F*b’
18。
12.ラウンド19:
− ランダムな152ビットv
19及びランダムな152×152二値行列V
19を生成する。
−
を算出する。
−
を算出する。
−
を算出する。
− 及びb
19=b’
19。
ステップ7:回路を完了する。ここでは、上記の「ShareSbox」で使用された「反転」関数を適用して、各フーリエ係数のGF(256)に対する逆数を算出する。ここではこの関数をSと呼ぶ。すると、最終的な回路は次のように記述される。
・128ビットの平文pを与えられる。
・
を設定する。
・
・128ビットの結果c=A
19(x)。
暗号装置の様々な実施形態において、入力インターフェースは様々な選択肢から選択されてよい。例えば、入力インターフェースは、ローカルネットワーク、又は例えばインターネットなどのワイドエリアネットワークへのネットワークインターフェース、内部又は外部のデータ記憶への記憶インターフェース、アプリケーションインターフェース(API)等である。出力インターフェースは、ローカルネットワーク、又は例えばインターネットなどのワイドエリアネットワークへのネットワークインターフェース、内部又は外部のデータ記憶への記憶インターフェース、アプリケーションインターフェース(API)、ディスプレイ、プリンタ等である。入力インターフェース及び出力インターフェースは、通信インターフェースとして組み合わせられてよい。
暗号装置はユーザインターフェースを有してよく、ユーザインターフェースは、1つ又は複数のボタン、キーボード、ディスプレイ、タッチ画面等のよく知られた要素を含む。ユーザインターフェースは、暗号演算、例えば解読を行うためのユーザ対話に対応するようになされる。
装置100のメモリ、例えば内部状態ストレージ130は、例えばフラッシュメモリなどの電子メモリ、又はRAM、又は例えばハードディスクなどの磁気メモリ等である。記憶130は、共にメモリを構成する複数の離散したメモリを備えてよい。メモリは、一部が揮発性で、一部が不揮発性であってよい。例えば、テーブル及びコンピュータ命令が不揮発性の部分に記憶され、内部状態が揮発性の部分に記憶される。
通例、装置100は、装置100に記憶された適当なソフトウェアを実行するマイクロプロセッサ(図1では別個には図示していない)を備える。例えば、そのソフトウェアは、ダウンロードされ、及び/又は対応するメモリ、例えばRAMなどの揮発性メモリ、若しくはフラッシュなどの不揮発性メモリ(別個には図示していない)に記憶されている。それに代えて、装置100は、全体又は一部が、プログラム可能ロジックに、例えばフィールドプログラム可能ゲートアレイ(FPGA)として実施されてもよい。装置100は、全体又は一部が、いわゆる特定用途集積回路(ASIC)、例えば回路の特定の用途に合わせてカスタマイズされた集積回路(IC)として実施されてよい。例えば、回路は、例えばVerilog、VHDL等のハードウェア記述言語を使用して、CMOSとして実施される。
一実施形態では、装置100は、入力インターフェース回路、入力演算子回路、出力インターフェース回路、出力演算子回路、内部状態記憶回路、複数の非線形演算回路、複数の線形演算回路、のうち1つ又は複数を備える。装置100は、追加的な回路を備えてよい。回路は、本明細書に記載される対応するユニットを実施する。回路は、プロセッサ回路及び記憶回路であり、プロセッサ回路は、記憶回路内に電子的に表現された命令を実行する。回路は、FPGA、ASIC等であってもよい。
プロセッサ回路は、分散式に、例えば複数の部分プロセッサ回路として実施されてよい。記憶は、複数の分散した部分記憶にわたって分散される。メモリの一部又はすべてが、電子メモリ、磁気メモリ等であってよい。例えば、記憶は、揮発性の部分及び不揮発性の部分を有する。記憶の一部は読出し専用であってよい。
図5aは、暗号方法501の一実施形態の例を概略的に示す図である。方法501は、入力データに暗号演算を行って出力データを得るようになされる。暗号方法501は、
− 入力データを受け取る(560)ステップと、
− 内部状態を記憶する(570)ステップであって、内部状態は1つ又は複数のデータ要素を含み、内部状態は、メモリ内でシェアの1つ又は複数の集合として表され、メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、シェアの集合に対応するフーリエ係数の真部分集合が、内部状態の1つ又は複数のデータ要素を決定する、ステップと、
− 内部状態を反復的に更新する(580)ことによって暗号演算を行うステップであって、入力データから初期内部状態が導出され、出力データは最終内部状態から導出され、内部状態を表すシェアの1つ又は複数の集合を更新することによって更新後の内部状態が形成され、更新後のシェアの集合に対応する更新後のフーリエ係数の真部分集合が、更新後の内部状態の1つ又は複数の更新後のデータ要素を決定する、ステップと、
− 最終内部状態に出力演算子を適用して(590)、出力データを導出するステップであって、出力演算子は、シェアの1つ又は複数の集合を出力データのデータ要素に対応付ける、ステップと、を有する。
図5bは、暗号方法500の一実施形態の例を概略的に示す図である。方法500は、入力データに暗号演算を行って出力データを得るようになされる。方法500は、
− 入力データを受け取る(510)ステップと、
− 平文入力データに入力演算子を適用する(512)ステップであって、前記入力演算子は、初期内部状態を表すシェアの複数の集合を生じさせ、シェアの複数の集合は所定の関係を満たす、ステップと、
− 内部状態を記憶する(530)ステップであって、内部状態は1つ又は複数のデータ要素を含み、各データ要素は、メモリ内で対応するシェアの集合として表され、メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、メモリ内のシェアの集合に対応するフーリエ係数の集合はそれらの間で所定の関係を満たす、ステップと、
− 内部状態を反復的に更新するステップであって、内部状態を更新するステップは、更新後の内部状態のシェアの集合に対応する更新後のフーリエ係数の集合が、それらの間の所定の関係を不変量として満たすようになされ、更新するステップは、1つ若しくは複数の非線形演算子及び/又は1つ若しくは複数の非線形演算子546を適用する(541)ステップを有し、演算子が適用された後に、更新後の内部状態が530で再度記憶される、ステップと、
− 最終内部状態に出力演算子を適用して(522)出力データを導出するステップであって、出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付け、前記歪みは、フーリエ係数が所定の関係を満たす場合に歪みがゼロになるようにシェアの集合のフーリエ係数に依存し、例えば出力演算子は所定回数の更新ラウンドが内部状態で実行された後に適用される、ステップと、
− 出力データを出力する(520)ステップと、を有する。
本明細書で指摘されるように、方法のステップの一部は任意選択である。例えば、入力データがすでに符号化されている場合には入力データの符号化は必要ない。
当業者には明らかであるように、方法を実行する種々の方式が可能である。例えば、ステップの順序を変えることができ、又は一部のステップは並列に実行されてよい。さらに、ステップとステップの間に、他の方法のステップが挿入されてよい。挿入されるステップは、本明細書に記載されるような方法の精緻化に相当するか、又は方法に関係しないものである。例えば、更新ステップは、少なくとも部分的に並列に実行されてよく、例えば内部状態の異なるデータ要素に非線形演算子を適用することは、並列に行われてよい。さらに、所与のステップは、次のステップが開始される前に完全に完了していなくてよい。
本発明による方法は、プロセッサシステムに暗号方法、例えば方法500又は501の一実施形態を行わせる命令を備えたソフトウェアを使用して実行され得る。ソフトウェアは、システムの特定の下位エンティティによって行われるステップのみを含んでよい。ソフトウェアは、ハードディスク、フロッピー、メモリ、光学ディスク等の適切な記憶媒体に記憶される。ソフトウェアは、配線に沿って、又はワイヤレスで、又はデータネットワーク、例えばインターネットを使用して、信号として送られる。ソフトウェアは、ダウンロード及び/又はサーバ上でのリモート使用が可能にされる。本発明による方法は、方法を行うために、プログラム可能ロジック、例えばフィールドプログラム可能ゲートアレイ(FPGA)を構成するようになされたビットストリームを使用して実行されてよい。
本発明は、本発明を実用化するために適合されたコンピュータプログラム、特にキャリア上のコンピュータプログラムにも適用されることが理解されよう。プログラムは、ソースコード、オブジェクトコード、コードの中間供給源、及び部分的にコンパイルされた形態などのオブジェクトコードの形態、又は本発明による方法を実施する際に使用するのに適した他の形態である。コンピュータプログラム製品に関する実施形態は、記載される方法のうち少なくとも1つ方法の各処理ステップに対応するコンピュータ実行可能命令を備える。これらの命令は、サブルーチンにさらに分割される、及び/又は静的若しくは動的にリンクされる1つ若しくは複数のファイルに記憶される。コンピュータプログラム製品に関する別の実施形態は、記載されるシステム及び/又は製品の少なくとも1つの各手段に対応するコンピュータ実行可能命令を備える。
図6aは、コンピュータプログラム1020を備える書込み可能部分1010を有するコンピュータ可読媒体1000を示し、コンピュータプログラム1020は、プロセッサシステムに一実施形態による暗号方法を行わせる命令を備える。コンピュータプログラム1020は、物理的なマークとして、又はコンピュータ可読媒体1000の磁化を利用して、コンピュータ可読媒体1000上に具現化される。しかし、任意の他の適切な実施形態も考えられる。さらに、コンピュータ可読媒体1000はここでは光ディスクとして示しているが、コンピュータ可読媒体1000は、ハードディスク、固体状態メモリ、フラッシュメモリ等の任意の適切なコンピュータ可読媒体でよく、また記録不可能でも記録可能でもよいことが理解されよう。コンピュータプログラム1020は、プロセッサシステムに前記暗号方法を行わせる命令を備える。
図6bは、暗号装置の一実施形態によるプロセッサシステム1140の概略表現を示す図である。プロセッサシステムは、1つ又は複数の集積回路1110を備える。1つ又は複数の集積回路1110のアーキテクチャは、図6bに概略的に示される。回路1110は、一実施形態による方法を実行する、及び/又はそのモジュール若しくは単位を実施するためにコンピュータプログラムコンポーネントを稼働させるための処理ユニット1120、例えばCPUを備える。回路1110は、プログラミングコード、データ等を記憶するメモリ1122を備える。メモリ1122の一部は、読出し専用であってよい。回路1110は、例えばアンテナなどの通信要素1126、コネクタ、又はその両方等を備える。回路1110は、本方法に定義される処理の一部又はすべてを行うための専用集積回路1124を備える。プロセッサ1120、メモリ1122、専用IC1124、及び通信要素1126は、相互接続1130、例えばバスを解して互いと接続される。プロセッサシステム1110は、それぞれアンテナ及び/又はコネクタを使用した、接触型通信及び/又は無接触型通信を行うためになされる。
例えば、一実施形態では、暗号装置は、プロセッサ回路及びメモリ回路を備え、プロセッサは、メモリ回路に記憶されたソフトウェアを実行するようになされる。例えば、プロセッサ回路は、Intel Core i7プロセッサ、ARM Cortex−R8等である。一実施形態では、メモリ回路は、ROM回路、又は不揮発性メモリ、例えばフラッシュメモリを含む。メモリ回路は、揮発性メモリ、例えばSRAMメモリであってもよい。後者の場合、装置は、ソフトウェアを提供するようになされた、不揮発性のソフトウェアインターフェース、例えばハードドライブ、ネットワークインターフェース等を備える。
上述の実施形態は、本発明を制限するのではなく例示するものであり、また当業者は多くの代替の実施形態を設計することが可能であることに留意すべきである。
特許請求の範囲において、括弧に入った参照符号は請求項を制限するものとは解釈すべきでない。動詞「含む、備える」及びその活用形の使用は、請求項に述べられるもの以外の要素又はステップの存在を排除しない。単数形は、そのような要素が複数個存在することを排除しない。本発明は、いくつかの別個の要素を備えるハードウェアを利用して、及び適切にプログラムされたコンピュータを利用して実施される。いくつかの手段を列挙する装置クレームにおいて、それら手段のいくつかは、1つの同じハードウェア品によって具現化されてよい。単に特定の方策が相互に異なる従属請求項に記載されているということは、それら方策の組み合わせが有利に利用できないことを意味しない。
特許請求の範囲において、括弧に入った参照は、例示を行う実施形態の図面中の参照符号又は実施形態の数式を指し、それにより請求項を理解し易くしている。このような参照は、請求項を制限するもものとは解釈すべきでない。