(57)【特許請求の範囲】
【請求項１】
処理ユニットおよび記憶ユニットを有する内部秘密状態を備えた装置によって、暗号鍵の再使用を制限しながら平文データを暗号化するための方法であって、
（ａ）  前記処理ユニットが、複数の連続中間鍵を計算することによって、前記記憶ユニットに格納された前記内部秘密状態およびメッセージ識別子からメッセージ鍵を導出することであって、前記内部秘密状態の少なくとも一部からスタートして前記メッセージ鍵に至り、各連続鍵が、前記メッセージ識別子および先行鍵の少なくとも一部に基づいて導出されることと、
（ｂ）  前記処理ユニットが、少なくとも前記メッセージ鍵に基づく複数の暗号鍵を用いて、前記平文データの複数のセグメントを暗号化し、複数の暗号化されたデータセグメントを生成することと、
（ｃ）  前記処理ユニットが、前記複数の暗号化されたデータセグメントに少なくとも基づいた、かつそれらを検証するために使用可能な暗号検証値を計算するために、前記記憶ユニットに格納された秘密鍵を用いることと、
（ｄ）  前記処理ユニットが、前記複数の暗号化されたデータセグメントおよび前記暗号検証値を出力することと、
を含む方法。
【請求項２】
前記（ｃ）が、前記処理ユニットが、少なくとも１つの前記暗号化されたデータセグメントから暗号ハッシュを計算することと、前記処理ユニットが、少なくとも秘密値および前記暗号ハッシュからバリデータを導出することであって、前記導出が、前記秘密値からスタートして複数の連続中間値を計算することを含み、各連続値が、前記値の先行値および前記暗号ハッシュの一部に少なくとも基づくことと、を含む請求項１に記載の方法。
【請求項３】
前記（ａ）における各前記中間鍵の前記導出が、エントロピー分布演算を選択し、次に前記エントロピー分布演算を前記先行鍵に適用することを含む、請求項２に記載の方法。
【請求項４】
前記メッセージ識別子が複数の部分に分解され、各前記部分が、適用される特定のエントロピー分布演算を決定する、請求項３に記載の方法。
【請求項５】
前記（ｂ）における前記暗号鍵が、鍵連鎖を用いて前記メッセージ鍵から導出される、請求項２に記載の方法。
【請求項６】
前記（ａ）における前記メッセージ鍵が、鍵ツリーを通る経路に従うことによって計算され、前記経路が、前記メッセージ識別子を含む、請求項２に記載の方法。
【請求項７】
前記（ｂ）が、前記処理ユニットが、複数のエントロピー分布演算を実行することによって、前記メッセージ鍵から複数の前記暗号鍵を導出することを含み、さらに、前記暗号鍵の１つが、エントロピー分布関数を前記メッセージ鍵に適用することによって計算され、複数の連続暗号鍵のそれぞれが、エントロピー分布関数を前記暗号鍵の先行鍵に適用することによって計算される、請求項２に記載の方法。
【請求項８】
前記暗号鍵のそれぞれが、ただ１つの平文セグメントを暗号化する際に用いられて、暗号化されたデータセグメントを生成し、前記暗号化されたデータセグメントの全てに基づいて前記暗号ハッシュが計算される、請求項２に記載の方法。
【請求項９】
前記暗号ハッシュが、ハッシュ連鎖を用いて計算される、請求項８に記載の方法。
【請求項１０】
前記ハッシュ連鎖において、前記暗号化されたデータセグメントが、前記暗号化されたデータセグメントが出力される順序と逆の順序でハッシュされる、請求項９に記載の方法。
【請求項１１】
前記（ｂ）において、前記平文データが、複数のセグメントを含み、各セグメントが、複数のサブセグメントを含み、各平文サブセグメントに関し、前記暗号鍵の新しい鍵が、前記サブセグメントを暗号化するために用いられる、請求項２に記載の方法。
【請求項１２】
前記（ｂ）において、前記平文データが、複数のセグメントを含み、暗号鍵更新が、イントラセグメントに基づいて行われ、各前記暗号化されたデータセグメントが、前記更新された暗号鍵の少なくとも１つを用いることによって生成される、請求項２に記載の方法。
【請求項１３】
各前記連続中間値が、前記連続中間値の中間親値と、前記暗号化されたデータセグメントハッシュの１または２ビットと、によってのみ入力が決定される暗号ハッシュ演算の結果である、請求項２に記載の方法。
【請求項１４】
前記暗号ハッシュを計算することが、データセグメント長さを用いることを含む、請求項２に記載の方法。
【請求項１５】
前記暗号検証値が、前記暗号化されたデータセグメントの少なくとも１つを認証するデジタル署名である、請求項１に記載の方法。
【請求項１６】
処理ユニットおよび記憶ユニットを有する内部秘密状態を備えた装置によって、暗号鍵の再使用を制限しながらデータを復号化するための方法であって、
（ａ）  前記処理ユニットが、複数の暗号化されたデータセグメントおよび暗号検証値を受信し、それらに対応するメッセージ識別子を取得することと、
（ｂ）  前記処理ユニットが、前記暗号検証値を検証して、前記メッセージ識別子または前記暗号化されたデータセグメントの少なくとも１つが変更されたかどうかを判定することと、
（ｃ）  前記処理ユニットが、複数の連続中間鍵を計算することによって、前記内部秘密状態および前記メッセージ識別子からメッセージ鍵を導出することであって、前記内部秘密状態の少なくとも一部からスタートして前記メッセージ鍵に至り、各連続鍵が、前記メッセージ識別子および先行鍵の少なくとも一部に基づいて導出されることと、
（ｄ）  前記処理ユニットが、少なくとも前記メッセージ鍵に基づいた複数の暗号鍵を用いて、前記暗号化されたデータセグメントの複数の検証されたセグメントを復号化して複数の平文データセグメントを生成することと、
を含む方法。
【請求項１７】
前記（ｂ）が、前記処理ユニットが、少なくとも１つの前記暗号化されたデータセグメントから暗号ハッシュを計算することと、前記処理ユニットが、少なくとも秘密値および前記暗号ハッシュから予想バリデータを導出することであって、前記導出が、前記秘密値からスタートして複数の連続中間値を計算することを含み、各連続値が、前記値の先行値および前記暗号ハッシュの一部に少なくとも基づいていることと、前記処理ユニットが、前記導出された予想候補バリデータを前記受信された暗号検証値と比較することと、を含む、請求項１６に記載の方法。
【請求項１８】
前記（ｃ）における各前記中間鍵の前記導出が、エントロピー分布演算を選択し、次に前記エントロピー分布演算を前記先行鍵に適用することを含む、請求項１７に記載の方法。
【請求項１９】
前記メッセージ識別子が複数の部分に分解され、各前記部分が、適用される特定のエントロピー分布演算を決定する、請求項１８に記載の方法。
【請求項２０】
前記（ｄ）における前記暗号鍵が、鍵連鎖を用いて前記メッセージ鍵から導出される、請求項１７に記載の方法。
【請求項２１】
前記（ｃ）における前記メッセージ鍵が、鍵ツリーを通る経路に従うことによって計算され、前記経路が、前記メッセージ識別子を含み、前記バリデータが、鍵ツリーを通る経路に従うことによって計算され、前記経路が、前記暗号化されたデータセグメントに基づいたハッシュを含む、請求項１７に記載の方法。
【請求項２２】
前記（ｄ）が、前記処理ユニットが、複数のエントロピー分布演算を実行することによって、前記メッセージ鍵から複数の前記暗号鍵を導出することを含む、請求項１７に記載の方法。
【請求項２３】
前記暗号化されたデータが、複数のセグメントを含み、最後のセグメントを除いて、各暗号化されたデータセグメントが、次の暗号化されたデータセグメントの暗号ハッシュの表現を含み、第１の暗号化されたデータセグメントを復号化する前に、その暗号ハッシュが、計算および検証され、各後続のセグメントを復号化する前に、その暗号ハッシュが、計算されて、前記前の暗号化されたデータセグメントにおいて表現された前記ハッシュと比較され、前記暗号鍵のそれぞれが、ただ１つの暗号化されたデータセグメントを復号化する際に用いられる、請求項１６に記載の方法。
【請求項２４】
前記（ｄ）において、前記暗号化されたデータが、複数のセグメントを含み、各セグメントが、複数のサブセグメントを含み、各暗号化されたサブセグメントに関して、前記暗号鍵の新しい鍵が、前記サブセグメントを復号化するために用いられる、請求項１７に記載の方法。
【請求項２５】
前記（ｂ）において、前記暗号化されたデータが、複数のセグメントを含み、暗号鍵更新が、イントラセグメントに基づいて行われ、各前記平文データセグメントが、前記更新された暗号鍵の少なくとも１つを用いることによって生成される、請求項１７に記載の方法。
【請求項２６】
各前記連続中間値が、暗号ハッシュ演算であって、その入力が、親値と、前記暗号化されたデータセグメントハッシュの少なくとも一部に対応する前記親値の値と、を含む暗号ハッシュ演算の結果である、請求項１７に記載の方法。
【請求項２７】
前記暗号ハッシュ計算が、データセグメント長さをさらに含む、請求項１７に記載の方法。
【請求項２８】
前記予想バリデータが、ハッシュを検証し、前記ハッシュが、第２の暗号化されたデータセグメントのハッシュを組み込む第１の暗号化されたデータセグメントに依存し、前記第２および後続の暗号化されたデータセグメントが、次の暗号化されたデータセグメントのハッシュをそれぞれ組み込む、請求項１７に記載の方法。
【請求項２９】
前記メッセージ識別子が、前記平文データの少なくとも一部における暗号ハッシュである、請求項１７に記載の方法。
【請求項３０】
前記平文データが、ＦＰＧＡビットストリームを含む、請求項１７に記載の方法。
【請求項３１】
前記内部秘密状態を備えた装置のプロセッサを用いて前記平文データの少なくとも一部を実行する追加ステップを含む、請求項２４に記載の方法。
【請求項３２】
最小受理可能ソフトウェア番号を記憶ユニットに保持することと、前記記憶ユニットに保持された前記最小受理可能ソフトウェア番号に基づいてアンチロールバック保護処理を行うことと、をさらに含む、請求項１７に記載の方法。
【請求項３３】
前記暗号検証値が、前記暗号化されたデータセグメントの少なくとも１つを認証するデジタル署名である、請求項１６に記載の方法。
【請求項３４】
暗号鍵の再使用を制限しながら平文データを暗号化するための、内部秘密状態を備えた装置であって、請求項１〜１５の何れか一項に記載の方法を実行するように構成された、内部秘密状態を備えた装置。
【請求項３５】
暗号鍵の再使用を制限しながらデータを復号化するための、内部秘密状態を備えた装置であって、請求項１６〜３３の何れか一項に記載の方法を実行するように構成された、内部秘密状態を備えた装置。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１０年１２月２日出願の米国特許出願第１２／９５８，５７０号および２００９年１２月４日出願の米国仮特許出願第６１／２６６，９４８号に対する優先権を主張し、これらの出願は、それらに対するこの言及により、その全体において本明細書に援用される。
【０００２】
本特許は、暗号化されたデータ入力を処理するための技術に関し、より具体的には、かかるシステムおよびデータを外部監視攻撃から保護することに関する。
【背景技術】
【０００３】
機密データを処理するシステムは、攻撃者による、かかるデータの無許可アクセス、開示または変更に対して保護する必要がある。暗号鍵および他の秘密へのアクセスを取得した攻撃者は、機密データを盗むかまたは改竄し、無許可コマンドの導入および秘密または専有情報の暴露を介して、システムの重要な動作の破壊などの厳しい結果に至る可能性がある。また、１つの感染した要素が、さらなる攻撃を展開するために用いられて、システムの他の要素を危険にさらす可能性がある。より具体的には、以前の研究は、攻撃者が、動作タイミング、電力消費および／または電磁放射などの装置の外部特徴を監視でき、かつこの追加情報を用いて、装置内で用いられている秘密鍵を抽出できることを示した。例えば、Kocher et al (P. Kocher, J. Jaffe,  B. Jun,  "Differential Power Analysis," Advances in Cryptology - Crypto 99 Proceedings, Lecture Notes In Computer Science Vol. 1666, Springer-Verlag, 1999 参照)によって説明されているように、異なるデータと共に同じ鍵セットを用いて暗号演算シーケンスを実行する装置の外部監視が、鍵の漏洩に帰着し得ることが、当該技術分野において周知である。
【０００４】
外部監視攻撃が、典型的には受動的であり非侵入性なので、物理的アクセスを妨害するかまたは不適切な使用を検出することに基づく従来の耐改竄防御は、かかる攻撃に対する保護を提供するには不十分または非実用的である。例えば、物理的に安全で、よく守られた部屋を用いて秘密鍵を管理する方法が、背景技術において周知である。しかしながら、多くの用途において、物理的に隔離された施設に暗号システムを置いておくように要求することは、それらが動作すると予想される環境を考えれば、実現可能ではない。さらに、かかる施設は、建築および運営に費用がかかり、小量の情報が敵対者に漏洩するのを防ぐ能力において、やはり不完全な場合がある。
【０００５】
もちろん、必ずしも物理的防護に頼らずに、監視攻撃からの情報漏洩問題を軽減できる他の方法が、背景技術において周知である。これらには、トランザクションから漏洩する情報量（またはレート）を低減すること、暗号アルゴリズムインプリメンテーションを変更して計算中間値をランダム化すること、および／または電力消費および動作タイミングにノイズを導入することの方法が含まれる。
【０００６】
例えば、"Leak-Resistant Cryptographic Indexed Key Update"という名称の米国特許第６５３９０９２号は、共有マスター鍵およびインデックス値（例えばカウンタ）をトランザクション鍵に変換するための方法を提供し、この場合に、導出は、外部監視攻撃から保護される。これらの方法は、外部監視攻撃から保護されている装置が、トランザクション鍵の導出に寄与できる用途でうまく働く。例えば、’０９２特許は、スマートカードが、どのように、各トランザクションと共に増分するインデックスカウンタを維持し、次に鍵導出においてインデックスカウンタを使用できるかを説明する。
【０００７】
しかしながら、’０９２特許に説明されているように、プロトコルの参加者が、外部監視攻撃から保護されるべきだが、しかしシーケンスカウンタおよび更新鍵を記憶する能力を欠く用途が存在する。例えば、暗号文を順序不同で復号化するために繰り返し用いられる固定された不変の埋め込み鍵を含む装置などの装置が、同じ入力データを規則的に処理する必要のある場合を検討する。ファームウェア暗号化は、かかる用途の例である。ヒューズに埋め込み鍵を有するマイクロプロセッサを製造してもよく、マイクロプロセッサは、全てのリブートにおいて、信頼できない外部フラッシュからロードされたファームウエアイメージを再復号化する必要がある。ファームウエアイメージは、ときどき更新してもよいが、同じ暗号文はまた、繰り返し復号化される可能性がある。したがって、用途要件および物理的製造制約（鍵を保持するためのワンタイムプログラマブルヒューズの使用にゆえに、記憶された鍵を変更できないことなど）によって、復号化鍵が使用される回数を装置が制限することが非実用的になる可能性がある。ファームウェア発行者は、新しい暗号化されたファームウエアイメージがリリースされるたびに、新しいインデックス値で’０９２特許に説明された方法を用いることが可能だが、しかし復号化装置は、各リブートにおいて異なるインデックス値を用いることができない。なぜなら、暗号化装置によって用いられる値以外の値へとインデックス値を変更することが、不正確な復号化に帰着することになるであろうからである。したがって、攻撃者は、潜在的に、復号化装置に改竄されたデータセットを供給し、次に、装置がこれらの暗号文を処理する（例えば復号化する等）間に、外部特徴を監視することによって秘密鍵を回復しようと試みることができる。差分電力解析（ＤＰＡ）などの統計的サイドチャネル攻撃は、異なる入力値（前述の例において、異なるファームウェア暗号文、または同じファームウェア暗号文の改竄されたバージョンなど）を処理するために装置が同じ鍵を繰り返し用いる場合に収集された測定値セットから秘密鍵を推定することができる。単一の長いメッセージ（例えば、多くのブロック暗号入力を含む）または正当なメッセージの収集（多数のファームウェアバージョンなど）からの測定値がまた、たとえ暗号文メッセージが改竄されていなくても、サイドチャネル攻撃用の十分なデータを提供する可能性がある。
【０００８】
もちろん、装置が全てのトランザクション用に同じ鍵を用いるいくつかの状況において、装置は、理論的にはロックアウト（例えば、トランザクションまたは失敗閾値が超過された場合に自動消滅することによる）を実行して、敵対者が観察できるトランザクション数を制限することが可能である。しかしながら、ロックアウト機構は、信頼性の心配、および失敗カウンタを記憶することに関連する困難（例えば、多くの半導体製造プロセスは、安全なオンチップ不揮発性記憶装置を欠き、オフチップ記憶装置は、セキュリティ保護するのが難しい）など、多数の実際的な問題を持ち込む。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
前述の全てを考慮すると、外部監視攻撃からの保護を伴って装置がデータを通信および交換できる検証可能で安全なやり方と、装置が偽造データを拒絶する能力と、を提供する方法が有利であろう。
【課題を解決するための手段】
【００１０】
本特許は、秘密暗号鍵を利用する装置を外部監視攻撃からセキュリティ保護するための、同様に装置の内部演算に関連する情報を収集する従来の暗号解析および他の攻撃（外部監視攻撃のＤＰＡおよび他の形態など）に対してセキュリティの改善を提供するための方法を提供する。機密データを暗号化するための様々な例示的な実施形態が、本明細書において開示される。
【００１１】
これらの様々な実施形態は、それらの詳細においてかなり異なる場合もあるが、それらは、全て、本明細書に示す様々な実施形態に関連して容易に検証可能であるように、以下の一般的な技術内に含まれる。暗号化に関し、暗号化されるデータの各セットが、メッセージ識別子（トランザクション／メッセージカウンタ、平文のハッシュ、ランダム値、または別の一意もしくは半一意値など）に関連付けられる。暗号化装置は、メッセージ識別子、および復号化装置と共有される初期の秘密内部状態を用いて、メッセージ鍵を導出する。この導出は、共有秘密内部状態の少なくとも一部からスタートしてメッセージ鍵に至る１つまたは複数の中間鍵の連続を介した繰り返し法で実行され、各繰り返しにおいて、次の鍵は、少なくとも１つの先行鍵およびメッセージ識別子の少なくとも一部に依存する。平文は、１つまたは複数のセグメントに分解してもよい。各平文セグメントは、メッセージ鍵またはメッセージ鍵からさらに導出された鍵を含むことができる１つまたは複数の秘密鍵で暗号化され、対応する暗号化されたセグメントを生成する。典型的には、異なる鍵（または異なる鍵セット）が、各セグメント用に用いられる。
【００１２】
次に、暗号化装置は、復号化装置と共有される秘密鍵（メッセージ鍵、秘密の内部秘密、異なる鍵、前述のものから導出された鍵など）を用いて、少なくとも１つのバリデータを計算する。バリデータの導出は、メッセージ鍵を生成するために用いられるプロセスと似た繰り返しプロセスを用いて実行してもよく、それによって、（例えば、各中間値の生成が、その親値をハッシュすることを含む場合に）一連の変形が秘密鍵に適用されて連続値を生成する。
【００１３】
暗号化装置は、１つまたは複数の暗号化されたセグメントおよび１つまたは複数のバリデータを出力する。受信者がメッセージ識別子を決定できるようにする必要があるときに、追加情報もまた出力してもよい。
【００１４】
対応する復号化プロセス中に、復号化装置が、１つまたは複数の暗号化されたセグメント、１つまたは複数のバリデータ、および暗号化されたセグメントに対応するメッセージ識別子を受信する。次に、復号化装置は、１つまたは複数のバリデータを用いて、復号化される少なくとも第１の暗号化されたセグメントが変更されていないことを検証する。バリデータの検証には、暗号化装置と共有される秘密からスタートする一連の連続中間値であって、各中間値がその親のハッシュであり、（かつ特定のハッシュ演算が、前記暗号化されたセグメントの一部に依存する）中間値を計算することを含んでもよい。典型的には、暗号化されたセグメント用の復号化プロセスは、セグメントが変更されていないことが検証された場合にだけ進むことを許される。検証が成功した場合に、復号化装置は、同じ繰り返し鍵導出プロセス(暗号化装置が後に続く)に従うことによって、それが暗号化装置と共有する秘密内部状態を用いてメッセージ鍵（まだ導出されていない場合に）を計算する（すなわち、共有秘密内部状態の少なくとも一部からスタートし、一連の中間鍵を介して最終メッセージ鍵に至るが、各ステップにおいて、次の鍵は、メッセージ識別子の少なくとも一部および少なくとも１つの先行鍵に依存する）。各暗号化されたセグメント（変更されていないと判定された場合）は、メッセージ鍵から導出された１つまたは複数の対応する秘密鍵で復号化され、対応する平文セグメントを回復する。
【図面の簡単な説明】
【００１５】
【図１】鍵および暗号文ハッシュ連鎖を用いた検証可能な耐漏洩性暗号化用の全体的プロセスの例示的な実施形態を示す。
【図２】共有暗号秘密ＫＳＴＡＲＴからスタートし、経路Ｐ１．．．ＰＱを通して継続する耐漏洩性で鍵ツリーベースの鍵導出プロセスの例示的な実施形態を示す。図２の鍵導出プロセスは、図１および３の第１の例示的な暗号化プロセスならびに図４の第１の例示的な復号化プロセスに関連して使用可能である。それはまた、図５、１１および１３における他の例示的な暗号化プロセスならびに図６、１２および１４における他の例示的な復号化プロセスに関連して使用可能である。
【図３】暗号化用の耐漏洩性鍵および暗号文ハッシュ連鎖プロセス（例えば図１に示す全体的暗号化プロセスの一部を含む）の例示的な実施形態を示す。
【図４】図１（および図３）の暗号化プロセスに対応する、鍵および暗号文ハッシュ連鎖を用いる検証可能な耐漏洩性復号化プロセスの例示的な実施形態を示す。
【図５】鍵および平文ハッシュ連鎖を用いる検証可能な耐漏洩性暗号化プロセスの例示的な実施形態を示す。
【図６】図５の暗号化プロセスに対応する、鍵および平文ハッシュ連鎖を用いる検証可能な耐漏洩性復号化プロセスの例示的な実施形態を示す。
【図７】検証可能な耐漏洩性暗号演算が、チップ上のシステムにファームウェアをロードするために用いられる環境を示す。
【図８】検証可能な耐漏洩性暗号演算が、安全なＣＰＵチップ内で用いられる環境であって、フラッシュおよび／またはＲＡＭなどの外部記憶装置が信頼できない環境を示す。
【図９】検証可能な耐漏洩性暗号演算が、ビットストリームイメージをフィールドプログラマブルゲートアレイ上にロードするために用いられる環境を示す。
【図１０】検証可能な耐漏洩性暗号演算が、パケットベースのネットワーク通信装置において用いられる環境を示す。
【図１１】図１０と同様に他の実施形態に示す環境で使用できる検証可能なパケットレベルの耐漏洩性暗号化プロセスの例示的な実施形態を示す。
【図１２】図１１に示す暗号化プロセスに対応する、検証可能なパケットレベルの耐漏洩性復号化プロセスの例示的な実施形態を示す。
【図１３】イントラセグメント鍵変更を伴う暗号ブロック連鎖（ＣＢＣ）を用いる例示的なＥＮＣ（）演算の例示的な実施形態を示す。
【図１４】図１３の暗号化演算に対応し、イントラセグメント鍵変更（）を伴う暗号ブロック連鎖（ＣＢＣ）を用いる例示的なＤＥＣ（）演算の例示的な実施形態を示す。
【発明を実施するための形態】
【００１６】
本特許で説明する技術によって、パーティは、外部監視攻撃に対する向上したセキュリティを伴って、暗号で保護された機密データを通信することが可能になる。典型的には「暗号化装置」および「復号化装置」と呼ばれる２つのパーティを含む例示的な実施形態が説明されるが、用語「装置」は、便宜上選択され、システム設計におけるどんな特定の役割にも必ずしも直接対応する必要はない。装置は、要求されるわけではないが、異なるフォームファクタまたはインプリメンテーションを用いてもよい。例えば、暗号化装置および復号化装置は、両方とも携帯ハードウェア装置とすることが可能である。代替として、暗号化装置は、施設において動作するサーバ上を走行するソフトウェアアプリケーションとすることが可能であり、一方で復号化装置は、携帯ハードウェア装置とすることが可能である（逆もまた同様である）。さらに、ほとんどの暗号演算は、２つのパーティを含むが、本特許の技術は、もちろん、ただ１つのパーティを含む環境において（両方の役割が、１つのパーティおよび／もしくは装置の管理下にある安全なメモリまたは記憶システムにおいて、例えば図８に示す例示的な環境においてなど）、または２を超えるパーティおよび／もしくは装置を含む環境（図１０に示す例示的な実施形態など）において適用することができる。
【００１７】
エントロピー再分布演算
本明細書で用いられるように、「エントロピー再分布演算」（または「エントロピー分布演算」）は、入力ビットに関する未知の情報が出力ビット間で再分布されるように、その入力を混合する演算である。例えば、ｘビット暗号鍵Ｋ０が、各ｉ＞１に対して鍵Ｋｉ＝ｆ（Ｋｉ−１）であるように、エントロピー再分布演算ｆで繰り返し処理されると仮定する。次に、敵対者が、鍵Ｋ０を解くための十分すぎるほどの情報を提供する、ｎの異なる鍵Ｋｉのそれぞれに関するｙビットの情報を取得する（例えば、試みられた外部監視攻撃の一部として取得する）と仮定する（例えば、ｙ＊ｎ＞ｘ）。エントロピー分布演算ｆの使用によって、かかる解法を計算的に実行不可能にすることができる。暗号ハッシュ関数Ｈが、エントロピー再分布演算として使用可能な演算の例である。例えば、２５６ビットの結果を生成する強いハッシュ関数Ｈを検討する。ランダムな２５６ビット初期鍵Ｋ０が与えられたとし、各ｉ＞１に対してＫｉ＝Ｈ（Ｋｉ−１）とする。（例えば）各Ｋ０．．．Ｋ９９９，９９９の最下位ビットの知識を持った敵対者は、Ｋ０に関連するデータの１，０００，０００ビットを有する。無限の計算能力を備えた仮説的な敵対者は、Ｋ０用の全ての可能な２２５６の値をテストして、最下位ビットの周知のシーケンスと一致する値を識別することによって、Ｋ０を見つけることが可能である。しかしながら、実際の敵対者は、有限の利用可能な計算能力を有するので、エントロピー再分布演算は、試みられた外部監視攻撃を介して漏洩された情報を仮定して、Ｋ０（または任意の他のＫｉ）を解くための計算的に実際的な方法が存在するのを防ぐ。
【００１８】
エントロピー再分布演算は、限定するわけではないが、暗号ハッシュ関数、ブロック暗号（ＡＥＳなど）を用いて構成された演算、擬似ランダム変換、擬似ランダム置換、他の暗号演算、またはこれらの組み合わせを用いて実行してもよい。便宜上、ハッシュに関してある例示的な実施形態を説明するが、しかし当業者は、前述に従って、代わりにまたは追加として他のエントロピー再分布関数もまた使用可能であることを理解されよう。
【００１９】
また、ベース演算から多数のエントロピー再分布演算を構成することができる。例として、２つの２５６ビットエントロピー再分布演算ｆ０（）およびｆ１（）が必要とされる場合に、ｆ０（）には、ｆ０（）への入力と連結された演算識別子列「ｆ０」に、ＳＨＡ−２５６暗号ハッシュ関数を適用することを含むことが可能であり、一方でｆ１（）には、ｆ１（）への入力と連結された演算識別子列「ｆ１」にＳＨＡ−２５６を適用することを含むことが可能である。エントロピー再分布演算は、周知のＡＥＳブロック暗号を用いて解釈することができる。例えば、ｆ０（）．．．ｆｂ−１（）を実行するために、各ｆｉ（）は、その入力をＡＥＳ−２５６鍵として用いて、０．．．ｂ−１内におけるｉの選択に対して一意である１２８ビット入力ブロックペアを暗号化して、２５６ビットの出力を生成する。ブロック暗号ベースの種々様々なハッシュ関数およびＭＡＣ構成がまた、背景技術において周知であり、かつまた使用可能である。
【００２０】
共有暗号値および演算
このセクションは、本特許で説明するように検証可能な耐漏洩性暗号演算を実行するために用いられる、暗号化装置およびその対応する復号化装置の両方によって共有されるある暗号値および／または演算を説明する。
【００２１】
暗号化装置および復号化装置は、それぞれが、ＫＲＯＯＴと呼ばれる秘密鍵などのベース共有秘密暗号状態値へのアクセスを有するように設定される。この秘密状態は、例えば、ＥＥＰＲＯＭ、フラッシュ、ヒューズ、または耐改竄性チップ上の他の記憶装置の１つまたは複数に記憶してもよく、かつ他の値もしくはプロセスから全体的にか部分的に導出してもよく、または外部から取得してもよい。これらの装置のそれぞれがＫＲＯＯＴを取得する方法には、限定するわけではないが、それぞれがＫＲＯＯＴを備えて製造されることと、装置が、物理的鍵インターフェースを介してＫＲＯＯＴを受信することによって、互いにまたは第三者を介して（例えば、ＲＳＡ、ディフィー−ヘルマン、または他の公開鍵暗号技術、または対称技術を利用するプロトコルを用いて）直接ＫＲＯＯＴを取り決めることと、ランダムにＫＲＯＯＴを生成することと（例えば、暗号化装置および復号化装置が同じである場合）等を含むことが可能である）。
【００２２】
さらに、暗号化装置および復号化装置はまた、両方とも非線形暗号エントロピー再分布演算セットｆ０（）、ｆ１（）、．．．、ｆｂ−１（）を計算でき、ここでｂ＞１は、正の整数である。これらのｂエントロピー再分布関数は、ツリー構造で構成することができる。例えば、高さＱの単純なｂ分木構造（すなわち、０からＱまでＱ＋１のレベルを有する）を、ｂの別個のエントロピー分布関数ｆ０（）．．．ｆｂ−１（）を用いることによって生成し、ツリーの各ノードにおいて、このｂ分木のｂの可能なブランチを表すことができ、各ノードは、可能な導出鍵を表す。かかるツリーにおいて、ルート暗号鍵ＫＳＴＡＲＴ（レベル０にある）からスタートして、レベル１において、ｂの可能な導出鍵を計算することができる。すなわち、左端ブランチ用のｆ０（ＫＳＴＡＲＴ）、次のブランチ用のｆ１（ＫＳＴＡＲＴ）、および右端ブランチ用のｆｂ−１（ＫＳＴＡＲＴ）まで継続して計算することができる。レベル２において、ｂ２の可能な鍵を導出することができる。なぜなら、ｆ０（）．．．ｆｂ−１（）のそれぞれを、ｂの可能なレベル１鍵のそれぞれに適用することが可能であるからである。もちろん、特定のレベル２ノードの計算には、ｂ２ではなく、２つの計算を必要とするだけである（すなわち、経路上にないノードは計算されない）。ツリーは、連続的なレベル１〜Ｑ用に継続し、ここで、先行レベルの各可能な鍵（すなわち異なるノード）は、ｆ０（）．．．ｆｂ−１（）を適用することによって処理し、今度はｂの追加の可能な導出鍵を導出することができる。鍵ツリー全体は、Ｑ＋１レベルを有し、レベル０の単一ノードでスタートして、レベルｉにおいてｂｉノードで継続し、レベルＱにおいてｂＱノードで終了する。したがって、レベル０のルートノードからレベルＱにおけるｂＱ最終ノードまで、ｂＱの可能な経路が存在する。異なるレベルに適用される一意の関数シーケンスに対応するかかる各可能な経路は、Ｑ整数のシーケンスとして表すことができ、各整数は、（０．．．ｂ−１）から選択される。
【００２３】
例えば、例示的な実施形態においてｂ＝２である。したがって、２つのエントロピー再分布演算ｆ０（）およびｆ１（）が用いられる（かつこれらの演算は、例えば上記のようにベース演算から構成してもよい）。Ｑ＝１２８（すなわち、高さが１２８である）の場合に、２１２８の経路が可能であり、１２８のエントロピー再分布関数計算が、レベル０ノード（すなわち開始鍵）からレベルＱ鍵を導出するために必要とされる。
【００２４】
変形として、実施形態は、レベル間でｂの値を変化させること、および／または特定のレベルへと取られる経路に基づいてｂを変化させることなど、ｂの選択の際に、より多くの多様性を含むことができる。同様に、エントロピー再分布演算もまた、エントロピー再分布演算ｆｉ（）を様々なレベルで相違させるか、またはこれらの演算を、特定のレベルへと取られるシーケンスに依存させることなどによって、変化させることができる。
【００２５】
暗号化装置および復号化装置はまた、暗号の非線形的な鍵連鎖演算ｇ（）を実行でき、この演算ｇ（）は、（必ずしもではないが）関数ｆｉ（）とは別個であってもよい。例えば、一実施形態において、ｇ（）は、暗号ハッシュ演算からなる。様々な実施形態は、（例えば、カウンタまたはｇ（）の適用を表す別の値で入力データをハッシュすることによって）ベース関数から構成された変形を含めて、ｇ（）の様々な適用のために異なる関数を用いることができる。
【００２６】
暗号化装置および復号化装置はまた、（例えば、セグメントハッシュ関数として用いられる）暗号の衝突困難性一方向ハッシュ関数ｈ（）を有し、この関数ｈ（）は、（必ずしもではないが）演算ｆｉ（）およびｇ（）とは別個であってもよい。
【００２７】
例示的な実施形態において、演算ｆｉ（）、ｇ（）およびｈ（）のそれぞれは、演算識別子および入力データの暗号ハッシュとして各演算を計算することによって、共通の暗号ハッシュ関数から構成される。演算識別子は、例えば「ｆ＃」、「ｇ」、または「ｈ」からなる、ゼロ終端列であってもよく、ここで＃は、ｆ０（）用の演算識別子が「ｆ０」になるように、所与のｆｉ（）用のｉの値である。また、入力を鍵として用いる演算識別子のＨＭＡＣを用いて、これらの演算を実行してもよい。本特許の技術と共に使用可能なハッシュ関数には、限定するわけではないが、ＭＤ５、ＳＨＡ−１、ＳＨＡ−２５６、ＳＨＡ−５１２、任意のＳＨＡ３候補演算と同様に、前述のものと前述のもの（ＨＭＡＣなど）を用いた構成との組み合わせが含まれる。本明細書で用いられているように、関数ＢＬＡＫＥ（ブレイク）、Ｂｌｕｅ  Ｍｉｄｎｉｇｈｔ  Ｗｉｓｈ（ブルーミッドナイトウィッシュ）、ＣｕｂｅＨａｓｈ、ＥＣＨＯ（エコー）、Ｆｕｇｕｅ（フーガ）、Ｇｒｏｓｔｌ、Ｈａｍｓｉ、ＪＨ、Ｋｅｃｃａｋ、ＬＡＮＥ（レーン）、Ｌｕｆｆａ（ルッファ）、Ｓｈａｂａｌ、ＳＨＡｖｉｔｅ−３、ＳＩＭＤ、およびＳｋｅｉｎ（スケイン）のそれぞれは、「ＳＨＡ３候補演算」である。他の実施形態において、ハッシュ関数は、限定するわけではないが、ＡＥＳ、ＤＥＳまたは他の暗号などのブロック暗号をハッシュ関数に変換するＭａｔｙａｓ−Ｍｅｙｅｒ−Ｏｓｅａｓ、Ｄａｖｉｅｓ−Ｍｅｙｅｒ（デービス−マイヤー）、Ｍｉｙａｇｕｃｈｉ−Ｐｒｅｎｅｅｌ、Ｍｅｒｋｅ−Ｄａｍｇａｒｄなどの他の周知の構成を用いて導出される。衝突困難性でない変換（ＭＤ５、ハッシュ変換の縮小ラウンド変形、または他の混合演算など）もまた、入力に存在するエントロピーを再分布させることができるが、しかし一方向関数ｈ（）として使用するにはそれほど魅力的ではない。
【００２８】
さらに他の実施形態は、エントロピー再分布演算ｆ０．．．ｂ−１（）を実施する際に、軽量で潜在的には暗号的に弱いストリーム暗号を潜在的に含むストリーム暗号を利用してもよい。例えば、ストリーム暗号ＲＣ４を用いてもよく、この場合に、エントロピー再分布演算入力が、ＲＣ４鍵として用いられ、ＲＣ４出力バイトが、エントロピー再分布演算出力として用いられる（またはエントロピー再分布演算出力を形成するために用いられる）。
【００２９】
暗号化装置および復号化装置は、対応する復号化関数ＤＥＣ（）を備えた秘密鍵暗号化関数（または関数セット）ＥＮＣ（）を有する。固定長メッセージを備えた実施形態などのいくつかの実施形態において、ＥＮＣ（）およびＤＥＣ（）は、ＥＣＢまたはＣＢＣモードにおけるＡＥＳなどの従来の暗号構成を用いてもよい。他の実施形態用のＥＮＣ（）およびＤＥＣ（）の構成は、図１３および図１４に関連して後でそれぞれ説明する。
【００３０】
図１および２における例示的な実施形態
このセクションは、検証可能な耐漏洩性暗号化および復号化用の一般的技術の例示的な実施形態を説明する。この第１の例示的な実施形態は、鍵連鎖および暗号文ハッシュ連鎖を用いる。
【００３１】
暗号化
便宜上、暗号法における従来の命名法に従って、暗号化されるデータを呼ぶために用語「平文」を用いる。当業者が理解するように、これは、入力データが人間に判読可能であることを必ずしも意味せず、実際には、かかるデータが、本特許の技術で保護される前に、圧縮され、符号化され、暗号化さえされるのを妨げるものではない。同様に、当業者は、用語「データ」が、処理されている任意の量を含み、かつ限定するわけではないが、コンテンツ、データ、ソフトウェア、符号および任意の他のタイプの情報を含み得ることを理解されよう。
【００３２】
保護すべき機密平文データメッセージＤが与えられ、共有ベース秘密暗号値ＫＲＯＯＴの知識を備えていると、暗号化装置は、図１に概説するように以下のステップを実行する。第１に、暗号化装置は、機密平文データＤをセグメントＤ１、．．．、ＤＬのシーケンスに分解するが（ステップ１００）、ここで（Ｌ≧１）であり、セグメントのそれぞれは、受信機において着信セグメント用のメモリに入るほど十分に小さい。さらに、これらのセグメントのそれぞれにおけるサイズは、用途およびインプリメンテーションの漏洩要件を満たすように十分に小さくするべきである。セグメントは、必ずではないが、同じサイズとすることができる。さらに、他の変形がまた、（例えばＥＮＣ（）およびＤＥＣ（）内で）鍵を変更することによって、無制限のサイズのセグメントをサポートすることができるが、これは、図１３および１４に関連して以下で示す。
【００３３】
暗号化装置はまた、（以下で示すように）Ｄの暗号化に関連して使用するためのメッセージ識別子（またはその先駆体）として使用可能なノンスＮを生成する（ステップ１０１）。例えば、ノンスは、真の乱数発生器、擬似乱数発生器、真および擬似乱数発生器のある組み合わせ、カウンタ値もしくは他の（好ましくは一意もしくはめったに繰り返さない）パラメータを用いてか、または暗号化装置にとって利用可能な鍵および／もしくはデータ（例えば、Ｄの一部もしくは全てのハッシュにＮを設定することによるＤを限定ではなく含む）からＮを導出することによって、生成することが可能である。図１において、所与のＫＲＯＯＴに対して、特定のメッセージを暗号化するために用いられるＮの値は、どんな他のメッセージを暗号化するためにも用いないのが好ましい（または用いるにしても、再使用は、少しも起こらないように制限されるか、かつ／またはめったにないように制限されるべきである。
【００３４】
後続の例示的な実施形態において、メッセージ識別子Ｈ１が、ノンスＮを用いて形成される。Ｎがメッセージ識別子として働く最も単純明快なインプリメンテーションにおいて、Ｈ１は、単にＮと等しくてもよい。Ｎがメッセージ識別子に対する先駆体として働く別の例として、暗号化装置は、関数ｈ（）を用い、ＮのハッシュとしてＨ１を計算することが可能である（ステップ１０２）。ハッシングは、例えば、計算効率のためにより少ない量を処理しながらより長いデータ値（テキスト列など）の組み込みを可能にするためにか、または計算的な単純性のために可変長データ値を均一な長さのメッセージ識別子に変換するためにか、または敵対者が有している可能性がある、Ｈ１の選択に影響を及ぼすどんな能力も低減するために、固定サイズのメッセージ識別子を生成したいと思う状況において有用である。もちろん、ハッシングは、メッセージ識別子を生成する単に１つの方法であり、当業者は、Ｈ１を生成するために、ｈ以外の関数を用いてもよいことを理解されよう。
【００３５】
Ｈ１を計算した後で、暗号化装置は、共有ベース秘密暗号値ＫＲＯＯＴおよびＨ１を用い、耐漏洩性で鍵ツリーベースの鍵導出プロセスへの入力としてメッセージ鍵ＫＭＥＳＳＡＧＥを計算する（１０３）。説明の便宜上、鍵導出プロセスは、本明細書では、（例えば、暗号化装置によって実行される）暗号化の文脈において、より具体的には図１における第１の例示的な暗号化プロセスの文脈において示される。しかしながら、同じ鍵導出プロセスはまた、図４における第１の例示的な復号化プロセスにおいて用いられ、その場合に、それは、復号化装置によって実行される。同様に、鍵導出プロセスはまた、図５、１１および１３の例示的な暗号化プロセスならびに図６、１２および１４の例示的な復号化プロセスを含む他のプロセスに関連して用いられる。
【００３６】
例示的な鍵導出プロセスが、図２に図解されている。プロセスは、ＫＳＴＡＲＴ（２０１）と表示されたツリーの出発点および経路Ｐ１．．．ＰＱ（２０２）から開始する。例えば、上記の図１のステップ１０３において、ＫＳＴＡＲＴは、共有秘密鍵ＫＲＯＯＴの値であり、経路Ｐ１．．．ＰＱ（２０２）は、Ｈ１によって決定される。（Ｐ１．．．ＰＱへのＨ１の変換は、以下で説明する。）経路は、ＫＳＴＡＲＴに適用される一連のエントロピー再分布演算を指定する。
【００３７】
例示的なインプリメンテーションにおいて、メッセージ識別子Ｈ１は、Ｑの部分Ｐ１、Ｐ２、．．．、ＰＱに分解される。例示的な分解において、各部分Ｐｉは、０から（ｂ−１）までの整数である（例えば、ｂ＝４の場合に、各Ｐｉは、２ビット値（０、１、２、または３）である）。同様に、ｂ＝２の場合に、各Ｐｉは、単一ビット（０または１）である。したがって、経路部分Ｐ１．．．ＰＱは、関数ｆ０（）、ｆ１（）、．．．、ｆｂ−１（）を適用することによって、ＫＳＴＡＲＴからＫＳＴＡＲＴ、ＰＡＴＨまでの特定の経路を指定するために用いられ、以下のようにＫＳＴＡＲＴ、ＰＡＴＨにつながる複数の中間鍵を生成することができる。第１に、関数
【数１】
0005552541.tif 000002
がＫＳＴＡＲＴ（２０３）に適用されて中間鍵
【数２】
0005552541.tif 000003
を生成し、その後
【数３】
0005552541.tif 000004
を
【数４】
0005552541.tif 000005
に適用して中間鍵
【数５】
0005552541.tif 000006
（２０４）を生成する等であり、ついには
【数６】
0005552541.tif 000007
を
【数７】
0005552541.tif 000008
（２０５）に最終的に適用して最終導出鍵
【数８】
0005552541.tif 000009
（２０６）を生成する。各中間鍵の導出が、少なくとも１つの先行鍵（例えば図２の場合には、その中間親）およびメッセージ識別子の関連部分に依存することに留意されたい。便宜上、この最終導出鍵を、ＫＳＴＡＲＴ、ＰＡＴＨ（ＫＳＴＡＲＴからスタートしＰＡＴＨをたどって到達された鍵を示す）の表記で示す。同様に、図１のステップ１０３の場合に、最終導出鍵（ＫＭＥＳＳＡＧＥに割り当てられるメッセージ鍵）は、
【数９】
0005552541.tif 000010
で示される。なぜなら、開始鍵が、実際にＫＲＯＯＴにあり、経路が、実際に、単にＨ１の分解であるＰ１、Ｐ２、．．．、ＰＱであるからである。（代替実施形態において、ＫＭＥＳＳＡＧＥは、例えば
【数１０】
0005552541.tif 000011
をハッシュすることによって
【数１１】
0005552541.tif 000012
から導出してもよい。どちらにしても、ＫＭＥＳＳＡＧＥは、
【数１２】
0005552541.tif 000013
に基づいている。）
【００３８】
ステップ１０４において、データセグメントは、前記メッセージ鍵ＫＭＥＳＳＡＧＥに基づいた少なくとも１つの暗号鍵を用いて暗号化され、暗号文Ｅ＝Ｅ１、．．．、ＥＬを入力セグメントＤ＝Ｄ１、．．．、ＤＬから生成する。ステップ１０４用の例示的な実施形態が、図３に示されているが、図３は、暗号化されたセグメントＥ１、．．．、ＥＬの計算に関与するステップおよび状態を示す。
【００３９】
図３のプロセスは、ＫＭＥＳＳＡＧＥを用いて、Ｌの個別セグメント暗号化鍵Ｋｉ（ｉ＝１〜Ｌ）を計算し、各鍵は、秘密メッセージデータＤの対応するセグメントＤｉ（ｉ＝１〜Ｌ）を暗号化するために用いられる。第１に、関数ｇ（）は、ＫＭＥＳＳＡＧＥに適用されて、第１のセグメント用に用いられる暗号化鍵のＫ１（３０２）を生成する。次に、関数ｇ（）は、鍵Ｋ１に適用されて、第２のセグメント（３０３）用の暗号化鍵であるＫ２を生成する等である。最後に、関数ｇ（）は、鍵ＫＬ−１に適用されて、最終セグメント（３０５）用の暗号化鍵であるＫＬを生成する。このタイプのプロセスを鍵連鎖と呼ぶ。なぜなら、暗号化鍵が、互いに連鎖されるからである。
【００４０】
Ｌセグメントを暗号化するためのＬ鍵Ｋ１、．．．、ＫＬが決定された後で、セグメントの暗号化は、以下のように進む。最終（Ｌ番目）セグメントが、最初に処理されるが、この場合に、ＥＮＣ（）関数への平文入力（３０６）は、平文Ｄ１．．．ＤＬ全体を暗号的にハッシュすることによって計算されたメッセージ完全性値と連結されたＬ番目のデータセグメントＤＬである。（Ｄ１．．．ＤＬのハッシュを含むことは、オプションである。実施形態は、これを省略するか、または「０」シーケンスのバイトもしくは他のあるパディング形態などの他のデータを連結してもよい）。このＬ番目の平文セグメントは、鍵ＫＬによって暗号化され、暗号化されたセグメントＥＬ（３０７）を生成する。
【００４１】
次に、Ｌ−１番目のセグメントが、ハッシュ関数ｈ（）をＥＬに適用し、このハッシュ値をデータセグメントＤＬ−１に付加し、かつ結果を、Ｌ−１番目のセグメントへの暗号化入力として用いることによって、（３０８）において処理される。次に、（３０９）において、次に、Ｌ−１番目の平文セグメントが、鍵ＫＬ−１を用いて暗号化され、暗号化されたセグメントＥＬ−１を生成する。このプロセスは、他のセグメント用に繰り返される。例えば、第２の平文セグメントに対応する暗号化入力（３１０）は、第２のデータセグメントＤ２、すなわち第３の暗号化されたセグメントのハッシュであるｈ（Ｅ３）が後続する第２のデータセグメントＤ２から構成され、次に、入力（３１０）が鍵Ｋ２を用いて暗号化され、暗号化されたセグメントＥ２（３１１）を生成する。最後に、第１の平文セグメントに対応する暗号化入力（３１２）は、第１のデータセグメントＤ１であって、第２の暗号化されたセグメント（３１１）のハッシュであるｈ（Ｅ２）が後続する第１のデータセグメントＤ１から構成され、次に、入力（３１１）が、鍵Ｋ１を用いて暗号化され、暗号化されたセグメントＥ１（３１３）を生成する。（前述の変形として、後続のセグメントハッシュは、暗号化される必要はない。例えば、Ｅｉは、Ｄｉを暗号化し、次に暗号化結果をＥｉ＋１のハッシュと連結することによってを形成することが可能である。）
【００４２】
暗号化されたセグメントＥ１．．．ＥＬは、暗号文Ｅを形成する。次に、図１におけるステップ１０４が完了される。Ｅｉの計算において各Ｅｉ＋１のハッシュを用いることにより、暗号化された値は効果的に一緒に連鎖され、これは、復号化装置が、欠陥セグメントを復号化する前に、変更された（または欠陥のある）暗号文セグメントを検出できるようにする役目をする。これを「暗号文ハッシュ連鎖」と呼ぶ。上記で示す例において、各暗号文セグメントＥｉ（１＜ｉ＜Ｌ）は、次の暗号文セグメントのハッシュに依存する。例えば、バリデータＶが、第１の暗号文セグメント（Ｅ１）のハッシュを認証するために用いられ、次にＥ１は、Ｅ２の予想ハッシュを生成する（必要ならばＤ１への復号化の後で）。同様に、Ｅ２は、セグメントＥ３のハッシュを生成する（必要ならば復号化の後で）等である。
【００４３】
全てのデータが１つのセグメント（すなわちＬ＝１）にある図３のプロセスが、やはり実行可能であること（例えば、入力メッセージが小さいか、または図１３に示すプロセスなどの暗号化プロセスＥＮＣ（）が用いられるからである）に留意されたい。Ｌ＝１の場合に関して、Ｋ１だけが必要とされ、Ｋ１＝ｇ（ＫＭＥＳＳＡＧＥ）である。代替として、ＫＭＥＳＳＡＧＥをＫ１として直接用いてもよく、その場合に、演算ｇ（）は、全て省略することができる。上記のように、Ｄ１．．．ＤＬ（この場合には、Ｌ＝１なので単にＤ１である）のハッシュを含むことは、オプションである。プロセスの結果は、Ｅ＝Ｅ１である。なぜなら、これがただ一つのセグメントであるからである。
【００４４】
再び図１を参照すると、データセグメントＤｉが計算された後で、バリデータＶ、すなわち暗号化されたメッセージの許可された受信者が、復号化に先立って暗号文を認証できるようにするバリデータＶが計算される。最初に、値Ｈ２が、第１の暗号化されたセグメントＥ１のハッシュとして計算される（１０５）。第１のセグメントＥ１が、他の全てのセグメントのハッシュを組み込むことを想起されたい。したがって、Ｅ１のハッシュは、実際には、セグメントＥ１を含む全てのセグメントの内容を反映し、かつセグメントのどれも変更されていないことを検証するために用いることができる。（オプションとして、Ｅ１に加えて、Ｈ２を生成するハッシュへの入力にはまた、長さ、バージョン番号、送信者の身元、Ｎの値など、メッセージに関する追加情報を含んでもよい）。
【００４５】
次に、暗号化装置は、秘密鍵を用いてＶを計算する（１０６）が、Ｖは、メッセージ識別子および暗号文セグメントＥｉのバリデータである。バリデータＶは、少なくとも１つの暗号文セグメントのハッシュ（例えば、ハッシュＨ２＝ｈ（Ｅ１））および初期秘密（例えば、ＫＭＥＳＳＡＧＥ、または以下のパラグラフで説明するような他の値）を用いて計算される。Ｖの計算は、図２で説明する耐漏洩性で鍵ツリーベースの鍵導出プロセスを用いて実行してもよく、開始鍵ＫＳＴＡＲＴはＫＭＥＳＳＡＧＥであり、経路はＨ２を用いて決定される（１０６）。したがって、Ｖの導出には、Ｖに至る複数の連続的な中間値を計算することが含まれ、この場合に各中間値は、少なくとも１つの先行値（例えば図２の場合には、その親値）およびハッシュ（例えばＨ２）の関連部分に依存する。関数ｆｉ（）、値ｂ等が、（要求されないが）（１０３）で用いられたのと同じであってもよいことに留意されたい。このプロセスは、バリデータＶである（またはバリデータＶを形成するためにさらに処理される）鍵
【数１３】
0005552541.tif 000014
の導出に帰着する。
【００４６】
前述の説明は、バリデータを導出する際にＫＭＥＳＳＡＧＥで始まったが、しかし代替実施形態は、異なる値で始まってもよい。例えば、ステップ１０４における鍵ＫＭＥＳＳＡＧＥおよびステップ１０６における鍵ＫＭＥＳＳＡＧＥは、互いに異なってもよいが、しかし両方とも
【数１４】
0005552541.tif 000015
から導出される。同様に、ステップ１０６で用いられる鍵は、ステップ１０４で用いられるＫＭＥＳＳＡＧＥから導出してもよく、逆も同様であり、または（ＫＲＯＯＴに加えて）異なるベース鍵をＫＳＴＡＲＴとして用いてもよい。もちろん、ＫＲＯＯＴ自体さえも、ＫＳＴＡＲＴとして用いてもよい（例えば、Ｈ２が、Ｎおよび／またはＨ１ならびに１つまたは複数の暗号文セグメントのハッシュである場合に）。
【００４７】
本特許において用いられるように、バリデータは、検証可能な暗号証明、すなわち、ある推定暗号文が、特定のメッセージ識別子に関連するいくらかの平文メッセージデータの暗号化の未変更バージョンであり、かつ秘密暗号値にアクセス可能なエンティティによって生成されたという検証可能な暗号証明である。ステップ１０６において構成されるバリデータは、便利なことに、差分電力解析および関連する外部監視攻撃に対する弱さを回避するような方法で、復号化装置などの受信者によって検証することができる。さらにまた、バリデータ生成プロセス（すなわちステップ１０６の実行）によって、暗号化装置は、差分電力解析および関連する外部監視攻撃に対する弱さを回避することが可能になる。
【００４８】
バリデータを計算した後で、暗号化プロセスは完了する。ステップ１０７において、結果が出力される。出力データは、受信者が、メッセージ識別子、バリデータＶ、および暗号化された結果Ｅ（暗号化されたセグメントＥ１、．．．、ＥＮを含む）を導出できるようにする情報（もしあれば、例えばノンスＮ）からなる。鍵連鎖および暗号文ハッシュ連鎖を組み合わせることによって、このタイプの暗号化プロセスは、暗号化装置に対する差分電力解析および関連する攻撃を容易にする形での、暗号化装置にある秘密鍵の再使用を回避しながら、メッセージ認証を備えた暗号的に強い出力を生成することができる。暗号化結果は、復号化装置に対する差分電力解析および関連する攻撃を容易にするような形で秘密鍵を再使用することなく、復号化装置が復号化を実行できるようにする形態で生成される。鍵ツリープロセスは、ＫＭＥＳＳＡＧＥおよびバリデータＶの形成において鍵の再使用を制限し、一方で暗号文ハッシュ連鎖法は、データ暗号化において用いられる鍵の使用を制限する。
【００４９】
次のセクションは、復号化装置によって出力データをどのように連続的に復号化できるかを説明する。
【００５０】
復号化
図４は、図１および３の例示的な暗号化プロセスに対応する例示的な復号化プロセスを示す。前に説明したように、これには、復号化装置および暗号化装置の両方が、同じメッセージ識別子（例えば、各装置が、Ｈ１を計算できるノンスＮを知っているからである）、ベース秘密暗号値ＫＲＯＯＴ、暗号関数ｆ（）、ｇ（）およびｈ（）を導出する能力を有することを必要とする。例示的な復号化プロセスは、図２に示すのと同じ鍵導出プロセス（および鍵連鎖）を用いる。
【００５１】
例示的な復号化プロセスは、ステップ４００において、暗号化の推定結果（すなわちメッセージ識別子（例えばノンスＮ）、バリデータＶ、およびセグメントＥ１、．．．、ＥＮを含む暗号化された結果Ｅ）を、（例えば、信頼できないデジタルインターフェースを通じて）取得することで始まる。ステップ４０１において、装置は、次に、受信したノンスＮをハッシュすることによって値Ｈ１を計算する。ノンスが不正確に受信された場合を除いて、導出されたＨ１は、暗号化プロセスで用いられるＨ１と等しいことに留意されたい。ステップ４０２において、復号化装置は、セグメントＥ１（および以前に暗号化中に用いられた場合には、Ｈ２の導出に組み込まれたメッセージに関する他の情報）をハッシュすることによって、値Ｈ２を計算する。ステップ４０３において、装置は、ＫＳＴＡＲＴ＝ＫＲＯＯＴおよびＰＡＴＨ＝Ｈ１と共に、図２で説明した耐漏洩性で鍵ツリーベースの鍵導出プロセスを用いて、メッセージ鍵ＫＭＥＳＳＡＧＥを計算する。ステップ４０４において、装置は、暗号化装置と同じ耐漏洩性で鍵ツリーベースの鍵導出プロセス（例えば、鍵ＫＳＴＡＲＴ＝ＫＭＥＳＳＡＧＥおよびＰＡＴＨ＝Ｈ２を用いる、図２におけるプロセス）を用いることによって、予想バリデータＶ’を計算する。ステップ４０５において、計算値Ｖ’は、受信されたバリデータＶと比較される。予想バリデータＶ’が、提供されたバリデータＶと一致しない場合に、プロセスはエラーで終了する（ステップ４０６）。なぜなら、提供されたデータが、破損されたか、故意に変更されたか、または他のあるエラーが発生した可能性があるからである。
【００５２】
ステップ４０５におけるチェックが成功した場合に、プロセスはステップ４０７に進み、そこでカウンタｉが、値１に初期化され、鍵レジスタＫが、ｇ（ＫＭＥＳＳＡＧＥ）を計算した結果に初期化されるが、このｇ（ＫＭＥＳＳＡＧＥ）は、第１の暗号化されたセグメントＥ１を復号化するための鍵（すなわち、図３において３０２とラベル付けされたＫ１の値）である。またステップ４０７において、変数Ｈが、Ｈ２に初期化される。次に、後続の演算は、図４に示すようなループにおいて実行される。第１に、復号化される次の暗号文セグメントのハッシュ（すなわちｈ（Ｅｉ））が計算されて、予想ハッシュＨと比較される（ステップ４０８）。比較が失敗した場合、暗号化されたセグメントは変更されたのであり、したがってプロセスはエラーで終了し（４０９）、さらなる復号化は実行されない。ステップ４０８において比較が成功した場合に、セグメントＥｉは、ステップ４１０において、鍵Ｋと共に復号化関数ＤＥＣ（）を用いて復号化され、復号化されたセグメントを生成するが、この復号化されたセグメントは、平文Ｄｉ、すなわち次の暗号文セグメントの推定ハッシュが後に続く平文Ｄｉを含むと解釈される。Ｈは、この推定ハッシュ値に設定される。次に、ステップ４１１において、全てのＬセグメントが復号化されたかどうか（すなわち、カウンタｉがＬと等しいかどうか）を確かめるために、チェックが実行される。カウンタがまだＬに達していない場合に、ステップ４１２において、カウンタｉは増分され、レジスタＫは、Ｋ＝ｇ（Ｋ）を計算することによって、次のセグメント用の復号化鍵に更新され、プロセスは、ステップ４０８から先へ繰り返される。ｉがＬに達したとステップ４１１が判定した場合に、Ｈが、予想パッドデータ（例えばＤ１．．．ＤＬのハッシュ）と等しいかどうか確かめるために、ステップ４１３においてチェックが実行される。このチェックが失敗した場合に、復号化は、失敗状態で終了する（４１４）。チェックが成功した場合に、復号化プロセスは成功であり、回復された復号化出力Ｄ＝Ｄ１、．．．、ＤＬが、ステップ４１５で返される。
【００５３】
この実施形態において、復号化プロセスは、ストリーミング法で行うことができ（すなわち、復号化装置は、最初にＮ、ＶおよびＥ１を取得し、次に、残るセグメントＥ２、．．．、ＥＬを１つずつ受信することが可能である）、かつやはり上記で概説したステップを実行することができる。例えば、ストリーミング演算は、復号化装置が全メッセージを保持するための十分なメモリを欠く場合か、または復号化されたデータの最初の部分が、全てのデータが受信され復号化されてしまう前に利用可能でなければならない場合に、有用である。
【００５４】
第２の例示的な実施形態
このセクションは、検証可能な耐漏洩性暗号化および復号化用の一般的技術の第２の例示的な実施形態を説明する。暗号文ハッシュ連鎖を用いた第１の例示的な実施形態とは対照的に、第２の例示的な実施形態は、平文ハッシュ連鎖を用いる。しかしながら、両方の場合において、鍵の再使用は、差分電力解析および関連する攻撃を防ぐために、暗号化装置および復号化装置の両方において管理される。
【００５５】
暗号化
暗号化装置による暗号化の第２の例示的な実施形態を図５に示すが、図５は、簡潔にするために、プロセス図および状態図の組み合わせとして示されている。暗号化装置は、暗号化すべきメッセージＤと、カウンタ、ランダムに生成された値、平文ハッシュ等であってもよいメッセージ識別子Ｎと、を生成または取得する。
【００５６】
入力メッセージＤは、セグメントＤ１、．．．、ＤＬ（Ｌ＝１が可能であるが）のシーケンスに分割され、これらのセグメントは、以下のように平文セグメントＢ１、．．．、ＢＬを生成するために用いられる。第１に、セグメントＢ１（５０１）が、メッセージセグメントＤ１を、任意の所望のメッセージデータ（長さＬ、メッセージ識別子Ｎ、トランザクション識別子またはカウンタなどの要素を含むことが可能であり、Ｘとして示した）のハッシュと連結することによって形成される。次に、Ｂ２（５０２）が、Ｄ２をｈ（Ｂ１）（すなわちＢ１のハッシュ）と連結することによって形成される。次に、各後続のＢｉ〜ＢＬ−１が、ＤｉをＢｉ−１のハッシュと連結することによって形成される。最後に、最終平文セグメントＢＬ（５０４）が、ＤＬをｈ（ＢＬ−１）と連結することによって形成される。
【００５７】
プロセスの次のステップ（５０５−５０８）は、第１の例示的な実施形態と同様に、各暗号化鍵がメッセージ鍵に直接または間接に基づくように、鍵連鎖プロセスを用いて、平文セグメントのそれぞれのための暗号化鍵を生成する。第２の例示的な実施形態において、第１の暗号化鍵Ｋ１は、ＫＳＴＡＲＴ＝ＫＲＯＯＴおよびＰＡＴＨ＝ｈ（Ｎ）と共に、図２で説明するような耐漏洩性で鍵ツリーベースの鍵導出プロセスを用いて、ｈ（Ｎ）および次にＫ１＝ＫＭＥＳＳＡＧＥ＝ＫＲＯＯＴ、ｈ（Ｎ）を計算することによって導出された（５０５）メッセージ鍵ＫＭＥＳＳＡＧＥの値に単に設定される。ｉ＞１用の鍵Ｋｉは、ｇ（Ｋｉ−１）、ここではｇ（）として計算される。したがって、第２の鍵Ｋ２は、ｇ（Ｋ１）を計算した結果である（５０６）。このプロセスは、Ｌ−１番目の鍵（ＫＬ−１）が、ｇ（ＫＬ−２）として計算されるように繰り返され（５０７）、最終セグメント鍵ＫＬは、ｇ（ＫＬ−１）として計算される（５０８）。したがって、全ての鍵Ｋｉは、メッセージ鍵ＫＭＥＳＳＡＧＥに基づいている（例えば、メッセージ鍵ＫＭＥＳＳＡＧＥに等しいか、またはそれを用いて導出される）。
【００５８】
プロセスにおける次のステップは、対応する鍵Ｋ１、．．．、ＫＬを用いて平文セグメントＢ１、．．．、ＢＬを暗号化し、暗号化されたセグメントＥ１、．．．、ＥＬを生成することである。例えば、暗号化されたセグメントＥ１は、Ｋ１でＢ１を暗号化することによって生成され（５０９）、Ｅ２は、Ｋ２でＢ２を暗号化することによって生成される（５１０）等であり、ＥＬ−１は、ＫＬ−１でＢＬ−１を暗号化することによって生成され（５１１）、ＥＬは、ＫＬでＢＬを暗号化することによって生成される（５１２）。暗号化された結果Ｅは、セグメントＥ１、．．．、ＥＬからなる。
【００５９】
プロセスにおける次のステップは、暗号化用のバリデータＶの計算である（５１３）。最初に、ハッシュ関数ｈ（）が、ｈ（Ｎ｜｜Ｅ１｜｜．．．｜｜ＥＬ）｜｜ｈ（ＢＬ）を計算するために用いられ、ここで「｜｜」は連結を示す。次に、Ｚ＝ｈ（Ｎ｜｜Ｅ１｜｜．．．｜｜ＥＬ｜｜ｈ（ＢＬ））が計算され、次にＫＲＯＯＴ、Ｚが、（例えば、図２に示すように、ＫＳＴＡＲＴ＝ＫＲＯＯＴおよびＰＡＴＨ＝Ｚと共に）耐漏洩性で鍵ツリーベースの鍵導出プロセスを用いて計算される。次に、バリデータＶは、鍵ツリー結果のハッシュ（すなわちｈ（ＫＲＯＯＴ、Ｚ））として計算される。最後に、Ｎ、ｈ（ＢＬ）、ＥおよびバリデータＶを含む暗号化プロセスの結果が提供される（５１４）。
【００６０】
上記の暗号化プロセスは、入力データＤがストリーミングによって到着するか、または他の理由でＤが（例えばメモリ制限ゆえに）突然処理され得なくなるシステムにおいて用いることができる。この場合に、暗号化装置は、Ｎ、ｈ（Ｘ）およびＫ１を取得することによって開始する。さらに、実行中のハッシュ計算が、Ｎで初期化される。
１．  Ｎを生成または取得する
２．  実行中のハッシュ計算を初期化する
３．  Ｈ＝ｈ（Ｘ）とする
４．  Ｋ＝ＫＲＯＯＴ、ｈ（Ｎ）とする
５．  実行中のハッシュ計算をＮで更新する
６．  ｉ＝１とする
７．  入力データＤｉを受信する（例えば、ストリーミングで）
８．  Ｂｉ＝ＤｉおよびＨの連結を生成する
９．  Ｈ＝ｈ（Ｂｉ）とする
１０．  Ｅｉ＝ＥＮＣ（Ｋ、Ｄｉ）を生成する
１１．  実行中のハッシュ計算をＥｉで更新する
１２．  Ｅｉを出力する
１３．  ｉを増分する
１４．  より多くの入力データがある場合に、ステップ７に進む
１５．  実行中のハッシュ計算をＨで更新する
１６．  実行中のハッシュ計算を完結させてＺに記憶する
１７．  Ｖ＝ｈ（ＫＲＯＯＴ、Ｚ）を計算する
１８．  Ｈ（ｈ（ＢＬ）、Ｎ、Ｖと等しいを出力する）
【００６１】
復号化
復号化プロセスを図６に示す。ステップ６００において、復号化装置は、（典型的には信頼できないインターフェースから）暗号化プロセスの推定結果、すなわちＥ、ｈ（ＢＬ）、ノンスＮ、バリデータＶを受信する。復号化装置は、ＥをＥ１、．．．、ＥＬに分割し、カウンタｉを１に初期化し、かつレジスタＨを、受信値ハッシュｈ（ＢＬ）に設定する。メッセージの長さＬもまた、受信または決定される（例えば、１キロバイトのセグメントサイズが、１キロバイト未満でもよい最終セグメント以外の全てのセグメント用に用いられる場合に、Ｌは、切り上げたキロバイトにおけるメッセージ長さである）。ステップ６０５において、復号化装置は、Ｚ＝ｈ（Ｎ｜｜Ｅ１｜｜．．．｜｜ＥＬ｜｜Ｈ）を計算し、ここで「｜｜」は、連結を示す。ステップ（６１０）において、復号化装置は、図２に示す耐漏洩性で鍵ツリーベースの鍵導出プロセスを用いてＫＲＯＯＴ、Ｚの値を計算し（ルートはＫＳＴＡＲＴ＝ＫＲＯＯＴであり、ＰＡＴＨ＝Ｚである）、次に、結果をハッシュしてｈ（ＫＲＯＯＴ、Ｚ）を生成する。ステップ６２０において、復号化装置は、計算されたｈ（ＫＲＯＯＴ、Ｚ）を、受信されたバリデータＶと比較する。結果がＶと等しくない場合には、データ破損があり、プロセスは、どんな復号化も実行せずに、ステップ６１１で停止される。チェックが成功した場合に、ステップ６２０において、復号化装置は、ｈ（Ｎ）を計算し、次に、ＫＳＴＡＲＴ＝ＫＲＯＯＴおよびＰＡＴＨ＝ｈ（Ｎ）と共に、図２に示す耐漏洩性で鍵ツリーベースの鍵導出プロセスを用いてＫＲＯＯＴ、ｈ（Ｎ）を計算した結果で鍵レジスタＫを初期化し、カウンタｉを１に設定する。
【００６２】
次に、後続の演算は、ループにおいて実行される。ステップ６３０において、セグメントＥｉは、鍵レジスタＫにおける鍵で復号化され、データセグメントＤｉおよびハッシュ値からなる平文セグメントＢｉを生成する。ステップ６４０において、復号化された現在のセグメントからのハッシュがチェックされる。第１のセグメント（すなわちｉ＝１）に関して、ハッシュは、ｈ（Ｘ）と比較されるが、ここでＸは、暗号化中のＸと同じフィールドからなる。第１のセグメント後のセグメント（すなわちｉ＞１）に関して、Ｂｉからのハッシュが、先行セグメントのハッシュ（すなわちｈ（Ｂｉ−１））と比較される。比較が失敗した場合に、復号化プロセスは、ステップ６４１で働かなくなる。そうでなければ、ステップ６５０において、Ｂｉのメッセージ部分（すなわちＤｉ）は、（例えばＲＡＭにおける）出力バッファに追加され、鍵レジスタＫは、ｇ（Ｋ）を計算して次に結果をＫに記憶することによって、次のセグメント鍵に進められる。カウンタｉもまた、１だけ増分される。ステップ６６０において、ｉの値は、Ｌと比較され、ｉの値がＬを超過しない場合に、復号化プロセスは、ステップ６３０にループバックする。そうでなければ、復号化プロセスは完了し、ステップ６７０において、最後の平文セグメントのハッシュ（すなわちｈ（ＢＬ））が、受信されたハッシュＨと比較される。ステップ６７０における比較が失敗した場合には（すなわち、値が等しくない）、エラーが発生したのであり、復号化は失敗する（ステップ６７１）。そうでなければ、結果データＤ１、．．．、ＤＬが、ステップ６８０において出力される。
【００６３】
この実施形態において、平文のハッシュは連鎖され、平文セグメントＢｉには、平文Ｂｉ−１のハッシュが含まれる。この連鎖は、耐漏洩性のために厳密には必要でないが、復号化プロセス中に発生するどんな失敗も検出できるという追加的な特性を提供する。なぜなら、平文が、暗号化されたものと同じであると検証されるからである。したがって、この実施形態は、復号化プロセスにおける破損の可能性が存在する環境で用いるのに有利である。
【００６４】
システム、用途および変形
この時点まで、本特許は、耐漏洩性暗号化および復号化用の一般的な技術を、その技術のいくつかの例示的な実施形態と共に説明した。このセクションは、前述ものを利用できるいくつかの例示的なシステムおよび／または用途と同様に、上記の例示的な実施形態における態様の追加的な変形を説明する。
【００６５】
安全なファームウェアローディング
図７は、例えば、いわゆるシステムオンチップ（ＳｏＣ）の一部として、機密ファームウェアを中央処理装置（ＣＰＵ）上に安全にロードするための検証可能な耐漏洩性暗号法の適用を示す。便宜上、文脈に依存して、参照数字は、プロセスにおけるステップ、および／またはかかるプロセスステップによって用いられる（もしくは生成される）量を指す場合がある。この実施形態において、ＳｏＣは、ＣＰＵ（７０３）および様々なタイプのメモリを含む単一の集積回路（７００）からなる。メモリには、限定するわけではないが、コードが実行可能となる起点のランダムアクセスメモリ（ＲＡＭ）（７０１）と、信頼できるブートストラップコードを含む読み出し専用メモリ（ＲＯＭ）（７０４）と、共有暗号秘密ＫＲＯＯＴを保持する秘密状態記憶メモリ（７０２）と、を含んでもよい。鍵記憶メモリは、限定するわけではないが、ヒューズ／アンチヒューズ、バッテリバックアップＲＡＭ、およびＥＥＰＲＯＭなどの様々な技術を用いて実現することが可能である。ＳｏＣは、（例えば、潜在的には敵対者の管理および／または観察下にある）信頼できない電源から電力を受信する可能性がある外部電源入力部（７０７）を有してもよい。また、外部から供給されるクロック（７０８）を受信してもよく（かつＰＬＬと共に用いて追加クロックを形成してもよい）。ＳｏＣは、データ暗号化および復号化用のＡＥＳエンジンと、限定するわけではないがＳＨＡ−１もしくはＳＨＡ−２５６またはＡＥＳベースのハッシュ関数エンジンなどのハッシュ関数エンジンと、図２に基づいた耐漏洩性で鍵ツリーベースの鍵導出プロセスのインプリメンテーションとを、ハッシュ関数および／またはＡＥＳ関数またはそれらの変形を用いて実現された関数ｆ０（）、．．．、ｆｂ−１（）と共に備えた暗号ハードウェアコンポーネント（７０５）を有する。他の実施形態において、暗号ハードウェアコンポーネント（７０５）またはそのあるサブセットの機能全体が、ソフトウェアによって（例えばＣＰＵによって）実行可能であることが、当業者には明白であるに違いない。
【００６６】
ＲＯＭにおける信頼されたブートストラップコードからのブートストラップに基づいて、ＳｏＣは、この実施形態ではフラッシュメモリ（７０９）である外部の信頼できない記憶装置から、信頼できないインターフェース（７０６）を通じて、自身の機密ソフトウェア／データをロードする。開示または無許可変更から機密ソフトウェア／データを保護するために、それらは、共有秘密暗号値ＫＲＯＯＴを用いる装置メーカーまたは他のコード発行者によって、（例えば、図１または５に示すような）検証可能な耐漏洩性技術を用いて暗号化される。暗号化結果は、フラッシュメモリ（７０９）に記憶される。ＳｏＣは、最初に、暗号化されたコード／データを、フラッシュメモリ（７０９）から自身の内部ＲＡＭ（７０１）にロードする。次に、ＳｏＣは、（例えば図４に示すように）耐漏洩性復号化を実行するが、この場合に、プロセスは、ＲＯＭ（７０４）における信頼できるブートストラップコード記憶、暗号ハードウェアコンポーネント（７０５）において実行され、かつ鍵ストア（７０２）からの共有秘密鍵ＫＲＯＯＴを用いて実行される。成功の場合に、このプロセスは、検証され復号化された機密コード／データイメージをＲＡＭメモリ（７０１）内に生成し、その後、この機密コード／データイメージは、実行可能である。復号化プロセスが失敗した場合に、ＲＡＭにおける暗号化されたコード／データ（およびあらゆる部分的に復号化されたコード／データ）は廃棄され、演算は、必要な場合に最初から再開される。
【００６７】
この実施形態に対するオプションの拡張において、セキュリティは、ソフトウェアがロードされることになるヒューズ、バッテリバックアップメモリ、または装置における他のローカル記憶装置に最小受理可能ソフトウェアバージョン番号を記憶することよって補足される。装置にロードされる全てのソフトウェアは、バージョン番号を保持することになり、装置は、最小値より大きいバージョン番号を備えたソフトウェアだけを受理することになる。さらに、いくつかのソフトウェアバージョンは、特に、最小受理可能ソフトウェアバージョン番号を更新するようにＳｏＣに命じてもよく、それによって、受理できないと見なされた先行バージョンへの、ソフトウェアの故意のロールバックを防いでもよい。前述のアンチロールバック法は、検証可能な耐漏洩性演算と無関係に（すなわち、その付加物として）実現することが可能である。代替として、アンチロールバック法は、検証可能な耐漏洩性演算において用いられるメッセージ識別子、バリデータ、または他のセキュリティ保護された量の一部として実現することが可能である。
【００６８】
当業者は、ＳｏＣの適用が、本明細書で示す特定のアーキテクチャに限定されないこと、ならびに図７に示す実施形態とは異なる内部アーキテクチャおよび／またはコンポーネントを備えたＳｏＣもしくは他の装置が保護可能であることを、容易に理解されよう。
【００６９】
例えば、図８は、セキュアプロセッサアーキテクチャ（８００）への、検証可能な耐漏洩性暗号法の適用を示す。便宜上、文脈に依存して、参照数字は、プロセスにおけるステップを、かつ／またはかかるプロセスステップによって用いられる（または生成される）量を指す。この設定において、装置には、ＣＰＵと、ベース秘密暗号鍵ＫＲＯＯＴを含む、内部秘密状態を保持する鍵ストアと、が含まれる。限定するわけではないがヒューズ（８０１）などの不揮発性記憶装置を、内部秘密状態を記憶するために用いてもよい。暗号ハードウェアサブコンポーネント（８０４）は、オンチップデータ／命令キャッシュ（８０３）から外部の安全でないＲＡＭメモリ（８０６）へ移動する全てのデータを暗号化および／または完全性保護および／または中継保護し、かつ外部の安全でないＲＡＭメモリからフェッチされている全てのデータを復号化および／または完全性チェックおよび／または中継チェックする。さらに、全てのコードは、暗号化および完全性保護された形態で安全でないフラッシュ（８０５）に記憶され、かつオンチップデータ／命令キャッシュ（８０３）に運ばれるときに復号化および完全性チェックされる。検証可能な耐漏洩性暗号法の追加を通してセキュリティを改善することが可能な背景技術における例示的なプロセッサアーキテクチャには、限定するわけではないが、IBMのセキュアブルー設計（"IBM Extends Enhanced Data Security to Consumer Electronics Products"という表題のIBMのプレスリリース（２００６年４月６日付け）で発表）、およびMITのＡＥＧＩＳ設計（AEGIS: Architecture for Tamper-evident and Tamper-resistant Processing, Proceedings of the 17th Annual International Conference on Supercomputing, pages 160 - 171, 2003に記載）が含まれる。
【００７０】
検証可能な耐漏洩性暗号法の使用は、監視攻撃に対する保護を提供することによって既存のプロセッサ設計のセキュリティを実質的に改善する。特に、この実施形態は、ハッシュ関数と、既存のセキュアプロセッサ設計の（例えばＡＥＳ）暗号化能力を再使用する鍵ツリー処理関数と、を含む暗号ハードウェアサブコンポーネント（８０４）を向上させ、かつ第１の例示的な実施形態のステップおよび方法を実行して、安全な耐漏洩性セキュアプロセッサを生成する。特に、キャッシュ（８０３）からＲＡＭメモリ（８０６）に書き込まれるどんなデータも、（例えば図１に示すような）耐漏洩性暗号化プロセスを用いて暗号化され、信頼できないフラッシュ（８０５）および信頼できないＲＡＭから読み出されるどんなコードも、図４に概説する耐漏洩性復号化プロセスを用いて復号化される。データが特定のセグメントに書き込まれると、セグメントに対応するカウンタが増分され、カウンタ値は、セグメント用の暗号化および／または完全性チェック生成プロセスに組み込まれ、それによって、古いデータの置き換えを含む攻撃の検出を可能にする。
【００７１】
ＦＰＧＡビットストリームローディング
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）にロードされる論理には、高度に機密の企業秘密、暗号秘密、および／または開示もしくはコピーから保護する必要のある他の機密情報が含まれることが多い。このロードされる論理またはアップグレードされる論理は、典型的には、限定するわけではないがフラッシュメモリ装置またはＣＰＵまたは他のあるソース（９０７）などの外部ソースから、ビットストリームとしてＦＰＧＡに供給される。いくつかのＦＰＧＡには、構成データを記憶するための不揮発性メモリが含まれ、一方で他のデータは、チップの電源が入れられるたびに再ロードされなければならない。既存のＦＰＧＡは、典型的には、バッテリバックアップメモリに保持されるか、または（オンチップフラッシュ、ＥＥＰＲＯＭ、もしくはヒューズを用いるなど）ローカルに記憶された鍵を用いてビットストリームを復号化する能力を有する。ＦＰＧＡは、供給された、暗号化されたビットストリームを復号化し、その後（または一方で）それを、ＦＰＧＡ内に存在するプログラム可能なスライスにインストールする。差分電力解析攻撃および関連する外部監視攻撃は、ビットストリーム復号化プロセスに対して試みられ、成功した攻撃が、ビットストリーム復号化鍵および／またはビットストリーム自体の開示に帰着し得る場合に、重大なセキュリティリスクを生じる可能性がある。
【００７２】
図９を参照すると、検証可能な耐漏洩性暗号法を用いて、ＦＰＧＡにおいて安全なビットストリーム復号化能力を生成することができる。復号化に先立って、機密ビットストリームは、（例えば第１の例示的な実施形態で説明するような）耐漏洩性暗号化プロセスを用いて、（ソフトウェア、ハードウェアまたはそのある組み合わせを用いる）外部装置によって暗号化され、暗号化されたビットストリームを生成する。暗号化されたビットストリームは、外部フラッシュまたはハードドライブなどの信頼できないメモリに配置するか（９０７）、またはＣＰＵなどの信頼できないソースから検索してもよい。
【００７３】
ＦＰＧＡ内において、耐漏洩性復号化用の暗号秘密ＫＲＯＯＴは、鍵ストア（９０２）、すなわち、内部秘密状態を記憶し、かつ限定するわけではないが、ヒューズ、バッテリバックアップＲＡＭ（９０２、９０３）、ＥＥＰＲＯＭ、フラッシュなどの技術を用いて実現可能な鍵ストア（９０２）に維持される。ＦＰＧＡ（９００）は、暗号化されたビットストリームを、インターフェース（９０６）を通じて受信する。このビットストリームは、例えば、第１の実施形態または第２の例示的な実施形態（図１および５に対応する）のどちらかを用いて、暗号化された可能性がある。
【００７４】
図１の実施形態が、暗号化用に用いられた場合に、ＦＰＧＡは、最初に、ノンスＮ、バリデータＶ、長さＬ、および最初のＥ１を受信する。Ｅ１は、暗号化されたセグメントバッファ（９０５）に記憶される。上記の耐漏洩性復号化プロセス（例えば、図４を参照）を用いて、Ｅ１のハッシュが計算され、バリデータＶは、ＫＲＯＯＴ、Ｌおよびハッシュで検証され、（成功した場合に）ＫＭＥＳＳＡＧＥを、または（プロセスが停止した場合に）致命的エラーをもたらす。成功した場合に、ＦＰＧＡは、セグメント復号化処理コンポーネント（９０４）を用い、Ｅ１に対して耐漏洩性復号化プロセスを実行する。Ｅ１の復号化は、セグメントＥ２のハッシュを生成し、このハッシュは、ロードされ、検証され、復号化される。プロセスは、最終セグメントが復号化および検証されるまで、１つずつセグメントを続行する。エラーが生じた場合に、プロセスは停止し、全ての部分的なＦＰＧＡ復号化データは、消去される。（失敗すると、プロセスは、最初から再び開始することができる。）１つまたは複数の状態レジスタ９１０が、ビットストリームローディングプロセスの状態を追跡するために用いられる（例えば、プロセスが、進行中か、失敗したか、または完了したかどうかを追跡する）。状態はまた、診断目的および外部コンポーネントによる使用のために、エクスポートすることができる。ひとたび全てのセグメントが成功裡にロードされると、ＦＰＧＡは、今や構成されており、用いることができる（例えば、ＦＰＧＡは、今や、ロードされたビットストリームイメージにＩ／Ｏ、クロック等を適用可能にすることができる）。ＦＰＧＡ演算は、（例えば、不完全なＦＰＧＡイメージに関する情報の暴露を回避するために、かつ不正確なＦＰＧＡ構成から発生する全体的回路の予測不能の挙動を回避するために）ビットストリームが完全にロードされるまで阻止することができる。
【００７５】
図５の第２の実施形態が、暗号化用に用いられた場合に、ＦＰＧＡは、最初にＥ、Ｖ、Ｎおよびｈ（ＢＬ）を受信し、Ｅをバッファに記憶する。次に、ＦＰＧＡのセグメント復号化処理コンポーネント９０４は、図６に示す方法を用いて、供給された、暗号化されたセグメントを検証および復号化する。状態レジスタ９１０は、ビットストリームローディングの状態、検証、および復号化プロセスを追跡するために用いられ、どんな重大なエラーも、プロセスの停止およびあらゆる部分的に復号化されたデータの消去に帰着する。
【００７６】
ネットワーク通信および他のパケットベースの用途
図１０は、外部監視攻撃からのネットワーク通信の保護に、検証可能な耐漏洩性暗号法を適用することを示す。この実施形態において、装置Ａ（１０００）、装置Ｂ（１０３０）および装置Ｃ、Ｄ、Ｅなど（１０４０）の多数のネットワーク装置が、ネットワーク（１０２０）を通じて互いに通信する。これらの通信のいくつかまたは全ては、機密情報を含んで、データを暗号化および認証することが有用になる可能性がある。さらに、これらの装置のいくつか（この実施形態では装置Ａなど）は、それらの暗号計算および鍵を外部監視攻撃から保護するように要求される。
【００７７】
装置Ａは、それが通信する必要のある他の装置との共有暗号ルート鍵のテーブルを記憶する鍵ストア（１００１）を有する。これらの鍵は、前もって記憶されている場合もあり、または（例えば公開鍵暗号法を用いて）取り決めてもよい。公開鍵暗号法を用いて鍵を取り決めるための方法は、背景技術において周知であり、ＳＳＬおよびＩＰＳＥＣなどのプロトコルにおいて利用される。この実施形態は、これらまたは他のプロトコルに容易に統合することが可能である。
【００７８】
暗号化される発信パケットまたはデータセグメントは、アプリケーション、オペレーティングシステム、ドライバ、または他のコンポーネント（１００２）から生じ、平文パケットバッファ（１００３）に入る。次に、各パケットは、セグメント暗号化／復号化処理コンポーネント（１００４）を用いて処理されるが、この場合に、各パケットは、（例えば図１に示すような）検証可能な耐漏洩性暗号化方法を用いて暗号化される。この暗号化用のルート鍵は、装置Ａと宛先装置との間の共有鍵であり、鍵ストア（１００１）から取得される。この処理のために、メッセージ識別子ノンスＮは、カウンタを含む任意の（好ましくは）一意の値であってもよい。例えば、ノンスは、パケット識別子、オーバーフローを防ぐために恐らく追加の最上位ビットを組み込んだＴＣＰシーケンス番号、値のハッシュ、ランダム値等と等しくてもよい。各パケットに対して、耐漏洩性暗号化演算は、暗号化されたセグメントおよびバリデータＶを生成する。ノンスは、送信してもよく、または（例えば、前に受信されたパケット数に基づいて）暗黙的であってもよい。暗号化されたセグメント、Ｖ、および任意の他の要求されたデータは、発信パケットに組み立てられ、かつネットワークインターフェースコンポーネント（１００６）へ、次に適切な宛先装置へのルーティング用にネットワーク（１０２０）へ移動される。
【００７９】
暗号化された着信パケットに対して、送信装置が上記のように暗号化を実行したと仮定される。これらのパケットは、ネットワークインターフェースコンポーネント（１００６）によってネットワーク（１０２０）から受信され、次に、暗号文パケットバッファ（１００５）へ移動される。次に、各パケットは、セグメント暗号化／復号化処理コンポーネント（１００４）によって処理されるが、この場合に（例えば図４に示すような）耐漏洩性復号化プロセスが実行される。この復号化プロセスに関して、（ｉ）受信および送信装置間の共有鍵（例えば、ＫＲＯＯＴまたはＫＲＯＯＴを導出するために用いられる先駆体）は、鍵ストア（１００１）から取得され、（ｉｉ）ノンスＮは、パケットから回復されるか、さもなければ決定され、（ｉｉｉ）バリデータは、Ｎおよび暗号化されたパケットに対して検証され、（ｉｖ）バリデータが正確な場合に、パケットデータは復号化される。装置Ａと送信装置との間の共有暗号秘密は、ＫＲＯＯＴとして用いてもよい。復号化または検証が失敗した場合に、パケットは廃棄される。そうでなければ、復号化の成功に基づいて、復号化結果は、アプリケーション、オペレーティングシステム、ドライバなどに供給することができる。
【００８０】
このプロセスは、図１１および１２で概説される。図１１は、検証可能なパケットレベルの耐漏洩性暗号化プロセスを示し、図１２は、対応する復号化プロセスを示す。検証可能なパケットレベルの耐漏洩性暗号化プロセスは、以下の通りである。ソースおよび宛先がベース暗号値ＫＲＯＯＴを共有する入力パケットデータＤ（１１００）が与えられたとすると、メッセージ識別子Ｎが、ステップ１１０１で生成される（例えば、パケットＤに存在するランダムソースおよび／もしくは情報、ならびに／または通信プロトコルに関連するシーケンス番号など、あるパケット識別子を用いて）。ＴＣＰ／ＩＰ通信に関して、Ｎは、セッション識別子、（オプションとして、ロールオーバーを防ぐために付加された追加の最上位ビットを備えた）シーケンス番号、ソースポート、宛先ポート、および／または他の値から構成することができる。次に、ステップ１１０２において、Ｎのハッシュが計算される。（オプションとして、このステップは省略してもよく、ＫＭＥＳＳＡＧＥを導出する際にｈ（Ｎ）の代わりにＮを用いてもよい。）続いて、ステップ１１０３において、メッセージ鍵ＫＭＥＳＳＡＧＥ＝ＫＲＯＯＴ、ｈ（Ｎ）が、ＫＳＴＡＲＴ＝ＫＲＯＯＴおよびＰＡＴＨ＝ｈ（Ｎ）と共に、図２に示す耐漏洩性で鍵ツリーベースの鍵導出プロセスを用いて計算される。入力パケットデータＤは、鍵ＫＭＥＳＳＡＧＥで暗号化され、暗号化結果Ｅ（１１０４）を生成する。
【００８１】
次に、Ｅのハッシュが、（例えば、ＳＨＡ−２５６を用いて）計算される（１１０５）。次に、暗号化用のバリデータＶは、ＫＳＴＡＲＴ＝ＫＭＥＳＳＡＧＥおよびＰＡＴＨ＝ｈ（Ｅ）と共に、図２に概説する耐漏洩性で鍵ツリーベースの鍵導出プロセスを用いて、ＫＭＥＳＳＡＧＥ、ｈ（Ｅ）として計算される（１１０６）。最後に、Ｖ、ＥおよびＮ（またはもしあれば、受信者がＮを回復できるようにするために必要とされる任意の他の情報）を含む出力パケットが形成される（１１０７）。次に、出力データＥは、遠隔装置（インターネットを通じた遠隔コンピュータなど）にパケットで転送される。
【００８２】
オプションの最適化として、暗号化装置が、送信用に多数のパケットをバッファする場合に、暗号化装置は、全てのパケット用に単一のバリデータだけが必要とされるように、多数のパケットを同時に暗号化することができる。例えば、暗号化プロセスは、図３に示すように実行してもよく、この場合に各セグメントＤｉは、パケットである。このようにパケットを組み合わせることによって、送信者および受信者の両方に必要とされる鍵ツリー演算数が低減される。
【００８３】
対応する検証可能なパケットレベルの耐漏洩性復号化プロセスが、図１２に示されている。Ｖ、Ｅ、Ｎ（またはＮを回復するのに十分なデータ、例えばシーケンス番号）および共有暗号秘密ＫＲＯＯＴ（１２００）を含む暗号化されたパケットが与えられたとすると、復号化プロセスは、以下のように進む。第１に、ｈ（Ｎ）の値が計算される（１２０１）（または、暗号化装置がＮを直接用いる場合には、このステップは省略される）。次に、Ｅのハッシュが計算される（１２０２）。次にＫＭＥＳＳＡＧＥ＝ＫＲＯＯＴ、ｈ（Ｎ）が、ステップ１２０３において、ＫＳＴＡＲＴ＝ＫＲＯＯＴおよびＰＡＴＨ＝ｈ（Ｎ）と共に、図２に図解する耐漏洩性で鍵ツリーベースのアプローチを用いて計算される。次にＶ’＝ＫＭＥＳＳＡＧＥ、ｈ（Ｅ）が、ＫＳＴＡＲＴ＝ＫＭＥＳＳＡＧＥおよびＰＡＴＨ＝ｈ（Ｅ）と共に、図２に概説する耐漏洩性鍵ツリープロセスを用いて計算される（１２０４）。続いて、復号化装置は、Ｖ’＝Ｖ（１２０５）かどうかをチェックする。それらが等しくない場合に、処理は、このパケットに対して停止され、パケットは廃棄される（１２０６）。チェックが成功した場合に、Ｅは、（例えば、図１４に示すＤＥＣ（）プロセスを用いて）ＫＭＥＳＳＡＧＥで復号化され、Ｄ、すなわち平文パケットを生成する（１２０７）。
【００８４】
スマートカード用途
検証可能な耐漏洩性暗号化および復号化は、スマートカードにおいて実施することができる（例えば、スマートカードが、差分電力解析および関連する外部監視攻撃から安全な方法で暗号化および／または復号化を実行するように要求されるプロトコルに関連して）。かかるシステムおよびプロトコルの例には、限定するわけではないが、有料テレビ放送信号、支払い（オフラインの支払いを含む）、本人確認／ネットワークログイン、携帯電話ＳＩＭカード、および交通パスの復号化用の鍵（制御語）の導出が含まれる。本特許において開示する例示的な暗号技術は、スマートカード内の秘密鍵が、かかるプロトコルを実行する間に外部監視攻撃から保護されることを保証するために用いることができる。スマートカード（または他のセキュリティチップ）はまた、ＫＳＴＡＲＴが決してスマートカードを離れる必要がないようにスマートカードが図３の鍵ツリーベースの鍵導出プロセスを実行する場合など、より大きなシステムで利用される耐漏洩性暗号化または復号化プロセスの一部または全てを実行するように用いることができる。
【００８５】
相互認証用途
多くの用途において、２つ以上の装置が、互いを認証し、かつ／またはそれらの間で機密情報を交換することを必要とする。かかるプロトコルの用途には、限定するわけではないが、（ｉ）プリンタおよびカートリッジが本物であり偽造ではないことを保証するための、それらの間の認証と、（ｉｉ）コンポーネントが本物であることを保証するための（例えば、盗まれたビデオ復号化鍵の注入を防ぐための）、セットトップボックスとスマートカードとの間の認証と、（ｉｉｉ）ガレージドアと開く人との間の認証と、（ｉｖ）（例えば、ドアを解錠するか、エンジンを始動させる前に）鍵を認証するキーレスエントリシステム（車両で使用可能なものなど）と、（ｖ）盗まれた装置または改竄された装置が作動されるのを防ぐための、頻繁に盗まれる品物（カーラジオ、ＧＰＳ装置、携帯電話など）によって実行される認証プロトコルと、（ｖｉ）入場を許可する前に鍵／トークンを認証する、セキュアな建物で見られるシステムなどのエントリシステムと、が含まれる。これらの用途において、装置間のチャレンジレスポンスプロトコルが、相互認証のため、および機密情報の交換用の共有秘密鍵を設定するための両方に伝統的に用いられてきた。ＤＰＡを阻止しながらこれらの認証を実行する単純なプロトコルが、本特許の方法を用いて、どんな必要な暗号化または復号化演算も実行することによって、構成可能である。例えば、装置は、有効なバリデータを供給しかつ／またはメッセージを復号化するその能力を介し、本特許に開示される技術を用いて、その信憑性を実証することができる。
【００８６】
イントラセグメント鍵変更を用いたセグメント暗号化および復号化
このセクションは、例示的な実施形態（例えば、図３のステップ３２０、図４のステップ４１０、図５のステップ５０９、図６のステップ６３０、図１１のステップ１１０４、および図１２のステップ１２０７に示すような）を実行する際に、従来の暗号化プロセス（ＥＣＢまたはＣＢＣモードにおけるＡＥＳなど）の代わりに使用できるＥＮＣ（）およびＤＥＣ（）演算の例示的な変形を説明する。図１３および１４にそれぞれ示すＥＮＣ（）およびＤＥＣ（）の変形において、暗号鍵は、さらに大きなセキュリティ用に頻繁に変更される。具体的には、追加の暗号鍵更新が、ＥｉへのデータセグメントＤｉの暗号化内で行われる（逆も同様である）。したがって、これらの変形をイントラセグメント鍵変更の実行と呼ぶ。
【００８７】
ＥＮＣ（）およびＤＥＣ（）への変更以外、第１および第２の例示的な実施形態における演算の残りは、前述のように実行することができる。例えば、限定するわけではないが、初期メッセージ鍵ＫＭＥＳＳＡＧＥ、バリデータＶなどを含む演算は、変更する必要がない。
【００８８】
図１３は、データセグメントを暗号化するためのＥＮＣ（）演算の例示的な実施形態を示す。図１４は、ＤＥＣ（）演算の対応する例示的な実施形態を示す。この実施形態において、これらの演算は、暗号ブロック連鎖（ＣＢＣ）モードにおいてブロック暗号ＡＥＳを用いて構築されるが、しかし他のブロック暗号か、暗号化／復号化プリミティブか、または暗号化モードが同様に使用可能であることが、当業者には明らかであるに違いない。
【００８９】
セグメントｉ用の暗号化プロセスへの入力は、セグメント鍵Ｋｉ（１３０１）およびデータセグメントＤｉ（１３１０）である。入力データセグメントＤｉ（１３１０）は、サブセグメントＤｉ、１（１３１１）、Ｄｉ、２（１３１２）等に分割される。図１３および１４は、３ＡＥＳブロックのサブセグメントに分割されたデータセグメントＤを示すが、他のサイズもまた用いることができ、もちろんＡＥＳ以外のアルゴリズムもまた用いてもよい。（より小さなサブセグメントは、計算オーバーヘッドを増加させ、一方でより大きなサブセグメントは、鍵がより多くの演算で用いられるようにして、情報が漏洩する可能性を増加させる。）セグメント鍵Ｋｉは、ハッシュ演算ｍ（）で変形され、第１のサブセグメントＤｉ、１用の鍵であるＫｉ、１（１３０２）を生成する。初期化ベクトル（ＩＶ）（１３１４）が用いられることになる場合に、それは、Ｄｉ、１の第１のＡＥＳブロックで排他的論理和をとられる。（ＩＶが用いられることにならない場合に、このＸＯＲステップは、省略してもよい。ＩＶが用いられる場合に、それは、例えば、それをバリデータ計算に組み込むことによってか、またはメッセージ識別子などの検証された値からＩＶを導出することによって、認証することができる。）（Ｄｉ  ＸＯＲ  ＩＶ）第１のビットは、セグメント鍵Ｋｉ、１（１３０２）を用いてＡＥＳ（１３１５）で暗号化され、暗号文サブセグメントＥｉ、１（１３２０）の第１の部分を形成する。この暗号文部分もまた、サブセグメントＤｉ、１（１３１１）の次のビットで排他的論理和をとられ、セグメント鍵Ｋｉ、１（１３０２）を用いて続いて暗号化された別のＡＥＳ入力を生成し、サブセグメントＤｉ、１（１３１１）の次の部分を生成する。類似の暗号ブロック連鎖演算が実行されて、同様に鍵Ｋｉ、１で実行される第３のＡＥＳ暗号化への入力を形成する。３つのＡＥＳ演算の結果が、暗号文サブセグメントＥｉ、１（１３２０）である。第４のＡＥＳ演算が、次のデータサブセグメントＤｉ、２（１３１２）の第１のブロックに対して実行され、新しい鍵、特にＫｉ、２（１３０３）が用いられるが、Ｋｉ、２（１３０３）は、ｍ（）をＫｉ、１（１３０２）に適用することによって導出される。Ｄｉ、１の処理の最後の暗号文は、Ｄｉ、２（１３１２）の第１の部分用のＩＶ（１３１７）になる。暗号化プロセスは、ｓの全てのデータサブセグメントにおける全てのブロックが暗号化されるまで継続し、最終的に、暗号化されたサブセグメントにＥｉ、２（１３２１）、．．．Ｅｉ、ｓ（１３２２）を生成し、かつこの場合に、新しい鍵が、ｍ（）を用いて各サブセグメント用に導出される。最後に、暗号文サブセグメントは、組み立てられて最終暗号文セグメントＥｉ（１３３０）を形成する。
【００９０】
図１４を参照すると、復号化プロセスＤＥＣ（）は、ＥＮＣ（）プロセスの逆である。サブ鍵Ｋｉ、１（１４０２）、Ｋｉ、２（１４０３）等が、上記の暗号化用と同じプロセスを介しｍ（）を用いて、セグメント鍵Ｋｉ（１４０１）から導出される。暗号化されたセグメントＥｉは、サブセグメントに分割され、各サブセグメントには、１つまたは複数のＡＥＳ入力が含まれ、これらの入力は、サブ鍵で復号化される。各復号化演算後に、適切なＩＶ（もしあれば）または先行暗号文が、データで排他的論理和をとられる。最終データが、組み立てられてサブセグメント（１４２０、１４２１、１４３２、等）を形成し、今度は、これらのサブセグメントが、組み立てられてＤｉ（１４３０）を形成する。
【００９１】
上記のＥＮＣ（）およびＤＥＣ（）プロセスは、より大きな漏洩耐性を提供するために迅速な鍵変更を含む例である。ＥＣＢ、ＣＢＣまたはカウンタ（例えばガロアカウンタ）モードにおいて、ストリーム暗号および／またはブロック暗号（ＲＣ４、ＳＥＡＬ、ＡＥＳ、ＤＥＳ、トリプルＤＥＳなど）の適用を含む他のセグメント暗号化および復号化方法を用いることができる。同じ鍵が、セグメントにおける全てのデータに対して適用されるかかる演算に関して、各鍵で実行される演算数を制限するために、暗号化に先立って（例えば、図３に示すように、データをサブセグメントに分割することによって）各セグメントのサイズを制限し、それによって、敵対者が観察可能な、各鍵で実行される演算数を低減することが、有利になり得る。
【００９２】
通信チャネル
本明細書で説明するデータ交換は、広範囲の可能な方法で達成可能である。例えば、限定するわけではないが、従来のバス／インターフェース（Ｉ２Ｃ、ＪＴＡＧ、ＰＣＩ、シリアルＩ／Ｏ（ＵＳＢを含む）、ＰＣＩエクスプレス、イーサネット（登録商標）など）、無線プロトコル（８０２．１１ファミリ、ブルートゥース、携帯電話プロトコル、ＩＳＯ１４４４３など）、およびイントラチップ接続（ＡＰＢ、他のフリップフロップとの直接接続など）は、全て使用可能である。前述のそれぞれに対して、送信装置および受信装置は、（必要に応じて）送信、受信、または送受信できる適切なインターフェース（例えば、前述のタイプのインターフェース）を有することになろう。
【００９３】
復号化に先立つデータ検証の代替形態
これまでに示した例示的な実施形態は、（例えば図２に示すような）耐漏洩性鍵ツリーベースの鍵導出プロセスを用いて、復号化の前に、安全に検証できる暗号文のバリデータを計算した。このプロセスは広範囲の用途によく適しているが、同様の役割を果たすことが可能な値を生成するための他の技術が、ある設定において適切になり得る。例えば、いくつかの実施形態において、暗号化プロセスは、外部監視に耐性であるようには要求されず（しかし復号化プロセスはかかる耐性を必要とする）、かつ／または公開鍵デジタル署名プロセス用のアルゴリズムレベルの対抗策（米国特許第６，３０４，６５８号に説明されているものなど）が存在し得る。これらのシステム用に、デジタル署名演算を用いて、暗号文が未変更であることを保証するために復号化時に検証できる値を構成してもよい。例えば、デジタル署名は、メッセージ識別子および少なくとも１つの暗号化されたセグメントを認証することが可能である。公開鍵デジタル署名アルゴリズムの例には、限定するわけではないが、ＲＳＡ、ＤＳＡ、および楕円曲線ＤＳＡ変形（限定するわけではないがＥＣ−ＤＳＡを含む）が含まれる。デジタル署名の検証は、どんな機密情報も必要とせず、したがって復号化の前に実行してもよい。しかしながら、この柔軟性は、暗号化装置内の公開鍵署名論理、および復号化装置内の公開鍵検証論理を必要とするという代償で得られる。バリデータ（またはバリデータの代わり）を、多数の対称バリデータ、公開鍵署名または他の要素で構成することがまた可能である。
【００９４】
不連続セグメント鍵導出
セグメント鍵（例えば、図３におけるＫｉ、Ｋ２、．．．、ＫＬ）およびサブセグメント鍵（図１３におけるＫｉ、１、Ｋｉ、２等）は、連続して導出される必要はない。例えば、鍵は、階層的ツリーパターンで導出することができ、またはより一般的には各鍵は、任意の先行鍵の関数とすることができるか、もしくは鍵ツリー構成を用いてＫＲＯＯＴから独立して導出することが可能か、または鍵は、他の鍵および鍵ツリー構成のある組み合わせを用いて導出することが可能である。
【００９５】
データ伝送および計算の再順序付け
データ伝送および演算の順序付けは、変更することができる。例えば図１、３および４に示す第１の例示的な実施形態は、最終セグメントＤＬから第１のセグメントＤｉに進む暗号化プロセスを示し、各セグメントＤｉには、ｉ＋１番目のセグメントの暗号化結果Ｅｉ＋１のハッシュが含まれる。別個のバリデータが、第１の暗号化されたセグメントＥ１用に計算される（例えば、ステップ１０６を参照）。このアプローチは、図４に示すような復号化装置には有利になり得る。なぜなら、復号化装置が、復号化前に暗号化結果全体をバッファする必要がないのに対して、暗号化装置は、バッファしなければならないからである。
【００９６】
代替として、暗号化装置は、ＤｉからスタートしてＤＬで終了するセグメントを暗号化することが可能であり、各セグメントＤｉ＋１には、前のセグメントの暗号化Ｅｉのハッシュが含まれる。この例において、セグメントＤｉは、（例えば）それが第１のセグメントであることを示すために、ハッシュ関数の出力長さと等しいサイズの０列によって拡張される。次に、鍵ツリーを用いて生成されたバリデータが、ＰＡＴＨ＝ｈ（ＥＬ）を用いて計算される。この変形に関して、復号化プロセスは、図４と同様であるが、しかし最後の暗号化されたセグメントからスタートして第１のセグメントまで逆方向に進む。したがって、暗号化装置は、もはやデータセグメントをバッファする必要がないが、しかし今や復号化装置は、バッファする必要がある。
【００９７】
ハッシュ用の追加バリデータの置き換え
いくつかの例が、後続の暗号化されたセグメントを認証する、データセグメントにおけるハッシュを示すが、後続のセグメントは、代替として、それら自体の独立したバリデータを備えることができる。例えば、図３は、セグメントＥ２が変更されなかったことを検証するためのハッシュｈ（Ｅ２）を備えた第１のデータセグメント（３１２）を示す。しかしながら、かかるハッシュは、必ずしも必要とされるわけではなく、場合によっては省略が可能である（例えば、代わりに次のセグメントがバリデータを備えている場合に）。これは、暗号化をいくらか単純にするが、しかしより多くのバリデータを計算およびチェックする必要があるので、計算時間を増加させる。ストリーミング用途において、または記憶装置／メモリが制限されている場合に、追加の計算量は、後続のデータを利用可能にし、かつバッファする必要性を回避する利益が与えられれば、正当化し得る。
【００９８】
ハッシングにおける変形
いくつかの図において、図３におけるｈ（）などの単一の演算が、何度も適用され、かつ／または異なる用途に用いられる。これらの全てが同じ関数であることは、一般には必要とされない。例えば、異なるステップが、異なるハッシュ関数を用いることが可能である。
【００９９】
ハッシュ関数の出力は、トランケートするか、他のハッシュ関数出力と組み合わせるか、さもなければ後処理を介して修正してもよい。例えば、ＳＨＡ−２は、２５６ビット出力ハッシュを生成するが、しかしより短いメッセージ識別子（１６０、１２８、８０または６４ビットなど）が望ましい場合もある。関数ｈ（）は、内部でＳＨＡ−２を用いて、その結果の多少のビットだけを返してもよい。
【０１００】
演算順序における変形
例示的な実施形態のいくつかは、データ要素が連結されるかまたは組み合わされる特定の順序を指定する。例えば、図３のステップ３０３−３１２において、データＤｉは、ハッシュｈ（Ｅｉ＋１）と連結される。データセグメントが、ハッシュされる前に順々に連結される他の例には、図３のステップ３０６における図５の要素５０１−５０４および５１３が含まれる。これらの特定の順序付けは、可能な順序付けの単に１つの例であり、代替実施形態において、様々な他のデータ順序付けが利用可能である。
【０１０１】
ツリーベースの鍵導出における変形
演算（ｆｉなど）が可逆的である場合に、開始値としてツリーのトップ以外の値を用いることが可能である。同様に、計算された値をキャッシュすることができる（例えば、メッセージ識別子がカウンタである場合に、初期演算は、通常、あるメッセージから次のメッセージへと変化せず、したがって再計算する必要がない）。
【０１０２】
エラー検出および／または訂正
暗号装置の演算に故障を注入した結果として生成された不正確な出力が、機密データおよび鍵に関する情報を生成する可能性があることは、当該技術分野において周知である。実際的な場合に、暗号演算は、秘密を危険にさらす可能性がある不正確な計算の放出の防止を支援するために、チェックすることができる。例えば、単純かつ効果的な技術は、２度、すなわち、両方（または全て）が同一の結果を生成することを検証するコンパレータを用いて、理想的には２つの（またはより多くの）独立したハードウェアプロセッサおよびインプリメンテーションを用いて、暗号演算を２度実行することである。ユニットによって生成された結果が一致しない場合に、コンパレータは、結果が用いられるか、かつ／または他のエラー状態をトリガすることを防止する。個別の暗号演算（ハッシングステップなど）内において、エラー検出および／またはエラー訂正論理もまた、暗号演算が不正確に実行される状況の防止または検出を支援ために用いることができる。
【０１０３】
本特許で開示する技術は、さらに、暗号化および復号化プロセスに対するあるタイプの故障注入攻撃に対するある固有の耐性を提供し得る。暗号化プロセス中において、鍵ツリーベースの鍵導出プロセス中に注入された限られたまたは部分的な故障は、このプロセス内のエントロピー再分布関数の使用ゆえに、ランダムで予測不能な結果を生むことになろう。特に、破損した中間値は、典型的には、後続のエントロピー再分布関数によって混合され、これは、欠陥のある結果を利用する攻撃を仕かける敵対者の能力を制限する。
【０１０４】
同様に、復号化中に、暗号文またはメッセージ識別子処理内に注入された故障またはエラーは、一般に、バリデータが拒絶されることに帰着する。平文ハッシュ連鎖を伴う第２の実施形態は、さらなる耐性を提供する。なぜなら、平文セグメントが、出力される前に、正確性のために独立して認証されるからである。もちろん、演算のチェックおよび他の周知の故障検出技術をさらに利用してもよい。
【０１０５】
ＰＯＳＴ（パワーオンセルフテスト）および乱数テストなどの自己診断関数もまた、暗号関数および乱数発生能力が破損されていないことを検証するために組み込んでもよい。
【０１０６】
追加ホスト環境およびフォームファクタ
検証可能な耐漏洩性暗号法の利用のためのいくつかの例示的なシステムおよび適用を上記で説明した。しかしながら、当業者が理解するように、上記の技術は、特定のホスト環境にもフォームファクタにも限定されない。もっと正確に言えば、それらは、限定するわけではないが、特定用途向け集積回路（ＡＳＩＣ）と、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）と、システムオンチップ（ＳｏＣ）と、マイクロプロセッサと、セキュアプロセッサと、安全なネットワーク装置と、全ての種類の暗号スマートカード（限定するわけではないが、ＩＳＯ７８１６−１、ＩＳＯ７８１６−２およびＩＳＯ７８１６−３（「ＩＳＯ７８１６準拠スマートカード」）にほぼ準拠するスマートカードを含む）と、非接触で近接度に基づいたスマートカードおよび暗号トークン（限定するわけではないが、ＩＳＯ１４４４３にほぼ準拠するスマートカードを含む）と、ストアードバリューカードおよびシステムと、暗号でセキュリティ保護されたクレジットおよびデビッドカードと、顧客ロイヤルティカードおよびシステムと、暗号認証クレジットカードと、暗号アクセラレータと、ギャンブルおよび賭博システムと、安全な暗号チップと、耐改竄性マイクロプロセッサと、ソフトウェアプログラム（限定するわけではないが、パーソナルコンピュータ、サーバ等で使用するためのプログラム、および暗号装置上にロードできるかまたは暗号装置内に埋め込むことができるプログラムを含む）と、鍵管理装置と、銀行取引鍵管理システムと、安全なウェブサーバと、防衛システムと、電子支払いシステムと、少額決済システムおよびメータと、プリペイドテレホンカードと、暗号身分証明書および他の身元検証システムと、電子資金決済用システムと、現金自動預け払い機と、ＰＯＳ端末装置と、証明書発行システムと、電子バッジと、ドアエントリシステムと、暗号鍵を用いる全ての種類の物理的ロックと、テレビ信号を復号化するためのシステム（限定するわけではないが、放送テレビ、衛星テレビおよびケーブルテレビを含む）と、暗号化された音楽および他のオーディオコンテンツ（コンピュータネットワークを通じて配信される音楽を含む）を復号化するためのシステムと、全ての種類のビデオ信号を保護するためのシステムと、コンテンツ保護およびコピー保護システム（映画、オーディオコンテンツ、コンピュータプログラム、ビデオゲーム、イメージ、テキスト、データベース等の不正コピーまたは使用を防ぐために用いられるシステムなど）と、携帯電話スクランブリングおよび認証システム（電話認証スマートカードを含む）と、安全な電話（かかる電話用の鍵記憶装置を含む）と、暗号ＰＣＭＣＩＡカードと、携帯暗号トークンと、暗号データ監査システムと、を含む種々様々の用途において用いることができる。
【０１０７】
前述の全ては、検証可能な耐漏洩性暗号法の例示的な実施形態および用途を示し、これらの実施形態および用途から、関連する変形、改善および修正が、本開示の趣旨および範囲の文脈において明白であろう。したがって、本特許によって保護された発明は、前述の開示に限定されるべきではなく、より正確に言えば本明細書に添付の特許請求の範囲によって解釈されるべきである。
【図１】
0005552541.tif 000016
【図２】
0005552541.tif 000017
【図３】
0005552541.tif 000018
【図４】
0005552541.tif 000019
【図５】
0005552541.tif 000020
【図６】
0005552541.tif 000021
【図７】
0005552541.tif 000022
【図８】
0005552541.tif 000023
【図９】
0005552541.tif 000024
【図１０】
0005552541.tif 000025
【図１１】
0005552541.tif 000026
【図１２】
0005552541.tif 000027
【図１３】
0005552541.tif 000028
【図１４】
0005552541.tif 000029