(57)【要約】  1つの特徴は、計算的に効率的なアルゴリズムを使用することによってデータ構造を安全にするための機構に関連する。複数の鍵および/またはマスクは、セッションのブートアップまたは開始で事前生成され得る。認証コードは、複数の事前生成した鍵のサブセットおよび/または複数の事前生成したマスクからマスクを選択することによって各データ構造(たとえば、メモリブロックまたはヘッダブロック)について計算され得る。認証コードは、データ構造の完全性の将来の検証のためにデータ構造内に記憶され得る。すべての認証コードに対して(たとえば、他のデータ構造に対して)使用される鍵および/またはマスクは、同じサイクルまたはセッション中には同じ複数の鍵および/またはマスクから選択され得る。
2016508002.tif 000002
【特許請求の範囲】
【請求項１】
認証コードを生成する方法であって、
処理回路のスタートアップでまたは前記処理回路上で実行されるセッションで複数の別個の鍵を含む鍵のセットを事前生成するステップと、
複数の別個のマスクを含むマスクのセットを事前生成するステップと、
固定長データ構造に関係付けられた複数の変数入力を取得するステップと、
複数の一時的な値を取得するために、前記複数の変数入力の各々を前記鍵のセットからの選択した対応する鍵と組み合わせるステップと、
中間値を取得するために前記複数の一時的な値を組み合わせるステップと、
前記固定長データ構造についてのメッセージ認証コードを取得するために、前記中間値と前記マスクのセットからの選択したマスクとの間の演算を実行するステップと
を含む方法。
【請求項２】
前記マスクのセットが、前記処理回路のスタートアップでまたは前記処理回路上で実行される前記セッションでも事前生成される、請求項1に記載の方法。
【請求項３】
前記鍵のセットおよびマスクのセットのうちの少なくとも一方が、ランダム値に基づいて生成される、請求項1に記載の方法。
【請求項４】
前記複数の一時的な値が、
組合せ値を取得するために前記複数の一時的な値を加算するステップと、
前記中間値を取得するために、前記組合せ値について事前選択した固定素数とのモジュロ演算を実行するステップと
によって組み合わせられる、請求項1に記載の方法。
【請求項５】
前記鍵のセット内の各鍵の前記値が、ゼロと前記事前選択した固定素数との間である、請求項4に記載の方法。
【請求項６】
前記中間値と前記選択したマスクとの間の前記演算が、ビット単位の排他的論理和演算である、請求項4に記載の方法。
【請求項７】
前記マスクおよび前記選択した対応する鍵の各々が、前記複数の変数入力のうちの少なくとも1つに基づいて選択される、請求項1に記載の方法。
【請求項８】
前記複数の変数入力のうちの前記少なくとも1つが、前記固定長データ構造に関係付けられたメモリアドレスである、請求項7に記載の方法。
【請求項９】
前記選択した対応する鍵の各々が、前記メモリアドレスに基づいて選択される、請求項8に記載の方法。
【請求項１０】
前記選択したマスクが、前記メモリアドレスに基づいて選択される、請求項8に記載の方法。
【請求項１１】
前記鍵のセットが、鍵のサブセットへと細分化され、鍵のサブセットだけが、前記メッセージ認証コードを計算するためにいずれかの鍵の1つのサブセットから選択される、請求項1に記載の方法。
【請求項１２】
スタートアップ間のまたはセッション間の期間にわたって安全なメモリ位置内に前記マスクのセットおよび鍵のセットのうちの少なくとも一方を記憶するステップ
をさらに含む、請求項1に記載の方法。
【請求項１３】
メモリデバイスの前記固定長データ構造内に前記メッセージ認証コードを記憶するステップ
をさらに含む、請求項1に記載の方法。
【請求項１４】
前記メッセージ認証コードが、前記固定長データ構造に関するヘッダブロック内に記憶される、請求項13に記載の方法。
【請求項１５】
前記データ構造から前に記憶したメッセージ認証コードを取得するステップと、
前記データ構造の完全性を確認するために、前記メッセージ認証コードを前記前に記憶したメッセージ認証コードと比較するステップと
をさらに含む、請求項1に記載の方法。
【請求項１６】
固定長データ構造を記憶するためのメモリデバイスと、
前記メモリデバイスに結合された処理回路であって、前記処理回路が、
処理回路のスタートアップでまたは前記処理回路上で実行されるセッションで複数の別個の鍵を含む鍵のセットを事前生成し、
複数の別個のマスクを含むマスクのセットを事前生成し、
前記固定長データ構造に関係付けられた複数の変数入力を取得し、
複数の一時的な値を取得するために、前記複数の変数入力の各々を前記鍵のセットからの選択した対応する鍵と組み合わせ、
中間値を取得するために前記複数の一時的な値を組み合わせ、
前記固定長データ構造についてのメッセージ認証コードを取得するために、前記中間値と前記マスクのセットからの選択したマスクとの間の演算を実行する
ように適合される、処理回路と
を備える、デバイス。
【請求項１７】
前記マスクのセットが、前記処理回路のスタートアップでまたは前記処理回路上で実行される前記セッションでも事前生成される、請求項16に記載のデバイス。
【請求項１８】
前記鍵のセットおよびマスクのセットのうちの少なくとも一方が、ランダム値に基づいて生成される、請求項16に記載のデバイス。
【請求項１９】
前記複数の一時的な値が、
組合せ値を取得するために前記複数の一時的な値を加算することと、
前記中間値を取得するために、前記組合せ値について事前選択した固定素数とのモジュロ演算を実行することと
によって組み合わせられる、請求項16に記載のデバイス。
【請求項２０】
前記鍵のセット内の各鍵の前記値が、ゼロと前記事前選択した固定素数との間である、請求項19に記載のデバイス。
【請求項２１】
前記中間値と前記選択したマスクとの間の前記演算が、ビット単位の排他的論理和演算である、請求項19に記載のデバイス。
【請求項２２】
前記マスクおよび前記選択した対応する鍵の各々が、前記複数の変数入力のうちの少なくとも1つに基づいて選択される、請求項16に記載のデバイス。
【請求項２３】
前記複数の変数入力のうちの前記少なくとも1つが、前記固定長データ構造に関係付けられたメモリアドレスである、請求項22に記載のデバイス。
【請求項２４】
前記選択した対応する鍵の各々が、前記メモリアドレスに基づいて選択される、請求項23に記載のデバイス。
【請求項２５】
前記選択したマスクが、前記メモリアドレスに基づいて選択される、請求項23に記載のデバイス。
【請求項２６】
前記鍵のセットが、鍵のサブセットへと細分化され、鍵のサブセットだけが、前記メッセージ認証コードを計算するためにいずれかの鍵の1つのサブセットから選択される、請求項16に記載のデバイス。
【請求項２７】
前記処理回路が、
スタートアップ間のまたはセッション間の期間にわたって安全なメモリ位置内に前記マスクのセットおよび鍵のセットのうちの少なくとも一方を記憶する
ようにさらに適合される、請求項16に記載のデバイス。
【請求項２８】
前記処理回路が、
メモリデバイスの前記固定長データ構造内に前記メッセージ認証コードを記憶する
ようにさらに適合される、請求項16に記載のデバイス。
【請求項２９】
前記メッセージ認証コードが、前記固定長データ構造に関するヘッダブロック内に記憶される、請求項28に記載のデバイス。
【請求項３０】
前記処理回路が、
前記データ構造から前に記憶したメッセージ認証コードを取得し、
前記データ構造の完全性を確認するために、前記メッセージ認証コードを前記前に記憶したメッセージ認証コードと比較する
ようにさらに適合される、請求項16に記載のデバイス。
【請求項３１】
処理回路のスタートアップでまたは前記処理回路上で実行されるセッションで複数の別個の鍵を含む鍵のセットを事前生成するための手段と、
複数の別個のマスクを含むマスクのセットを事前生成するための手段と、
固定長データ構造に関係付けられた複数の変数入力を取得するための手段と、
複数の一時的な値を取得するために、前記複数の変数入力の各々を前記事前生成した鍵のセットからの選択した対応する鍵と組み合わせるための手段と、
中間値を取得するために前記複数の一時的な値を組み合わせるための手段と、
前記固定長データ構造についてのメッセージ認証コードを取得するために、前記中間値と前記事前生成したマスクのセットからの選択したマスクとの間の演算を実行するための手段と
を備える、デバイス。
【請求項３２】
スタートアップ間のまたはセッション間の期間にわたって安全なメモリ位置内に前記マスクのセットおよび鍵のセットのうちの少なくとも一方を記憶するための手段
をさらに備える、請求項31に記載のデバイス。
【請求項３３】
メモリデバイスの前記固定長データ構造内に前記メッセージ認証コードを記憶するための手段
をさらに備える、請求項31に記載のデバイス。
【請求項３４】
前記メッセージ認証コードが、前記固定長データ構造に関するヘッダブロック内に記憶される、請求項33に記載のデバイス。
【請求項３５】
前記データ構造から前に記憶したメッセージ認証コードを取得するための手段と、
前記データ構造の完全性を確認するために、前記メッセージ認証コードを前記前に記憶したメッセージ認証コードと比較するための手段と
さらに備える、請求項31に記載のデバイス。
【請求項３６】
少なくとも1つの処理回路によって実行されるときに、前記少なくとも1つの処理回路に、
処理回路のスタートアップでまたは前記処理回路上で実行されるセッションで複数の別個の鍵を含む鍵のセットを事前生成させ、
複数の別個のマスクを含むマスクのセットを事前生成させ、
固定長データ構造に関係付けられた複数の変数入力を取得し、
複数の一時的な値を取得するために、前記複数の変数入力の各々を前記鍵のセットからの選択した対応する鍵と組み合わせ、
中間値を取得するために前記複数の一時的な値を組み合わせ、
前記固定長データ構造についてのメッセージ認証コードを取得するために、前記中間値と前記マスクのセットからの選択したマスクとの間の演算を実行させる
1つまたは複数の命令を有するプロセッサ可読記憶媒体。
【請求項３７】
少なくとも1つの処理回路によって実行されるときに、前記少なくとも1つの処理回路に、
メモリデバイスの前記固定長データ構造内に前記メッセージ認証コードを記憶させる
1つまたは複数の命令をさらに有する、請求項36に記載のプロセッサ可読記憶媒体。
【請求項３８】
少なくとも1つの処理回路によって実行されるときに、前記少なくとも1つの処理回路に、
前記データ構造から前に記憶したメッセージ認証コードを取得させ、
前記データ構造の完全性を確認するために、前記メッセージ認証コードを前記前に記憶したメッセージ認証コードと比較させる
1つまたは複数の命令をさらに有する、請求項36に記載のプロセッサ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
様々な特徴は、メッセージ認証コードの使用による攻撃からのデータ構造の保護に関する。
【背景技術】
【０００２】
ヒープメモリは、プロセッサによって確保され、メタデータ構造の使用により編成される。メタデータ構造は、(たとえば、ヘッダブロック内の)情報を含む固定長データ構造であってもよく、この情報に関して、変数は、(メモリが割り当てられている場合には)メモリの次の区分、および対応するメモリブロック内に確保されているメモリの大きさを「持っている」。攻撃者は、空いているメモリの大きさを減少させるため、またはある種データの重要な部分がメモリの攻撃されやすい区分中に置かれることを確実にするために、これらのメタデータ構造を壊そうとしたがる。したがって、データ構造の認可されていない改変を防止するために、このメタデータ(たとえば、データ構造またはメモリブロックのヘッダブロック内のデータ)を保護することが望ましい。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
したがって、計算的に経済的な解決策が、データ構造を保護するために必要とされている。
【課題を解決するための手段】
【０００４】
認証コードを生成する方法が提供される。複数の別個の鍵を含む鍵のセットは、処理回路のスタートアップでまたは処理回路上で実行されるセッションで事前生成される。複数の別個のマスクを含むマスクのセットも事前生成される。マスクのセットも、処理回路のスタートアップでまたは処理回路上で実行されるセッションで事前生成され得る。鍵のセットおよび/またはマスクのセットのうちの少なくとも一方が、ランダム値に基づいて生成され得る。
【０００５】
固定長データ構造に関係付けられた複数の変数入力が、取得され得る。マスクおよび選択した対応する鍵の各々は、少なくとも部分的に、複数の変数入力のうちの少なくとも1つに基づいて選択され得る。
【０００６】
複数の変数入力の各々は、複数の一時的な値を取得するために、鍵のセットからの選択した対応する鍵と組み合わせられ得る。複数の一時的な値は、次いで、中間値を取得するために組み合わせられ得る。中間値とマスクのセットからの選択したマスクとの間の演算は、次いで、固定長データ構造についてのメッセージ認証コードを取得するために実行され得る。鍵のセットは、鍵のサブセットへと細分化されることが可能であり、鍵のサブセット(たとえば、1つの鍵、2つの鍵、等)だけが、メッセージ認証コードを計算するためにいずれかの鍵の1つのサブセットから選択される。
【０００７】
複数の変数入力のうちの少なくとも1つは、固定長データ構造に関係付けられたメモリアドレスであり得る。選択した対応する鍵の各々は、メモリアドレスに基づいて選択され得る。選択したマスクは、メモリアドレスに基づいて選択され得る。
【０００８】
複数の一時的な値は:(a)組合せ値を取得するために複数の一時的な値を加算すること、および/または(b)中間値を取得するために、組合せ値について事前選択した固定素数とのモジュロ演算を実行することによって組み合わせられ得る。鍵のセット内の各鍵の値は、ゼロと事前選択した固定素数との間であり得る。中間値と選択したマスクとの間の演算は、たとえば、ビット単位の排他的論理和演算であり得る。
【０００９】
マスクのセットおよび鍵のセットのうちの少なくとも一方は、スタートアップ間のまたはセッション間の期間にわたって安全なメモリ位置に記憶され得る。メッセージ認証コードは、メモリデバイスの固定長データ構造内に記憶され得る。メッセージ認証コードは、固定長データ構造に関するヘッダブロック内に記憶され得る。
【００１０】
その後の検証ステージ中には、前に記憶したメッセージ認証コードが、データ構造から取得され得る。メッセージ認証コードは、次いで、データ構造の完全性を確認するために、前に記憶したメッセージ認証コードと比較され得る。
【００１１】
同様に、メモリデバイスと、メモリデバイスに結合された処理回路とを備えるデバイスが、提供され得る。メモリデバイスは、固定長データ構造を記憶するように働くことができる。処理回路は:(a)処理回路のスタートアップでまたは処理回路上で実行されるセッションで複数の別個の鍵を含む鍵のセットを事前生成し、(b)複数の別個のマスクを含むマスクのセットを事前生成し、(c)固定長データ構造に関係付けられた複数の変数入力を取得し、(d)複数の一時的な値を取得するために、複数の変数入力の各々を鍵のセットからの選択した対応する鍵と組み合わせ、(e)中間値を取得するために複数の一時的な値を組み合わせ、(f)固定長データ構造についてのメッセージ認証コードを取得するために、中間値とマスクのセットからの選択したマスクとの間の演算を実行するように構成され得るまたは適合され得る。
【００１２】
マスクのセットは、処理回路のスタートアップでまたは処理回路上で実行されるセッションでも事前生成され得る。
【００１３】
鍵のセットおよびマスクのセットのうちの少なくとも一方は、ランダム値に基づいて生成される。
【００１４】
複数の一時的な値は:(a)組合せ値を取得するために複数の一時的な値を加算すること、および/または(b)中間値を取得するために、組合せ値について事前選択した固定素数とのモジュロ演算を実行することによって組み合わせられ得る。鍵のセット内の各鍵の値は、ゼロと事前選択した固定素数との間であり得る。中間値と選択したマスクとの間の演算は、ビット単位の排他的論理和演算であり得る。
【００１５】
マスクおよび選択した対応する鍵の各々は、複数の変数入力のうちの少なくとも1つに基づいて選択される。複数の変数入力のうちの少なくとも1つは、固定長データ構造に関係付けられたメモリアドレスである。選択した対応する鍵の各々は、メモリアドレスに基づいて選択される。選択したマスクは、メモリアドレスに基づいて選択され得る。
【００１６】
鍵のセットは、鍵のサブセットへと細分化されることが可能であり、鍵のサブセット(たとえば、1つの鍵、2つの鍵、等)だけが、メッセージ認証コードを計算するためにいずれかの鍵の1つのサブセットから選択される。
【００１７】
処理回路は、スタートアップ間のまたはセッション間の期間にわたって安全なメモリ位置内にマスクのセットおよび鍵のセットのうちの少なくとも一方を記憶するようにさらに適合され得る。
【００１８】
処理回路はまた、メモリデバイスの固定長データ構造内にメッセージ認証コードを記憶するようにさらに適合され得る。メッセージ認証コードは、固定長データ構造に関するヘッダブロック内に記憶され得る。
【００１９】
処理回路は:(a)データ構造から前に記憶したメッセージ認証コードを取得すること、および/または(b)データ構造の完全性を確認するために、メッセージ認証コードを前に記憶したメッセージ認証コードと比較するようにさらに適合され得る。
【図面の簡単な説明】
【００２０】
【図１】暗号鍵を使用してメッセージ認証コード(MAC)を有するメモリ内のデータ構造を保護するための1つの手法を図示するブロック図であり、暗号鍵は、安全な長期記憶装置内に記憶される、または関係するメモリコントローラがブートするときにはいつでもランダムに生成されかつ安全な揮発性メモリに保持される、のいずれかである。
【図２】図1の暗号MACよりもより計算的に効率的であるMAC-Lite発生器を使用してデータ構造を保護するための別の手法を図示するブロック図である。
【図３】巡回冗長検査(CRC)またはカナリア値よりもより高い安全性を有する一方で、図1の暗号MACよりもより計算的に効率的であるMAC-Liteアルゴリズム302の例を図示する図である。
【図４】従来のMACよりもより効率的にMACを生成するために実施され得るMAC-Liteアルゴリズムの一例を図示する図である。
【図５】認証コードがマスクの別個のセットおよび鍵の別個のセットの事前生成に基づいて生成される一般的な手法を図示する図である。
【図６】データ構造の完全性を安全にするためにMAC-Liteアルゴリズムを実行するように適合されたデバイスの例示的な実装形態を図示するブロック図である。
【図７】マスクの別個のセットおよび鍵の別個のセットの事前生成に基づいてメモリ空間についての認証コードを生成する例を図示する図である。
【発明を実施するための形態】
【００２１】
下記の説明では、具体的な詳細が、本開示の様々な態様の完全な理解を提供するために与えられる。しかしながら、態様がこれらの具体的な詳細がなくとも実施し得ることを、当業者なら理解するであろう。たとえば、回路は、不必要な詳細で態様を不明瞭にすることを避けるためにブロック図で示されることがある。他の事例では、よく知られた回路、構造および技術は、本開示の態様を不明瞭にしないために詳細には示されないことがある。
【００２２】
「例示的な(exemplary)」という語は、「例、事例、または実例として働くこと」を意味するように本明細書においては使用される。「例示的な」として本明細書において説明するいずれかの実装形態または態様は、本開示の他の態様よりも好ましいまたは有利であると必ずしも解釈される必要はない。同じように、「態様」という用語は、本開示のすべての態様が論じた特徴、利点または操作のモードを含むことを必ずしも必要としない。
【００２３】
概要
1つの特徴は、計算的に効率的なアルゴリズムを使用することによってデータ構造を安全にするための機構を提供する。複数の鍵および/またはマスクは、セッションのブートアップまたは開始で事前生成され得る。認証コードは、複数の事前生成した鍵のサブセットおよび/または複数の事前生成したマスクからマスクを選択することによって、各データ構造(たとえば、メモリブロックまたはヘッダブロック)について計算され得る。認証コードは、データ構造の完全性の将来の検証のためにデータ構造内に記憶され得る。すべての認証コードに対して(たとえば、他のデータ構造に対して)使用される鍵および/またはマスクは、同じサイクルまたはセッション中には同じ複数の鍵および/またはマスクから選択され得る。
【００２４】
この手法は、他の暗号メッセージ認証コード(MAC)手法よりも低い安全性であるが、標準巡回冗長検査(CRC)実装形態よりもわずかに少ない実装コストを有しつつCRCまたはカナリア値よりもより高い安全性を提供することができる。この解決策は、入力の形式の知識からおよび通常の数よりも多くのランダム鍵または疑似ランダム鍵を使用することによって効率性を得る。
【００２５】
動的に生成したメッセージ認証コードを有する例示的なメモリ構造
図1は、暗号鍵を使用してメッセージ認証コード(MAC)を有するメモリ内のデータ構造を保護するための1つの手法を図示するブロック図であり、暗号鍵は、安全な長期記憶装置内に記憶される、または関係するメモリコントローラがブートするときにはいつでもランダムに生成されかつ安全な揮発性メモリに保持される、のいずれかである。処理回路102は、メモリデバイス104または記憶装置に結合され得るおよび/または集積され得る。メモリデバイス104は、メモリブロック114a、114b、および/または114cとして配列されたメモリ空間を含むことができる。各メモリブロック114a、114b、114cは、ヘッダブロック106a、106b、および106c、ならびに対応するブロック確保メモリ空間108a、108b、および108cを含むことができる。ヘッダブロック106は、データ構造(たとえば、メタデータ構造)を記憶するように働くことができる。
【００２６】
処理回路102は、各ヘッダブロック106またはメモリブロック114についてのMAC110を計算しかつそのようなMAC110を各対応するヘッダブロック106内に記憶するMAC発生器112を実装するように構成され得る。一例では、MAC発生器(たとえば、処理回路またはモジュール)は、複数のラウンドまたは反復を有する特定のMACアルゴリズム116(たとえば、ハッシュベースメッセージ認証コード(HMAC)-安全なハッシュアルゴリズム1(SHA-1)、高度暗号化標準(AES)-暗号ベースMAC(CMAC)、およびデータ認証アルゴリズム(DAA)、等)を実施することができる。
【００２７】
時々鍵つきまたは暗号ハッシュ関数とも呼ばれる、典型的なMACアルゴリズム116は、秘密鍵118および認証すべき任意長メッセージ120を入力として受け取り、MAC値を出力する。MAC値は、検証者(秘密鍵も所有する者)がメッセージコンテンツ(たとえば、ヘッダブロック106および/またはメモリブロック114)への何らかの変更を検出することを可能にすることによって、メッセージのデータ完全性ならびにその信頼性を保護する。
【００２８】
様々な例では、MACアルゴリズム116は、「メッセージ」入力120の一部として、メモリアドレス122を含むことができ、そのアドレスで、ヘッダブロックが始まり、ブロック確保メモリ空間が始まり、および/またはそのアドレスに、データ構造内の特定のメタデータが保持される。このMACは、データ構造内に(ヘッダブロック106内に)記憶されることもでき、データ構造が読み出されるまたは書き込まれるときにはいつでも検査されることもできる。加えて、MACアルゴリズム116は、「メッセージ」入力120の一部として、ヘッダブロックのコンテンツ(たとえば、その中に記憶されたデータ構造)および/またはコマンドなどの他の入力1…n 124も含むことができる。MAC110aが、対応するヘッダブロック106a内の情報のうちの少なくともいくつか(たとえば、メモリブロック114aまたはブロック確保メモリ空間108aに関するメモリアドレス、メモリブロック114aまたはブロック確保メモリ空間108aのサイズ、等)に基づいて計算されるので、ヘッダブロック106a、メモリブロック114aもしくはブロック確保メモリ空間108aに関するアドレス、および/または対応するメモリブロック114aおよび／もしくはブロック確保メモリ空間108aのサイズを改ざんしようとする何らかの試みは、対応するMAC110aを検証することによって検出され得る。
【００２９】
しかしながら、この手法は、データ構造(ヘッダブロック106)がアクセスされるときごとに暗号MAC操作を必要とするため、計算的に不経済であるという欠点を有する。典型的な暗号MACアルゴリズム(たとえば、HMAC-SHA-1、AES-CMAC、DAA、等)は、複数の計算的に不経済であるラウンドを実施することによっておよび/またはMACが計算されるときに疑似ランダムマスク値を生成することによってより大きい安全性を提供することを探し求めている。結果として、典型的な暗号MAC操作は、計算的に集約的であり、暗号MACが計算されるときごとにかなりの処理リソースを消費することがある。
【００３０】
メモリブロック114(たとえば、および/または対応するヘッダブロック106内のデータ構造)が頻繁にアクセスされる場合には、これはデータ構造がヒープメモリ構造などのメモリ割当てに関する情報を保持するケースである恐れがあり、その場合、MAC110の検証は、許容できない処理リソースを消費することがある。
【００３１】
事前生成した鍵および/またはマスクを使用するLiteメッセージ認証コードを有する例示的なメモリ構造
図2は、図1の暗号MACよりもより計算的に効率的であるMAC-Lite発生器を使用してデータ構造を保護するための別の手法を図示するブロック図である。処理回路202は、メモリデバイス204または記憶装置に結合され得るおよび/または集積され得る。メモリデバイス204は、メモリブロック214a、214b、および/または214cとして配列されたメモリ空間を含むことができる。各メモリブロック214a、214b、214cは、ヘッダブロック206a、206b、および206c、ならびに対応するブロック確保メモリ空間208a、208b、および208cを含むことができる。ヘッダブロック206は、データ構造(たとえば、メタデータ構造)を記憶するように働くことができる。
【００３２】
処理回路202は、各ヘッダブロック206またはメモリブロック214についてのMAC210を計算しかつそのようなMAC210を各対応するヘッダブロック206内に記憶するMAC-Lite発生器212を実装するように構成され得る。一例では、MAC発生器212(たとえば、MAC処理回路またはモジュール)は、複数のスタートアップ生成鍵218および/またはスタートアップ生成マスク217がメッセージ入力220についてのMACを生成する際に使用される特定のMAC-Liteアルゴリズム216を実施することができる。
【００３３】
複数のスタートアップ生成鍵218およびスタートアップ生成マスク217は、ブートアップ間にまたはアプリケーションセッション中にMACを生成するために使用され得る。たとえば、複数のスタートアップ生成鍵218および/またはスタートアップ生成マスク217からの選択した鍵および/またはマスクは、サイクルまたはセッション中にすべてのデータ構造についてのすべてのMACを生成するために使用され得る。
【００３４】
様々な例では、MAC-Liteアルゴリズム216は、「メッセージ」入力220の一部として、メモリアドレス222を含むことができ、そのアドレスで、ヘッダブロックが始まり、ブロック確保メモリ空間が始まり、および/またはそのアドレスに、データ構造の特定のメタデータが保持される。メッセージ入力のうちの少なくとも1つ(たとえば、メモリアドレス、等)は、スタートアップ生成鍵218から別個の複数の1つもしくは複数の鍵を選択する際、および/またはスタートアップ生成マスク217からマスクを選択する際に使用され得る。選択した鍵および/またはマスクは、次いで、複数の計算的に不経済であるラウンドおよび/または疑似ランダムマスク値の計算を実行時に避けつつMAC210を生成するために使用される。
【００３５】
加えて、MACアルゴリズム216は、「メッセージ」入力220の一部として、ヘッダブロックのコンテンツ(たとえば、その中に記憶されたデータ構造)などの他の入力1…n 224も含むことができる。MAC210aが、対応するヘッダブロック206a内の情報のうちの少なくともいくつか(たとえば、メモリブロック214aまたはブロック確保メモリ空間208aに関するメモリアドレス、メモリブロック214aまたはブロック確保メモリ空間208aのサイズ、等)に基づいて計算されるので、ヘッダブロック206a、メモリブロック214aもしくはブロック確保メモリ空間208aに関するアドレス、ならびに/または対応するメモリブロック214aおよび/もしくはブロック確保メモリ空間208aのサイズを改ざんしようとする何らかの試みは、対応するMAC210aを検証することによって検出され得る。
【００３６】
このMAC210は、データ構造内に(ヘッダブロック206内に)記憶されることが可能であり、データ構造がアクセスされる(たとえば、読出し操作または書込み操作)ときにはいつでも検査され得る。
【００３７】
図3は、巡回冗長検査(CRC)またはカナリア値よりもより高い安全性を有する一方で、図1の暗号MACよりもより計算的に効率的であるMAC-Liteアルゴリズム302の例を図示する。このMAC-Liteアルゴリズム302は、たとえば、図2のMAC-Lite発生器212によって実装され得る。
【００３８】
この手法では、鍵のセット304および/またはマスク306は、ブートアップ時におよび/またはスタートアップにおいて事前生成されることが可能であり、その後、1つまたは複数のメモリブロックについてのMACを生成するために(たとえば、全体のセッション中に)使用され得る。たとえば、複数の鍵304k[0][0], …, k[n][NK-1]は、ランダムにまたは疑似ランダムに生成され得る(たとえば、ランダム値または疑似ランダム値に基づいて生成され得る)。この例では、複数の鍵304k[0][0], …, k[n][NK-1]は、鍵の第1のサブセット306a k[0][0], …, k[0][NK-1]、鍵の第2のサブセット306b k[1][0], …, k[1][NK-1]、鍵の第3のサブセット306c k[n][0], …, k[n][NK-1]を含む複数のサブセット306a、306b、および306cへとグループ分けされている。これらの鍵値は、潜在的な攻撃者には、秘密かつ変更不可能であるべきである。
【００３９】
同様に、mask[0], mask[1], …, mask[NM-1]を含む複数のマスク値308は、ブート時および/またはスタートアップにおいて事前生成されることが可能であり、その後、1つまたは複数のメモリブロックについてのMACを生成するために(たとえば、全体のセッション中に)使用され得る。
【００４０】
この例では、MAC-Liteアルゴリズム302は、入力として:複数の入力Input_1 310a, Input_2 310b, Input_n 310c、可変メモリアドレス312、事前選択のまたは所定の素数p 314、選択したマスク316、および/または鍵のセット304から選択される複数の選択した鍵318を採用することができる。一例では、マスク値308 mask[0], mask[1], …, mask[NM-1]は、各々、素数p 314と同じビット長のものであり得る。加えて、鍵のセット304内の鍵値k[0][0], …, k[n][NK-1]は、0とp-1との間(両端を含む)であり得る。
【００４１】
所与のメモリブロックについて、MACは、MAC-Liteアルゴリズム302を使用して生成され得る。複数の鍵318は、たとえば、可変メモリアドレス312から生成される1つまたは複数のインデックスに基づいて鍵のセット304から選択され得る。たとえば、関数fおよび可変メモリアドレス312 addrは、鍵インデックス:f(addr)=key_index_0, …, key_index_nを生成するために働くことができる。たとえば、鍵インデックスの各々は、整数値0とNK-1との間であってもよい。その結果、選択される鍵のセット318は、複数の鍵304のサブセット306a、306b、および306cの各々から選択され得る。
【００４２】
同様に、マスク316は、たとえば、可変メモリアドレス312から生成されるインデックスに基づいて複数のマスク値308から選択され得る。たとえば、同じまたは異なる関数fおよび可変メモリアドレス312 addrは、マスクインデックス:f(addr)=mask_indexを生成するために働くことができる。たとえば、マスクインデックス313は、整数値0とNM-1との間であってもよい。その結果、マスク316は、複数のマスク308から選択され得る。
【００４３】
選択した複数の鍵318、選択したマスク316、素数p 314、および可変メモリアドレス312, input_1 310a, input_2 310b, …, input_n 310cは、予測することが困難なMAC出力を生成する方法で組み合わせられ得る。メモリ管理のケースに関して、可変メモリアドレス(addr)312は、たとえば、メモリ構造のヘッダブロックに関する開始アドレスであってもよい。同じように、複数の他の入力変数input_1 310a, input_2 310b, …, input_n 310cは、データ構造またはヘッダブロック中の異なる変数であり得る。MAC-Liteアルゴリズム302は、いずれかの可能な個々の入力(たとえば、k[j][i]≦p-1)よりも大きいことがあり得る素数p 314によってパラメータ化されることが可能であり、この個々の入力は、MAC-Liteアルゴリズム302に関する入力特性が知られるという仮定のおかげで決定され得る。全単射方式で素数p 314よりも小さくなることがすべて保証される入力のセットに対して可能性のある入力のセットを効率的に写像することが可能である限り、この素数p 314は、いくつかの可能な入力(たとえば、選択した鍵318、選択したマスク316、メモリアドレス312、および/または入力310)よりも小さいことが可能である。これはまた、小さい入力が1つの大きい変数へと組み合わせられることを可能にする。この素数p 314は、公表され得るが、攻撃者によって変更可能にするべきではない。
【００４４】
代替実装形態では、入力(たとえば、選択した鍵318、選択したマスク316、メモリアドレス312、および/または入力310)もまた、入力をフィールドの要素へ写像することによって、任意有限フィールドGF(2^n)を使用して実装され得る。
【００４５】
一例では、MAC-Liteアルゴリズム302は、2つのステージを含むことができる。先ず、中間多項式値(Val)が:
Intermediate_Val=addr*k[0][key_index_0]+
input_1*k[1][key_index_1]+
input_2*k[2][key_index_2]+…+
input_n*k[n][key_index_n]mod p.
として計算される。次いで、MAC値が:
MAC_value=Intermediate_Val XOR mask[mask_index]
として計算される。このようにして、MAC-Liteアルゴリズム302は、メモリブロックがアクセスされるときごとに反復計算の複数のラウンドを避けつつ、比較的安全である出力MAC値320を生成することができる。
【００４６】
図4は、従来のMACよりもより効率的にMACを生成するように実施され得るMAC-Liteアルゴリズムの一例を図示する。鍵のセットk[0][0]、…、k[n][NK-1]は、デバイスまたはセッションスタートアップまたは開始において事前生成される402。同様に、マスクのセットmask[0]、mask[1]、…、mask[NM-1]は、デバイスまたはセッションスタートアップまたは開始において事前生成される404。データ構造に関係付けられた複数の変数入力(たとえば、addr、input_1、input_2、…、input_n)を取得する406。鍵のセットからの複数の鍵(たとえば、k[0][key_index_0]、k[1][key_index_1]、k[2][key_index_2]、およびk[n][key_index_n])は、入力のうちの1つまたは複数から選択される408。同様に、マスクのセットからのマスク(たとえば、mask[mask_index])は、変数入力のうちの1つまたは複数に基づいて選択される410。中間値は、複数の一時的な値を取得するために複数の変数入力の各々を対応する選択した鍵と組み合わせ、複数の一時的な値を組み合わせ、そして中間値を取得するためにモジュロp演算を実行することによって計算される412。様々な例では、各入力および対応する鍵は、論理演算、算術演算(たとえば、乗算)、および/または2つの値を組み合わせるため、および一時的な値を取得するために使用され得るいずれかの他の演算もしくは関数を使用して組み合わせられてもよい。1つの事例では、Intermediate_Val=addr*k[0][key_index_0]+input_1*k[1][key_index_1]+input_2*k[2][key_index_2]+…+input_n*k[n][key_index_n]mod pであり、ここで、pは素数である。排他的論理和(XOR)演算は、次いで、メッセージ認証コード(MAC)を取得するために、中間値と選択したマスク(たとえば、mask[mask_index])との間で実行され得る414。
【００４７】
1つの例示的な実装形態では、複数の鍵304(たとえば、鍵のセット)は、インデックスを付けられてもよい(たとえば、key_index_xによって選択可能である)。同様に、複数のマスク308(たとえば、マスクのセット)は、インデックスを付けられてもよい(たとえば、mask_index 313によって選択可能である)。結果として、key_index値および/またはmask_indexは、データ構造に関する変数入力のうちの1つに基づいて生成され得る。単独でまたは他の情報と組み合わせて、変数入力を使用する様々な他の方法は、変数入力に依存して変化する(たとえば、変数入力が変わることがデータ構造の全体にわたり明らかであり得る)mask_indexを生成する際に使用され得る。mask_indexは、複数のNM個のマスク308の中から選択されることが可能であり、ここで、NMは、整数値であり、MAC値320の計算の際に使用される。複数のマスク308の中からの特定のmask_index 313の選択は、ランダムであり得るし、疑似ランダムであり得るし、および/またはいくつかの選択アルゴリズム(たとえば、メモリアドレス312の関数として)に従い得る。一例では、複数のマスク308内のマスクの各々は、素数p 314と同じビット長を有することができる。
【００４８】
一例では、複数の鍵304は、各々がNK個の要素(すなわち、鍵)を有するサブセット306a、306b、306cへと細分化され得る。複数のkey_index_xは、mask_indexの選択と同様に、同じ変数入力または異なる変数入力に基づいて選択され得る。たとえば、鍵のセット304のサブセット306a、306b、および306cの長さNKは、サブセット306a、306b、306cの各々に関する鍵インデックス値を導出するために使用され得る。たとえば、複数のマスク308の中からの特定のkey_index 313(たとえば、key_index_1、key_index_2、…、key_index_n)の選択は、ランダムであり得るし、疑似ランダムであり得るし、および/またはいくつかの選択アルゴリズム(たとえば、メモリアドレス312の関数として)に従い得る。好ましくは、サブセット306a、306b、306cの各々の中へのkey_indexは、攻撃者に対してより大きい安全性を提供するために異なる。
【００４９】
MAC-Liteアルゴリズム302が、単にメモリ完全性のためだけでなく、様々な異なる文脈(context)において使用され得ることに留意されたい。このMAC-Liteアルゴリズム302がメモリ完全性のために使用されるケースでは、MAC320は、メモリブロックに関するヘッダブロック内のデータ構造の一部として記憶され得る。同じメモリブロックへのその後のアクセス(たとえば、読出しまたは書込み)で、MACは、生成され、ヘッダブロック内の前に記憶したMACと比較されて、これらが同じであることを確かめる。MACが異なる場合には、メモリブロックが危険に曝されていると仮定または結論付けることができ、メモリブロックがフラッシュされるまたは無視され得る。加えて、危険に曝されたメモリブロックの発生はまた、メモリ領域内の他のメモリ構造が危険に曝されているかもしれないことを示すことができる。その結果、他のメモリブロックも、フラッシュされ無視され得る、またはシステムは、再スタートされ得る。
【００５０】
図5は、認証コードがマスクの別個のセットおよび鍵の別個のセットの事前生成に基づいて生成される一般的な手法を図示する。複数の別個の鍵を含む鍵のセットが、事前生成される502。たとえば、鍵のセットは、処理回路のスタートアップで、処理回路のブートアップで、および/または処理回路上で実行されるセッション(たとえば、処理セッション、アプリケーションセッション、通信セッション、等)の開始で生成され得る。いくつかの実装形態では、鍵のセットは、図3に図示したようにサブセット(たとえば、鍵のセット304ならびにサブセット306a、306b、および306c)へと細分化され得る。同様に、別個のマスクを含むマスクのセットが、事前生成される504。たとえば、マスクのセットも、処理回路のスタートアップで、処理回路のブートアップで、および/または処理回路上で実行されるセッション(たとえば、処理セッション、アプリケーションセッション、通信セッション、等)の開始で生成され得る。鍵のセットおよびマスクのセットのうちの少なくとも一方は、(たとえば、ハードウェアランダムビット発生器、予想できないシステムイベントに基づく乱数発生器、ソフトウェア乱数発生器、シード値に基づく疑似乱数発生器、等からの)ランダム値に基づいて生成され得る。鍵のセットおよびマスクのセットは、秘密に保たれ得る。
【００５１】
データ構造(たとえば、メッセージ、メモリ領域、データ、ファイル、伝送、ヘッダブロック情報、等)に関係付けられた複数の変数入力が、引き続いて取得され得る506。いくつかの実装形態では、そのような変数入力は、データ構造に関係付けられたメモリアドレスまたはデータ構造の位置を含むことができる。
【００５２】
複数の変数入力の各々は、複数の一時的な値を取得するために、鍵のセットからの選択した対応する鍵と(たとえば、論理演算または乗算などの算術演算によって)組み合わせられ得る508。複数の一時的な値は、次いで、1つの組合せ値を取得するために(たとえば、論理演算または加算などの算術演算、等によって)組み合わせられる510。複数の異なる鍵の各々は、複数の変数入力のうちの少なくとも1つに基づいて選択され得る。モジュロ演算が、次いで、中間値を取得するために、固定素数を使用して1つの組合せ値について実行され得る512。一例では、中間値は、複数の一時的な値を取得するために複数の変数入力の各々とその選択した対応する鍵との乗算として計算され得、その結果得られた一時的な値を加算し、かつ事前選択した固定素数とのモジュロ演算を実行し得る。使用する各鍵の値は、ゼロと素数との間であり得る。
【００５３】
排他的論理和(XOR)演算は、次いで、データ構造についてのメッセージ認証コードを取得するために、中間値とマスクのセットからの選択したマスクとの間で実行され得る514。マスクは、複数の変数入力のうちの少なくとも1つ(たとえば、データ構造に対応する可変メモリアドレス空間)に基づいて選択され得る。代替実装形態では、異なる演算(たとえば、論理演算または算術演算)が、中間値と選択したマスクとを組み合わせるために採用され得ることに留意されたい。
【００５４】
メッセージ認証コードは、メモリデバイスのデータ構造内に記憶され得る516。いくつかの例では、データ構造は、固定長データ構造であってもよい。
【００５５】
その後、データ構造が再びアクセスされると、前に記憶したメッセージ認証コードが、データ構造から取得される518。次いで、メッセージ認証コードは、データ構造の完全性を確認するために、前に記憶したメッセージ認証コードと比較され得る520。
【００５６】
図6は、データ構造の完全性を安全にするために、MAC-Liteアルゴリズムを実行するように適合されたデバイスの例示的な実装形態を図示するブロック図である。デバイスは、別々のまたは集積されたメモリデバイス604に結合された処理回路602を含むことができる。処理回路602は、データ構造の完全性を安全にするために、メモリデバイス604内に記憶された1つまたは複数のデータ構造608a、608b、608cについてMAC-Liteアルゴリズムを実施するように適合され得るメッセージ認証コード(MAC)発生器606を含むことができる。
【００５７】
MAC発生器606は、MAC-Liteアルゴリズムの1つまたは複数の機能またはステップを実施する複数の回路および/またはモジュールを含むことができる。鍵事前生成回路/モジュール610は、処理回路602のスタートアップもしくはブートアップで、または処理回路602上で実行されるセッションもしくはアプリケーションの開始で、複数の鍵を含む鍵のセット628をランダムにまたは疑似ランダムに生成することができる。鍵のセット628は、安全なメモリデバイス626にまたは処理回路602もしくはメモリデバイス604内の安全な場所に記憶され得る。同様に、マスク事前生成回路/モジュール612は、処理回路602のスタートアップもしくはブートアップで、または処理回路602上で実行されるセッションもしくはアプリケーションの開始で、複数のマスクを含むマスクのセット630をランダムにまたは疑似ランダムに生成することができる。マスクのセット630は、安全なメモリデバイス626にまたは処理回路602もしくはメモリデバイス604内の安全な場所に記憶され得る。安全なメモリデバイス626(または場所)内のマスクのセットおよび/または鍵のセットは、スタートアップ間のまたは(アプリケーション)セッション間の期間にわたり記憶され得る。結果として、マスクのセットおよび/または鍵のセットは、1回だけの読出し/書込み操作に対してまたは1つのメモリブロックに対しては使用されない。代わりに、これは、サイクル中の(たとえば、スタートアップ間のまたはセッション間の)すべての読出し/書込み操作およびすべてのメモリブロックに対して使用される。
【００５８】
書込み操作または読出し操作のためにデータ構造にアクセスすると、鍵セレクタ回路/モジュール614は、データ構造に関係付けられた少なくとも1つの入力(たとえば、データ構造に関する可変メモリアドレス、等)に基づいて鍵のセット628から複数の鍵を選択することができる。同様に、マスクセレクタ回路/モジュール616は、少なくとも1つの入力(たとえば、データ構造に関する可変メモリアドレス、等)またはデータ構造に関係付けられた異なる1つまたは複数の入力に基づいてマスクのセット630からマスクを選択することができる。
【００５９】
入力および鍵組合せ回路/モジュール618は、入力を(鍵セレクタ回路/モジュール614からの)対応する(異なる)選択した鍵と組み合わせるために働くことができる。たとえば、各入力は、異なる選択した鍵と乗算されることが可能であり、結果は、一緒に加算され得る。モジュロ演算器回路/モジュール620は、固定素数p 632を使用して入力および鍵組合せ回路/モジュール618からの結果に適用され得る。マスク組合せ回路/モジュール622は、モジュロ演算器回路/モジュール620からの結果を取得することができ、データ構造についてのMAC-Lite値を生成するために、(マスクセレクタ回路/モジュール616からの)選択したマスクを適用することができる。
【００６０】
MAC比較器回路/モジュール624は、データ構造についての前に記憶したMAC値を(マスク組合せ回路/モジュール622からの)動的に計算したMAC値と比較することによって、データ構造の完全性を検査するように働くことができる。
【００６１】
図7は、マスクの別個のセットおよび鍵の別個のセットの事前生成に基づいてメモリ空間についての認証コードを生成する例を図示する。メモリアドレスが、固定長データ構造に対して取得される702。複数の入力も、固定長データ構造内の情報に基づいて取得される704。異なる鍵が、メモリアドレスの各々および複数の変数入力に対して選択され、ここでは異なる鍵の各々が、事前生成した鍵の別個のセットから選択される706。一例では、複数の異なる鍵の各々および/またはマスクは、メモリアドレスに基づいて(たとえば、関数として)選択されてもよい。事前生成した鍵の別個のセットは、処理回路/デバイスのスタートアップでまたは処理回路/デバイス上で実行されるセッションの開始で生成されていてもよい。
【００６２】
メモリアドレスは、中間値を取得するために、選択した第1の鍵とならびに選択した対応する鍵を有する複数の変数入力の各々と組み合わせられる708。中間値は、メモリアドレスと第1の鍵との乗算に加えて複数の変数入力の各々とその選択した対応する鍵との乗算、および事前選択した固定素数とのモジュロ演算を実行することとして計算され得る。使用する各鍵は、ゼロと素数との間であり得る。
【００６３】
排他的論理和(XOR)演算は、固定長データ構造についての認証コードを取得するために、中間値と事前生成したマスクの別個のセットから選択されるマスクとの間で実行される710。事前生成したマスクの別個のセットは、処理回路/デバイスのスタートアップでまたは処理回路/デバイス上で実行されるセッションの開始で生成されていてもよい。鍵の別個のセットおよびマスクの別個のセットは、秘密に保たれ得る。
【００６４】
認証コードは、次いで、固定長データ構造内に記憶され得る712。たとえば、認証コードは、固定長データ構造に関するヘッダブロック内に記憶され得る。メモリアドレスは、固定長データ構造に関するヘッダブロックのアドレスに対応することができる。
【００６５】
固定長データ構造のその後のアクセスにおいては、その完全性は、メッセージ認証コードを再生成することによって、およびこれを同じデータ構造についての前に記憶したメッセージ認証コードと比較することによって検証され得る。
【００６６】
図に図示した構成要素、ステップ、特徴、および/または機能のうちの1つまたは複数は、1つの構成要素、ステップ、特徴もしくは機能へと再配置されるおよび/もしくは組み合わせられ得る、またはいくつかの構成要素、ステップ、もしくは機能で具体化され得る。追加の要素、構成要素、ステップ、および/または機能も、本発明から乖離せずに追加され得る。図に図示した装置、デバイス、および/または構成要素は、図に説明した方法、特徴、またはステップのうちの1つまたは複数を実行するように構成され得る。本明細書において説明したアルゴリズムも、ソフトウェアで効率的に実施され得るおよび/またはハードウェアに効率的に取り込まれ得る。
【００６７】
その上、開示の一態様では、図1、2、および6に図示した処理回路102、202、および/または602は、図3、図4、図5、および/または図7に説明したアルゴリズム、方法、および/またはステップを実行するために具体的に設計されたおよび/または物理的に組み込まれた特殊プロセッサ(たとえば、特定用途向け集積回路(ASIC))であってもよい。このように、そのような特殊プロセッサ(たとえば、ASIC)は、図3、図4、図5、および/または図7に説明したアルゴリズム、方法、および/またはステップを実行するための手段の一例であり得る。プロセッサ可読記憶媒体は、特殊プロセッサ(たとえば、ASIC)によって実行されたときに、特殊プロセッサに、本明細書において説明したアルゴリズム、方法、および/またはステップを実行させる命令を記憶することができる。
【００６８】
また、本開示の態様が、フローチャート、流れ図、構造図、またはブロック図として描かれているプロセスとして説明され得ることに留意されたい。フローチャートが一連のプロセスとして操作を記述することができるけれども、操作の多くは、並列にまたは同時に実行され得る。加えて、操作の順序は、並べ替えられてもよい。プロセスは、その操作が完了すると終了される。プロセスは、方法、機能、手順、サブルーチン、サブプログラム、等に対応することができる。プロセスが機能に対応するときには、その終了は、呼出し機能または主機能への機能の戻りに対応する。
【００６９】
その上、記憶媒体は、読出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光学的記憶媒体、フラッシュメモリデバイス、ならびに/または情報を記憶するための他の機械可読媒体、およびプロセッサ可読媒体、および/もしくはコンピュータ可読媒体を含む、データを記憶するための1つまたは複数のデバイスを表すことができる。「機械可読媒体」、「コンピュータ可読媒体」、および/または「プロセッサ可読媒体」という用語は、携帯型または固定記憶デバイス、光学的記憶デバイス、ならびに命令および/またはデータを記憶する、含有するまたは搬送することができる様々な他の媒体などの一時的でない媒体を含むことができるが、これらに限定されない。このように、本明細書において説明した様々な方法は、「機械可読媒体」、「コンピュータ可読媒体」、および/または「プロセッサ可読媒体」に記憶され、かつ1つまたは複数のプロセッサ、機械および/またはデバイスによって実行され得る命令および/またはデータによって全体をまたは部分的に実装され得る。
【００７０】
さらにその上、本開示の態様は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、またはこれらの任意の組合せによって実装され得る。ソフトウェア、ファームウェア、ミドルウェアまたはマイクロコードに実装されるときには、必要なタスクを実行するためのプログラムコードまたはコードセグメントは、記憶媒体または他の記憶装置などの機械可読媒体中に記憶され得る。プロセッサは、必要なタスクを実行することができる。コードセグメントは、手順、機能、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または命令、データ構造、もしくはプログラム文の任意の組合せを表すことができる。コードセグメントは、情報、データ、引数、パラメータ、またはメモリコンテンツを渡すことおよび/または受け取ることによって別のコードセグメントまたはハードウェア回路に結合され得る。情報、引数、パラメータ、データ、等は、メモリ共有、メッセージ引渡し、トークン引渡し、ネットワーク送信、等を含むいずれかの適切な手段を介して渡され、転送され、または送信され得る。
【００７１】
本明細書において開示した例に関連して説明した様々な説明的な論理ブロック、モジュール、回路、素子、および/または構成要素は、汎用プロセッサ、ディジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)または他のプログラマブル論理構成部品、単体ゲートもしくはトランジスタロジック、単体ハードウェア構成部品、または本明細書において説明した機能を実行するように設計されたこれらの任意の組合せで実装され得るまたは実行され得る。汎用プロセッサは、マイクロプロセッサであってもよいが、代替形態では、プロセッサは、いずれかの従来型のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであってもよい。プロセッサは、計算構成部品の組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、いくつかのマイクロプロセッサ、DSPコアと協働する1つもしくは複数のマイクロプロセッサ、またはいずれかの他のそのような構成としても実装されてもよい。
【００７２】
本明細書において開示した例に関連して説明した方法またはアルゴリズムは、処理ユニット、プログラミング命令、または他の指示の形式で、ハードウェア内に直接、プロセッサによって実行可能なソフトウェアモジュールに、または両者の組合せで具体化されてもよく、1つのデバイス内に含まれてもよいし、または複数のデバイスにわたって分散されてもよい。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または本技術において知られた記憶媒体のいずれかの他の形態内に存在してもよい。記憶媒体は、プロセッサが、記憶媒体から情報を読み出し、そこへ情報を書き込むことができるように、プロセッサに結合されてもよい。代替形態では、記憶媒体は、プロセッサに統合されてもよい。
【００７３】
本明細書において開示した態様に関連して説明した様々な説明的な論理ブロック、モジュール、回路、およびアルゴリズムステップが、電子ハードウェア、コンピュータソフトウェア、または両者の組合せとして実装され得ることを当業者ならさらに認識するであろう。ハードウェアとソフトウェアとのこの互換性を明確に例証するために、様々な説明的な構成要素、ブロック、モジュール、回路、およびステップが、それらの機能の点で一般的に上に説明されている。そのような機能が、ハードウェアまたはソフトウェアとして実装されるかどうかは、個々の用途および全体システムに課せられた設計制約に依存する。
【００７４】
本明細書において説明した発明の様々な特徴は、本発明から乖離せずに異なるシステムにおいて実装されてもよい。開示の前述の態様は、単に例であり、本発明を限定するように解釈されるべきはないことに留意すべきである。本開示の態様の説明は、説明的であることを意味し、特許請求の範囲の範囲を限定しないことを意味する。それはそうとして、本教示は、他のタイプの装置に容易に適用されることが可能であり、多くの代替形態、修正形態、および変形形態が、当業者には明らかであろう。
【符号の説明】
【００７５】
102  処理回路
104  メモリデバイス
106  ヘッダブロック
108  ブロック確保メモリ空間
110  MAC
112  MAC発生器
114  メモリブロック
116  MACアルゴリズム
118  秘密鍵
120  メッセージ入力
122  メモリアドレス
124  入力
202  処理回路
204  メモリデバイス
206  ヘッダブロック
208  ブロック確保メモリ空間
210  MAC
212  MAC発生器
214  メモリブロック
216  MAC-Liteアルゴリズム
217  スタートアップ生成マスク
218  スタートアップ生成鍵
220  メッセージ入力
222  メモリアドレス
224  入力
302  MAC-Liteアルゴリズム
304  鍵のセット
306  マスク
308  マスク値、マスク
310  入力
312  可変メモリアドレス
314  素数p
316  マスク
318  鍵
320  MAC値
602  処理回路
604  メモリデバイス
606  MAC発生器
608  データ構造
610  鍵事前生成回路/モジュール
612  マスク事前生成回路/モジュール
614  鍵セレクタ回路/モジュール
616  マスクセレクタ回路/モジュール
618  入力-鍵組合せ回路/モジュール
620  モジュロ演算器回路/モジュール
622  マスク組合せ回路/モジュール
624  MAC比較器回路/モジュール
626  安全なメモリデバイス
628  鍵のセット
630  マスクのセット
632  固定素数p
【図１】
2016508002.tif 000003
【図２】
2016508002.tif 000004
【図３】
2016508002.tif 000005
【図４】
2016508002.tif 000006
【図５】
2016508002.tif 000007
【図６】
2016508002.tif 000008
【図７】
2016508002.tif 000009
【手続補正書】
【提出日】平成27年3月25日(2015.3.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
認証コードを生成する方法であって、
処理回路のスタートアップでまたは前記処理回路上で実行されるセッションの開始で複数の別個の鍵を含む鍵のセットを事前生成するステップと、
複数の別個のマスクを含むマスクのセットを事前生成するステップと、
固定長データ構造に関係付けられた複数の変数入力を取得するステップと、
複数の一時的な値を取得するために、前記複数の変数入力の各々を前記鍵のセットからの選択した対応する鍵と組み合わせるステップと、
中間値を取得するために前記複数の一時的な値を組み合わせるステップと、
前記固定長データ構造についてのメッセージ認証コードを取得するために、前記中間値と前記マスクのセットからの選択したマスクとの間の演算を実行するステップと
を含む方法。
【請求項２】
前記マスクのセットが、前記処理回路のスタートアップでまたは前記処理回路上で実行される前記セッションの開始でも事前生成される、請求項1に記載の方法。
【請求項３】
前記鍵のセットおよびマスクのセットのうちの少なくとも一方が、ランダム値に基づいて生成される、請求項1に記載の方法。
【請求項４】
前記複数の一時的な値が、
組合せ値を取得するために前記複数の一時的な値を加算するステップと、
前記中間値を取得するために、前記組合せ値について事前選択した固定素数とのモジュロ演算を実行するステップと
によって組み合わせられる、請求項1に記載の方法。
【請求項５】
前記鍵のセット内の各鍵の前記値が、ゼロと前記事前選択した固定素数との間である、請求項4に記載の方法。
【請求項６】
前記中間値と前記選択したマスクとの間の前記演算が、ビット単位の排他的論理和演算である、請求項4に記載の方法。
【請求項７】
前記マスクおよび前記選択した対応する鍵の各々が、前記複数の変数入力のうちの少なくとも1つに基づいて選択される、請求項1に記載の方法。
【請求項８】
前記複数の変数入力のうちの前記少なくとも1つが、前記固定長データ構造に関係付けられたメモリアドレスである、請求項7に記載の方法。
【請求項９】
前記選択した対応する鍵の各々が、前記メモリアドレスに基づいて選択される、請求項8に記載の方法。
【請求項１０】
前記選択したマスクが、前記メモリアドレスに基づいて選択される、請求項8に記載の方法。
【請求項１１】
前記鍵のセットが、鍵のサブセットへと細分化され、鍵のサブセットだけが、前記メッセージ認証コードを計算するためにいずれかの鍵の1つのサブセットから選択される、請求項1に記載の方法。
【請求項１２】
スタートアップ間のまたはセッション間の期間にわたって安全なメモリ位置内に前記マスクのセットおよび鍵のセットのうちの少なくとも一方を記憶するステップ
をさらに含む、請求項1に記載の方法。
【請求項１３】
メモリデバイスの前記固定長データ構造内に前記メッセージ認証コードを記憶するステップ
をさらに含む、請求項1に記載の方法。
【請求項１４】
前記メッセージ認証コードが、前記固定長データ構造に関するヘッダブロック内に記憶される、請求項13に記載の方法。
【請求項１５】
前記データ構造から前に記憶したメッセージ認証コードを取得するステップと、
前記データ構造の完全性を確認するために、前記メッセージ認証コードを前記前に記憶したメッセージ認証コードと比較するステップと
をさらに含む、請求項1に記載の方法。
【請求項１６】
固定長データ構造を記憶するためのメモリデバイスと、
前記メモリデバイスに結合された処理回路であって、
前記処理回路が、
処理回路のスタートアップでまたは前記処理回路上で実行されるセッションの開始で複数の別個の鍵を含む鍵のセットを事前生成し、
複数の別個のマスクを含むマスクのセットを事前生成し、
前記固定長データ構造に関係付けられた複数の変数入力を取得し、
複数の一時的な値を取得するために、前記複数の変数入力の各々を前記鍵のセットからの選択した対応する鍵と組み合わせ、
中間値を取得するために前記複数の一時的な値を組み合わせ、
前記固定長データ構造についてのメッセージ認証コードを取得するために、前記中間値と前記マスクのセットからの選択したマスクとの間の演算を実行する
ように適合される、処理回路と
を備える、デバイス。
【請求項１７】
前記マスクのセットが、前記処理回路のスタートアップでまたは前記処理回路上で実行される前記セッションの開始でも事前生成される、請求項16に記載のデバイス。
【請求項１８】
前記鍵のセットおよびマスクのセットのうちの少なくとも一方が、ランダム値に基づいて生成される、請求項16に記載のデバイス。
【請求項１９】
前記複数の一時的な値が、
組合せ値を取得するために前記複数の一時的な値を加算することと、
前記中間値を取得するために、前記組合せ値について事前選択した固定素数とのモジュロ演算を実行することと
によって組み合わせられる、請求項16に記載のデバイス。
【請求項２０】
前記鍵のセット内の各鍵の前記値が、ゼロと前記事前選択した固定素数との間である、請求項19に記載のデバイス。
【請求項２１】
前記中間値と前記選択したマスクとの間の前記演算が、ビット単位の排他的論理和演算である、請求項19に記載のデバイス。
【請求項２２】
前記マスクおよび前記選択した対応する鍵の各々が、前記複数の変数入力のうちの少なくとも1つに基づいて選択される、請求項16に記載のデバイス。
【請求項２３】
前記複数の変数入力のうちの前記少なくとも1つが、前記固定長データ構造に関係付けられたメモリアドレスである、請求項22に記載のデバイス。
【請求項２４】
前記選択した対応する鍵の各々が、前記メモリアドレスに基づいて選択される、請求項23に記載のデバイス。
【請求項２５】
前記選択したマスクが、前記メモリアドレスに基づいて選択される、請求項23に記載のデバイス。
【請求項２６】
前記鍵のセットが、鍵のサブセットへと細分化され、鍵のサブセットだけが、前記メッセージ認証コードを計算するためにいずれかの鍵の1つのサブセットから選択される、請求項16に記載のデバイス。
【請求項２７】
前記処理回路が、
スタートアップ間のまたはセッション間の期間にわたって安全なメモリ位置内に前記マスクのセットおよび鍵のセットのうちの少なくとも一方を記憶する
ようにさらに適合される、請求項16に記載のデバイス。
【請求項２８】
前記処理回路が、
メモリデバイスの前記固定長データ構造内に前記メッセージ認証コードを記憶する
ようにさらに適合される、請求項16に記載のデバイス。
【請求項２９】
前記メッセージ認証コードが、前記固定長データ構造に関するヘッダブロック内に記憶される、請求項28に記載のデバイス。
【請求項３０】
前記処理回路が、
前記データ構造から前に記憶したメッセージ認証コードを取得し、
前記データ構造の完全性を確認するために、前記メッセージ認証コードを前記前に記憶したメッセージ認証コードと比較する
ようにさらに適合される、請求項16に記載のデバイス。
【請求項３１】
処理回路のスタートアップでまたは前記処理回路上で実行されるセッションの開始で複数の別個の鍵を含む鍵のセットを事前生成するための手段と、
複数の別個のマスクを含むマスクのセットを事前生成するための手段と、
固定長データ構造に関係付けられた複数の変数入力を取得するための手段と、
複数の一時的な値を取得するために、前記複数の変数入力の各々を前記事前生成した鍵のセットからの選択した対応する鍵と組み合わせるための手段と、
中間値を取得するために前記複数の一時的な値を組み合わせるための手段と、
前記固定長データ構造についてのメッセージ認証コードを取得するために、前記中間値と前記事前生成したマスクのセットからの選択したマスクとの間の演算を実行するための手段と
を備える、デバイス。
【請求項３２】
スタートアップ間のまたはセッション間の期間にわたって安全なメモリ位置内に前記マスクのセットおよび鍵のセットのうちの少なくとも一方を記憶するための手段
をさらに備える、請求項31に記載のデバイス。
【請求項３３】
メモリデバイスの前記固定長データ構造内に前記メッセージ認証コードを記憶するための手段
をさらに備える、請求項31に記載のデバイス。
【請求項３４】
前記メッセージ認証コードが、前記固定長データ構造に関するヘッダブロック内に記憶される、請求項33に記載のデバイス。
【請求項３５】
前記データ構造から前に記憶したメッセージ認証コードを取得するための手段と、
前記データ構造の完全性を確認するために、前記メッセージ認証コードを前記前に記憶したメッセージ認証コードと比較するための手段と
さらに備える、請求項31に記載のデバイス。
【請求項３６】
少なくとも1つの処理回路によって実行されるときに、前記少なくとも1つの処理回路に、
処理回路のスタートアップでまたは前記処理回路上で実行されるセッションの開始で複数の別個の鍵を含む鍵のセットを事前生成させ、
複数の別個のマスクを含むマスクのセットを事前生成させ、
固定長データ構造に関係付けられた複数の変数入力を取得し、
複数の一時的な値を取得するために、前記複数の変数入力の各々を前記鍵のセットからの選択した対応する鍵と組み合わせ、
中間値を取得するために前記複数の一時的な値を組み合わせ、
前記固定長データ構造についてのメッセージ認証コードを取得するために、前記中間値と前記マスクのセットからの選択したマスクとの間の演算を実行させる
1つまたは複数の命令を有するプロセッサ可読記憶媒体。
【請求項３７】
少なくとも1つの処理回路によって実行されるときに、前記少なくとも1つの処理回路に、
メモリデバイスの前記固定長データ構造内に前記メッセージ認証コードを記憶させる
1つまたは複数の命令をさらに有する、請求項36に記載のプロセッサ可読記憶媒体。
【請求項３８】
少なくとも1つの処理回路によって実行されるときに、前記少なくとも1つの処理回路に、
前記データ構造から前に記憶したメッセージ認証コードを取得させ、
前記データ構造の完全性を確認するために、前記メッセージ認証コードを前記前に記憶したメッセージ認証コードと比較させる
1つまたは複数の命令をさらに有する、請求項36に記載のプロセッサ可読記憶媒体。
【国際調査報告】
2016508002.tif 000010
2016508002.tif 000011
2016508002.tif 000012