(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-05-19
(45)【発行日】2022-05-27
(54)【発明の名称】暗号装置及び方法
(51)【国際特許分類】
H04L 9/10 20060101AFI20220520BHJP
G09C 1/00 20060101ALI20220520BHJP
【FI】
H04L9/10 Z
G09C1/00 610Z
(21)【出願番号】P 2019564439
(86)(22)【出願日】2018-05-22
(86)【国際出願番号】 EP2018063414
(87)【国際公開番号】W WO2018215487
(87)【国際公開日】2018-11-29
【審査請求日】2021-05-20
(32)【優先日】2017-05-24
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】590000248
【氏名又は名称】コーニンクレッカ フィリップス エヌ ヴェ
【氏名又は名称原語表記】Koninklijke Philips N.V.
(74)【代理人】
【識別番号】110001690
【氏名又は名称】特許業務法人M&Sパートナーズ
(72)【発明者】
【氏名】リートマン ロナルド
(72)【発明者】
【氏名】デ フーフ セバスチアーン ヤコブス アントニウス
(72)【発明者】
【氏名】トルフィツェン ルドヴィクス マリヌス ジェラルダス マリア
【審査官】打出 義尚
(56)【参考文献】
【文献】特表2018-537704(JP,A)
【文献】特開2009-169287(JP,A)
【文献】特表2009-516964(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/10
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
入力データに暗号演算を行って出力データを得る電子暗号装置であって、前記電子暗号装置は、
前記入力データを受け取る入力インターフェースと、
内部状態を記憶するメモリであって、前記内部状態は1つ又は複数のデータ要素を含み、各データ要素は、前記メモリ内で、対応するシェアの集合として表され、前記メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、前記メモリ内の前記シェアの集合に対応する前記フーリエ係数の集合間で所定の関係が満たされる、メモリと、
前記内部状態を反復的に更新することによって前記暗号演算を行うことであって、前記入力データから初期内部状態が導出され、前記出力データは最終内部状態から導出され、前記内部状態の前記シェアの集合に対応する前記フーリエ係数の集合間で前記所定の関係が満たされる場合に、更新後の前記内部状態の前記シェアの集合に対応する更新後の集合のフーリエ係数間で前記所定の関係が満たされる、前記暗号演算を行うことと、
前記最終内部状態に出力演算子を適用して前記出力データを導出することであって、前記出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付け、前記歪みは、当該シェアの集合の前記フーリエ係数が前記所定の関係を満たす場合にゼロであり、前記歪みは、当該シェアの集合の前記フーリエ係数に依存する、前記出力データを導出することと、
を行うプロセッサ回路と、
を備える、電子暗号装置。
【請求項2】
シェアの集合が、前記シェアの集合に対応する前記フーリエ係数の部分集合によって決定されるデータ要素を表す、請求項1に記載の電子暗号装置。
【請求項3】
シェアの集合が、前記シェアの集合に対応する前記フーリエ係数のうちの1つに等しいデータ要素を表す、請求項1又は2に記載の電子暗号装置。
【請求項4】
前記所定の関係は、異なるフーリエ係数の集合の少なくとも2つのフーリエ係数が等しいことを含む、請求項1から3のいずれか一項に記載の電子暗号装置。
【請求項5】
フーリエ係数の集合中の各フーリエ係数は、1つを除いて、その他のフーリエ係数の集合中のそれぞれのフーリエ係数に等しい、請求項4に記載の電子暗号装置。
【請求項6】
前記内部状態を前記更新することが、前記異なるフーリエ係数の集合に対応するシェアの集合によって表されるデータ要素に非線形演算を適用することを有し、非線形演算は、前記内部状態のデータ要素を表す対応するシェアの集合中にある前記メモリ内のシェアに作用することによって、前記データ要素に作用し、同じ非線形演算が、前記データ要素に対応する前記シェアの集合に作用する、請求項4又は5に記載の電子暗号装置。
【請求項7】
前記非線形演算が前記有限体における多項式であり、前記プロセッサ回路は、シェアの集合のべき乗を、前記シェアの集合自体同士の畳み込みとして算出する、請求項6に記載の電子暗号装置。
【請求項8】
前記内部状態を前記更新することが、前記内部状態に線形演算を適用することを有し、前記線形演算は、前記内部状態の少なくとも2つのデータ要素を表す前記メモリ内の少なくとも2つのシェアの集合に同時に作用する、請求項1から7のいずれか一項に記載の電子暗号装置。
【請求項9】
前記線形演算が作用するシェアの集合ごとにフーリエ係数の集合を生じさせるフーリエ演算子と、
前記所定の関係を保持しつつ前記フーリエ係数に作用する1つ又は複数の線形演算子と、
逆フーリエ演算子と、
を連結することによって、前記線形演算が構築される、請求項8に記載の電子暗号装置。
【請求項10】
フーリエ係数の前記集合は、インデックスを有する前記集合中の係数で順序付けされ、前記1つ又は複数の線形演算子は、異なるインデックスのフーリエ係数とは無関係に、同じインデックスのフーリエ係数に作用する、請求項9に記載の電子暗号装置。
【請求項11】
フーリエ係数の各集合は、前記データ要素を表す1つ又は複数のフーリエ係数と、1つ又は複数の保護フーリエ係数とを含み、前記出力演算子は、1つ又は複数の演算子を連結することによって構築され、前記演算子のうちの1つは、前記1つ又は複数の保護フーリエ係数を前記歪みに対応付ける、請求項1から10のいずれか一項に記載の電子暗号装置。
【請求項12】
前記出力演算子が、
前記最終内部状態の符号化を除去する復号演算子と、
前記最終内部状態を、前記出力演算子によって対応付けられた前記シェアの集合に対応するフーリエ係数の集合に変換するフーリエ変換と、
前記データ要素に対応する前記フーリエ係数を、対応する前記データ要素に対応付ける演算子と、
前記保護フーリエ係数を前記歪みに対応付ける前記演算子と、
を連結することによって構築される、請求項11に記載の電子暗号装置。
【請求項13】
前記暗号演算を行うことが、前記内部状態のすべて又は一部に鍵を追加することを有し、前記鍵は、前記メモリ内で、対応するシェアの集合として表され、前記シェアの集合は、前記有限体における前記離散フーリエ変換に従って、前記鍵の前記シェアの集合に対応する前記フーリエ係数間で前記所定の関係を満たす、請求項1から12のいずれか一項に記載の電子暗号装置。
【請求項14】
シェアの集合の合算ビットサイズが、少なくとも前記入力データのビットサイズと同じ大きさである、請求項1から13のいずれか一項に記載の電子暗号装置。
【請求項15】
前記暗号演算がブロック暗号である、請求項1から14のいずれか一項に記載の電子暗号装置。
【請求項16】
データ要素を表すシェアの集合中の前記シェアが線形符号化で符号化される、請求項1から15のいずれか一項に記載の電子暗号装置。
【請求項17】
前記プロセッサ回路が、平文入力データに入力演算子を適用し、前記入力演算子は、前記初期内部状態を表すシェアの複数の集合を生じさせ、前記シェアの複数の集合は前記所定の関係を満たす、請求項1から16のいずれか一項に記載の電子暗号装置。
【請求項18】
入力データに暗号演算を行って出力データを得る電子暗号方法であって、前記電子暗号方法は、
前記入力データを受け取るステップと、
内部状態を記憶するステップであって、前記内部状態は1つ又は複数のデータ要素を含み、各データ要素は、メモリ内で、対応するシェアの集合として表され、前記メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、前記メモリ内の前記シェアの集合に対応する前記フーリエ係数の集合間で所定の関係が満たされる、記憶するステップと、
前記内部状態を反復的に更新することによって前記暗号演算を行うステップであって、前記入力データから初期内部状態が導出され、前記出力データは最終内部状態から導出され、前記内部状態の前記シェアの集合に対応する前記フーリエ係数の集合間で前記所定の関係が満たされる場合に、更新後の前記内部状態の前記シェアの集合に対応する更新後の集合のフーリエ係数間で前記所定の関係が満たされる、前記暗号演算を行うステップと、
前記最終内部状態に出力演算子を適用して前記出力データを導出するステップであって、前記出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付け、前記歪みは、当該シェアの集合の前記フーリエ係数が前記所定の関係を満たす場合にゼロであり、前記歪みは、当該シェアの集合の前記フーリエ係数に依存する、前記出力データを導出するステップと、
を有する、電子暗号方法。
【請求項19】
請求項18に記載の方法をプロセッサシステムに行わせる命令を表す一時的又は非一時的なデータを備えた、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、暗号装置、暗号方法、及びコンピュータ可読媒体に関する。
【背景技術】
【0002】
暗号プリミティブは、ブラックボックスモデルにおいて、当該プリミティブの入力及び出力の知識のみを持つ攻撃者が、例えば秘密鍵を入手する、メッセージを暗号化する、メッセージを解読するなど、自身の権限を高めることができない場合に安全であるとされる。しかし、現実には、攻撃者はブラックボックスモデルで動作せず、実際、単なる入力及び出力よりも多くの情報を持つことが多い。例えば、グレーボックスモデルでは、攻撃者がプリミティブの実行に関係する何らかの情報にアクセスできることが想定される。このような情報の追加的な入手源は「サイドチャネル」と呼ばれる。例えば、サイドチャネルには、演算に要した時間量、又は消費された電力量等が含まれる。さらに強いモデルである、いわゆるホワイトボックスモデルでは、攻撃者がプリミティブのすべての内部変数に完全にアクセスすることができる。また、攻撃者はプログラムの実行中であっても変数を改変する場合がある。それでも、ホワイトボックス実施は、プログラムからの秘密鍵の抽出を防止することを狙いとする。
【0003】
ホワイトボックス攻撃に対抗する実施は、符号化されたデータに働く符号化されたテーブルネットワークとして実施されることがある。S.Chowらによる論文「White-Box Cryptography and an AES Implementation」には、ブロック暗号AES(Advanced Encryption Standard)のホワイトボックス実施が提示される(以下「Chow」と参照し、参照により本明細書に援用される)。Chowは、テーブル参照動作だけから構成されるAESの実施を形成する。いくつかの中間方法を通じて、通常の暗号をこの形態の実施へと変形させ、テーブルネットワークを使用してAESを算出できるようにする。テーブルネットワーク内でテーブルを符号化することにより、分析及び攻撃に対するシステムの耐性が高められる。Chowで使用される技術は、他のブロック暗号にも適用することができる。
【発明の概要】
【発明が解決しようとする課題】
【0004】
テーブルネットワークを使用したホワイトボックス実施は分析するのが難しいが、テーブルを利用したブロック暗号の実施は、一部の攻撃に対しては依然として脆弱である。次第に、グレーボックスモデルの文脈で開発された攻撃が、ホワイトボックス実施に対しても効果を持つようになりつつある。そのため、グレーボックスモデル下の攻撃を回避することは、ホワイトボックスモデルでも有効な対策となり得る。そのような攻撃の一例は、Joppe W.Bosらによる論文「Differential Computation Analysis: Hiding your White-Box Designs is Not Enough.」に見られる。
【0005】
暗号プリミティブのコンピュータ実施を攻撃からより好適に保護すること、特にホワイトボックス実施に加えられるグレーボックス型の攻撃からのより好適な保護が、必要とされている。
【0006】
PCT特許出願公開WO2017/063986(A1)(「A Cryptographic Device and an Encoding Device」)が参照される。
【課題を解決するための手段】
【0007】
上記及びその他の懸念に対処する、改良された暗号装置が提示される。
【0008】
暗号装置は電子装置である。例えば、装置は移動可能な電子装置、例えば携帯電話である。電子装置は、セットトップボックス、スマートカード、コンピュータ等である。本明細書に記載される暗号装置及び/又は暗号方法は、幅広い実用的用途に適用される。そのような実用的用途には、セキュリティ、暗号法、コンテンツ保護、コピー保護、金融アプリケーション、プライバシー保護、通信アプリケーション等が含まれる。
【0009】
本発明による方法は、コンピュータ実施方法として、又は専用ハードウェア内に、又は両者の組み合わせとして、コンピュータ上で実施される。本発明による方法の実行可能コードは、コンピュータプログラム製品に記憶されてよい。コンピュータプログラム製品の例には、メモリ装置、光学記憶装置、集積回路、サーバ、オンラインソフトウェア等が含まれる。好ましくは、コンピュータプログラム製品は、プログラム製品がコンピュータ上で実行されたときに本発明による方法を行うための、コンピュータ可読媒体に記憶された非一時的なプログラムコードを備える。
【0010】
好ましい実施形態において、コンピュータプログラムは、コンピュータプログラムがコンピュータで実行されたときに、本発明による方法のすべてのステップを行うように適合されたコンピュータプログラムコードを備える。好ましくは、コンピュータプログラムは、コンピュータ可読媒体に具現化される。
【0011】
本発明の別の態様は、コンピュータプログラムをダウンロード可能な状態にする方法を提供する。この態様は、コンピュータプログラムが、例えばAppleのApp Store、GoogleのPlay Store、又はMicrosoftのWindows Storeにアップロードされ、コンピュータプログラムがそのようなストアからダウンロード可能な状態であるときに使用される。
【0012】
本発明のさらなる詳細、態様、及び実施形態について、図面を参照して単なる例として説明する。図の要素は、簡潔性及び明瞭性のために示されており、必ずしも一定の縮尺で描かれていない。図において、すでに説明された要素に対応する要素は、同じ参照符号を有することがある。
【図面の簡単な説明】
【0013】
【
図1】暗号装置の一実施形態の例を概略的に示す図である。
【
図2】内部状態の更新の一実施形態の例を概略的に示す図である。
【
図3】内部状態の表現の一実施形態の例を概略的に示す図である。
【
図4】暗号方法の一実施形態の例を概略的に示す図である。
【
図5a】一実施形態によるコンピュータプログラムを備える書込み可能部分を有するコンピュータ可読媒体を概略的に示す図である。
【
図5b】一実施形態によるプロセッサシステムの表現を概略的に示す図である。
【発明を実施するための形態】
【0014】
本発明には多くの異なる形態の実施形態が可能であるが、本開示は本発明の原理の例示と考えるべきであり、図示され、記載される特定の実施形態に本発明を限定する意図はないことを理解した上で、1つ又は複数の特定の実施形態が図面に示され、本明細書で詳細に説明される。
【0015】
以下では、理解のために、実施形態の要素が動作しているものとして説明される。しかし、それぞれの要素は、それらによって行われるものとして説明される機能を行うようになされることは明らかであろう。
【0016】
さらに、本発明は実施形態に限定されず、本発明は、本明細書に記載される、又は互いに異なる従属請求項に記載されるそれぞれのあらゆる新規な特徴又は特徴の組み合わせにある。
【0017】
本発明の実施形態は、ブロック暗号などの暗号プリミティブの実施を可能にする。ブロック暗号は例えば、既知のサイドチャネル攻撃のホワイトボックス一般化、並びにいくつかの純粋なホワイトボックス攻撃を含む、広い部類の鍵復元攻撃に対抗する高い回復性を提供するAESアルゴリズムである。本発明による実施は、ホワイトボックスモデルだけでなくグレーボックスモデルにおいても向上したセキュリティを有することに留意されたい。
【0018】
本発明を紹介するために、初めにホワイトボックス実施に対する攻撃をいくつか説明する。本文書を通じて、ブロック暗号AESに着目する。AESは、有力で、広く使用される暗号プリミティブである。しかし、以下の技術は他の暗号プリミティブにも適用可能であることを強調しておく。例えば、他のブロック暗号が実施形態として実施されてよい。特にAES(Rijndael)、3-Way、Kuznyechik、PRESENT、SAFER、SHARK、及びSquareなどのSLT設計(換字・置換ネットワーク(SPN:Substitution-permutation network)ブロック暗号と呼ばれることもある、換字/線形変換ブロック暗号)のブロック暗号は、少ない労力で適合させることができる。暗号プリミティブは、対称プリミティブであってよく、例えば、暗号鍵/解読鍵が同じであるか、又は署名鍵/検証鍵が同じである。暗号プリミティブは、ハッシュ関数など、鍵なしであってもよい。ハッシュ関数を保護することは、ハッシュ関数が秘密データに適用されるため、重要である。実際、ハッシュ関数は、ハッシュ関数がHMACで使用される場合などに、鍵付き設計の一部をなす。
【0019】
Advanced Encryption Standard(AES)については、Advanced Encryption Standard, Federal Information Processing Standards Publication 197,2001に記載される。以下で、実行中のプログラム及びその環境にアクセスすることができ、メモリに出現するすべてのプログラム変数を読み取って改変することが可能な「ホワイトボックス」攻撃者によってAESの実施に対して仕掛けられ得る、主要な攻撃について概説する。
【0020】
純粋なホワイトボックス攻撃であるメモリ・スクレープ(scraping)攻撃を別にすれば、主要な攻撃はサイドチャネル分析から始まり、これらの「グレーボックス」攻撃はホワイトボックス環境でも適用され得る。
【0021】
メモリ・スクレープ攻撃では、鍵がプログラムメモリから読み出される。これは最も単純なホワイトボックス攻撃である。この攻撃を阻止するためには、鍵は、決して「平文で」プログラムメモリに出現してはならず、何らかの符号化された形態でのみ出現しなければならない。
【0022】
差分電力分析/差分計算分析/相互情報分析/衝突等に基づく攻撃は、すべて衝突の原理に基づく。衝突は、内部プログラム変数がプログラムの2つの異なる入力又は出力に対して同じ値を取るときに発生する。プログラムの入力又は出力だけでなく鍵にも依存する変数に衝突が発生すると、衝突が発生するという事実だけから、鍵についての情報が明らかになる。すべてのAES状態及び鍵バイトを符号化すること、例えば、集合{0,1,K,255}への可逆マッピングの集合Eを選定し、各状態及び鍵バイトxを、何らかのE∈EについてのE(x)に入れ替えること自体では、衝突攻撃を阻止できないことに留意されたい。すなわち、符号化Eはバイトxの値を難読化するが、バイトxに衝突が発生すると、衝突はプログラム変数E(x)にも発生する。
【0023】
差分故障分析に基づく攻撃では、攻撃者が、同じ入力に対してプログラムを2回実行し、その実行のうち一方で1つ又は複数のプログラム変数を変更することによって故障を導入し、両方の出力を記録する。2つの出力が異なる方式から、鍵についての情報が明らかになる。
【0024】
後者のタイプの攻撃を防御する対策の一つは、変数を表す複数のシェアを使用することによって変数をマスキングするものである。例えば、変数xは、n個のシェアx
0,K,x
n-1によって加算的に表すことができ、ここでn≧2であり、
【数1】
である。ここで、加算はXOR演算である。例えば、ハードウェア実施では、シェアのうちn-1個をランダムに選定し、n個のシェアが変数xを表すように残りの一つを計算する。すると、k個(ここでk<n)のシェアのいずれかの集合に同時の衝突が起きても、変数xに衝突が発生するかどうかについてのどのような情報も明らかにならない。同時の衝突がn個のシェアすべてに発生した場合のみ、攻撃者は、衝突がxに発生することを推測することができる。したがって、鍵を抽出するにはn次のDPA攻撃が必要となる。
【0025】
ホワイトボックス環境では、シェアを符号化しなければならない。すなわち、攻撃者が、単にシェアを合計する(すなわちシェアの排他ORを計算する)ことで、変数x又はxの符号化E(x)を復元できる場合、攻撃者は、シェアを合計することにより、シェアXによって表される変数xに衝突があるかどうかを確かめることができる。この攻撃を防止するために、プログラム内に出現する値は、シェアの符号化E
i(x
i)であるべきであり、各シェアx
iは、異なる符号化E
i∈Eを使用して符号化される。すると、和
【数2】
はxに関係しない。本明細書に記載される対策が、ホワイトボックスモデルではなく、グレーボックスモデルのみでセキュリティを高めるために適用される場合、各シェアの別個の暗号化は必要とされない場合もあることに留意されたい。この結果、例えば符号化されたシェアに働くテーブル参照動作を回避することにより、より効率的な実施につながる。
【0026】
本発明者らの洞察は、一つの変数を複数の符号化されたシェアとして表す後者は、同じ集合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*が同じ値を表すと結論付ける。
【0027】
上記の攻撃を用いると、シェアを使用することによる付加的なセキュリティが無効化され、グレーボックス型攻撃の多く、特に衝突を見つけることに基づく攻撃を有効に実行することが可能となる。一実施形態では、このシェア減少攻撃が回避される。
【0028】
実施形態は、有限体における離散フーリエ変換を利用する。例えば、データ要素がバイトである場合、有限体はF256であってよく、有限体は256個の要素を有する。一実施形態では、データ要素は、複数ビットからなる二値ワードであり、この場合、標数が2の有限体が適当であり、2のビット数乗のサイズを有する。ただし、これは必須ではない。例えば3値ビットからなるワードに働くブロック暗号を構築することができ、その場合、有限体は標数3等を有する。以下で、シェアの集合を用いた算出を紹介し、それらがどのようにフーリエ変換に関係するのかを説明する。
【0029】
シェアを用いたデータ要素の表現は、線形変換に理想的に適する。線形変換は、
【数3】
という性質を有し、そのため、Lを変数xに適用するには、各シェアにLを個別に適用することができる。シェアは通例は符号化され、そのため演算L(x
i)及び総和がテーブル参照によって行われ得ることに留意されたい。シェアの符号化が線形であるとき、演算子Lは、シェア内のビット、例えば「シェアの数」×「データ要素当たりのビット数」のビットに働く行列として、シェア上に表現することができることに留意されたい。以下で、線形演算子のより精緻な実施を論じる。例えば、シェアは、符号化を線形演算に統合できるように、線形符号化、例えばランダム線形符号化を用いて符号化される。
【0030】
線形演算子に対して機能する上記の算出は、非線形演算子、特にAESのSボックスなどの換字ボックスには機能しない。AES Sボックスは非線形変換である。興味深い点として、データ要素に対する任意の非線形演算は、多項式として表され得る。例えば、バイトに対する非線形変換fは、有限体F
256に対する多項式である。
【数4】
ただしf
j∈F
256。
【0031】
ここで、和(Σ)は、F
256に対する加算、すなわちバイトの排他ORであり、・はF
256に対する乗算を表す。非線形変換は、畳み込みを利用してシェアに適用することができる。2つのシェアの集合X=(x
0,K,x
n-1)及びY=(y
0,K,y
n-1)の畳み込みは、
【数5】
と定義される。
【0032】
【数6】
が成立し、すなわち、シェアの畳み込みは、積のシェア表現である。したがって、関数fは、関数
【数7】
としてシェアに実施できることになり、ここで、x
jは、X自体とのXのj乗の畳み込みであり、x
0は、1,X
1=X,X
2=X*X,X
3=X*X*X等のシェア表現であり、F
jはf
jのシェア表現である。
【0033】
AES Sボックスは、
【数8】
と書くことができ、ここで、l(x)=x
254はF
256の逆元であり、MはF
256に対する加算演算子であり、演算
【数9】
は、F
256に対するその入力にS(0)=0x63を足す。加算演算子Mは、加算多項式
【数10】
と書くことができ、m
0=0x05,m
1=0x09,m
2=0xf9,m
4=0x25,m
5=0x01,m
6=0xb5,m
7=0x8fである。
【0034】
以下では、シェアの数で、有限体中の要素の数から1を引いた値を割り切れる場合、例えばバイト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の要素とする。
【数11】
のフーリエ変換
【数12】
は、
【数13】
0≦k<n
と定義される。
【0035】
数
【数14】
、K、
【数15】
をシェアの集合Xのフーリエ係数と呼ぶ。逆フーリエ変換は、
【数16】
0≦j<n
によって与えられる。
【0036】
Cnに対する従来のフーリエ変換と比較すると、F256が標数2を有し、nが奇数であるため、全体の因数1/nが欠落している。シェアの集合を置換したものはいずれも同じデータ要素を表すものの、フーリエ変換の目的で、集合を順序付きとみなすことに留意されたい。同様に、フーリエ変換の集合が順序付けされる。フーリエ係数の集合を置換したものが依然として同じデータ要素を表す可能性は低いことに留意されたい。フーリエ係数の集合中の特定のフーリエ係数を識別する必要がある場合には、その係数のインデックス、例えばその下付き文字を参照する。
【0037】
シェアの和が表現されるデータ要素に等しいという規定でシェア表現が使用されるときに、フーリエ変換との間には次のような興味深い関係がある。シェアの集合Xによって表される値は、ゼロ番目のフーリエ係数
【数17】
に等しく、そのため上記の結果は、Z=X*Yであれば、
【数18】
であることを示唆する。実際、この関係は、ゼロ番目だけでなく、次のようにすべてのフーリエ係数に成立する。
【数19】
0≦k<n。
【0038】
このことは、マッピング
【数20】
がフーリエ係数
【数21】
を、
【数22】
に有効に対応付けることを示唆し、ここで、
【数23】
は、シェアの集合F
jのk番目のフーリエ係数である。実施形態では、データ要素を表すインデックス0のフーリエ係数と、攻撃から保護するためのより大きいインデックスをもつフーリエ係数とを使用することにより、シェア表現の集合と対応するフーリエ係数の集合との間のこの自然なマッピングを活用する。しかし、これは全く必要でない。すなわち、フーリエ係数のうちいずれか1つ、例えば1つのみ又は2つ以上が共にデータ要素を表し、残りのフーリエ係数は攻撃から保護するために使用され得る。例えば、一実施形態では、データ値は、ゼロ番目のフーリエ係数だけによって決定されるのではなく、1つ若しくは複数の異なるフーリエ係数により、又はゼロ番目のフーリエ係数と1つ若しくは複数の異なるフーリエ係数とにより決定される。
【0039】
本発明者らは、シェア減少攻撃が成功するのは、シェアの集合中の2つ以上のシェアを、そのシェアの集合が表す値とプログラム出力との両方が同じままになるように変更することが可能な場合であることを認識した。出力が変化しないという事は、攻撃者が注入した故障が、シェアの集合によって表される値を変えなかったことの合図として攻撃者によって使用される。この攻撃を阻止する方式の1つは、シェアの集合Xに対して変更が行われたときに、その変更がシェアの集合(例えば値
【数24】
)によって表される値を同じままにする場合でも、好ましくは攻撃者によって予測不可能な形で、出力を変化させる仕組みである。
【0040】
図1は、暗号装置100の一実施形態の例を概略的に示す図である。装置100は、入力データに暗号演算を行い、出力データを得るようになされ、出力データは、入力データに暗号演算を適用した結果である。一実施形態では、入力データ及び出力データは両方とも平文データである。平文データは、秘密符号化、例えば攻撃に知られていない符号化、例えば装置100にプライベートであるプライベート符号化、で符号化されていないデータを言う。暗号演算は、暗号化又は解読演算、例えば対称の、例えばブロック暗号、例えばAES、又は例えば対称の署名若しくは検証演算である。後者は、ハッシュ関数から、又はブロック暗号から構築されるMACであり、例えばCBC-Macモードで実行されるブロック暗号である。装置100は、何らかの目的のために暗号演算を使用する装置に統合され得る。例えば、装置100は、暗号化されたコンテンツを受け取るようになされる。暗号演算を使用して、コンテンツが解読される。ホワイトボックス実施の性質上、コンテンツが解読された場合でも、そのコンテンツが解読されるための鍵を入手することは難しい。例えば、装置100は、例えば署名又はMACをメッセージに適用することによって金融取引を認証するようになされる。攻撃者にとって、その演算が行われたときに用いられた鍵を、装置から、例えば装置で実行されるソフトウェアから抽出することは難しい。
【0041】
プリミティブの実行は、プロセッサ回路内で実施され、その例が以下に示される。
図1は、プロセッサ回路の機能ユニットであり得る機能ユニットを示す。例えば、
図1は、プロセッサ回路の可能な機能編成の設計図として使用される。プロセッサ回路は、
図1で、ユニットと別個には図示していない。例えば、
図1に示す機能ユニットはその全体又は一部が、装置100に記憶された、装置100のマイクロプロセッサによって実行可能なコンピュータ命令として実施される。混合型の実施形態では、機能ユニットは、一部が、ハードウェア、例えばコプロセッサ、例えば暗号コプロセッサとして実施され、一部が、装置100に記憶されて実行されるソフトウェアとして実施される。
【0042】
装置100は、内部状態ストレージ130を備える。内部状態ストレージ130は、メモリ、例えば電子メモリとして実施される。内部状態ストレージ130は、内部状態を記憶するようになされる。内部状態は、1つ又は複数のデータ要素を備える。データ要素は、二値のデータ要素であり得る。例えば、データ要素は、バイト、ニブル、又はより大きなワードであり、例えば一実施形態では、データ要素は、複数ビット、例えば少なくとも4ビットを備え、少なくとも16個の異なる可能な値を有する。通例は、すべてのデータ要素が同じサイズである。内部状態は反復的に更新される。例えば、AESの場合、内部状態は16個のデータ要素、この場合は16バイトを備え、合計128ビットになる。内部状態のデータ要素は、本明細書にさらに説明されるように、内部状態ストレージ130に直接記憶されることはない。
【0043】
これを
図2に示す。
図2は、内部状態の更新の一実施形態の例を概略的に示す図である。
図2には、内部状態211、212、213、214が示される。線形又は非線形演算子を適用することにより、内部状態が更新される。
図2には、内部状態211から内部状態212への、内部状態212から内部状態213への更新を示している。入力データから初期内部状態が導出される。
図2で、入力データは210に表され、初期内部状態は内部状態211である。同様に、出力データ215は、最終内部状態214から導出される。内部状態に対する演算の一部は鍵に依存する。多くの場合、入力データ及び出力データ210、215は平文であり、例えば秘密符号化で符号化されていない。装置100がブロック暗号暗号化用に構成される場合でも、平文の出力データはなお、入力データを暗号化したもの、例えば平文の暗号化されたデータである。ただしこれは必須ではない。装置100は、より大きい暗号システム、例えばデジタル著作権管理(DRM)システムに統合されてよい。そのようなシステムでは、コンテンツは、デジタル著作権によって許される場合にのみレンダリングされる。暗号プリミティブに入るデータは、さらに他の暗号処理又は意思決定への入力の結果であるデータである。これらの演算は、符号化されたデータにも行われてよい。そのような場合、入力データ及び出力データの一方又は両方が符号化され、平文ではない。さらに、入力データ及び出力データが符号化されないが、対応する変換ステップを省くことにより、符号化された入力/出力データを用いる実施形態が作り出されることが想定される。
【0044】
内部状態は、内部状態ストレージ130内で特殊な形で表される。
図3は、内部状態の表現の一実施形態の例を概略的に示す図である。
図3は、同じ内部状態を異なるように見た大きいテーブルを示す。340にある左下のボックスだけが、内部状態ストレージ130、例えばメモリに物理的に記憶されている実際のデータを示す。ボックス340内の個々のデータ要素、例えばバイトは、それらが符号化されていることを示すために破線で示している。例えば、それらは、何らかの秘密、例えばコンパイル時に選択されるランダム符号化で符号化される。右の列は、左の列をフーリエ変換したものである。
【0045】
ボックス310には平文内部状態を示している。内部状態のデータ要素、例えばバイト311、312、313が示されている。例えば、AESの場合、バイト数は16以上である。例えば、内部状態310は、Fips197に定義されるように「状態の配列」である。
【0046】
ボックス310に示される各データ要素は、メモリ内で対応するシェアの集合として表される。例えば、データ要素311はシェアの集合321に対応し、データ要素312はシェアの集合322に対応し、データ要素313はシェアの集合323に対応する。データ要素とシェアの集合との間の関係は、一対多である。シェアの集合のデータサイズは、データ要素のサイズの倍数である。例えば、シェアの集合は複数のシェアを備え、その各々がデータ要素と同じサイズを有し、例えばそれらは両方ともバイトである。
【0047】
ボックス320に示されるシェアの集合は符号化されていない。したがって、これらのシェアの集合がホワイトボックス実施においてこのように使用された場合、攻撃者は単にメモリからシェアを読み出し、正しいデータ要素に対応付けることができる。
【0048】
ボックス330には、320のシェアの集合を離散フーリエ変換したものが示される。フーリエ係数の集合331、332、及び333が示されている。例えば、フーリエ係数の集合331は、有限体における離散フーリエ変換をシェアの集合321に適用することによって得られる。ボックス330のフーリエ係数の集合も符号化されておらず、ホワイトボックス実施ではこのようにメモリに記憶されることもできない。ボックス340は、符号化されたシェアの集合として表される内部状態を示す。ボックス340のデータは、各集合の各シェアを別々に符号化することによってボックス320から得られる。例えば、集合321の第1のシェアを符号化することにより、集合341の第1のシェアが得られる等である。一実施形態では、ボックス340に示されるデータのみが直接見ることができ、例えば物理的にメモリに記憶される。
【0049】
興味深い点として、符号化はシェア領域で行われるのに対し、シェアの集合の意味はフーリエ領域に表される。シェアは別々に符号化され、通常はそれにより、大半の演算をそれらに行うことを妨害する。しかし、フーリエ係数は、シェアの集合全体によって決定される大域的性質である。つまり、シェアの集合が別々に符号化されていても、フーリエ変換と畳み込みとの間の関係を通じて、シェアの集合の意味が操作されることが可能である。
【0050】
ボックス320又は340のシェアの集合は、内部状態のデータ要素を表す。どのデータ要素が表されるかはフーリエ係数に依存する。一実施形態では、ボックス330のフーリエ係数の集合各々に対してフーリエ係数のうち1つが、それが表すデータ要素として選択される。例えば、データ要素の値を与えるシェアの集合に対応するフーリエ係数のうち所定の1つを選定し、例えばこのフーリエ係数はデータ要素に等しい。一実施形態では、対応するデータ要素の値を決定するのは、ゼロ番目のフーリエ係数(例えばインデックス0のフーリエ係数)である。この選定は、対応するシェアの集合の和によってもデータ要素が決定される(例えばデータ要素に等しい)という結果を有するので、分析及び実施を単純化する。しかし、これは必要とはされず、一実施形態では、何らかの他のフーリエ係数、例えばインデックス1の係数が、データ要素を決定する。同じ係数が異なる集合に対応するデータ要素を表すことは必要とさえされず、例えば集合331では、インデックス0のフーリエ係数であり、一方集合332ではインデックス1のフーリエ係数である等である。実際、どのフーリエ係数がデータ値を表すかは、ラウンドごとに異なることさえあり、例えば内部状態の更新ごとに異なる。例えば、次の更新後には、集合331ではインデックス2のフーリエ係数になり、一方、集合332ではインデックス3のフーリエ係数になる等である。
【0051】
さらに一般的には、単一のフーリエ係数がデータ要素を決定することは必要とされない。例えば、一実施形態では、フーリエ係数の部分集合、例えば2つ以上の要素をもつ部分集合が、データ要素を決定する。この部分集合は真部分集合であり、例えば、多くともフーリエ係数の半分がデータ値を決定する。残りのフーリエ係数は、シェア減少攻撃などの攻撃から保護するために使用される。
【0052】
メモリ内のシェアの集合に対応するフーリエ係数の集合は、それらの間で所定の関係を満たす。この所定の関係は、不変量として更新によって保持される。一実施形態では、所定の関係は、フーリエ係数のいくつかが等しいことを含む。基本的な考え方は、異なる変数を表すシェアの集合間で関係を強制するための変数を表すシェアの選択に利用できる自由度を部分的に使用することである。関係は、有限体F256におけるフーリエ変換として表される。
【0053】
例えば、一実施形態では、関係は、異なるフーリエ係数の集合の2つ以上のフーリエ係数が等しいことを含む。例えば、コンパイル時に特定のフーリエ係数が選択される。例えば、一実施形態では、フーリエ係数の集合が順序付けられ、集合中の係数がインデックスを有する。所定の関係は、少なくともいずれかのインデックスについて、同じインデックスのフーリエ係数のうち少なくとも2つが等しいことを含む。例えば、集合331及び332のゼロ番目のフーリエ係数が等しいことを要求する。所定の関係は、少なくともいずれかのインデックスについて、そのインデックスのフーリエ係数のすべてが等しいことを含んでもよい。例えば、所定の関係は、集合331、332、333及びフーリエ係数のすべての他の集合のゼロ番目のフーリエ係数同士が等しいことを要求する。
【0054】
この関係は、好ましくはより多くのシェアの集合、より好ましくはすべてのシェアの集合に拡張される。例えば、一実施形態では、フーリエ係数の集合ごとにインデックスが選択され、関係は、それら集合から選択されるフーリエ係数が等しいことを含む。例えば、16個の集合がある場合は、各集合に1つずつ、16個のインデックスを選択し、対応するフーリエ係数が等しいことを要求する。例えば、フーリエ係数の第1、第2、及び第3の集合...にそれぞれある、インデックス1、5、7...をもつ係数が等しい。
【0055】
所定の関係に対する要件が厳格であるほど、攻撃者が衝突を見つけるのが難しくなる。例えば、所定の関係は、フーリエ係数の集合中の各フーリエ係数が、1つを除いて、その他のフーリエ係数の集合中のそれぞれのフーリエ係数に等しいことであり、1つの例外はデータ要素を表すために使用される。これを行う1つの方式は、同じインデックスのフーリエ係数が、1つのインデックス、例えばゼロ番目のインデックスを除いて、等しいことを要求するものである。例えば、集合331、332、333...中の1番目のフーリエ係数同士が等しく、集合331、332、333...中の2番目のフーリエ係数同士が等しい等である。
【0056】
上記の例は、同じ集合のフーリエ係数間の関係は課さない。例えば、シェアの集合のうち1つに対する任意の内部状態及び任意の選定、例えば集合321に対する任意の選定、又は代わりに例えば集合331などフーリエ係数の集合のうち1つに対する任意の選定について、内部状態が有効に表され、関係が満たされるように残りの集合を選定する方式がある。換言すると、内部状態における単一のデータ要素の有効な表現の数は、フーリエ係数間の関係を要求することによっては減らないが、内部状態全体の有効な表現の数は減る。
【0057】
したがって、関係を選択する際には大きな選定がある。例えば、集合当たり16個のデータ要素及びn個のシェアを仮定し、集合当たり1つのフーリエ係数をデータ表現を表すものとして使用し、残りを保護のために使用すると、データ要素を表すために第1の集合中のフーリエ係数を選択し(n個の選定)、どの係数がデータ要素を表し、残りがどの係数に等しいかを示すようにフーリエ係数のその他の集合を順序付けすること(n!個の選定)により、n(n!)15を得ることができる。この大きな空間からランダムな関係を選択すると、攻撃者の作業がさらに複雑化する。例えば、各装置100は異なる関係を受け取り、これは、例えば装置に透かしを入れる役割も果たす。
【0058】
演算子は、それらが関係を保持するように選択される。線形演算子の場合、フーリエ変換が線形であり、関係が線形であるため、これを行うことができる。非線形演算子についての関係を維持することは、マッピング
【数25】
が、フーリエ係数
【数26】
を
【数27】
に有効に対応付け、ここで、
【数28】
は、シェアのk番目のフーリエ係数である、という洞察を使用して行うことができる。換言すると、シェアの集合へのマッピングは、フーリエ係数に対する並列した多項式になる。したがって、異なる集合にある同じインデックスの2つのフーリエ係数が等しければ、この関係は、単に両方のシェアの集合に同じマッピングを作用させることによって保持される。同じ非線形演算子が内部状態内のすべてのデータ要素に適用され、関係が、同じインデックスをもつフーリエ係数についての相等性関係のみを示唆する実施形態では、関係の保持は、単にすべてのシェアの集合に同じマッピングを適用することにより、自動的に行われる。この場合、
【数29】
のシェアの集合F
jは、暗号プリミティブのための正しい多項式係数を偶然表す任意のシェアの集合として選択することができる。例えば、コンパイル時に、係数を表すためのランダムなシェアの集合F
jを選択する。ただし、一実施形態では、F
j中の要素の1つを除くすべてが0として選択される。例えば、AESで使用される逆元の一実施では、F
j中のすべてのエントリが0又は1のいずれかである。
【0059】
他の関係を保持することは、F
jの適切な選定によって行うことができる。例えば、関係に従って、集合331の1番目のフーリエ係数が、集合332の2番目のフーリエ係数に等しいとする。この場合、集合331に作用する非線形演算子の
【数30】
を、集合332に作用する非線形演算子の
【数31】
と等しく選定することができる(すべてのjについて)。例えば、ゼロ番目のフーリエ係数がデータ要素の実際の値に対応する場合は、データ要素に行う所望の非線形演算、例えば所望のSボックスに従って、それら集合に
【数32】
を選定する。
【0060】
また、例えばデータ要素を決定するために、データ要素をフーリエ係数の部分集合によって表すことも可能であり、例えば2つ以上の要素をもつ部分集合が使用される。例えば、データ要素は、ゼロ番目のフーリエ係数と1番目のフーリエ係数の和に等しい。これは、各自の係数
【数33】
及び
【数34】
を通じて表され、それらの和がデータ要素に対する所望の演算、例えば所望のSボックスと等しい多項式を選択することによって実施することができる。
【0061】
どのような非線形演算も多項式として表すことが可能であることに留意されたい。非線形演算子が各自のフーリエ係数を使用して定義される場合でも、非線形演算子は、シェアの集合の(符号化された)シェアを用いて評価される。例えば、シェアの集合自体とのシェアの集合の反復的な畳み込みとして、シェアの集合のべき乗が算出される。
【0062】
内部状態ストレージ130における内部状態を更新することは、非線形演算子及び線形演算子を伴う。
図1は、非線形演算141、142、143を示す。内部状態に働く非線形演算は、内部状態のデータ要素のうち1つのみに作用する別個の非線形演算、例えば非線形の下位演算としてなされる。例えば、これらの下位演算は、すべてのデータ要素、例えば同じSボックスについて同じであり、又は異なる。データ要素のレベル、例えばボックス310のレベルで行われるSボックスが同じであっても、シェアの集合のレベルで、例えばボックス320に行われる演算、又はボックス340に対する実際の符号化は、異なってよい。例えば、それらは、関係の一部ではないフーリエ係数、例えばデータ値を表すために使用されるフーリエ係数に対して異なる関数を行う。単一のデータ要素に作用する非線形演算子は、対応するシェアの集合中のシェアにのみ作用する。
【0063】
図1は、線形演算146、147、148を示す。内部状態を更新する線形演算は、内部状態の少なくとも2つのデータ要素を表すメモリ内の少なくとも2つのシェアの集合に同時に作用する。例えば、線形演算は行列として、例えば2つの要素(ビット)をもつ体、又は例えばF
256などのより大きい有限体に対して表される。関係及びフーリエ変換はどちらも線形演算なので、線形演算は、以下を連結することによって構築される。
- 線形演算が作用するシェアの集合ごとにフーリエ係数の集合を生じさせるフーリエ演算子、
- 不変量を保持しつつフーリエ係数に作用する1つ又は複数の線形演算子、及び
- 逆フーリエ演算子。
【0064】
線形演算への入力は、例えば、シェアの2つ以上の集合のシェアを要素としてもつベクトルである。例えば、線形演算子は、データ値を表すフーリエ係数に作用する限り、例えば規格の必要に応じて、暗号プリミティブに必要とされる線形演算を行うことができるが、1つ又は複数の線形演算子が、データ値を表さないフーリエ係数に作用する限り、関係が保持されている以上は、線形演算子は任意の線形演算、例えばランダムな線形演算を行うことができる。例えば故障攻撃が原因で、第1の場所で関係が満たされなかった場合には、関係が無効なままであること、又は、少なくとも、関係を偶然復元する可能性が一様ランダム分布を用いた場合以下であることが好ましいことに留意されたい。
【0065】
例えば、データ値を表す1つの(又は複数の)フーリエ係数を除いて、同じインデックスのフーリエ係数同士が等しいことを関係が要求する実施形態では、以下を使用してよい。
- 線形演算が作用するシェアの集合ごとにフーリエ係数の集合を生じさせるフーリエ演算子。フーリエ係数の集合は、あるインデックスを有する集合中の係数で順序付けられる。
- 異なるインデックスのフーリエ係数とは無関係に、同じインデックスのフーリエ係数に作用する1つ又は複数の線形演算子。1つ又は複数の線形演算子は、不変量を保持しつつフーリエ係数に作用するようになされる。
- 逆フーリエ演算子。
【0066】
このような演算子の分離は可能であるが、必要ではない。例えば、1つ又は複数の線形演算子は、データ要素を表すフーリエ係数に作用する、例えば集合当たり1つ又は複数のフーリエ係数に作用する1つの演算子と、それが関係を保持するという要件を除いてすべての残りのフーリエ係数に作用する1つの線形演算子、例えばランダム線形演算とを含む。
【0067】
行列積を評価する際の低レベルの乗算は、シェアが符号化されている場合にはテーブル参照によって行われてよいことに留意されたい。それに代えて、シェアの復号及び再符号化は、符号化が線形であれば、線形演算に統合されてもよい。
【0068】
指摘したように、演算の一部は鍵付きとされてよい。例えば、演算時にラウンド鍵が内部状態のすべて又は一部に追加される。鍵は、符号化された形態で装置100に記憶されてよい。好ましくは、鍵は、例えば集合のフーリエ係数に制約が課された(符号化された)シェアの集合として、内部状態と同じタイプの符号化を使用する。例えば、鍵は、対応するシェアの集合として装置100のメモリ内に表現され、シェアの集合は、有限体における離散フーリエ変換に従って、鍵のシェアの集合に対応するフーリエ係数間の所定の関係を満たす。
【0069】
図1に戻ると、同図はさらに、入力データを受け取るようになされた入力インターフェース100を示している。例えば、入力インターフェース100は、コンピュータネットワーク接続、コンピュータ記憶ユニット等を備える。入力インターフェース100は、アプリケーションプログラミングインターフェース(API)を備えてよく、さらなる例が本明細書に与えられる。一実施形態では、入力データは、内部状態に適する形ですでに符号化されている。以下では、入力インターフェースがプライベート符号化に従って符号化されていない状況を説明する。その場合、装置100は、平文入力データに対する任意選択の入力演算子112を備えてよい。入力演算子112は、初期内部状態を表すシェアの複数の集合を生じさせる。シェアの複数の集合は所定の関係を満たす。
【0070】
例えば、入力演算子は、次のようないくつかの線形演算子を連結することによって構築される。
- 入力データを、関係を満たすフーリエ係数の集合に対応付ける演算子。例えば、演算子は、入力データを、データ要素を表すフーリエ係数に対応付ける。例えば、1つのフーリエ係数がデータ要素を表す場合、演算子は、入力のデータ要素を、対応するフーリエ係数に直接対応付ける。複数のフーリエ係数が共に一つの入力データ要素を表す場合(例えば和として)、フーリエ係数のうち1つを除くすべてがランダムに選択され、最後の1つは、入力データ要素及び選択されたランダムなフーリエ係数から算出される。残りの保護フーリエ係数については、関係を満たすようにランダムな選定が行われる。ランダムなフーリエ係数は、ランダム演算子を入力データに適用することによって選択される。ホワイトボックス実施では、別個の乱数発生器を使用することは、多くの場合、勧められない。唯一、グレーボックス実施では、ランダムフーリエ係数を乱数発生器によって選択することができる。
- 逆フーリエ変換
- 例えばシェアの各々を符号化するための符号化演算。符号化は線形に選択されてよい。
【0071】
これには、シェアの集合のビットサイズが少なくとも入力データのサイズと同じ大きさであれば、利点がある。この場合、衝突が発生する、すなわち、2つの異なる入力データがシェアの集合上の衝突を引き起こす可能性は低い。入力演算子を各シェアの集合に対して可逆にすることにより、より良好な保証が得られる。すなわち、入力演算子は、単一のデータ要素を表すシェアの単一の集合の内容から入力データが一意に決定されることが可能となるように選択される。AESの場合、これは17個のシェアを取り出すことによって実現できる。そのような17個のシェアを用いるAESの実施では、すべての衝突が回避され、そのため、相互情報分析(MIA)に対して十分に安全であることが予想される。
【0072】
装置100はさらに、最終内部状態から出力データを導出するための出力演算子122を備える。出力演算子122は、シェアの集合を、その集合が表すデータ要素に歪みを足したものに対応付ける。歪みは、フーリエ係数が所定の関係を満たす場合に歪みがゼロになるように、シェアの集合のフーリエ係数に依存する。出力データは、平文出力データであるか、又は出力データを利用する次のアプリケーションによって期待される符号化で符号化された出力データである。ここでは出力データが平文出力データであると仮定する。
【0073】
例えば、出力演算子は、以下を連結することによって構築される。
- 内部状態の符号化を除去する復号演算子
- 内部状態をフーリエ係数の集合に変換するフーリエ変換
- データ要素を表すフーリエ係数を、それらが表すデータ要素に対応付ける演算子
- 保護フーリエ係数を、歪み、例えば歪みベクトルに対応付ける演算子。この演算子は、関係を満たすフーリエ係数を0に、例えば歪み無しに対応付けるように構築される。例えば、関係を表すベクトルは、演算子のカーネル中にあってよい。
【0074】
任意選択で、後続のアプリケーションが、データが符号化で搬送されることを期待する場合には、符号化演算子が追加され得る。
【0075】
以下に、本発明による暗号装置又は方法において実施された暗号プリミティブの詳細な実施形態が与えられる。選択された暗号プリミティブはAESブロック暗号であり、これは例示として選択されたものである。以下の説明は暗号化演算に関するが、解読演算が平易に理解される。多くの要素に変形の実施が可能であることに留意されたい。n個のシェアを用いるAES実施を構築することが可能であり、ここで、nは255の除数であり、すべてのAddRoundKey、ShiftRow、MixColumns、及びSubBytes演算(又はAES解読のためのそれらの逆元)の前及び後に、各k、1≦k<nについて、状態バイト
【数35】
を表すシェアの集合S
r,cのk番目のフーリエ係数
【数36】
が、すべての行インデックス及び列インデックスr,cについて等しいという性質を有する。行インデックス及び列インデックスは、例えば4つの行及び4つの列をもつ、状態配列としてのAESの内部状態の表現を言う。加算変換AddRoundKey、ShiftRows、及びMixColumnsについて、これは、本明細書で詳細に述べられるように、フーリエ係数に対する変換の適切な選定によって実現することができ、一方、SubBytes演算については、フーリエ変換はシェアの集合に作用する多項式と互換性があるため、この性質を保証することができる。この実施形態では、関係について1つの特定の選定が行われる。さらに、内部状態のデータ要素を表すためにゼロ番目のフーリエ係数が使用される。
【0076】
そのような実施において、攻撃者が、シェアの集合、例えばS
0,0の中のいくつかのシェアを、
【数37】
が変化しないような方式で変更すると仮定する。すると、その他のフーリエ係数
【数38】
、K、
【数39】
のうち少なくとも1つが変化しているはずである(何故ならばそうでなければ攻撃者は何も変化させられないため)。変更の前に、1≦k<nについて、16個の状態バイトs
r,cを表す16個のシェアの集合S
r,cのk番目のフーリエ係数
【数40】
がすべて互いと等しい場合には、変更の後に、変化したシェアの集合S
0,0のk番目のフーリエ係数が15個のその他のシェアの集合のk番目のフーリエ係数と異なるような、1≦k<nであるkの少なくとも1つの値がある。
【0077】
最後のAES演算の後の16個のシェアの集合から16バイトで構成されるAES出力を生成する際、少なくとも1つの
【数41】
がその他の
【数42】
と異なるときに出力が間違いとなる(すなわちiの少なくとも1つの値について
【数43】
となる)ように、各出力バイトout
iが、1≦k<n、0≦r<4、0≦c<4である
【数44】
及びすべての
【数45】
に依存するように注意を払わなければならない。
【0078】
この仕組みは、通常のDFA攻撃をも、より難しくすることに留意されたい。すなわち、攻撃者の目標は、出力が変化する方式から鍵に関する情報を得ることができるような方式で何らかのシェアの集合Xを変更することになる。しかし、この仕組みが実施されると、攻撃者が有用であると考える出力を与える、攻撃者が行うことができる唯一の変更は、シェアの集合のゼロ番目のフーリエ係数のみを変更し、その他のフーリエ係数を不変のままにするものである。1つのみのフーリエ成分を変化させようとする場合には、Xのすべてのシェアを適当な方式で変化させなければならず、このことは、攻撃者が、成功するためにはn次のDFAを行う必要があることを示唆する。
【0079】
ここでは、先に述べた成分を使用するAES実施を提示する。AES実施は、実行時に128ビットの入力を128ビットの出力に変換する。この実施は、コンパイル時に作成される。実施のセキュリティは、主としてシェアの数nに依存する。まず、AES暗号化を構築するための詳細を述べる。
【0080】
コンパイル時に実施者は以下を行う。
【0081】
1.シェアの数nを選定する。ここで、nは255の除数である。n=1を選定することは、デフォルトのAES実施を上回るセキュリティ上の利点を提供せず、n∈{51,85,255}は、実用には大き過ぎ、そのため好ましくはn∈{3,5,15,17}である。実施者は、ord(Ω)=nである要素Ω∈F256も選定する。指摘したように、n=17の選定が特に有益である。
【0082】
2.実施者は、AES規格で指定されるように、AES鍵を(N
r+1)個のラウンド鍵へと拡張する。各ラウンド鍵は、4×4配列に配置された16バイトで構成される。ラウンド鍵バイトは、
【数46】
と表記され、0≦r<N
r、0≦i<4、0≦j<4である。
【0083】
0≦r<N
rである各ラウンドインデックスrについて、実施者は、1≦k<nである
【数47】
で表記されるn-1バイトをランダムに選定する。各ラウンドr及び位置i,jについて、実施者は、
【数48】
及び
【数49】
、K、
【数50】
を有するn成分のラウンド鍵シェア
【数51】
をフーリエ係数として作成し、よって
【数52】
となり、ただし、
【数53】
である。
【0084】
3.各ラウンドr、位置i,j、及び各シェアインデックスmについて、実施者は、可逆加算符号化
【数54】
をランダムに選定する。AES実施のサイズは、使用されるラウンド符号化の数と共に線形に増大する。実施のサイズを減らすために、実施者は、各ラウンドで同じ符号化を使用することを選ぶことができ、そのため符号化はrに依存しなくなる。実施者は、ラウンドごとに符号化を交互にすることを選定してもよく、それにより符号化がr mod2を通じてのみrに依存するようになる。これらの選択は、衝突及びDFA攻撃に対抗するセキュリティに影響を与えず、より多い数の異なる符号化を選定すると、一部のホワイトボックス攻撃がより難しくなると考える。各ラウンドrに、16n個の符号化
【数55】
は、好ましくはすべてが異なる。
【数56】
の逆元を
【数57】
と表記する。
【0085】
4.実施者は、符号化されたラウンド鍵シェア
【数58】
を計算し、符号化された鍵のシェアの集合
【数59】
を作成する。
【0086】
5.実施者は、バイト
【数60】
を含んでいる符号化された乗算テーブルを計算する。
【0087】
ここで、0≦r<N
r、0≦m
0、m
1<n、0≦e
0、e
1<8である。乗算テーブルは、対称性
【数61】
を満たすので、実施者は、例えば、e
0≦e
1である乗算テーブルの要素のみを記憶することを選定してよい。
【0088】
例えば、上記で使用される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として実施してよく、これらの数又はビット列は、体の基底を形成する。
【0089】
6.0≦r<N
rごとに、実施者は、S(0)のランダムシェア表現S(0)
(r)、入力が0に等しいときのSボックスの出力、及びSボックスにおける加算演算子Mの0≦k<8についての多項式係数m
kのランダムシェア表現
【数62】
を選定する。実施者は、これら表現のシェアを符号化し、それにより位置に依存する符号化されたシェアの集合
【数63】
及び
【数64】
が与えられる。
【0090】
7.任意のラウンドインデックス0≦r<N
rについて、実施者は、16nバイトに対する加算演算子
【数65】
を
【数66】
として作成し、ここで、
- 任意のラウンドインデックスr,0≦r<N
rについて、D
(r)は、16nバイトのベクトル(B
0,K,B
16n-1)を入力として受け取り、0≦i、j<4、及び0≦m<nについて、
【数67】
を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について、
【数68】
を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にフーリエ変換を適用し、
【数69】
を設定する。
- Tは、16nバイトのベクトル
【数70】
を入力として受け取り、それらをシーケンス
【数71】
に置換し、ここで
【数72】
である。
- L
(r)は、16nバイトのベクトル
【数73】
を入力として受け取り、0≦k<nである各kについて、変換
【数74】
を16バイトのベクトル
【数75】
に適用する。
【0091】
変換
【数76】
は、その入力
【数77】
を
【数78】
、0≦i、j<4である4×4行列Aにする。0≦r<N
r-1である場合、変換は、MixColumns o ShiftRows演算をAに適用する。r=N
r-1である場合、ShiftRows演算をAに適用する。そして、列ごとに16バイト分のAを出力する。
【0092】
1≦k<nについて、変換
【数79】
は、16バイトに対するランダムに選択される加算可逆変換であり、エントリがすべて等しい16バイトのベクトルに作用するとき、エントリがすべて等しい16バイトのベクトルを出力するという性質を有する。そのような変換をどのようにすると効率的に生成できるかが以下に示される。
【0093】
8.実施者は、16バイトに作用し、16nバイトを出力する加算演算子
【数80】
を
【数81】
として構築する。ここで、
【数82】
である。
各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個のフーリエ係数
【数83】
、K、
【数84】
との間に全単射があることになり、シェアの集合の非ゼロのインデックスが、任意の状態バイトを表し、よって、異なる入力は常に異なるシェアの集合を与えることになり、衝突が起こらない。
【0094】
9.実施者は、演算子
【数85】
を
【数86】
として構築し、ここで
【数87】
である。
ここで、各R
out,k,1≦k<nは、16バイトに作用し、16バイトを出力するランダムな加算演算子であり、エントリがすべて同じである16バイトのベクトルに作用するとき、全ゼロベクトルが出力になるという性質を有する。
【0095】
実施者は、演算子
【数88】
、
【数89】
、及び
【数90】
、符号化された鍵シェア
【数91】
、符号化された乗算テーブル
【数92】
、Sボックスオフセットシェア
【数93】
、並びに線形変換の定数シェア
【数94】
を使用するAES暗号化プログラムを構築する。乗算テーブルを使用して、実施者は、関数Mul、Conv、及びSquareを作成する。
【0096】
関数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個のシェアを用いた畳み込みでは、積
【数95】
が、z=xyのシェア
【数96】
に現れることに留意されたい。位置i、jは、AES状態の4x4配列内での位置である。擬似コード実施は、
Mul(r,i,j,m
x,m
y,x,y):
【数97】
となるようなビットξ
0,K,ξ
7を見つける
【数98】
となるようなビットη
0,K,η
7を見つける
【数99】
を返す
であり、ここで、総和はF
256に対するものである。
【0097】
関数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
【数100】
return Z
であり、総和はF
256に対するものである。
【0098】
関数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
【数101】
return Z
であり、ここで、総和はF
256に対するものである。
【0099】
これらの関数をサブルーチンとして使用して、実施者は関数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
【0100】
関数ShareSboxは、ラウンドr及び位置i,jにおける符号化に従って符号化された畳み込みを用いて、符号化されたシェアの集合Xに作用する、Sボックス演算子の出力の符号化されたシェア表現を返す。擬似コード実施は以下である。
ShareSbox(r,i,j,X)
Y←Inverse(r,i,j,X)
【数102】
for 1≦k < 8
Y←Square(r,i,j,Y)
【数103】
【数104】
return Z
【0101】
関数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)
【0102】
AES暗号化関数AESは、平文の16バイトの入力(in
0,K,in
15)を暗号化し、平文の16バイトの結果(out
0,K,out
15)を返す。擬似コードでの実施は以下である。
AES(in
0,K,in
15)
【数105】
for 0≦r<N
r
for 0≦i<4
for 0≦j<4
【数106】
(B
n(i+4j),K,B
n(i+4j)+n-1)←ShareSbox(B
n(i+4j)),K,B
n(i+4j)+n-1)
【数107】
for 0≦i<4
for 0≦j<4
【数108】
【数109】
return(out
0,K,out
15)
【0103】
17個のシェアを用いるAESプログラムの重要な特徴は、状態バイトを表すどの符号化されたシェアの集合についても、16個の入力バイトと、復号後のシェアの集合の1番目から16番目のフーリエ係数との間に全単射があることである。このことは、2つの異なる入力について、そのようなシェアの集合のどれにおいても17個のシェアへの同時の衝突は決してあり得ず、よってMIA/衝突攻撃が成功しないことを示唆する。より一般的に、一実施形態では、実施についての知識(符号化、鍵等)を使用して、次のラウンドにおけるシェアの集合から、以前のラウンドの内部状態が導出される。例えば、一実施形態では、あるラウンドの符号化されていない(シェアがない)内部状態(又は入力)と、次のラウンドの符号化された内部状態のシェアの集合との間に全単射がある。
【0104】
上記の構築は、一定の規定された性質をもつランダムな加算演算子を使用する。コンパイル時に、実施者は、ある性質をもつランダムな加算演算子を選定しなければならない。ここで、これをどのようにすると効率的に行うことができるかを示す。1バイトは8ビットを連結したものであるため、Nbytesバイトに対する加算演算子と、サイズN×Nの二値行列との間には1対1のマッピングがあり、ここでN=8Nbytesである。
【0105】
任意のサイズN×Nのランダムな可逆二値行列を生成する。このアルゴリズムは、以下のステップで構成される。
1.対角線に1があり、対角線より上にゼロがあり、対角線より下にランダムビットがある、サイズN×Nの二値行列Lを構築する。
2.対角線に1があり、対角線より下にゼロがあり、対角線より上にランダムビットがある、サイズN×Nの二値行列Uを構築する。
3.A=LUを返す。
【0106】
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を、ブロック行列
【数110】
とする。
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.ブロック行列
【数111】
を構築する。
8.A=LRL
-1を返す。
【0107】
Nbytes回繰り返された8ビットのシーケンスに作用するときに、結果として全ゼロのビットシーケンスを生じるという性質をもつ、サイズ8Nbytes×8Nbytesのランダム可逆二値行列を生成する。
1.行列Aをサイズ8×8のゼロ行列とする。
2.項4.2のアルゴリズムのステップ2~8を実行する。
【0108】
暗号装置の様々な実施形態において、入力インターフェースは様々な選択肢から選択されてよい。例えば、入力インターフェースは、ローカルネットワーク、又は例えばインターネットなどのワイドエリアネットワークへのネットワークインターフェース、内部又は外部のデータ記憶への記憶インターフェース、アプリケーションインターフェース(API)等である。出力インターフェースは、ローカルネットワーク、又は例えばインターネットなどのワイドエリアネットワークへのネットワークインターフェース、内部又は外部のデータ記憶への記憶インターフェース、アプリケーションインターフェース(API)、ディスプレイ、プリンタ等である。入力インターフェース及び出力インターフェースは、通信インターフェースとして組み合わせられてよい。
【0109】
暗号装置はユーザインターフェースを有してよく、ユーザインターフェースは、1つ又は複数のボタン、キーボード、ディスプレイ、タッチ画面等のよく知られた要素を含む。ユーザインターフェースは、暗号演算、例えば解読を行うためのユーザ対話に対応するようになされる。
【0110】
装置100のメモリ、例えば内部状態ストレージ130は、例えばフラッシュメモリなどの電子メモリ、又はRAM、又は例えばハードディスクなどの磁気メモリ等である。ストレージ130は、共にメモリを構成する複数の離散したメモリを備えてよい。メモリは、一部が揮発性で、一部が不揮発性であってよい。例えば、テーブル及びコンピュータ命令が不揮発性の部分に記憶され、内部状態が揮発性の部分に記憶される。
【0111】
通例、装置100は、装置100に記憶された適当なソフトウェアを実行するマイクロプロセッサ(
図1では別個には図示していない)を備える。例えば、そのソフトウェアは、ダウンロードされ、及び/又は対応するメモリ、例えばRAMなどの揮発性メモリ、若しくはフラッシュなどの不揮発性メモリ(別個には図示していない)に記憶されている。それに代えて、装置100は、全体又は一部が、プログラム可能ロジックに、例えばフィールドプログラム可能ゲートアレイ(FPGA)として実施されてもよい。装置100は、全体又は一部が、いわゆる特定用途集積回路(ASIC)、すなわち回路の特定の用途に合わせてカスタマイズされた集積回路(IC)として実施されてよい。例えば、回路は、例えばVerilog、VHDL等のハードウェア記述言語を使用して、CMOSとして実施される。
【0112】
一実施形態では、装置100は、入力インターフェース回路、入力演算子回路、出力インターフェース回路、出力演算子回路、内部状態記憶回路、複数の非線形演算回路、複数の線形演算回路、のうち1つ又は複数を備える。装置100は、追加的な回路を備えてよい。回路は、本明細書に記載される対応するユニットを実施する。回路は、プロセッサ回路及び記憶回路であり、プロセッサ回路は、記憶回路内に電子的に表現された命令を実行する。回路は、FPGA、ASIC等であってもよい。
【0113】
プロセッサ回路は、分散式に、例えば複数の部分プロセッサ回路として実施されてよい。記憶は、複数の分散した部分記憶にわたって分散される。メモリの一部又はすべてが、電子メモリ、磁気メモリ等であってよい。例えば、記憶は、揮発性の部分及び不揮発性の部分を有する。記憶の一部は読出し専用であってよい。
【0114】
図4は、暗号方法400の一実施形態の例を概略的に示す図である。方法400は、入力データに暗号演算を行って出力データを得るようになされる。方法400は、
- 入力データを受け取る(410)ステップと、
- 平文入力データに入力演算子を適用する(412)ステップであって、前記入力演算子は、初期内部状態を表すシェアの複数の集合を生じさせ、シェアの複数の集合は所定の関係を満たす、ステップと、
- 内部状態を記憶する(430)ステップであって、内部状態は1つ又は複数のデータ要素を含み、各データ要素は、メモリ内で対応するシェアの集合として表され、メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、メモリ内のシェアの集合に対応するフーリエ係数の集合はそれらの間で所定の関係を満たす、ステップと、
- 内部状態を反復的に更新するステップであって、内部状態を更新するステップは、更新後の内部状態のシェアの集合に対応する更新後のフーリエ係数の集合が、それらの間の所定の関係を不変量として満たすようになされ、更新するステップは、1つ若しくは複数の非線形演算子及び/又は1つ若しくは複数の非線形演算子446を適用する(441)ステップを有し、演算子が適用された後に、更新後の内部状態が430で再度記憶される、ステップと、
- 最終内部状態に出力演算子を適用して(422)出力データを導出するステップであって、出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付け、前記歪みは、フーリエ係数が所定の関係を満たす場合に歪みがゼロになるようにシェアの集合のフーリエ係数に依存し、例えば出力演算子は所定回数の更新ラウンドが内部状態で実行された後に適用される、ステップと、
- 出力データを出力する(420)ステップと、を有する。
【0115】
本明細書で指摘されるように、方法のステップの一部は任意選択である。例えば、入力データがすでに符号化されている場合には入力データの符号化は必要ない。
【0116】
当業者には明らかであるように、方法を実行する種々の方式が可能である。例えば、ステップの順序を変えることができ、又は一部のステップは並列に実行されてよい。さらに、ステップとステップの間に、他の方法のステップが挿入されてよい。挿入されるステップは、本明細書に記載されるような方法の精緻化に相当するか、又は方法に関係しないものである。例えば、更新ステップは、少なくとも部分的に並列に実行されてよく、例えば内部状態の異なるデータ要素に非線形演算子を適用することは、並列に行われてよい。さらに、所与のステップは、次のステップが開始される前に完全に完了していなくてよい。
【0117】
本発明による方法は、プロセッサシステムに方法400を行わせる命令を備えたソフトウェアを使用して実行され得る。ソフトウェアは、システムの特定の下位エンティティによって行われるステップのみを含んでよい。ソフトウェアは、ハードディスク、フロッピー、メモリ、光学ディスク等の適切な記憶媒体に記憶される。ソフトウェアは、配線に沿って、又はワイヤレスで、又はデータネットワーク、例えばインターネットを使用して、信号として送られる。ソフトウェアは、ダウンロード及び/又はサーバ上でのリモート使用が可能にされる。本発明による方法は、方法を行うために、プログラム可能ロジック、例えばフィールドプログラム可能ゲートアレイ(FPGA)を構成するようになされたビットストリームを使用して実行されてよい。
【0118】
本発明は、本発明を実用化するために適合されたコンピュータプログラム、特にキャリア上のコンピュータプログラムにも適用されることが理解されよう。プログラムは、ソースコード、オブジェクトコード、コードの中間供給源、及び部分的にコンパイルされた形態などのオブジェクトコードの形態、又は本発明による方法を実施する際に使用するのに適した他の形態である。コンピュータプログラム製品に関する実施形態は、記載される方法のうち少なくとも1つ方法の各処理ステップに対応するコンピュータ実行可能命令を備える。これらの命令は、サブルーチンにさらに分割される、及び/又は静的若しくは動的にリンクされる1つ若しくは複数のファイルに記憶される。コンピュータプログラム製品に関する別の実施形態は、記載されるシステム及び/又は製品の少なくとも1つの各手段に対応するコンピュータ実行可能命令を備える。
【0119】
図5aは、コンピュータプログラム1020を備える書込み可能部分1010を有するコンピュータ可読媒体1000を示し、コンピュータプログラム1020は、プロセッサシステムに一実施形態による暗号方法を行わせる命令を備える。コンピュータプログラム1020は、物理的なマークとして、又はコンピュータ可読媒体1000の磁化を利用して、コンピュータ可読媒体1000上に具現化される。しかし、任意の他の適切な実施形態も考えられる。さらに、コンピュータ可読媒体1000はここでは光ディスクとして示しているが、コンピュータ可読媒体1000は、ハードディスク、固体状態メモリ、フラッシュメモリ等の任意の適切なコンピュータ可読媒体でよく、また記録不可能でも記録可能でもよいことが理解されよう。コンピュータプログラム1020は、プロセッサシステムに前記暗号方法を行わせる命令を備える。
【0120】
図5bは、暗号装置の一実施形態によるプロセッサシステム1140の概略表現を示す図である。プロセッサシステムは、1つ又は複数の集積回路1110を備える。1つ又は複数の集積回路1110のアーキテクチャは、
図5bに概略的に示される。回路1110は、一実施形態による方法を実行する、及び/又はそのモジュール若しくは単位を実施するためにコンピュータプログラムコンポーネントを稼働させるための処理ユニット1120、例えばCPUを備える。回路1110は、プログラミングコード、データ等を記憶するメモリ1122を備える。メモリ1122の一部は、読出し専用であってよい。回路1110は、例えばアンテナなどの通信要素1126、コネクタ、又はその両方等を備える。回路1110は、本方法に定義される処理の一部又はすべてを行うための専用集積回路1124を備える。プロセッサ1120、メモリ1122、専用IC1124、及び通信要素1126は、相互接続1130、例えばバスを解して互いと接続される。プロセッサシステム1110は、それぞれアンテナ及び/又はコネクタを使用した、接触型通信及び/又は無接触型通信を行うためになされる。
【0121】
例えば、一実施形態では、暗号装置は、プロセッサ回路及びメモリ回路を備え、プロセッサは、メモリ回路に記憶されたソフトウェアを実行するようになされる。例えば、プロセッサ回路は、Intel Core i7プロセッサ、ARM Cortex-R8等である。一実施形態では、メモリ回路は、ROM回路、又は不揮発性メモリ、例えばフラッシュメモリを含む。メモリ回路は、揮発性メモリ、例えばSRAMメモリであってもよい。後者の場合、装置は、ソフトウェアを提供するようになされた、不揮発性のソフトウェアインターフェース、例えばハードドライブ、ネットワークインターフェース等を備える。
【0122】
以下の項は請求項ではないが、企図される実施形態を含む。出願人は、これにより、本出願の、又はそこから導出されるさらに他の出願の経過中に、そのような項に合わせて、並びに/又はそのような項、及び/若しくは詳細な説明若しくは特許請求の範囲から取られる特徴の組み合わせに合わせて、新しい請求項を作成可能であることを通知する。
1.入力データに暗号演算を行って出力データを得るようになされた電子暗号装置であって、電子暗号装置は、
- 入力データを受け取るようになされた入力インターフェースと、
- 内部状態を記憶するようになされたメモリであって、内部状態は1つ又は複数のデータ要素を含み、各データ要素は、メモリ内で対応するシェアの集合として表され、メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、メモリ内のシェアの集合に対応するフーリエ係数の集合が、それらの間で所定の関係を満たす、メモリと、
- プロセッサ回路であって、
- 内部状態を反復的に更新することによって暗号演算を行うことであって、入力データから初期内部状態が導出され、出力データは最終内部状態から導出され、内部状態を更新することは、更新後の内部状態のシェアの集合に対応する更新後のフーリエ係数の集合が、それらの間の所定の関係を不変量として満たすようになされる、行うことと、
- 最終内部状態に出力演算子を適用して出力データを導出することであって、出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付け、前記歪みは、フーリエ係数が所定の関係を満たす場合に歪みがゼロになるようにシェアの集合のフーリエ係数に依存する、導出することと、
を行うように構成されたプロセッサ回路と、を備える電子暗号装置。
2.所定の関係は、異なるフーリエ係数の集合の少なくとも2つのフーリエ係数が等しいことを含む、項1に記載の暗号装置。
3.内部状態を更新することが、内部状態のデータ要素に非線形演算を適用することを有し、非線形演算は、内部状態のデータ要素を表す対応するシェアの集合中にある、メモリ内のシェアに作用することによって、データ要素に作用するようになされる、項1又は2のいずれかに記載の電子暗号装置。
4.非線形演算が有限体における多項式であり、プロセッサ回路が、シェアの集合のべき乗を、シェアの集合自体とのシェアの集合の畳み込みとして算出するようになされる、項3に記載の暗号装置。
5.多項式が、フーリエ係数に対する並列の多項式を定義し、異なるフーリエ係数の集合の少なくとも2つのフーリエ係数に作用する並列の多項式のすべての係数が等しい、項2と項4との組み合わせに記載の暗号装置。
6.内部状態を更新することが、内部状態に線形演算を適用することを有し、線形演算は、内部状態の少なくとも2つのデータ要素を表すメモリ内の少なくとも2つのシェアの集合に同時に作用する、項1乃至5のいずれかに記載の電子暗号装置。
7.線形演算が、
- 線形演算が作用するシェアの集合ごとにフーリエ係数の集合を生じさせるフーリエ演算子であって、フーリエ係数の集合は、インデックスを有する該集合中の係数で順序付けされる、フーリエ演算子と、
- 異なるインデックスのフーリエ係数とは無関係に、同じインデックスのフーリエ係数に作用する1つ又は複数の線形演算子であって、不変量を保持しつつフーリエ係数に作用するようになされる、1つ又は複数の線形演算子と、
- 逆フーリエ演算子と、
を連結することによって構築される、項6に記載の暗号装置。
8.入力データに暗号演算を行って出力データを得る電子暗号方法(400)であって、電子暗号方法は、
- 入力データを受け取る(410)ステップと、
- 内部状態を記憶する(430)ステップであって、内部状態は1つ又は複数のデータ要素を含み、各データ要素は、メモリ内で対応するシェアの集合として表され、メモリ内のシェアの集合は、有限体における離散フーリエ変換に従って対応するフーリエ係数の集合を有し、メモリ内のシェアの集合に対応するフーリエ係数の集合が、それらの間で所定の関係を満たす、ステップと、
- 内部状態を反復的に更新することによって暗号演算を行う(441、446)ステップであって、入力データから初期内部状態が導出され、出力データは最終内部状態から導出され、内部状態を更新することは、更新後の内部状態のシェアの集合に対応する更新後のフーリエ係数の集合が、それらの間の所定の関係を不変量として満たすようになされる、ステップと、
- 最終内部状態に出力演算子を適用して(422)、出力データを導出するステップであって、出力演算子は、シェアの集合を、そのシェアの集合が表すデータ要素に歪みを足したものに対応付け、前記歪みは、フーリエ係数が所定の関係を満たす場合に歪みがゼロになるようにシェアの集合のフーリエ係数に依存する、ステップと、を有する電子暗号方法。
9.項8に記載の方法をプロセッサシステムに行わせる命令を表す一時的又は非一時的なデータ(1020)を備えた、コンピュータ可読媒体(1000)。
【0123】
上述の実施形態は、本発明を制限するのではなく例示するものであり、また当業者は多くの代替の実施形態を設計することが可能であることに留意すべきである。
【0124】
特許請求の範囲において、括弧に入った参照符号は請求項を制限するものとは解釈すべきでない。動詞「有する、含む」及びその活用形の使用は、請求項に述べられるもの以外の要素又はステップの存在を排除しない。単数形は、そのような要素が複数個存在することを排除しない。本発明は、いくつかの別個の要素を備えるハードウェアを利用して、及び適切にプログラムされたコンピュータを利用して実施される。いくつかの手段を列挙する装置クレームにおいて、それら手段のいくつかは、1つの同じハードウェア品によって具現化されてよい。単に特定の方策が相互に異なる従属請求項に記載されているということは、それら方策の組み合わせが有利に利用できないことを意味しない。
【0125】
特許請求の範囲において、括弧に入った参照は、例示を行う実施形態の図面中の参照符号又は実施形態の数式を指し、それにより請求項を理解し易くしている。このような参照は、請求項を制限するものとは解釈すべきでない。
【符号の説明】
【0126】
(
図1~
図3)
100 暗号装置
110 入力インターフェース
112 入力演算子
120 出力インターフェース
122 出力演算子
130 内部状態記憶
141、142、143 非線形演算
146、147、148 線形演算
210 平文入力データ
211、212、213、214 内部状態
215 平文出力データ
310 平文内部状態
311、312、313 データ要素
320 シェアの集合として表された内部状態(符号化されていない)
321、322、323 シェアの集合
330 内部状態についてのフーリエ係数
331、332、333 フーリエ係数の集合
340 シェアの集合として表された内部状態(符号化されている)
341、342、343 符号化されたシェアの集合