(57)【要約】      （修正有）【課題】データが記憶されるメモリアドレスに基づいて、データをエンクリプトすることによりデータを保護する。【解決手段】メモリアドレス中に記憶するためにデータをエンクリプトするとき、メモリアドレスは第１の複数のブロック暗号ラウンド中でエンクリプトされる。このラウンドからの情報を使用して、データラウンドキーが発生される。記憶されるデータは、メモリアドレスと結合され、データラウンドキーを使用して第２の複数のブロック暗号ラウンド中でエンクリプトされ、メモリロケーションに記憶される。データをデクリプトするとき、メモリアドレスは再びエンクリプトされ、一方で、エンクリプトされ記憶されたデータが、データラウンドキーを使用して第２の複数のブロック暗号ラウンド中でデクリプトされて、部分的にデクリプトされたデータを得て、エンクリプトされたメモリアドレスに結合して、完全にデクリプトされたデータを得る。【選択図】図３
2014160256.tif 000002
【特許請求の範囲】
【請求項１】
メモリアドレス中に記憶させるデータをエンクリプトする方法において、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトすることと、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させることと、
前記第１の複数のブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、前記データを結合させることと、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中で前記データをエンクリプトすることと
を含む方法。
【請求項２】
前記メモリアドレスをエンクリプトすることは、前記データが利用可能になる前に開始される、請求項１記載の方法。
【請求項３】
前記メモリアドレスをエンクリプトすることは、
第１の変換関数にしたがって、前記メモリアドレスを変換することと、
前記変換されたメモリアドレスとラウンドキーとを混合することと
を含む、請求項１記載の方法。
【請求項４】
前記メモリアドレスをエンクリプトすることは、
前記メモリアドレスをセグメント化することと、
異なるメモリアドレスセグメント上にビット置換を実行することと
をさらに含む、請求項３記載の方法。
【請求項５】
前記データラウンドキーを発生させることは、
前記第１の複数のブロック暗号ラウンドの少なくともいくつかのものに対する、前記エンクリプトされたメモリアドレスから複数のビットを抽出することと、
前記抽出された複数のビットのセグメントから前記データラウンドキーを選択することと
を含む、請求項１記載の方法。
【請求項６】
前記データラウンドキーを発生させることは、前記抽出された複数のビットを、そこから前記データラウンドキーが選択されるストリングへと連結することを含む、請求項５記載の方法。
【請求項７】
前記第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用される前記データラウンドキーが、前記第１の複数のブロック暗号ラウンドの後期のラウンドからの前記エンクリプトされたメモリアドレスからのビットを使用して発生される、請求項５記載の方法。
【請求項８】
前記データは、可逆の演算によって、前記エンクリプトされたメモリアドレスに結合される、請求項１記載の方法。
【請求項９】
前記データをエンクリプトすることは、
第２の変換関数にしたがって、前記データを変換することと、
前記変換されたデータと前記データラウンドキーの１つ以上とを混合することと
を含む、請求項１記載の方法。
【請求項１０】
前記データをエンクリプトすることは、
前記データを複数のデータセグメントにセグメント化することと、
異なるデータセグメント上にビット置換を実行することと
をさらに含む、請求項１記載の方法。
【請求項１１】
前記第２の複数のブロック暗号ラウンドは、前記第１の複数のブロック暗号ラウンドより多い、請求項１記載の方法。
【請求項１２】
前記メモリアドレスは、前記第１の複数のブロック暗号ラウンドを通して反復的にエンクリプトされ、前記データは、前記第２の複数のブロック暗号ラウンドを通して反復的にエンクリプトされる、請求項１記載の方法。
【請求項１３】
前記メモリアドレス中に前記エンクリプトされたデータを記憶させることをさらに含む、請求項１記載の方法。
【請求項１４】
ブロック暗号デバイスにおいて、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトするアドレスエンクリプションモジュールと、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させるキースケジューリングモジュールと、
前記第１の複数のブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、前記データを結合させる結合器と、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中で前記データをエンクリプトするデータエンクリプションモジュールと
を具備するデバイス。
【請求項１５】
前記メモリアドレスをエンクリプトすることは、前記データが利用可能になる前に開始される、請求項１４記載のデバイス。
【請求項１６】
前記アドレスエンクリプションモジュールは、
第１の変換関数にしたがって、前記メモリアドレスを変換し、
前記変換されたメモリアドレスとラウンドキーとを混合する
ようにさらに構成されている、請求項１４記載のデバイス。
【請求項１７】
前記アドレスエンクリプションモジュールは、
前記メモリアドレスをセグメント化し、
異なるメモリアドレスセグメント上にビット置換を実行する
ようにさらに構成されている、請求項１４記載のデバイス。
【請求項１８】
前記キースケジューリングモジュールは、
前記第１の複数のブロック暗号ラウンドの少なくともいくつかのものに対する、前記エンクリプトされたメモリアドレスから複数のビットを抽出し、
前記抽出された複数のビットのセグメントから前記データラウンドキーを選択する
ようにさらに構成されている、請求項１４記載のデバイス。
【請求項１９】
前記キースケジューリングモジュールは、前記抽出された複数のビットを、そこから前記データラウンドキーが選択されるストリングへと連結するようにさらに構成されている、請求項１８記載のデバイス。
【請求項２０】
前記第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用される前記データラウンドキーが、前記第１の複数のブロック暗号ラウンドの後期のラウンドからの前記エンクリプトされたメモリアドレスからのビットを使用して発生される、請求項１８記載のデバイス。
【請求項２１】
前記データは、可逆の演算によって、前記エンクリプトされたメモリアドレスに結合される、請求項１４記載のデバイス。
【請求項２２】
前記データエンクリプションモジュールは、
第２の変換関数にしたがって、前記データを変換し、
前記変換されたデータと前記データラウンドキーの１つ以上とを混合する
ようにさらに構成されている、請求項１４記載のデバイス。
【請求項２３】
前記データエンクリプションモジュールは、
前記データを複数のデータセグメントにセグメント化し、
異なるデータセグメント上にビット置換を実行する
ようにさらに構成されている、請求項１４記載のデバイス。
【請求項２４】
前記第２の複数のブロック暗号ラウンドは、前記第１の複数のブロック暗号ラウンドより多い、請求項１４記載のデバイス。
【請求項２５】
前記メモリアドレスは、前記第１の複数のブロック暗号ラウンドを通して反復的にエンクリプトされ、前記データは、前記第２の複数のブロック暗号ラウンドを通して反復的にエンクリプトされる、請求項１４記載のデバイス。
【請求項２６】
ブロック暗号デバイスにおいて、
第１の複数のブロック暗号ラウンド中でメモリアドレスをエンクリプトする手段と、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させる手段と、
前記第１の複数のブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、前記データを結合させる手段と、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中で前記データをエンクリプトする手段と
を具備するデバイス。
【請求項２７】
処理回路を備えるプロセッサにおいて、
前記処理回路は、
第１の複数のブロック暗号ラウンド中でメモリアドレスをエンクリプトし、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させ、
前記第１の複数のブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、前記データを結合させ、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中で前記データをエンクリプトする
ように適合されているプロセッサ。
【請求項２８】
ブロック暗号エンクリプションのための命令を備える機械読取可能媒体において、
前記命令は、１つ以上のプロセッサによって実行されるときに、前記プロセッサに、
第１の複数のブロック暗号ラウンド中でメモリアドレスをエンクリプトさせ、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させ、
前記第１の複数のブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、前記データを結合させ、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中で前記データをエンクリプトさせる
機械読取可能媒体。
【請求項２９】
メモリアドレスから取り出されたデータをデクリプトする方法において、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得することと、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させることと、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得することと、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合させて、完全にデクリプトされたデータを取得することと
を含む方法。
【請求項３０】
前記メモリアドレスをエンクリプトすることは、前記データが利用可能になる前に開始される、請求項２９記載の方法。
【請求項３１】
前記メモリアドレスから前記エンクリプトされたデータを取り出すことをさらに含む、請求項２９記載の方法。
【請求項３２】
前記メモリアドレスをエンクリプトすることは、
第１の変換関数にしたがって、前記メモリアドレスを変換することと、
前記変換されたメモリアドレスとラウンドキーとを混合することと
を含む、請求項２９記載の方法。
【請求項３３】
前記メモリアドレスをエンクリプトすることは、
前記メモリアドレスをセグメント化することと、
異なるメモリアドレスセグメント上にビット置換を実行することと
をさらに含む、請求項３２記載の方法。
【請求項３４】
前記データラウンドキーを発生させることは、
前記第１の複数のブロック暗号ラウンドの少なくともいくつかのものに対する前記エンクリプトされたメモリアドレスから複数のビットを抽出することと、
前記抽出された複数のビットのセグメントから前記データラウンドキーを選択することと
を含む、請求項２９記載の方法。
【請求項３５】
前記データラウンドキーを発生させることは、前記抽出された複数のビットを、そこから前記データラウンドキーが選択されるストリングへと連結することを含む、請求項３４記載の方法。
【請求項３６】
前記第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用される前記データラウンドキーが、前記第１の複数のブロック暗号ラウンドの早期のラウンドからの前記エンクリプトされたメモリアドレスからのビットを使用して発生される、請求項３４記載の方法。
【請求項３７】
前記部分的にデクリプトされたデータは、可逆の演算によって、前記エンクリプトされたメモリアドレスに結合される、請求項２９記載の方法。
【請求項３８】
前記エンクリプトされたデータをデクリプトすることは、
第２の変換関数にしたがって、前記エンクリプトされたデータを変換することと、
前記変換されたエンクリプトデータと前記データラウンドキーの１つ以上とを混合することと
を含む、請求項２９記載の方法。
【請求項３９】
前記データをエンクリプトすることは、
前記エンクリプトされたデータを複数のエンクリプトされたデータセグメントにセグメント化することと、
異なるエンクリプトされたデータセグメント上にビット置換を実行することと
をさらに含む、請求項２９記載の方法。
【請求項４０】
前記第２の複数のブロック暗号ラウンドは、前記第１の複数のブロック暗号ラウンドより多い、請求項２９記載の方法。
【請求項４１】
前記第１の複数のブロック暗号ラウンドは、前記第２の複数のブロック暗号ラウンドと同時に実行される、請求項２９記載の方法。
【請求項４２】
ブロック暗号デバイスにおいて、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得するアドレスエンクリプションモジュールと、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させるキースケジューリングモジュールと、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得するデータデクリプションモジュールと、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合させて、完全にデクリプトされたデータを取得する結合器と
を具備するブロック暗号デバイス。
【請求項４３】
前記メモリアドレスをエンクリプトすることは、前記データが利用可能になる前に開始される、請求項４２記載のデバイス。
【請求項４４】
前記キースケジューリングモジュールは、
前記第１の複数のブロック暗号ラウンドの少なくともいくつかのものに対する前記エンクリプトされたメモリアドレスから複数のビットを抽出し、
前記抽出された複数のビットのセグメントから前記データラウンドキーを選択する
ようにさらに構成されている、請求項４２記載のデバイス。
【請求項４５】
前記第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用される前記データラウンドキーが、前記第１の複数のブロック暗号ラウンドの早期のラウンドからの前記エンクリプトされたメモリアドレスからのビットを使用して発生される、請求項４２記載のデバイス。
【請求項４６】
前記部分的にデクリプトされたデータは、可逆の演算によって、前記エンクリプトされたメモリアドレスに結合される、請求項４２記載のデバイス。
【請求項４７】
前記第２の複数のブロック暗号ラウンドは、前記第１の複数のブロック暗号ラウンドより多い、請求項４２記載のデバイス。
【請求項４８】
ブロック暗号デバイスにおいて、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得する手段と、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させる手段と、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得する手段と、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合させて、完全にデクリプトされたデータを取得する手段と
を具備するデバイス。
【請求項４９】
前記メモリアドレスから前記エンクリプトされたデータを取り出す手段をさらに含む、請求項４８記載のデバイス。
【請求項５０】
処理回路を備えるプロセッサにおいて、
前記処理回路は、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得し、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させ、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得し、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合させて、完全にデクリプトされたデータを取得する
ように適合されているプロセッサ。
【請求項５１】
ブロック暗号デクリプションのための命令を備える機械読取可能媒体において、
前記命令は、１つ以上のプロセッサによって実行されるときに、前記プロセッサに、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得させ、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させ、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得させ、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合させて、完全にデクリプトされたデータを取得させる
機械読取可能媒体。
【発明の詳細な説明】
【分野】
【０００１】
１つの特徴は、メモリコンテンツの保護に関連し、より詳細には、メモリデバイスに記憶されているコンテンツを保護するために、ブロック暗号を使用する方法に関連する。
【背景】
【０００２】
デジタルプロセッサは、セルラ電話機、コンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、ワイヤレスネットワークアクセスポイント等のような、数多くのデバイス中に存在する。ますます、メモリ中に記憶されているプログラムとデータを、かなり洗練されたツールでの攻撃に対して、保護することに対する必要性がある。デジタル権管理アプリケーションはまた、デジタルデータもしくはハードウェアに対するアクセスを制御するために、または、デジタルデータもしくはハードウェアの利用を制御するために、このような制約を課す。例えば、通常、中央処理ユニット（ＣＰＵ）が、何らかのオンチップメモリ記憶を有しており、データにアクセスしようとする試みが、デバイスを破壊することになるように、そしておそらくは、データにアクセスし得る前に、そのデータをスクランブルまたは破壊することになるように、データアクセスラインがＣＰＵまたはボード内に確実に埋め込まれるようにすることによって、オンチップメモリ記憶が安全にされてもよい。
【０００３】
規模と経済の理由のために、メモリを、個別のチップ中にパッケージできるようにすることが望ましい。しかしながら、メモリデバイスを個別のチップ中にパッケージングすることで、データがＣＰＵとメモリチップとの間を移動するときに、データが外部にさらされるので、攻撃者が、プローブのような単純なツールを使用することによって、アクセスすることを比較的容易にしてしまう。
【０００４】
別個のメモリチップに対してデータを記憶するときの、安全性の欠如に対処するための１つの方法は、メモリチップに書き込まれるデータが、攻撃者にとって無益なものになるように、ＣＰＵ上でエンクリプションプロセスを持つことである。反対に、データがメモリからフェッチされるとき、データはＣＰＵによってデクリプトされる。メモリの特定のブロックに対するアドレス情報と、ＣＰＵにだけ知られている暗号キーとは、エンクリプションアルゴリズムに対する、他の入力である。
【０００５】
メモリロケーションは、多くは、パターン化されたデータとともに、繰り返し書き込まれることができるので、ストリーム暗号と、ブロック暗号のための、対応しているカウンタモード（ＣＴＲ）のような演算モードとは、適切でない。暗号ブロック連鎖方式（ＣＢＣ）のような、モードに対する初期化ベクトルとしてアドレスを使用しているブロック暗号が、ここでの適切なメカニズムである（ＦＩＰＳ特別出版８００−３８Ａ−ブロック暗号に対する動作のモードを参照のこと）。しかしながら、１つの演算中でエンクリプトされることになるメモリのブロックは、暗号のネーティブブロックサイズに比較して、小さいことが多い（例えば、単一のブロックだけであることが多い）。したがって、ＣＢＣモードを、“連鎖的”として考えることは、単一のブロックに適用されるときに、直観に反している。
【０００６】
現在のブロックエンクリプションは、反復ブロック暗号として呼ばれることの多い構造を持つ。それぞれの反復はラウンドとして呼ばれ、繰り返される関数はラウンド関数として呼ばれる（例えば、４から３２のラウンドの間のどれかが典型的である）。それぞれのラウンドにおいて、ラウンド関数は、入力ブロックに対して適用されるときに、特定の量の錯乱と拡散を達成する。入力ブロックをエンクリプトするために、暗号は、入力ブロックの順列を生成させる。デクリプションは、プロセスを反対に実行することによって達成される。ブラックボックスとして見たときに、暗号は、入力として固定サイズのデータの単一ブロックと、入力ブロックに対してラウンド関数として繰り返し適用されるシークレットキーとを受け入れて、単一のブロックの暗号出力を出力する。可変サイズのキーを許容する暗号もあり、キーのサイズは、ブロックサイズより小さくてもよく、ブロックサイズと同じでもよく、ブロックサイズより大きくてもよい。例えば、アドバンストエンクリプション標準規格（ＡＥＳ）アルゴリズムは、１２８ビットのブロックサイズを持っており、１２８、１９２、または、２５６ビットのキーを受け入れることができる。
【０００７】
暗号内部には、たくさんのラウンド（例えば、１２８ビットキーを有するＡＥＳのケースでは、１０のラウンド）があってもよい。各ラウンドは、その入力の一部としてラウンドキーを持つ。ラウンドキーは、キースケジューリングと呼ばれるプロセス中で、シークレットキーから導出される。各ラウンドは、ブロックとラウンドキーの一部に何らかの非線形置換を実行することと、これに引き続いて、全体のブロックに対して、各置換の効果を広げるための、何らかの（線形であることが多い）拡散演算を意図する。これらの動作は、線形および微分の暗号解析のような、良く知られた暗号解析の形態を無効にすることを意図している。
【０００８】
メモリに対して送られることになるデータをエンクリプトするために、メモリアドレスは、初期化ベクトルとして利用されてもよい。このことは、同一のデータを有する異なるメモリロケーションが、それにもかかわらず、異なってエンクリプトされることになることを保証するだろう。このエンクリプションは、以下のように記述される。
【数１】
2014160256.tif 000003
【０００９】
ここで、Ｐは、入力平文（オリジナルデータブロック）であり、Ａは、メモリアドレスであり、Ｃは、出力暗号文（アドレスＡにおいて、メモリチップ中に現れることになる出力データブロック）であり、以下の記号は、ビットごとの排他的論理和（ＸＯＲ）演算であり、
【数２】
2014160256.tif 000004
【００１０】
そして、Ｅkは、シークレットキーＫとともに、データのブロックをエンクリプトするのに、ブロック暗号を使用することを意味する。これに相当するものとして、データがメモリから読み戻されることになるとき、反対の演算が使用されることになるだろう。
【数３】
2014160256.tif 000005
【００１１】
ここで、Ｄkは、そのデクリプションモードにおいてブロック暗号を使用することを意味する。しかしながら、一般的なブロック暗号アプリケーションは、メモリアクセススピードに比して、非常に長い待ち時間を持つ。パイプライン化することは、バルクエンクリプションに対してはこの問題に対処するが、単一のメモリロケーションをエンクリプトするときには役に立たない。
【００１２】
したがって、潜時を短縮しつつ、少数のメモリロケーションに対するブロック暗号エンクリプションを実現するための方法が必要とされている。
【概要】
【００１３】
データが記憶されることになるメモリアドレスに基づいて、データをエンクリプトすることによって、データを保護するブロック暗号が提供される。メモリアドレス中に記憶するためにデータをエンクリプトするとき、メモリアドレスは第１の複数のブロック暗号ラウンド中で、エンクリプトされる。第１の複数のブロック暗号ラウンドからの情報を使用して、データラウンドキーが発生される。記憶されることになるデータは、エンクリプトされたメモリアドレスと結合され、データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でエンクリプトされる。エンクリプトされたデータは、次に、メモリロケーションに記憶される。データをデクリプトするとき、メモリアドレスは、以前のように再びエンクリプトされ、一方で、エンクリプトされ、記憶されたデータが、データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でデクリプトされて、部分的にデクリプトされたデータを得る。部分的にデクリプトされたデータは、エンクリプトされたメモリアドレスに結合されて、完全にデクリプトされたデータを得る。
【００１４】
メモリアドレス中のデータエンクリプションの１つの例において、メモリアドレスは、第１の複数のブロック暗号ラウンド中でエンクリプトされる。メモリアドレスをエンクリプトすることは、（ａ）第１の変換関数にしたがって、メモリアドレスを変換すること、（ｂ）ラウンドキーと変換されたメモリアドレスを混合すること、（ｃ）メモリアドレスをセグメント化すること、および／または、（ｄ）異なるメモリアドレスセグメントにビット置換を実行することを含んでもよい。メモリアドレスは、記憶されることになるデータの前に、メモリアドレスをエンクリプトすることが開始されてもよい。結果として、メモリアドレスをエンクリプトすることは、データが利用可能になる前に開始してもよい。
【００１５】
データラウンドキーは、第１の複数のブロック暗号ラウンドの１つ以上からの情報を使用して、発生されてもよい。データラウンドキーを発生させることは、（ａ）第１の複数のブロック暗号ラウンドの少なくともいくつかに対するエンクリプトされたメモリアドレスからの複数のビットを抽出すること、（ｂ）抽出された複数のビットのセグメントからデータラウンドキーを選択すること、および／または、（ｃ）抽出された複数のビットを、そこからデータラウンドキーが選択されるストリングへと連結することを含んでいてもよい。
【００１６】
第１の複数のブロック暗号ラウンドの後で、データは、エンクリプトされたメモリアドレスに結合される。例えば、データは、可逆な演算（例えば、モジュラー加算／減算、ビットごとのＸＯＲ演算、等）によって、エンクリプトされたメモリアドレスと結合されてもよい。次に、データは、データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中で、エンクリプトされてもよい。第２の複数のブロック暗号ラウンドは、第１の複数のブロック暗号ラウンドより多くてもよい。データをエンクリプトすることは、（ａ）第２の変換関数にしたがって、データを変換すること、（ｂ）変換されたデータを、１つ以上のデータラウンドキーと混合させること、（ｃ）データを複数のデータセグメントへとセグメント化すること、および／または、（ｄ）異なるデータセグメントにビット置換を実行することを含んでいてもよい。
【００１７】
メモリアドレスは、第１の複数のブロック暗号ラウンドを通して、反復的にエンクリプトされてもよく、データは、第２の複数のブロック暗号ラウンドを通して、反復的にエンクリプトされてもよい。１つの例では、第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用されるデータラウンドキーが、第１の複数のブロック暗号ラウンドの後期のラウンドからのエンクリプトされたメモリアドレスからのビットを使用して発生される。エンクリプトされたデータは、引き続いて、メモリアドレス中に記憶されてもよい。
【００１８】
メモリアドレス中のデータをデクリプトする別の例において、メモリアドレスは、第１の複数のブロック暗号ラウンド中でエンクリプトされ、エンクリプトされたメモリアドレスが得られる。メモリアドレスをエンクリプトすることは、データが利用可能になる前に開始してもよい。
【００１９】
メモリアドレスをエンクリプトすることは、（ａ）第１の変換関数にしたがって、メモリアドレスを変換すること、（ｂ）ラウンドキーと変換されたメモリアドレスを混合すること、（ｃ）メモリアドレスをセグメント化すること、および／または、（ｄ）異なるメモリアドレスセグメントにビット置換を実行することを含んでもよい。
【００２０】
データラウンドキーは、第１の複数のブロック暗号ラウンドの１つ以上からの情報を使用して、発生されてもよい。データラウンドキーを発生させることは、（ａ）第１の複数のブロック暗号ラウンドの少なくともいくつかに対するエンクリプトされたメモリアドレスからの複数のビットを抽出すること、（ｂ）抽出された複数のビットのセグメントからデータラウンドキーを選択すること、および／または、抽出された複数のビットを、そこからデータラウンドキーが選択されるストリングへと連結することを含んでもよい。
【００２１】
エンクリプトされたデータが、メモリアドレスから取り出されてもよい。エンクリプトされたデータは、データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でデクリプトされてもよく、部分的にデクリプトされたデータを取得してもよい。エンクリプトされたデータをデクリプトすることは、（ａ）第２の逆変換関数にしたがって、エンクリプトされたデータを変換すること、（ｂ）変換されたエンクリプトされたデータを、１つ以上のデータラウンドキーと混合すること、（ｃ）エンクリプトされたデータを、複数のエンクリプトされたデータセグメントへとセグメント化すること、および／または、（ｄ）異なるエンクリプトされたデータセグメントにビット置換を実行することを含んでもよい。
【００２２】
部分的にデクリプトされたデータは、エンクリプトされたメモリアドレスと結合されて、完全にデクリプトされたデータを得てもよい。１つの例において、部分的にデクリプトされたデータは、可逆の演算（例えば、モジュラー加算／減算、ビットごとのＸＯＲ演算、等）によって、エンクリプトされたメモリアドレスと結合される。第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用されるデータラウンドキーが、第１の複数のブロック暗号ラウンドの早期のラウンドからのエンクリプトされたメモリアドレスからのビットを使用して、発生されてもよい。第２の複数のブロック暗号ラウンドは、第１の複数のブロック暗号ラウンドより多くてもよい。第１の複数のブロック暗号ラウンドは、第２の複数のブロック暗号ラウンドと同時に実行されてもよい。
【００２３】
これらの方法は、ハードウェア、ソフトウェア、および／または、これらの組み合わせ中で実現されてもよい。
【図面の簡単な説明】
【００２４】
同一の参照番号が全体を通して対応するものを指している図面を考慮に入れるときに、以下に述べる詳細な説明から、本観点の特徴、性質、および、利点がより明らかになるだろう。
【図１】図１は、平文入力ブロックが利用可能になる前に、ブロック暗号を部分的に処理することによって、ブロック暗号エンクリプション処理を改善し、これによって、ブロック暗号の待ち時間を短縮させる第１の特徴を図示するブロック図である。
【図２】図２は、ブロック暗号の第１の部分を、ブロック暗号の第２の部分と並列的に処理することによって、ブロック暗号デクリプションを改善し、これによって、ブロック暗号の待ち時間を短縮させる第２の特徴を図示するブロック図である。
【図３】図３は、メモリに記憶されることになるデータをエンクリプトするように構成されているブロック暗号の例を図示するブロック図である。
【図４】図４は、平文データをエンクリプトするように構成されているブロック暗号デバイスの機能的コンポーネントを図示するブロック図である。
【図５】図５は、メモリアドレスエンクリプションまたは変換モジュールの１つの例を図示するブロック図である。
【図６】図６は、平文データエンクリプションまたは変換モジュールの１つの例を図示するブロック図である。
【図７】図７は、データをエンクリプトするために、データが記憶されることになるメモリアドレスを使用するブロック暗号データエンクリプション方法を図示する。
【図８】図８は、メモリアドレスから読み出したデータをデクリプトするためのブロック暗号の処理を図示するブロック図である。
【図９】図９は、暗号文データをデクリプトするように構成されるブロック暗号デバイスの機能的コンポーネントを図示するブロック図である。
【図１０】図１０は、暗号文データデクリプションまたは逆変換モジュールの１つの例を図示するブロック図である。
【図１１】図１１は、ブロック暗号の待ち時間を短縮させるために、エンクリプトされたデータをデクリプトしつつ、メモリアドレスを同時にエンクリプトするブロック暗号を使用することによって、エンクリプトされたデータをデクリプトするための方法を図示する。
【図１２】図１２は、ブロック暗号のアドレスエンクリプションラウンドからの結果に基づいて、どのように、データエンクリプションおよびデクリプションラウンドに対するラウンドキーが、発生されることになるかの例を図示するブロック図である。
【図１３】図１３は、効率的なブロック暗号エンクリプションおよびデクリプションを実行するように構成されていてもよいデバイスを図示するブロック図である。
【発明の詳細な説明】
【００２５】
以下の記述において、特定の詳細は、実施形態の徹底的な理解を提供するために与えられる。しかしながら、実施形態は、これらの特定の詳細なしで実現されてもよいことが、当業者によって、理解されることになるだろう。例えば、不必要な詳細において実施形態をあいまいにしないように、ブロック図において回路を示すかもしれず、または、全く示さないかもしれない。他の例では、よく知られた回路、構造、および、技法は、実施形態をあいまいにしないために、詳細に示さないかもしれない。
【００２６】
概要  
いくつかの新規な特徴が、保護されたデータをメモリに対して書き込みし、そして、保護されたデータをメモリから読み出すのにブロック暗号を使用することによってもたらされる待ち時間に対処する。一般的に、書込動作より、はるかに多くの読出動作が存在する。先行技術において、エンクリプションとデクリプション演算は、（書込では）内部バス上でデータが利用可能になった後に、または、（読出では）メモリからフェッチされた後に開始する。しかし、典型的なハードウェア設計において、特に、メモリ読出のケースにおいては、アドレス情報は、データより、かなり前に利用可能である。
【００２７】
図１は、平文入力ブロックが利用可能になる前に、ブロック暗号を部分的に処理することによって、ブロック暗号エンクリプションプロセスを改善し、これによって、ブロック暗号の待ち時間を短縮する第１の特徴を図示するブロック図である。このエンクリプションプロセスは、メモリ書込動作の一部として実行されてもよく、メモリアドレスＡ１０６がエンクリプトされるアドレスフェーズ１０２と、データがエンクリプトされるデータフェーズ１０４とを含む。反復されたブロック暗号の多くの暗号ラウンドは、ブロック暗号１００に対するメモリアドレスＡ１０６と、シークレットキー１０８とを使用して、予め処理される。ブロック暗号エンクリプションのいくつかのラウンドの後で、平文データ１１２が挿入される（例えば、アドレスフェーズ１０２の結果とともに、ビットごとにＸＯＲされた）１１０。特に、平文データがもたらされる前に実行される、ブロック暗号１００のラウンド（すなわち、アドレスフェーズラウンド１０２）もあれば、暗号文１１４を発生させるのに平文データ１１２がもたらされた後で実行されるラウンド（すなわち、データフェーズラウンド１０４）もある。アドレスフェーズ１０２は、メモリアドレスＡ１０６をエンクリプトするだけでなく、これらのラウンドの結果を使用して、引き続いてのデータフェーズラウンド１０４（すなわち、キースケジューリング）に対するエンクリプションキーを発生させてもよい。平文データ１１２がもたらされる前と、平文データ１１２がもたらされた後との暗号ラウンドの数は、同じであってもよく、または、異なっていてもよい。このエンクリプションプロセスは、メモリ中に記憶されることになるデータをエンクリプトするときの待ち時間を短縮するために、平文データ１１２の前に、メモリアドレスＡ１０６が、利用可能であるという事実を利用している。
【００２８】
さらに、ブロック暗号に対して、より効率的なキースケジューリングが実行されてもよい。ブロック暗号の各ラウンドに対するラウンドキーが、実際の平文データが利用可能になる前に、アドレスデータとシークレットキーに基づいて発生されてもよい。ラウンドキーは、メモリアドレスに基づいて発生されるので、このことは、ブロック暗号変換が、各メモリアドレスに対して異なっていることになることを意味し、これによって、暗号解析に対して利用可能なリソースを、かなり制約させており、ブロック暗号のセキュリティを増加させている。
【００２９】
図２は、ブロック暗号の第１の部分を、ブロック暗号の第２の部分と並列的に処理することによって、ブロック暗号デクリプションを改善し、これによって、ブロック暗号の待ち時間を短縮させる第２の特徴を図示するブロック図である。このデクリプションプロセスは、メモリ読出し動作の一部として実行されてもよく、メモリアドレスＡ２０６がエンクリプトされるアドレスフェーズ２０２と、データがデクリプトされるデータフェーズ２０４とを含む。従来のデクリプション方法において行われていたように、全体のブロック暗号を逆方向に実行する代わりに、ブロック暗号２００のデータフェーズ２０４は、暗号文２１４とともに開始して、逆方向に処理される。同時に、ブロック暗号２００のアドレスフェーズ２０２は、メモリアドレスＡ２０６と、シークレットキー２０８を入力として使用して、順方向に実行される。これらの処理が、中央で出会うとき２１０、部分的にデクリプトされた暗号文と、部分的にエンクリプトされたメモリアドレスをＸＯＲすることによって、平文データ２１２が導出される。
【００３０】
ブロック暗号を使用した効率的なエンクリプション  
図３は、メモリに記憶されることになるデータをエンクリプトするように構成されているブロック暗号の例を図示するブロック図である。このプロセスにおいて、メモリアドレスＡ３０４は、記憶されることになるデータブロック（すなわち、平文３２０）が利用可能になる前に、利用可能であってもよい。反復されたブロック暗号３０２を用いて、データ（平文３２０）が、メモリに記憶されるときに、データをエンクリプトしてもよい。例えば、ＣＰＵは、データを記憶のためにメモリデバイスに対して送る前に、データをエンクリプトしてもよい。この例において、ブロック暗号３０２は、キースケジューリングおよびアドレスエンクリプションフェーズ３０３と、データエンクリプションフェーズ３０５とを含んでもよい。
【００３１】
キースケジューリングと、アドレスエンクリプションフェーズ３０３において、反復されたブロック暗号３０２のいくつかのラウンドは、ブロック暗号に対する、メモリアドレスＡ３０４とシークレットキーＫsecret３０６を使用して予め処理される。例えば、ブロック暗号３０２の対応しているアドレスエンクリプションラウンド３１６、３１７、および、３１８に対する、複数のラウンドキーＫ１  ３０７、Ｋ２  ３０８、および、Ｋｉ  ３０９が、実際の平文データブロックＰ３２０が利用可能になる前に、シークレットキーＫsecret３０６に基づいて発生される。各ラウンドキーＫ１  ３０７、Ｋ２  ３０８、および、Ｋｉ  ３０９は、前のラウンドキーに基づいて（例えば、Ｋ１は、Ｋsecretに基づいて、Ｋ２はＫ１に基づいて、等）導出されてもよい。１つの例にしたがうと、シークレットキー３０６は、ｗビット長であってもよく、各ラウンドキーＫ１、Ｋ２、および、Ｋｉは、ｎビット長であってもよく、ここで、ｎ＜ｗである。各ラウンドキーＫ１、Ｋ２、および、Ｋｉは、シークレットキーからの連続的ｎビットを取ることによって発生され、ここで、シークレットキー３０６は、最後に丸められる。それぞれのラウンドキーＫ１、Ｋ２、および、Ｋｉは、シークレットキー３０６の連続的ビットシーケンスの異なるグループを使用してもよい。
【００３２】
ブロック暗号３０２の複数のアドレスエンクリプションラウンド３１６、３１７、および、３１８は、メモリアドレス３０４と、対応しているラウンドキーＫ１  ３０７、Ｋ２  ３０８、および、Ｋｉ  ３０９とに基づいて発生されてもよい。例えば、ラウンド１  ３１６は、第１の線形および／または非線形関数Ｅaを使用して、メモリアドレスＡ３０４の全てまたは一部を変換し、キーＫ１との可逆の演算（例えば、モジュラー加算／減算、ビットごとのＸＯＲ演算、等）に基づいて、さらに変換される。
【数４】
2014160256.tif 000006
【００３３】
同様に、ラウンド２  ３１７は、第１の線形および／または非線形関数Ｅaを使用して、ラウンド１  ３１６の結果Ｒ１を変換し、キーＫ２との可逆の演算（例えば、ビットごとのＸＯＲ演算、等）に基づいて、結果をさらに変換する。
【数５】
2014160256.tif 000007
【００３４】
このプロセスは、各変換演算の効果を拡散させるために、複数回繰り返されてもよい。例えば、ラウンドｉ  ３１８は、第１の線形および／または非線形関数Ｅaを使用して、前のラウンドの結果Ｒｉ−１を変換し、キーＫｉとの可逆な演算（例えば、ビットごとのＸＯＲ演算、等）に基づいて、結果をさらに変換する。
【数６】
2014160256.tif 000008
【００３５】
第１のブロック暗号ラウンド３０３（メモリアドレスエンクリプションフェーズ）は、たとえ、（少なくとも部分的に）データエンクリプションフェーズ３０５においてエンクリプションに対してデータが利用可能になる前であっても、実行されてもよいことに留意すべきである。平文データブロックＰ３２０が利用可能になる前に、ブロック暗号を部分的に処理すること（または、予め処理すること）によって、ブロック暗号における待ち時間（すなわち、遅延）が短縮されてもよい。
【００３６】
さらに、キースケジューリングフェーズ３０３の間に、時間を節約するために、データエンクリプションフェーズ３０５に対するキー３１２、３１４、および３１５が、発生されてもよい。データエンクリプションフェーズ３０５キーＫｙ、Ｋｙ＋１、および、Ｋｘは、アドレスエンクリプションフェーズ３０３のそれぞれの暗号ラウンド結果Ｒ１、Ｒ２、Ｒｉの結果に基づいて発生されてもよい。１つの例では、ラウンド結果Ｒ１、Ｒ２、Ｒｉは、ｎビット長であってもよく（ここでｎは、正の整数であり）、少なくとも複数のこれらのラウンドからのいくつかのビットｇは、データエンクリプションフェーズキーＫｙ、Ｋｙ＋１、および、Ｋｘを発生させるのに使用され、ここで、ｇは、ｎより少ない整数である。例えば、以下の数式が成立するように、
【数７】
2014160256.tif 000009
【００３７】
さまざまなラウンド結果Ｒ１、Ｒ２、Ｒｉからの抽出されたビットを連結させる
【数８】
2014160256.tif 000010
【００３８】
ことによって、１組のビットＳ３１０が得られてもよい。ここで、ｐは、ビットの組Ｓ３１０中の合計ビット数を示す整数値である。いくつかの実現では、各ラウンドに対するビットの数ｇ１，ｇ２，・・・，ｇｉは同じであってもよく、他方、他の実現においては、ビットの数ｇ１，ｇ２，・・・，ｇｉは異なっていてもよい。キースケジューリングフェーズ３０３の間に、各キーに対して、ビットの組Ｓ３１０からビットのセグメントを抽出することによって、データエンクリプションフェーズキーＫｙ、Ｋｙ＋１、および、Ｋｘが発生されてもよい。１つの例において、キースケジューリングおよびアドレスエンクリプションフェーズ３０３の後期の暗号ラウンドに対応しているビットを、データエンクリプションフェーズ３０５中のより早いキーに対して使用してもよい。例えば、キーＫｙ３１２は、ビットの組Ｓ３１０のビットＳ（p-j+1）・・・pから取られていてもよく、これは、この例では、Ｒi1・・・gからのビットのサブセットに対応し、ここで、（ｇ＝ｇ１，ｇ２，・・・，ｇｉに対して）ｊ＜ｇである。同様に、キーＫｙ＋１  ３１４は、ビットの組Ｓ３１０のビットＳ（p-2j+1）・・・（p-j）に等しくてもよく、キーＫｘは、ビットの組Ｓ３１０のビットＳ1・・・jに等しくてもよい。ｊ＜ｇであるいくつかの実現では、キースケジューリングフェーズ３０３におけるラウンドの数は、データフェーズ３０５中のラウンドの数より少なくてもよい。例えば、ラウンド結果Ｒ１、Ｒ２、Ｒｉは、６３（６３）ビット長であり（すなわち、ｎ＝６３）、各ラウンドからの４５（４５）ビット（すなわち、ｇ＝４５）が、ビットの組Ｓ３１０に対して使用されるために抽出されてもよく、各データフェーズキーＫｙ  ３１２、Ｋｙ＋１  ３１４、および、Ｋｘ  ３１５は、３２（３２）ビット長（すなわち、ｊ＝３２）であってもよい。
【００３９】
一般的感覚において、１つ以上のラウンドキー関数ＫＳｘは、それぞれのラウンドキーＫ１，Ｋ２，Ｋｉ，Ｋｙ，Ｋｙ＋１，・・・，Ｋｘを発生させるのに使用されてもよい。１つの例において、第１のキースケジューリング関数ＫＳ１を使用して、（アドレスエンクリプションフェーズに対する）キーＫ１、Ｋ２、Ｋｉを発生させてもよく、第２のキースケジューリング関数ＫＳ１を使用して、（データエンクリプションフェーズに対する）キーＫｙ、Ｋｙ＋１、および、Ｋｘを発生させてもよい。例えば、Ｋｉ＝ＫＳ１（Ｋsecret,ｉ）となるように、第１のキースケジューリング関数ＫＳ１を使用して、キーＫｉを発生させてもよく、ここで、“ｉ”は、アドレスエンクリプションフェーズ３０３に対するラウンド数であり、他方、Ｋｙ＋ｉ＝ＫＳ２（Ｓ1・・・p,ｉ）となるように、第２のキースケジューリング関数ＫＳ２を使用して、キーＫｙ＋ｉを発生させてもよく、ここで、“ｙ＋ｉ”は、データエンクリプションフェーズ３０５に対するラウンド数である。
【００４０】
平文データブロックＰ３２０が利用可能になるとき、これは、ブロック暗号３０２の１つ以上のラウンド３１６、３１７、および、３１８が実行された後で、（例えば、キースケジューリングフェーズ３０３の後で）ブロック暗号３０２へと挿入されてもよい。平文データブロックＰ３２０を、最後の予め処理されたラウンド（例えば、ラウンドｉ  ３１８）の結果Ｒｉと、（ビットごとのベースで）ＸＯＲすることによって、ホワイトニング（whitening）と呼ばれることの多いプロセスにおいて、平文データブロックＰ３２０がブロック暗号３０２へと挿入されてもよい。平文データブロックＰ３２０がもたらされた後で、対応するラウンドキーＫｙ  ３１２、Ｋｙ＋１  ３１４、および、Ｋｘ  ３１５を使用して、データエンクリプションフェーズ３０５の１つ以上のラウンド３２２、３２４、および、３２６が実行される。
【００４１】
データエンクリプションフェーズ３０５の間のラウンドｙ  ３２２において、ホワイトニングされたデータブロックＤwhitened  ３２１が、第２の線形および／または非線形関数Ｅbによって変換されて、以下のような対応するラウンドキーＫｙとの可逆の演算（例えば、ビットごとのＸＯＲ演算）に基づいて、さらに変換される。
【数９】
2014160256.tif 000011
【００４２】
同様に、ラウンドｙ＋１  ３２４において、第２の線形および／または非線形関数Ｅbを使用して、ラウンドｙ  ３２２の結果Ｒｙを変換し、以下のような対応するラウンドキーＫｙ＋１との可逆の演算（例えば、モジュラー加算／減算、ビットごとのＸＯＲ演算）に基づいて、結果をさらに変換する。
【数１０】
2014160256.tif 000012
【００４３】
このプロセスは、各変換演算の効果を、全体のブロックに拡散させるために、複数回繰り返されてもよい。例えば、ラウンドｘ３２６は、第２の線形および／または非線形関数Ｅbを使用して、前のラウンドの結果Ｒｘ−１を変換し、さらに、以下のような対応するラウンドキーＫｘとの可逆の演算（例えば、ビットごとのＸＯＲ演算、等）に基づいて、結果をさらに変換して、暗号文３２８を得る。
【数１１】
2014160256.tif 000013
【００４４】
さまざまな実現において、キースケジューリングとアドレスエンクリプションフェーズ３０３と、データエンクリプションフェーズ３０５とのラウンドの数は、同じであってもよく、異なっていてもよい。ブロック暗号３０２の待ち時間を短縮させるように、データエンクリプションフェーズ３０５の間のラウンドの数が選択されてもよく、一方で、ブロック暗号３０２の待ち時間を短縮させるように、平文データブロックＰ３２０に対する十分な拡散の提供がもたらされる。
【００４５】
図４は、平文データをエンクリプトするように構成されているブロック暗号デバイスの機能的コンポーネントを図示するブロック図である。ブロック暗号デバイス４０２は、それが記憶されることになるメモリアドレス４０６と、シークレットキー４０８とに基づいて、平文データ４０４をエンクリプトしてもよい。ブロック暗号デバイス４０２は、変換もしくはエンクリプション関数と、ラウンドキー発生器４１６によって提供されたキーとにしたがって、メモリアドレス４０６を変換および／またはエンクリプションするアドレスエンクリプションモジュール４１２を備えてもよい。ラウンドキー発生器４１６は、シークレットキー４０８に基づいて、１つ以上のラウンドキーを発生させるように構成されていてもよい。キースケジューリングモジュール４１４はまた、アドレスエンクリプションモジュール４１２の結果に基づいて、１つ以上のデータキーを発生させてもよい。１つ以上のデータキーは、データキー記憶４２２モジュール中に記憶されてもよい。アドレスエンクリプションおよびデータスケジューリング関数は、各ラウンドにおいて、ラウンドキー発生器４１６からの異なるラウンドキーを使用して、複数のラウンドにおいて反復的に実行されてもよい。複数のラウンドの後で、結合器４１８は、可逆の演算（例えば、モジュラー加算／減算、ビットごとのＸＯＲ、等）を使用して、アドレスエンクリプションモジュール４１２の最後の結果と、平文データ４０４を結合させてもよい。結果としてのホワイトニングされた平文データは、次に、データキー記憶４２２からの記憶されたデータキーと、変換もしくはエンクリプション関数とを使用して、１つ以上のラウンドにおいて、データエンクリプションモジュール４２０によって、反復的に変換またはエンクリプトされて、暗号文４２４を生成させてもよい。暗号文４２４は、次に、メモリアドレス４０６において、メモリデバイス４２６に記憶されてもよい。
【００４６】
１つの例にしたがうと、ブロック暗号デバイスは、バイトアドレス指定が可能なメモリを有するシステム中で実現されてもよい。例えば、ブロック暗号を実現しているＣＰＵのワードサイズは３２ビットであってもよく、メモリアドレスもまた３２ビットであってもよい。上に述べたように、ブロック暗号デバイスは、アドレスエンクリプションフェーズと、データエンクリプションフェーズとを実行するように構成されていてもよい。
【００４７】
図５は、メモリアドレスエンクリプションまたは変換モジュールの１つの例を図示するブロック図である。アドレスエンクリプションフェーズ５０２の間に、複数の置換順列（Substitution-Permutation）暗号ラウンドを実行することによって、（６４ビットまで埋められた）入力メモリアドレスが変換されてもよい。オプション的に、入力メモリアドレス５０４は、最初に、ラウンドキーとともにＸＯＲすることによって、ホワイトニングされてもよい。アドレスセグメント化モジュール５０６は、６４ビットメモリアドレス５０４を、８つの８ビットセグメントへと分割してもよい。それぞれの８ビットセグメントは、次に、８×８置換ボックス５０８（例えば、アドバンスエンクリプション標準規格（ＡＥＳ）８×８置換ボックス）を通過する。各置換ボックス５０８からの結果は、次に、全体の組のセグメントに線形変換を実行する変換モジュール５１０に対して送られる。線形変換は、例えば、行列乗算Ｙ＝ＣＸとともに実現されてもよく、ここで、Ｘはメモリアドレスベクトルであり、Ｃは変換行列であり、Ｙは出力ベクトルである。１つの例において、変換行列Ｃは、分岐番号９を有する、最大距離分離（ＭＤＳ）マッピングとしてのＧＦ（２8）上の８×８行列であってもよい。行列Ｃは、そのサブ行列のすべてが、非特異のものである場合だけに、ＭＤＳであってもよい。ブロック暗号における多くの拡散レイヤ（例えば、ＳＨＡＲＫとＫｈａｚａｄ）は、この要件を満たすかもしれない。キー混合モジュール５１２は、次に、変換されたメモリアドレスを、６４ビットラウンドキーと（例えば、ビットごとのＸＯＲを使用して）混合する。各暗号ラウンドに対して、データラウンドキー抽出モジュール５１４は、次に、当面のエンクリプトされたメモリアドレスから複数のビットを抽出して、引き続いてのデータエンクリプションプロセスにおいて使用されてもよい１つ以上のデータラウンドキー５１８を取得してもよい。（例えば、セグメント化５０６、Ｓ−ボックスレイヤ５０８、変換５１０、および、キーミクスチャ５１２を含む）複数のこれらの暗号ラウンドが、各暗号ラウンドの最後において、実行されるデータラウンドキー抽出５１４とともに実行されてもよい。
【００４８】
図６は、平文データエンクリプションまたは変換モジュールの１つの例を図示するブロック図である。データエンクリプションフェーズ６０２の間に、平文データ６０４は、アドレスエンクリプションフェーズからのエンクリプトされたメモリアドレス６０３とともに、ビットごとのＸＯＲモジュール６０５によって、最初にホワイトニングされてもよい。エンクリプトされたメモリアドレス６０３は、エンクリプトされた平文データが記憶されることになるメモリアドレスに対応してもよい。例えば、平文データ６０４が、３２ビットブロックにおいて処理される場合、これは、メモリアドレスフェーズからの出力の３２ビットとともにＸＯＲされてもよい。データエンクリプションフェーズに対するラウンドキーは、メモリアドレスエンクリプションフェーズから導出されてもよい。データセグメント化モジュール６０６は、平文データ６０４を、４つの８ビットセグメントへと分割し、または、分ける。各８ビットデータセグメントは、置換ボックス６０８（例えば、ＡＥＳ  ８×８置換ボックス）を通過する。置換ボックス６０８からの結果は、次に、線形変換モジュール６１０（例えば、ＡＥＳ  ＭＤＳマッピング）によって変換される。キー混合モジュール６１２は、次に、結果としての変換された平文データを、対応するラウンドキーとともにビットごとにＸＯＲしてもよい。このプロセスは、各ラウンドに対して異なるラウンドキーを使用して、複数回繰り返されてもよい。データエンクリプションフェーズ６０２の最後の暗号ラウンドの結果は、対応するアドレスエンクリプションフェーズの間に使用されるメモリアドレス中に記憶されることができる出力暗号文６１４である。
【００４９】
図７は、データをエンクリプトするために、データが記憶されることになるメモリアドレスを使用するブロック暗号エンクリプション方法を図示する。この方法において、データが実際に、記憶のために準備が整う前に、または、利用可能になる前に、メモリアドレスをエンクリプトし、データラウンドキーを発生させるために、第１の組の暗号ラウンドが実行される。次に、データをエンクリプトするために、第２の組の暗号ラウンドが実行される。
【００５０】
プロセッサは、データが実際に受信される前に、記憶されることになるデータに対するメモリアドレスを取得してもよい（７０２）。第１の複数のブロック暗号ラウンド中でメモリアドレスをエンクリプトしてもよい（７０４）。このようなメモリアドレスエンクリプションは、（ａ）メモリアドレスを、複数のメモリアドレスセグメントへとセグメント化すること、（ｂ）異なるメモリアドレスセグメントにビット置換を実行すること、（ｃ）第１の変換関数にしたがって、メモリアドレスを変換すること、および／または、（ｄ）ラウンドキーと変換されたメモリアドレスを混合することを含んでもよい。メモリアドレスは、第１の複数のブロック暗号ラウンドを通して、反復的にエンクリプトされてもよい。
【００５１】
データラウンドキーは、第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して発生されてもよい（７０６）。データラウンドキーは、（ａ）第１の複数のブロック暗号ラウンドの少なくともいくつかに対するエンクリプトされたメモリアドレスからの複数のビットを抽出すること、（ｂ）抽出された複数のビットのセグメントからデータラウンドキーを選択すること、および／または、（ｃ）抽出された複数のビットを、そこからデータラウンドキーが選択されるストリングへと連結することによって発生されてもよい。
【００５２】
記憶されることになるデータは、次に、第１の複数のブロック暗号ラウンドの後で、エンクリプトされたメモリアドレスと結合されてもよい（７０８）。１つの例において、データは、可逆な演算（例えば、ビットごとのＸＯＲ演算）によって、エンクリプトされたメモリアドレスと結合されてもよい。データは、次に、データラウンドキーを使用して、第２の複数のブロック暗号ラウンドにおいて、エンクリプトされてもよい（７１０）。このようなデータエンクリプションは、（ａ）データを複数のセグメントへとセグメント化すること、（ｂ）異なるデータセグメントにビット置換を実行すること、（ｃ）第２の変換関数にしたがって、データを変換すること、および／または、（ｄ）変換されたデータを、１つ以上のデータラウンドキーと混合させることを含んでもよい。データは、第２の複数のブロック暗号ラウンド上で、反復的にエンクリプトされてもよい。１つの例では、第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用されるデータラウンドキーが、第１の複数のブロック暗号ラウンドの後期のラウンドからのエンクリプトされたメモリアドレスからのビットを使用して発生される。第２の複数のブロック暗号ラウンドは、第１の複数のブロック暗号ラウンドより多くてもよい。エンクリプトされたデータは、次に、メモリアドレス７１２へと記憶されてもよい。
【００５３】
ブロック暗号を使用した効率的なデクリプション
図８は、メモリアドレスから読み出したデータをデクリプションするためのブロック暗号の処理を図示するブロック図である。データは、例えば、図１、および、３−７において図示した方法を使用して、以前にエンクリプトされていてもよい。デクリプションモードにおいて、従来のデクリプション方法において行われるように、全体のブロック暗号を逆方向に実行する代わりに、ブロック暗号８０２の第２のフェーズ８０５が暗号文８２８とともに開始して、逆方向に処理される一方で、第１のフェーズ８０３が、同時に順方向に処理される。一般的に、第１の組のブロック暗号ラウンド８０３は、第２の組のブロック暗号ラウンド８０５と並列的に処理され、これによって、ブロック暗号８０２の待ち時間を減少させている。すなわち、第１のブロック暗号ラウンド８０３（メモリアドレスエンクリプションフェーズ）は、エンクリプトされたデータが、第２のブロック暗号ラウンド８０５による処理のために利用可能になる前、または、取得される前でさえも、（少なくとも部分的に）実行されてもよい。キースケジューリングおよびアドレスエンクリプションフェーズ８０３において、（そこから暗号文データ８２８が取得される）メモリアドレス８０４が、複数の暗号ラウンドにおいてエンクリプトされる。その間に、データデクリプションフェーズ８０５において、キースケジューリングフェーズ８０３において発生されたデータラウンドキーを使用して、複数の暗号ラウンドにおいて、暗号文データ８２８がデクリプトされる。これらのフェーズ８０３から８０５からの結果は、次に結合されて（例えば、ＸＯＲされて）、オリジナル平文８２０を生成する。
【００５４】
キースケジューリングおよびアドレスエンクリプションフェーズ８０３において、そこから暗号文データ８２８が取り出されたメモリアドレス８０４がエンクリプトされる。反復されたブロック暗号８０２のいくつかのラウンドが、ブロック暗号８０２に対する、メモリアドレスＡ８０４と、シークレットキーＫsecret８０６とを使用して処理される。例えば、ブロック暗号８０２の対応するアドレスエンクリプションラウンド８１６、８１７、および、８１８に対する、複数のラウンドキーＫ１  ８０７、Ｋ２  ８０８、および、Ｋｉ  ８０９が、シークレットキーＫsecret８０６に基づいて発生される。各ラウンドキーＫ１  ８０７、Ｋ２  ８０８、および、Ｋｉ  ８０９が、従前のラウンドキーに基づいて導出されてもよい（例えば、Ｋ１は、Ｋsecretに基づいており、Ｋ２はＫ１に基づいている、等）。１つの例にしたがうと、シークレットキー８０６は、ｗビット長であってもよく、各ラウンドキーＫ１、Ｋ２、および、Ｋｉは、ｎビット長であり、ここで、ｎ＜ｗである。各ラウンドキーＫ１、Ｋ２、および、Ｋｉは、シークレットキー８０６からの連続的なｎビットを取ることによって発生され、ここで、シークレットキー８０６は、最終的に丸められることが考えられる。各ラウンドキーＫ１、Ｋ２、および、Ｋｉは、シークレットキー８０６の連続的ビットシーケンスの異なるグループを使用してもよい。
【００５５】
ブロック暗号８０２の複数のアドレスエンクリプションラウンド８１６、８１７、および、８１８は、メモリアドレス８０４と、対応するラウンドキーＫ１  ８０７、Ｋ２  ８０８、および、Ｋｉ  ８０９とに基づいて発生される。例えば、ラウンド１  ８１６は、第１の線形および／または非線形関数Ｅaを使用して、メモリアドレスＡ８０４の全て、もしくは、一部を変換し、キーＫ１との可逆の演算（例えば、モジュラー加算／減算、ビットごとのＸＯＲ、等）に基づいて、さらに変換する。
【数１２】
2014160256.tif 000014
【００５６】
同様に、ラウンド２  ８１７は、第１の線形および／または非線形関数Ｅaを使用して、ラウンド１  ８１６の結果Ｒ１を変換し、対応するキーＫ２とのビットごとのＸＯＲに基づいて、結果をさらに変換する。
【数１３】
2014160256.tif 000015
【００５７】
このプロセスは、全体のブロックに対して、各変換演算の効果を拡散させるために、複数回繰り返されてもよい。例えば、ラウンドｉ  ８１８は、第１の線形および／または非線形関数Ｅaを使用して、前のラウンドの結果Ｒｉ−１を変換し、対応するキーＫｉとのビットごとのＸＯＲに基づいて、結果をさらに変換する。
【数１４】
2014160256.tif 000016
【００５８】
さらに、キースケジューリングフェーズ８０３の間に、データデクリプションフェーズ８０５に対する、キー８１２、８１４、および、８１５が、時間を節約するために発生されてもよい。データデクリプションフェーズ８０５のキーＫｙ、Ｋｙ＋１、および、Ｋｘが、キースケジューリングフェーズキーＫ１、Ｋ２、および、Ｋｉに基づいて、発生されてもよい。１つの例において、暗号ラウンド結果Ｒ１、Ｒ２、Ｒｉは、ｎビット長であってもよく（ここで、ｎは正の整数であり）、これらのキーのそれぞれからのいくつかのビットｇを使用して、データフェーズキーＫｙ、Ｋｙ＋１、および、Ｋｘを発生させてもよく、ここで、ｇはｎより小さい整数である。例えば、以下の数式が成立するように、
【数１５】
2014160256.tif 000017
【００５９】
さまざまなラウンド結果Ｒ１、Ｒ２、Ｒｉからの抽出されたビットを連結させる
【数１６】
2014160256.tif 000018
【００６０】
ことによって、１組のビットＳ８１０が取得されてもよい。
【００６１】
ここで、ｐはビットの組Ｓ８１０中のビットの合計数を示す整数値である。いくつかの実現においては、各ラウンドに対するビットの数ｇ１，ｇ２，・・・，ｇｉは同一であってもよく、他方、他の実現においては、各ラウンドに対するビットの数ｇ１，ｇ２，・・・，ｇｉは異なっていてもよいことに留意すべきである。キースケジューリングフェーズ８０３の間に、データエンクリプションフェーズキーＫｙ、Ｋｙ＋１、および、Ｋｘは、各キーに対するビットの組Ｓ８１０からのビットのセグメントを抽出することにより生成されてもよい。
【００６２】
１つの例において、キースケジューリングフェーズ８０３の早期のラウンドに対応しているビットを、データデクリプションフェーズ８０５中の早期の暗号ラウンドキーに対して使用してもよい。このことは、データデクリプションフェーズ８０５を、アドレスエンクリプションフェーズ８０３と同時に、または、並列的に実行することを可能にする。例えば、キーＫｘ８１５は、第１の暗号ラウンドＲ１1・・・g1８１６から抽出されたビットのいくつかのものに対応するビットの組Ｓ８１０のビットＳ1・・・jに等しくてもよい。結果として、Ｒ１結果が発生されるとすぐに、デクリプションキーＫｘ８１５が取得できる。同様に、キーＫｙ＋１  ３１４は、ビットの組Ｓ３１０のビット  Ｓ(p−2j＋1)・・・（p−j）に等しくてもよい。同じく、キーＫｙ８１４は、この例では、Ｒｉ1・・・giからのビットのサブセットに対応するビットの組Ｓ８１０のビット  Ｓ(p−j＋1)・・・pから取られてもよく、ここで、ｊ＜ｇである。ｊ＜ｇであるいくつかの実現では、キースケジューリングフェーズ８０３における暗号ラウンドの数は、データデクリプションフェーズ８０５中のラウンドの数より少なくてもよい。例えば、ラウンド結果Ｒ１、Ｒ２、および、Ｒｉは、６３（６３）ビット長であり（すなわち、ｎ＝６３）、各ラウンドからの４５（４５）ビット（すなわち、ｇ＝４５）が、ビットの組Ｓ３１０に対して使用されるために抽出されてもよく、各データデクリプションフェーズキーＫｘ  ８１５、Ｋｙ＋１  ８１４、および、Ｋｙ  ８１２は、３２（３２）ビット長（すなわち、ｊ＝３２）であってもよい。
【００６３】
一般的な意味において、ラウンドキーＫ１，Ｋ２，Ｋｉ，Ｋｙ，Ｋｙ＋１・・・Ｋｘのそれぞれを発生させるために、１つ以上のラウンドキー関数ＫＳｘを使用してもよい。１つの例において、（アドレスエンクリプションフェーズに対する）キーＫ１，Ｋ２，Ｋｉを発生させるために、第１のキースケジューリング関数ＫＳ１を使用してもよく、（データデクリプションフェーズに対する）キーＫｙ，Ｋｙ＋１，Ｋｘを発生させるために、第２のキースケジューリング関数ＫＳ２を使用してもよい。例えば、Ｋｉ＝ＫＳ１（Ｋsecret，ｉ）となるように、キーＫｉを発生させるのに第１のキースケジューリング関数ＫＳ１を使用してもよく、ここで、“ｉ”は、アドレスエンクリプションフェーズ８０３に対するラウンド数である。他方、Ｋｙ＋ｉ＝ＫＳ２（Ｓ1・・・p，ｉ）となるように、キーＫｙ＋ｉを発生させるのに第２のキースケジューリング関数ＫＳ２を使用してもよく、ここで、“ｙ＋ｉ”は、データデクリプションフェーズ８０５に対するラウンド数である。
【００６４】
データデクリプションフェーズの間に、暗号文データ（ｃｔ）８２８が、複数のラウンドにわたって、キーＫｘ，Ｋｙ＋１，および、Ｋｙを使用して、デクリプトされる。例えば、ラウンドｘ８２６は、線形および／または非線形デクリプション関数Ｄbを使用して、結果の暗号文（ｃｔ）８２８を変換し、以下のような対応するキーＫｘとの演算（例えば、可逆のモジュラー加算／減算、ビットごとのＸＯＲ、等）に基づいて、結果をさらに変換して、結果Ｒｘを得る。
【数１７】
2014160256.tif 000019
【００６５】
このデクリプションプロセスは、記憶されたデータのエンクリプションを元に戻すために、複数回繰り返されてもよい。例えば、ラウンドｙ＋１  ８２４において、線形および／または非線形デクリプション関数Ｄbを使用して、前のラウンドからの結果Ｒｙ＋１を変換し、以下のような、対応するキーＫｙ＋１とのビットごとのＸＯＲに基づいた結果をさらに変換して、出力Ｒｙを得る。
【数１８】
2014160256.tif 000020
【００６６】
ラウンドｙ８２２において、結果Ｒｙは、線形および／または非線形デクリプション関数Ｄbを使用して変換され、以下のような、対応するラウンドキーＫｙとのビットごとのＸＯＲに基づいてさらに変換されて、ホワイトニングされたデータブロックＤwhitened８２１が得られる。
【数１９】
2014160256.tif 000021
【００６７】
ホワイトニングされたデータブロックＤwhitened８２１は、次に、可逆の演算（例えば、モジュラー加算／減算、ビットごとのＸＯＲ、等）を使用して、アドレスエンクリプションフェーズ８０３からの結果Ｒｉ（例えば、エンクリプトされたアドレス）と結合されて、平文データブロックＰ８２０が得られる。
【００６８】
さまざまな実現において、キースケジューリングおよびアドレスエンクリプションフェーズ８０３と、データデクリプションフェーズ８０５とのラウンドの数は、同一であってもよく、異なっていてもよい。データデクリプションフェーズ８０５において使用されるデクリプション関数Ｄbは、（図３の）データエンクリプションフェーズ３０５において使用されたエンクリプション関数Ｅbによるエンクリプションを元に戻すために選択されてもよい。例えば、デクリプション関数Ｄbは、エンクリプション関数Ｅb変換の逆変換であってもよい。
【００６９】
図９は、暗号文データをデクリプトするように構成されているブロック暗号デバイスの機能的コンポーネントを図示するブロック図である。ブロック暗号デバイス９０２は、変換またはエンクリプション関数と、ラウンドキー発生器９１６によって提供されるキーとにしたがって、メモリアドレス９０６を変換またはエンクリプトする、アドレスエンクリプションモジュール９１２を含んでもよい。メモリアドレス９０６は、暗号文データ９２４がメモリデバイス９２６から取り出されることになるロケーションであってもよいことに留意すべきである。ラウンドキー発生器９１６は、シークレットキー９０８に基づいて、１つ以上のラウンドキーを発生させるように構成されていてもよい。キースケジューリングモジュール９１４はまた、アドレス変換モジュール９１２の結果に基づいて、１つ以上のデータキーを発生させてもよい。１つ以上のデータキーは、データキー記憶装置９２２モジュール中に記憶されてもよい。アドレスエンクリプションおよびデータスケジューリング関数は、各ラウンドにおいて、ラウンドキー発生器９１６からの異なるラウンドキーを使用して、複数ラウンドにおいて反復的に実行されてもよい。同時に、または、並列的に、暗号文データ９２４は、データキー記憶装置９２２からの記憶されているデータキー、および／または、変換もしくはデクリプション関数を使用して、１つ以上のラウンドにおいて、データデクリプションモジュール９２０によって、反復的に変換またはデクリプトされて、ホワイトニングされた平文データを生み出してもよい。複数のデクリプションラウンドの後で、結合器９１８は、可逆の演算（例えば、モジュラー加算／減算、ビットごとのＸＯＲ演算、等）を使用して、データデクリプションモジュール９２０の最後の結果（ホワイトニングされた平文データ）を、アドレスエンクリプションモジュール９１２の最後の結果と結合させて、平分データ９０４を得てもよい。
【００７０】
アドレスエンクリプションモジュール９１２において、メモリアドレスは、エンクリプションモードにおいてブロック暗号デバイスによって行われたようにエンクリプトされてもよいことに留意すべきである。例えば、アドレスエンクリプションモジュール９１２は、図５に図示したような、複数の置換順列暗号ラウンドを含んでもよい。
【００７１】
図１０は、暗号文データデクリプションまたは逆変換モジュールの１つの例を図示するブロック図である。例えば、暗号文データデクリプションまたは逆変換モジュール１００２は、（図９の）データデクリプションモジュール９２０の一部として含まれてもよい。キー混合モジュール１０１２は、入力暗号文１０１４と、対応している暗号ラウンドキーとの間で、ビットごとのＸＯＲ演算を実行してもよい。データデクリプションフェーズに対する暗号ラウンドキーは、メモリアドレスエンクリプションフェーズから導出されてもよい。キー混合モジュール１０１２からの結果は、次に、逆線形変換モジュール１０１０（例えば、ＡＥＳ ＭＤＳマッピング）によって変換される。逆線形変換モジュール１０１０からの結果は、次に、データセグメント化モジュール１００９によって、複数の８ビットデータセグメントへとセグメント化される。複数の８ビットデータセグメントは、次に、置換ボックス１００８（例えば、ＡＥＳ  ８×８置換ボックス）を通過する。置換ボックス１００８は、（図６の）データエンクリプション置換ボックス６０８の反対の置換ボックスであってもよい。
【００７２】
データ結合器モジュール１００６は、置換ボックス１００８からの結果としての出力を結合して、出力のホワイトニングされた平文データを生み出してもよい。このプロセスは、各ラウンドに対して異なるラウンドキーを使用して、複数回繰り返されてもよい。データエンクリプションフェーズ１００２の最後の暗号ラウンドの結果が、ホワイトニングされた平文データである。ホワイトニングされた平文データは、次に、ビットごとのＸＯＲモジュール１００５によって、エンクリプトされたメモリアドレス１００３と結合されて、出力平文データ１００４を生み出す。エンクリプトされたメモリアドレス１００３は、そこから入力暗号文データ１０１４が取り出されたメモリアドレスに対応していてもよいことに留意すべきである。
【００７３】
図１１は、ブロック暗号の待ち時間を短縮させるために、エンクリプトされたデータをデクリプトしつつ、メモリアドレスを同時にエンクリプトするブロック暗号を使用することによって、エンクリプトされたデータをデクリプトするための方法を図示する。取り出されることになるエンクリプトされたデータに対するメモリアドレスが取得される（１１０２）。エンクリプトされたメモリアドレスを得るために、第１の複数のブロック暗号ラウンドにおいて、メモリアドレスがエンクリプトされる（１１０４）。このようなアドレスエンクリプションは、シークレットキーに基づいて発生された複数のラウンドキーを利用してもよい。さらに、メモリアドレスをエンクリプトすることは、（ａ）変換されたメモリアドレスを、ラウンドキーと混合すること、（ｂ）第１の変換関数にしたがって、メモリアドレスを変換すること、（ｃ）メモリアドレスをセグメント化すること、および／または、（ｄ）異なるメモリアドレスセグメントにビット置換を実行することを含んでもよい。
【００７４】
データラウンドキーはまた、第１の複数のブロック暗号ラウンドの１つ以上からの情報を使用して発生されてもよい（１１０６）。すなわち、第１の複数のブロック暗号ラウンドのうちの少なくともいくつかのものからの部分的にエンクリプトされたメモリアドレスを使用して、データラウンドキーを発生させてもよい。例えば、データラウンドキーを発生させることは、（ａ）第１の複数のブロック暗号ラウンドのうちの少なくともいくつかのものに対するエンクリプトされたメモリアドレスから複数のビットを抽出すること、（ｂ）抽出された複数のビットのセグメントからデータラウンドキーを選択すること、および／または、（ｃ）抽出された複数のビットを、そこからデータラウンドキーが選択されるストリングへと連結することを含んでもよい。
【００７５】
エンクリプトされたデータは、メモリアドレスから取り出されて（１１０８）、データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でデクリプトされて、部分的にデクリプトされたデータを得てもよい（１１１０）。第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用されるデータラウンドキーが、第１の複数のブロック暗号ラウンドの早期のラウンドからのエンクリプトされたメモリアドレスからのビットを使用して、発生されてもよい。１つの例において、エンクリプトされたデータをデクリプトすることは、（ａ）変換されたエンクリプトされたデータを、１つ以上のデータラウンドキーと混合すること、（ｂ）第２の逆変換関数にしたがって、エンクリプトされたデータを変換すること、（ｃ）エンクリプトされたデータを、複数のエンクリプトされたデータセグメントへとセグメント化すること、および／または、（ｄ）異なるエンクリプトされたデータセグメントにビット置換を実行することを含んでもよい。部分的にデクリプトされたデータは、エンクリプトされたメモリアドレスと結合されて、完全にデクリプトされたデータを得てもよい（１１１２）。１つの例において、部分的にデクリプトされたデータは、可逆の演算（例えば、ビットごとのＸＯＲ演算）によって、エンクリプトされたメモリアドレスと結合される。
【００７６】
第１の複数のブロック暗号ラウンドは、第２の複数のブロック暗号ラウンドと同時に実行されてもよく、これによって、デクリプション処理を迅速化してもよい。また、第２の複数のブロック暗号ラウンドは、第１の複数のブロック暗号ラウンドより多くてもよい。
【００７７】
ブロック暗号のための効率的なキースケジューリング  
１つの特徴にしたがうと、効率的にデータをエンクリプトおよびデクリプトするように、キースケジューリングが実行されてもよい。アドレスエンクリプションフェーズの間に、メモリアドレスをエンクリプトするために、複数の暗号ラウンドが反復的に実行されてもよく、ここで、メモリアドレスは、データが記憶されることになるロケーション、または、そこからデータが取り出されることになるロケーションである。各暗号ラウンドは、エンクリプトされたメモリアドレスを生み出す。これらの暗号ラウンドの１つ以上によって生み出された、エンクリプトされたメモリアドレスを（全体的に、もしくは、部分的に）使用して、データエンクリプション／デクリプションフェーズラウンドキーを発生させてもよい。
【００７８】
図１２は、ブロック暗号のアドレスエンクリプションラウンドからの結果に基づいて、どのように、データエンクリプションおよびデクリプションラウンドに対するラウンドキーが、発生されることになるかの例を図示するブロック図である。ブロック暗号がデータをエンクリプトしているとき、アドレスエンクリプションフェーズ１２０２の結果に基づいて、データラウンドキーが発生される。アドレスエンクリプションフェーズ１２０２の早期のラウンドの結果（例えば、Ｒ１  １２０６、Ｒ２  １２０８・・・）を使用して、データエンクリプションフェーズ１２０４において使用されることになる後期のデータエンクリプションラウンドキー（キーＥ６  １２１２、キーＥ５  １２１４・・・）を発生させる。同様に、アドレスエンクリプションフェーズ１２０２の後期のラウンドの結果（例えば、Ｒ３  １２１０・・・）を使用して、早期のデータエンクリプションラウンドキー（キーＥ１  １２２２、キーＥ２  １２２０・・・）を発生させる。
【００７９】
同様に、ブロック暗号がデータをデクリプトしているとき、データラウンドキーは、アドレスエンクリプションフェーズ１２０２の結果に基づいて発生される。アドレスエンクリプションフェーズ１２０２の早期のラウンドの結果（例えば、Ｒ１  １２０６、Ｒ２  １２０８・・・）を使用して、データデクリプションフェーズ１２２４において使用されることになる早期のデータエンクリプションラウンドキー（キーＤ１  １２２６、キーＤ２  １２２８・・・）を発生させる。同様に、アドレスエンクリプションフェーズ１２０２の後期のラウンドの結果（例えば、Ｒ３  １２１０・・・）を使用して、後期のデータデクリプションラウンドキー（キーＤ６  １２３６、キーＤ５  １２３４・・・）を発生させる。結果として、このことは、データデクリプションフェーズ１２２４が、アドレスエンクリプションフェーズ１２０２と同時に（例えば、時間期間をオーバーラップさせて、または、並列的に）実行されることを可能にしており、したがって、データをより効率的にデクリプトする。
【００８０】
さまざまな実現において、アドレスエンクリプションフェーズ、データエンクリプションフェーズ１２０４、および／または、データデクリプションフェーズ１２２４の暗号ラウンドの数は、この例において示したものよりも多くてもよく、この例において示したものよりも少なくてもよいことに留意すべきである。さらに、１つのオプション的な特徴にしたがうと、アドレスエンクリプションフェーズ１２０２の最後のラウンドの結果（例えば、Ｒ４  １２１１）の少なくともいくつかの部分は、平文データのホワイトニング演算のために予約されてもよい。結果として、アドレスエンクリプションフェーズ１２０２の最後のラウンドのこの結果（例えば、Ｒ４  １２１１）は、データラウンドキー発生に対して使用されなくてもよい。
【００８１】
いくつかの実施形態では、データエンクリプションラウンドキー（または、データデクリプションラウンドキー）は、アドレスエンクリプションフェーズ１２０２の１つ以上の結果からのビットのサブセットに基づいていてもよい。例えば、キーＥ１  １２２２は、Ｒ３  １２１０からのビットのサブセットに基づいていてもよく、キーＥ２  １２２２は、Ｒ２  １２０８およびＲ３  １２１０の両方からのビットのサブセットに基づいていてもよい。
【００８２】
データエンクリプション／デクリプションフェーズ１２０４／１２２４に対するエンリプション／デクリプションキーを発生させるのに、ブロック暗号によってメモリアドレスを使用するので、このことは、平文／暗号文のブロック暗号変換が、それぞれのメモリアドレスに対して異なっていてもよいので、暗号解析のために利用可能なリソースをかなり制約しており、ブロック暗号のセキュリティを増加させていることを意味することに留意すべきである。必ずしも早期のラウンドが、後期のラウンドと同一のブロックサイズを持っていなければならない訳ではない場合もあることに留意すべきである。例えば、メモリが３２ビットブロックにエンクリプトされることになる一方で、アドレスがこれより大きくなるかもしれないことは、非常にありがちである。第１のラウンドにおける並列化を介して得られることになる効率性がある。
【００８３】
ブロック暗号の１つの例にしたがうと、データエンクリプション／デクリプションは、バイトアドレス指定可能なメモリであってもよい。特に、ブロック暗号を実行しているプロセッサのワード（データブロック）サイズが３２ビットであり、アドレスがまた３２ビットである。アドレスエンクリプションフェーズからの結果の最後の３２ビットが、ホワイトニングキーとして使用されてもよい。アドレスエンクリプション結果（例えば、エンクリプトされたメモリアドレス）からの残りのビットは、データエンクリプションラウンドキーに対して使用される１組のＳへと連結されてもよい。３２ビット長のデータエンクリプションラウンドキーが、以下の数式のように、それぞれのデータエンクリプションラウンドｎ（例えば、ｎ＝０・・・５）に対して選択されてもよい。
【数２０】
2014160256.tif 000022
【００８４】
反対に、３２ビット長のデータデクリプションラウンドキーが、以下の数式のように、それぞれのデータデクリプションラウンドｎ（例えば、ｎ＝０・・・５）に対して選択されてもよい。
【数２１】
2014160256.tif 000023
【００８５】
図１３は、効率的なブロック暗号エンクリプションとデクリプションを実行するように構成されていてもよいデバイスを図示するブロック図である。処理回路１３０２は、メモリデバイス１３０６に結合されていてもよい。処理回路１３０２は、メモリデバイス１３０６に対してデータを書き込んでもよく、メモリデバイス１３０６からデータを読み出してもよい。処理回路１３０２は、メモリデバイス１３０６に対して記憶されることになるデータをエンクリプトし、メモリデバイス１３０６から取り出されることになるデータをデクリプトするブロック暗号１３０４を実行するように構成されていてもよい。このようなエンクリプションとデクリプションは、これに対してデータが書き込まれ、または、これからデータが読み出される実際のメモリアドレスに基づいていてもよい。例えば、ブロック暗号１３０４は、図１−１２に記述された動作の１つ以上を実行してもよい。
【００８６】
一般的に、本開示において記述された処理のほとんどのものは、類似の方法で実現されてもよいことを理解すべきである。何らかの回路または回路セクションが、１つ以上のプロセッサを有する集積回路の一部として単独で、または、組み合わせ中で実現されてもよい。１つ以上の回路は、集積回路、アドバンスＲＩＳＣマシン（ＡＲＭ）プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、汎用プロセッサ等で、実現されてもよい。
【００８７】
また、フローチャート、フロー図、構造図、または、ブロック図として示した処理として、実施形態を記述したことに留意すべきである。フローチャートは、シーケンス的なプロセスとして動作を記述したかもしれないが、動作の多くのものは、並列的に、または、同時に実行されることができる。さらに、動作の順序は、再構成することができる。その動作が完了したときに、処理は終了する。処理は、方法、関数、手続、サブルーチン、サブプログラム等に対応していてもよい。プロセスが関数に対応しているとき、その終了は、関数が呼出関数、または、主関数へと戻ることに対応する。
【００８８】
本出願において使用されるように、用語“コンポーネント”、“モジュール”、“システム”、および、類似物は、ハードウェア、ファームウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェア、または、実行中のソフトウェアのいずれかのコンピュータ関連のエンティティを指すことを意図している。例えば、コンポーネントは、これらに制限されるわけではないが、プロセッサ上で実行しているプロセス、プロセッサ、オブジェクト、実行可能命令、実行スレッド、プログラム、および／または、コンピュータであってもよい。例示として、コンピューティングデバイス上で実行されているアプリケーションと、コンピューティングデバイスとの両方が、コンポーネントであってもよい。１つ以上のコンポーネントは、プロセス、および／または、実行スレッド内に存在することができ、コンポーネントは、１つのコンピュータ上に、位置していてもよく、および／または、２つ以上のコンピュータの間に分散されていてもよい。さらに、これらのコンポーネントは、記憶されているさまざまなデータ構造を持っているさまざまなコンピュータ読取可能媒体から実行できる。コンポーネントは、１つ以上のデータパケットを持っている信号（例えば、ローカルシステム中で、分散システム中で、および／または、インターネットのような他のシステムとのネットワークを介して、信号によって、別のコンポーネントと対話している１つのコンポーネントからのデータ）にしたがうことのような、ローカルおよび／またはリモートのプロセスによって、通信してもよい。
【００８９】
さらに、記憶媒体は、データを記憶するための１つ以上のデバイスを表してもよく、読出専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリデバイス、および／または、情報を記憶するための、他の機械読取可能媒体を含んでいる。用語“機械読取可能媒体”は、これらに制限される訳ではないが、携帯型または据置型のデバイス、光学記憶デバイス、ワイヤレスチャネル、ならびに、命令および／またはデータを記憶、内包、もしくは、伝送することができる、他のさまざまな媒体を含む。
【００９０】
なおさらに、実施形態は、ハードウェア、ソフトウェア、ミドルウェア、マイクロコード、または、これらの何らかの組み合わせによって実現されてもよい。ソフトウェア、ファームウェア、ミドルウェア、または、マイクロコードにおいて実現されるとき、必要なタスクを実行するためのプログラムコードまたはコードセグメントは、記憶媒体または他の記憶装置のような機械読取可能媒体中に記憶されてもよい。プロセッサは、必要なタスクを実行してもよい。コードセグメントは、手続、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または、命令、データ構造、もしくは、プログラム記述の何らかの組み合わせを表してもよい。コードセグメントは、情報、データ、引数、パラメータ、もしくは、メモリコンテンツを送信および／または受信することによって、別のコードセグメントまたはハードウェア回路に結合されていてもよい。情報、引数、パラメータ、データ等は、メモリ共有、メッセージ送信、トークンバッシング、ネットワーク送信等を含む、何らかの適切な手段を介して、送られ、送出され、送信されてもよい。
【００９１】
図１、２、３、４、５、６、７、８、９、１０、１１、１２、および／または、１３に図示した、１つ以上のコンポーネント、ステップ、および／または、機能は、再配置されてもよく、および／または、単一のコンポーネント、ステップ、または、機能へと結合されてもよい。追加的なエレメント、コンポーネント、ステップ、および／または、機能が追加されてもよい。図３、４、８、９、および／または、１３に図示した、装置、デバイス、および／または、コンポーネントは、図１、２、５、６、７、１０、１１、および／または、１２に記述した方法、特徴、または、ステップのうちの１つ以上を実行するように構成されていてもよい。ここで記述した新規なアルゴリズムは、ソフトウェアおよび／または埋め込みハードウェア中で、効率的に実現されてもよい。
【００９２】
さらに、当業者は、ここで開示した実施形態に関連して説明した、さまざまな例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップが、電子的ハードウェア、コンピュータソフトウェア、または、これらの組み合わせとして実現されてもよいことを理解するだろう。このハードウェアとソフトウェアの相互交換可能性を明確に説明するために、一般的に、さまざまな例示的な構成部品、ブロック、モジュール、回路、およびステップを、これらの機能に関して上に説明した。このような機能がハードウェアとして、またはソフトウェアとして実現されるかどうかは、特定の応用と、全体のシステムに課される設計制約とに依拠する。
【００９３】
実施形態の記述は、例示的であることを意図しており、特許請求の範囲を制限することを意図していない。したがって、本教示は、他のタイプの装置に容易に適用することができ、数多くの変形、修正、および、変化が、当業者にとって明らかになるだろう。
【図１】
2014160256.tif 000024
【図２】
2014160256.tif 000025
【図３】
2014160256.tif 000026
【図４】
2014160256.tif 000027
【図５】
2014160256.tif 000028
【図６】
2014160256.tif 000029
【図７】
2014160256.tif 000030
【図８】
2014160256.tif 000031
【図９】
2014160256.tif 000032
【図１０】
2014160256.tif 000033
【図１１】
2014160256.tif 000034
【図１２】
2014160256.tif 000035
【図１３】
2014160256.tif 000036
【手続補正書】
【提出日】平成26年4月16日(2014.4.16)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
記憶デバイスのメモリアドレス中に記憶するデータをエンクリプトする方法において、
メモリアドレスエンクリプションラウンドからの出力が次のメモリアドレスエンクリプションラウンドへの入力として使用される第１の複数のシーケンシャルに反復するブロック暗号ラウンド中で前記メモリアドレスをエンクリプトすることと、
前記第１の複数の反復するブロック暗号ラウンドのうちの１つ以上の中間のラウンドからの情報を使用して、データラウンドキーを発生させることと、
前記第１の複数の反復するブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、前記データを結合して、結合されたデータを取得することと、
前記データラウンドキーを使用して、データエンクリプションラウンドからの出力が次のデータエンクリプションラウンドへの入力として使用される第２の複数のシーケンシャルに反復するブロック暗号ラウンド中で前記結合されたデータをエンクリプトすることと、
前記記憶デバイスの前記メモリアドレス中に前記エンクリプトされた結合されたデータを記憶することと
を含む方法。
【請求項２】
前記メモリアドレスをエンクリプトすることは、前記データが利用可能になる前に開始される、請求項１記載の方法。
【請求項３】
前記メモリアドレスをエンクリプトすることは、
第１の変換関数にしたがって、前記メモリアドレスを変換することと、
前記変換されたメモリアドレスとラウンドキーとを混合することと
を含む、請求項１記載の方法。
【請求項４】
前記データラウンドキーを発生させることは、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの少なくともいくつかのものに対する、前記エンクリプトされたメモリアドレスの複数の中間のラウンドから複数のビットを抽出することと、
前記抽出された複数のビットのセグメントから前記データラウンドキーを選択することと
を含む、請求項１記載の方法。
【請求項５】
前記データラウンドキーを発生させることは、前記抽出された複数のビットを、そこから前記データラウンドキーが選択されるストリングへと連結することを含む、請求項４記載の方法。
【請求項６】
前記第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用される前記データラウンドキーが、前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの後期のラウンドからの前記エンクリプトされたメモリアドレスからのビットを使用して発生される、請求項４記載の方法。
【請求項７】
前記データは、可逆の演算によって、前記エンクリプトされたメモリアドレスに結合される、請求項１記載の方法。
【請求項８】
前記結合されたデータをエンクリプトすることは、
第２の変換関数にしたがって、前記結合されたデータを変換することと、
前記変換された結合されたデータと前記データラウンドキーの１つ以上とを混合することと
を含む、請求項１記載の方法。
【請求項９】
前記結合されたデータをエンクリプトすることは、
前記結合されたデータを複数のデータセグメントにセグメント化することと、
異なるデータセグメント上にビット置換を実行することと
をさらに含む、請求項１記載の方法。
【請求項１０】
前記第２の複数のブロック暗号ラウンド中のブロック暗号ラウンドの数は、前記第１の複数のシーケンシャルに反復するブロック暗号ラウンド中のブロック暗号ラウンドの数より多い、請求項１記載の方法。
【請求項１１】
前記結合されたデータは、前記第２の複数のシーケンシャルに反復するブロック暗号ラウンドを通してシーケンシャルにエンクリプトされる、請求項１記載の方法。
【請求項１２】
ブロック暗号デバイスにおいて、
メモリアドレスエンクリプションラウンドからの出力が次のメモリアドレスエンクリプションラウンドへの入力として使用される第１の複数のシーケンシャルに反復するブロック暗号ラウンド中でメモリアドレスをエンクリプトするアドレスエンクリプションモジュールと、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドのうちの１つ以上の中間のラウンドからの情報を使用して、データラウンドキーを発生させるキースケジューリングモジュールと、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、データを結合して、結合されたデータを取得する結合器と、
前記データラウンドキーを使用して、データエンクリプションラウンドからの出力が次のデータエンクリプションラウンドへの入力として使用される第２の複数のシーケンシャルに反復するブロック暗号ラウンド中で前記結合されたデータをエンクリプトするデータエンクリプションモジュールと
を具備するデバイス。
【請求項１３】
前記メモリアドレスをエンクリプトすることは、前記データが利用可能になる前に開始される、請求項１２記載のデバイス。
【請求項１４】
前記アドレスエンクリプションモジュールは、
第１の変換関数にしたがって、前記メモリアドレスを変換し、
前記変換されたメモリアドレスとラウンドキーとを混合する
ようにさらに構成されている、請求項１２記載のデバイス。
【請求項１５】
前記キースケジューリングモジュールは、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの少なくともいくつかのものに対する、前記エンクリプトされたメモリアドレスから複数のビットを抽出し、
前記抽出された複数のビットのセグメントから前記データラウンドキーを選択する
ようにさらに構成されている、請求項１２記載のデバイス。
【請求項１６】
前記キースケジューリングモジュールは、前記抽出された複数のビットを、そこから前記データラウンドキーが選択されるストリングへと連結するようにさらに構成されている、請求項１５記載のデバイス。
【請求項１７】
前記第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用される前記データラウンドキーが、前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの後期のラウンドからの前記エンクリプトされたメモリアドレスからのビットを使用して発生される、請求項１５記載のデバイス。
【請求項１８】
前記データエンクリプションモジュールは、
第２の変換関数にしたがって、前記結合されたデータを変換し、
前記変換された結合されたデータと前記データラウンドキーの１つ以上とを混合する
ようにさらに構成されている、請求項１２記載のデバイス。
【請求項１９】
前記データエンクリプションモジュールは、
前記結合されたデータを複数のデータセグメントにセグメント化し、
異なるデータセグメント上にビット置換を実行する
ようにさらに構成されている、請求項１２記載のデバイス。
【請求項２０】
前記第２の複数のブロック暗号ラウンド中のブロック暗号ラウンドの数は、前記第１の複数のシーケンシャルに反復するブロック暗号ラウンド中のブロック暗号ラウンドの数より多い、請求項１２記載のデバイス。
【請求項２１】
前記結合されたデータは、前記第２の複数のシーケンシャルに反復するブロック暗号ラウンドを通してシーケンシャルにエンクリプトされる、請求項１２記載のデバイス。
【請求項２２】
ブロック暗号デバイスにおいて、
メモリアドレスエンクリプションラウンドからの出力が次のメモリアドレスエンクリプションラウンドへの入力として使用される第１の複数のシーケンシャルに反復するブロック暗号ラウンド中でメモリアドレスをエンクリプトする手段と、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドのうちの１つ以上の中間のラウンドからの情報を使用して、データラウンドキーを発生させる手段と、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、データを結合して、結合されたデータを取得する手段と、
前記データラウンドキーを使用して、データエンクリプションラウンドからの出力が次のデータエンクリプションラウンドへの入力として使用される第２の複数のシーケンシャルに反復するブロック暗号ラウンド中で前記結合されたデータをエンクリプトする手段と
を具備するデバイス。
【請求項２３】
処理回路を備えるプロセッサにおいて、
前記処理回路は、
メモリアドレスエンクリプションラウンドからの出力が次のメモリアドレスエンクリプションラウンドへの入力として使用される第１の複数のシーケンシャルに反復するブロック暗号ラウンド中でメモリアドレスをエンクリプトし、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドのうちの１つ以上の中間のラウンドからの情報を使用して、データラウンドキーを発生させ、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、データを結合して、結合されたデータを取得し、
前記データラウンドキーを使用して、データエンクリプションラウンドからの出力が次のデータエンクリプションラウンドへの入力として使用される第２の複数のシーケンシャルに反復するブロック暗号ラウンド中で前記結合されたデータをエンクリプトする
ように適合されているプロセッサ。
【請求項２４】
ブロック暗号エンクリプションのための命令を備える非一時的機械読取可能媒体において、
前記命令は、１つ以上のプロセッサによって実行されるときに、前記プロセッサに、
メモリアドレスエンクリプションラウンドからの出力が次のメモリアドレスエンクリプションラウンドへの入力として使用される第１の複数のシーケンシャルに反復するブロック暗号ラウンド中でメモリアドレスをエンクリプトさせ、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドのうちの１つ以上の中間のラウンドからの情報を使用して、データラウンドキーを発生させ、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、データを結合して、結合されたデータを取得させ、
前記データラウンドキーを使用して、データエンクリプションラウンドからの出力が次のデータエンクリプションラウンドへの入力として使用される第２の複数のシーケンシャルに反復するブロック暗号ラウンド中で前記結合されたデータをエンクリプトさせる
非一時的機械読取可能媒体。
【請求項２５】
記憶デバイスのメモリアドレスから取り出されたデータをデクリプトする方法において、
メモリアドレスエンクリプションラウンドからの出力が次のメモリアドレスエンクリプションラウンドへの入力として使用される第１の複数のシーケンシャルに反復するブロック暗号ラウンド中で前記メモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得することと、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドのうちの１つ以上の中間のラウンドからの情報を使用して、データラウンドキーを発生させることと、
前記記憶デバイスの前記メモリアドレスからの前記エンクリプトされたデータを取り出すことと、
前記データラウンドキーを使用して、データデクリプションラウンドからの出力が次のデータデクリプションラウンドへの入力として使用される第２の複数のシーケンシャルに反復するブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得することと、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合して、完全にデクリプトされたデータを取得することと
を含む方法。
【請求項２６】
前記メモリアドレスをエンクリプトすることは、前記データが利用可能になる前に開始される、請求項２５記載の方法。
【請求項２７】
前記メモリアドレスをエンクリプトすることは、
第１の変換関数にしたがって、前記メモリアドレスを変換することと、
前記変換されたメモリアドレスとラウンドキーとを混合することと
を含む、請求項２５記載の方法。
【請求項２８】
前記データラウンドキーを発生させることは、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの少なくともいくつかのものに対する前記エンクリプトされたメモリアドレスの複数の中間のラウンドから複数のビットを抽出することと、
前記抽出された複数のビットのセグメントから前記データラウンドキーを選択することと
を含む、請求項２５記載の方法。
【請求項２９】
前記データラウンドキーを発生させることは、前記抽出された複数のビットを、そこから前記データラウンドキーが選択されるストリングへと連結することを含む、請求項２８記載の方法。
【請求項３０】
前記第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用される前記データラウンドキーが、前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの早期のラウンドからの前記エンクリプトされたメモリアドレスからのビットを使用して発生される、請求項２８記載の方法。
【請求項３１】
前記部分的にデクリプトされたデータは、可逆の演算によって、前記エンクリプトされたメモリアドレスに結合される、請求項２５記載の方法。
【請求項３２】
前記エンクリプトされたデータをデクリプトすることは、
第２の逆変換関数にしたがって、前記エンクリプトされたデータを変換することと、
前記変換されたエンクリプトされたデータと前記データラウンドキーの１つ以上とを混合することと
を含む、請求項２５記載の方法。
【請求項３３】
前記第２の複数のブロック暗号ラウンド中のブロック暗号ラウンドの数は、前記第１の複数のシーケンシャルに反復するブロック暗号ラウンド中のブロック暗号ラウンドの数より多い、請求項２５記載の方法。
【請求項３４】
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドは、前記第２の複数のブロック暗号ラウンドと同時に実行される、請求項２５記載の方法。
【請求項３５】
ブロック暗号デバイスにおいて、
メモリアドレスエンクリプションラウンドからの出力が次のメモリアドレスエンクリプションラウンドへの入力として使用される第１の複数のシーケンシャルに反復するブロック暗号ラウンド中でメモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得するアドレスエンクリプションモジュールと、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドのうちの１つ以上の中間のラウンドからの情報を使用して、データラウンドキーを発生させるキースケジューリングモジュールと、
前記データラウンドキーを使用して、データデクリプションラウンドからの出力が次のデータデクリプションラウンドへの入力として使用される第２の複数のシーケンシャルに反復するブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得するデータデクリプションモジュールと、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合して、完全にデクリプトされたデータを取得する結合器と
を具備するブロック暗号デバイス。
【請求項３６】
前記メモリアドレスをエンクリプトすることは、前記データが利用可能になる前に開始される、請求項３５記載のデバイス。
【請求項３７】
前記キースケジューリングモジュールは、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの少なくともいくつかのものに対する前記エンクリプトされたメモリアドレスから複数のビットを抽出し、
前記抽出された複数のビットのセグメントから前記データラウンドキーを選択する
ようにさらに構成されている、請求項３５記載のデバイス。
【請求項３８】
前記第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用される前記データラウンドキーが、前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの早期のラウンドからの前記エンクリプトされたメモリアドレスからのビットを使用して発生される、請求項３５記載のデバイス。
【請求項３９】
前記第２の複数のブロック暗号ラウンド中のブロック暗号ラウンドの数は、前記第１の複数のシーケンシャルに反復するブロック暗号ラウンド中のブロック暗号ラウンドの数より多い、請求項３５記載のデバイス。
【請求項４０】
ブロック暗号デバイスにおいて、
メモリアドレスエンクリプションラウンドからの出力が次のメモリアドレスエンクリプションラウンドへの入力として使用される第１の複数のシーケンシャルに反復するブロック暗号ラウンド中でメモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得する手段と、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドのうちの１つ以上の中間のラウンドからの情報を使用して、データラウンドキーを発生させる手段と、
前記データラウンドキーを使用して、データデクリプションラウンドからの出力が次のデータデクリプションラウンドへの入力として使用される第２の複数のシーケンシャルに反復するブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得する手段と、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合して、完全にデクリプトされたデータを取得する手段と
を具備するデバイス。
【請求項４１】
前記メモリアドレスから前記エンクリプトされたデータを取り出す手段をさらに含む、請求項４０記載のデバイス。
【請求項４２】
処理回路を備えるプロセッサにおいて、
前記処理回路は、
メモリアドレスエンクリプションラウンドからの出力が次のメモリアドレスエンクリプションラウンドへの入力として使用される第１の複数のシーケンシャルに反復するブロック暗号ラウンド中でメモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得し、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドのうちの１つ以上の中間のラウンドからの情報を使用して、データラウンドキーを発生させ、
前記データラウンドキーを使用して、データデクリプションラウンドからの出力が次のデータデクリプションラウンドへの入力として使用される第２の複数のシーケンシャルに反復するブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得し、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合して、完全にデクリプトされたデータを取得する
ように適合されているプロセッサ。
【請求項４３】
ブロック暗号デクリプションのための命令を備える非一時的機械読取可能媒体において、
前記命令は、１つ以上のプロセッサによって実行されるときに、前記プロセッサに、
メモリアドレスエンクリプションラウンドからの出力が次のメモリアドレスエンクリプションラウンドへの入力として使用される第１の複数のシーケンシャルに反復するブロック暗号ラウンド中でメモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得させ、
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドのうちの１つ以上の中間のラウンドからの情報を使用して、データラウンドキーを発生させ、
前記データラウンドキーを使用して、データデクリプションラウンドからの出力が次のデータデクリプションラウンドへの入力として使用される第２の複数のシーケンシャルに反復するブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得させ、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合して、完全にデクリプトされたデータを取得させる
非一時的機械読取可能媒体。
【請求項４４】
前記データラウンドキーの発生は、前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの完了の前に開始される、請求項１記載の方法。
【請求項４５】
早期のデータラウンドキーは、前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドの後期の中間のラウンドから情報を使用して計算される、請求項１記載の方法。
【請求項４６】
前記データラウンドキーの発生は、前記メモリアドレスをエンクリプトすることとオーバーラップする、請求項１記載の方法。
【請求項４７】
前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドのうちの１つ以上の中間のラウンドからの前記情報は、２つ以上のブロック暗号ラウンドの間の中間の結果である、請求項１記載の方法。
【請求項４８】
前記データラウンドキーは、前記エンクリプトされたメモリアドレスのための前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドからの複数の中間のラウンド結果から発生され、前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドからの前記複数の中間のラウンド結果は、前記データラウンドキーを発生するために発生と逆の順序で使用される、請求項１記載の方法。
【請求項４９】
前記データラウンドキーは、前記エンクリプトされたメモリアドレスのための前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドからの複数の中間のラウンド結果から発生され、前記第１の複数のシーケンシャルに反復するブロック暗号ラウンドからの前記複数の中間のラウンド結果は、前記データラウンドキーを発生するために発生と同じ順序で使用される、請求項２５記載の方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００９３
【補正方法】変更
【補正の内容】
【００９３】
実施形態の記述は、例示的であることを意図しており、特許請求の範囲を制限することを意図していない。したがって、本教示は、他のタイプの装置に容易に適用することができ、数多くの変形、修正、および、変化が、当業者にとって明らかになるだろう。  
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［１］
メモリアドレス中に記憶させるデータをエンクリプトする方法において、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトすることと、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させることと、
前記第１の複数のブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、前記データを結合させることと、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中で前記データをエンクリプトすることとを含む方法。
［２］
前記メモリアドレスをエンクリプトすることは、前記データが利用可能になる前に開始される、上記［１］の方法。
［３］
前記メモリアドレスをエンクリプトすることは、
第１の変換関数にしたがって、前記メモリアドレスを変換することと、
前記変換されたメモリアドレスとラウンドキーとを混合することとを含む、上記［１］の方法。
［４］
前記メモリアドレスをエンクリプトすることは、
前記メモリアドレスをセグメント化することと、
異なるメモリアドレスセグメント上にビット置換を実行することとをさらに含む、上記［３］の方法。
［５］
前記データラウンドキーを発生させることは、
前記第１の複数のブロック暗号ラウンドの少なくともいくつかのものに対する、前記エンクリプトされたメモリアドレスから複数のビットを抽出することと、
前記抽出された複数のビットのセグメントから前記データラウンドキーを選択することとを含む、上記［１］の方法。
［６］
前記データラウンドキーを発生させることは、前記抽出された複数のビットを、そこから前記データラウンドキーが選択されるストリングへと連結することを含む、上記［５］の方法。
［７］
前記第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用される前記データラウンドキーが、前記第１の複数のブロック暗号ラウンドの後期のラウンドからの前記エンクリプトされたメモリアドレスからのビットを使用して発生される、上記［５］の方法。
［８］
前記データは、可逆の演算によって、前記エンクリプトされたメモリアドレスに結合される、上記［１］の方法。
［９］
前記データをエンクリプトすることは、
第２の変換関数にしたがって、前記データを変換することと、
前記変換されたデータと前記データラウンドキーの１つ以上とを混合することとを含む、上記［１］の方法。
［１０］
前記データをエンクリプトすることは、
前記データを複数のデータセグメントにセグメント化することと、
異なるデータセグメント上にビット置換を実行することとをさらに含む、上記［１］の方法。
［１１］
前記第２の複数のブロック暗号ラウンドは、前記第１の複数のブロック暗号ラウンドより多い、上記［１］の方法。
［１２］
前記メモリアドレスは、前記第１の複数のブロック暗号ラウンドを通して反復的にエンクリプトされ、前記データは、前記第２の複数のブロック暗号ラウンドを通して反復的にエンクリプトされる、上記［１］の方法。
［１３］
前記メモリアドレス中に前記エンクリプトされたデータを記憶させることをさらに含む、上記［１］の方法。
［１４］
ブロック暗号デバイスにおいて、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトするアドレスエンクリプションモジュールと、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させるキースケジューリングモジュールと、
前記第１の複数のブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、前記データを結合させる結合器と、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中で前記データをエンクリプトするデータエンクリプションモジュールとを具備するデバイス。
［１５］
前記メモリアドレスをエンクリプトすることは、前記データが利用可能になる前に開始される、上記［１４］のデバイス。
［１６］
前記アドレスエンクリプションモジュールは、
第１の変換関数にしたがって、前記メモリアドレスを変換し、
前記変換されたメモリアドレスとラウンドキーとを混合するようにさらに構成されている、上記［１４］のデバイス。
［１７］
前記アドレスエンクリプションモジュールは、
前記メモリアドレスをセグメント化し、
異なるメモリアドレスセグメント上にビット置換を実行するようにさらに構成されている、上記［１４］のデバイス。
［１８］
前記キースケジューリングモジュールは、
前記第１の複数のブロック暗号ラウンドの少なくともいくつかのものに対する、前記エンクリプトされたメモリアドレスから複数のビットを抽出し、
前記抽出された複数のビットのセグメントから前記データラウンドキーを選択するようにさらに構成されている、上記［１４］のデバイス。
［１９］
前記キースケジューリングモジュールは、前記抽出された複数のビットを、そこから前記データラウンドキーが選択されるストリングへと連結するようにさらに構成されている、上記［１８］のデバイス。
［２０］
前記第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用される前記データラウンドキーが、前記第１の複数のブロック暗号ラウンドの後期のラウンドからの前記エンクリプトされたメモリアドレスからのビットを使用して発生される、上記［１８］のデバイス。
［２１］
前記データは、可逆の演算によって、前記エンクリプトされたメモリアドレスに結合される、上記［１４］のデバイス。
［２２］
前記データエンクリプションモジュールは、
第２の変換関数にしたがって、前記データを変換し、
前記変換されたデータと前記データラウンドキーの１つ以上とを混合するようにさらに構成されている、上記［１４］のデバイス。
［２３］
前記データエンクリプションモジュールは、
前記データを複数のデータセグメントにセグメント化し、
異なるデータセグメント上にビット置換を実行するようにさらに構成されている、上記［１４］のデバイス。
［２４］
前記第２の複数のブロック暗号ラウンドは、前記第１の複数のブロック暗号ラウンドより多い、上記［１４］のデバイス。
［２５］
前記メモリアドレスは、前記第１の複数のブロック暗号ラウンドを通して反復的にエンクリプトされ、前記データは、前記第２の複数のブロック暗号ラウンドを通して反復的にエンクリプトされる、上記［１４］のデバイス。
［２６］
ブロック暗号デバイスにおいて、
第１の複数のブロック暗号ラウンド中でメモリアドレスをエンクリプトする手段と、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させる手段と、
前記第１の複数のブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、前記データを結合させる手段と、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中で前記データをエンクリプトする手段とを具備するデバイス。
［２７］
処理回路を備えるプロセッサにおいて、
前記処理回路は、
第１の複数のブロック暗号ラウンド中でメモリアドレスをエンクリプトし、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させ、
前記第１の複数のブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、前記データを結合させ、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中で前記データをエンクリプトするように適合されているプロセッサ。
［２８］
ブロック暗号エンクリプションのための命令を備える機械読取可能媒体において、
前記命令は、１つ以上のプロセッサによって実行されるときに、前記プロセッサに、
第１の複数のブロック暗号ラウンド中でメモリアドレスをエンクリプトさせ、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させ、
前記第１の複数のブロック暗号ラウンドの後で、前記エンクリプトされたメモリアドレスに、前記データを結合させ、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中で前記データをエンクリプトさせる機械読取可能媒体。
［２９］
メモリアドレスから取り出されたデータをデクリプトする方法において、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得することと、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させることと、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得することと、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合させて、完全にデクリプトされたデータを取得することとを含む方法。
［３０］
前記メモリアドレスをエンクリプトすることは、前記データが利用可能になる前に開始される、上記［２９］の方法。
［３１］
前記メモリアドレスから前記エンクリプトされたデータを取り出すことをさらに含む、上記［２９］の方法。
［３２］
前記メモリアドレスをエンクリプトすることは、
第１の変換関数にしたがって、前記メモリアドレスを変換することと、
前記変換されたメモリアドレスとラウンドキーとを混合することとを含む、上記［２９］の方法。
［３３］
前記メモリアドレスをエンクリプトすることは、
前記メモリアドレスをセグメント化することと、
異なるメモリアドレスセグメント上にビット置換を実行することとをさらに含む、上記［３２］の方法。
［３４］
前記データラウンドキーを発生させることは、
前記第１の複数のブロック暗号ラウンドの少なくともいくつかのものに対する前記エンクリプトされたメモリアドレスから複数のビットを抽出することと、
前記抽出された複数のビットのセグメントから前記データラウンドキーを選択することとを含む、上記［２９］の方法。
［３５］
前記データラウンドキーを発生させることは、前記抽出された複数のビットを、そこから前記データラウンドキーが選択されるストリングへと連結することを含む、上記［３４］の方法。
［３６］
前記第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用される前記データラウンドキーが、前記第１の複数のブロック暗号ラウンドの早期のラウンドからの前記エンクリプトされたメモリアドレスからのビットを使用して発生される、上記［３４］の方法。
［３７］
前記部分的にデクリプトされたデータは、可逆の演算によって、前記エンクリプトされたメモリアドレスに結合される、上記［２９］の方法。
［３８］
前記エンクリプトされたデータをデクリプトすることは、
第２の変換関数にしたがって、前記エンクリプトされたデータを変換することと、
前記変換されたエンクリプトデータと前記データラウンドキーの１つ以上とを混合することとを含む、上記［２９］の方法。
［３９］
前記データをエンクリプトすることは、
前記エンクリプトされたデータを複数のエンクリプトされたデータセグメントにセグメント化することと、
異なるエンクリプトされたデータセグメント上にビット置換を実行することとをさらに含む、上記［２９］の方法。
［４０］
前記第２の複数のブロック暗号ラウンドは、前記第１の複数のブロック暗号ラウンドより多い、上記［２９］の方法。
［４１］
前記第１の複数のブロック暗号ラウンドは、前記第２の複数のブロック暗号ラウンドと同時に実行される、上記［２９］の方法。
［４２］
ブロック暗号デバイスにおいて、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得するアドレスエンクリプションモジュールと、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させるキースケジューリングモジュールと、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得するデータデクリプションモジュールと、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合させて、完全にデクリプトされたデータを取得する結合器とを具備するブロック暗号デバイス。
［４３］
前記メモリアドレスをエンクリプトすることは、前記データが利用可能になる前に開始される、上記［４２］のデバイス。
［４４］
前記キースケジューリングモジュールは、
前記第１の複数のブロック暗号ラウンドの少なくともいくつかのものに対する前記エンクリプトされたメモリアドレスから複数のビットを抽出し、
前記抽出された複数のビットのセグメントから前記データラウンドキーを選択するようにさらに構成されている、上記［４２］のデバイス。
［４５］
前記第２の複数のブロック暗号ラウンドの早期のラウンドに対して使用される前記データラウンドキーが、前記第１の複数のブロック暗号ラウンドの早期のラウンドからの前記エンクリプトされたメモリアドレスからのビットを使用して発生される、上記［４２］のデバイス。
［４６］
前記部分的にデクリプトされたデータは、可逆の演算によって、前記エンクリプトされたメモリアドレスに結合される、上記［４２］のデバイス。
［４７］
前記第２の複数のブロック暗号ラウンドは、前記第１の複数のブロック暗号ラウンドより多い、上記［４２］のデバイス。
［４８］
ブロック暗号デバイスにおいて、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得する手段と、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させる手段と、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得する手段と、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合させて、完全にデクリプトされたデータを取得する手段とを具備するデバイス。
［４９］
前記メモリアドレスから前記エンクリプトされたデータを取り出す手段をさらに含む、上記［４８］のデバイス。
［５０］
処理回路を備えるプロセッサにおいて、
前記処理回路は、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得し、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させ、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得し、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合させて、完全にデクリプトされたデータを取得するように適合されているプロセッサ。
［５１］
ブロック暗号デクリプションのための命令を備える機械読取可能媒体において、
前記命令は、１つ以上のプロセッサによって実行されるときに、前記プロセッサに、
第１の複数のブロック暗号ラウンド中で前記メモリアドレスをエンクリプトして、エンクリプトされたメモリアドレスを取得させ、
前記第１の複数のブロック暗号ラウンドのうちの１つ以上からの情報を使用して、データラウンドキーを発生させ、
前記データラウンドキーを使用して、第２の複数のブロック暗号ラウンド中でエンクリプトされたデータをデクリプトして、部分的にデクリプトされたデータを取得させ、
前記エンクリプトされたメモリアドレスに、前記部分的にデクリプトされたデータを結合させて、完全にデクリプトされたデータを取得させる機械読取可能媒体。
【外国語明細書】
2014160256000001.pdf