(57)【要約】【課題】アクセスパターン保護に適したデータの秘匿をする記憶装置、方法及びプログラムを提供すること。【解決手段】記憶装置１０は、秘匿データ及び秘匿データの作成に用いられたマスク値を対応付けて、ＯＲＡＭであるメインメモリ３０に記憶させる。さらに、記憶装置１０は、秘匿データに対する読み出し要求が検出された場合に、秘匿データから、秘匿データに対応付けて記憶されたマスク値を用いてマスクを外し、元のデータを取り出す。さらに、記憶装置１０は、書き出し要求が検出されると、対象の元のデータに、新たな乱数に基づくマスクをさせて新たな秘匿データとし、新たな秘匿データと、新たな秘匿データの作成に用いられたマスク値とを対応付けてメインメモリ３０に記憶させると共に、対応付けを対応テーブル２１に記憶させる。【選択図】図１
2016066860.tif 000002
【特許請求の範囲】
【請求項１】
データに対するアクセスのパターンを保護するアクセスパターン保護手段を有するメモリに、データを秘匿して記憶する記憶装置であって、
乱数を生成する乱数生成手段と、
データに、前記乱数に基づくマスク値を用いてマスクをして秘匿データを作成し、又はマスクをしたときのマスク値を用いて、前記秘匿データからマスクを外すマスク処理手段と、
前記秘匿データ及び前記秘匿データの作成に用いられたマスク値を対応付けて、前記アクセスパターン保護手段により前記メモリに記憶させる記憶制御手段と、を備え、
前記記憶制御手段は、前記メモリ上の前記秘匿データに対するアクセスが検出された場合に、前記秘匿データから、前記秘匿データに対応付けて記憶されたマスク値を用いて前記マスク処理手段によりマスクを外し、元のデータを取り出す、
記憶装置。
【請求項２】
前記記憶制御手段は、前記秘匿データに対するアクセスが完了したことが検出されると、前記元のデータに、前記マスク処理手段によって新たな前記乱数に基づくマスクをさせて新たな前記秘匿データとし、新たな前記秘匿データ及び前記秘匿データの作成に用いられたマスク値を対応付けて、前記アクセスパターン保護手段により前記メモリに記憶させる、請求項１に記載の記憶装置。
【請求項３】
前記マスク処理手段は、データとマスク値との排他的論理和の演算をする請求項１又は２に記載の記憶装置。
【請求項４】
前記秘匿データを記憶する前記メモリのアドレスと、前記秘匿データの作成に用いられたマスク値を記憶する前記メモリのアドレスとを対応付ける対応テーブルをさらに備え、
前記記憶制御手段は、前記対応テーブルに基づいて、前記秘匿データに対応するマスク値を取得する、請求項１から３のいずれか一項に記載の記憶装置。
【請求項５】
前記メモリは、ＯＲＡＭ（Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ）である請求項１から４のいずれか一項に記載の記憶装置。
【請求項６】
請求項１に記載された記憶装置が実行する方法であって、
前記乱数生成手段が、乱数を生成する乱数生成ステップと、
前記マスク処理手段が、データに、前記乱数に基づくマスク値を用いてマスクをして秘匿データを作成し、又はマスクをしたときのマスク値を用いて、前記秘匿データからマスクを外すマスク処理ステップと、
前記記憶制御手段が、前記秘匿データ及び前記秘匿データの作成に用いられたマスク値を対応付けて、前記アクセスパターン保護手段により前記メモリに記憶させる記憶制御ステップと、
前記記憶制御手段が、前記メモリ上の前記秘匿データに対するアクセスが検出された場合に、前記秘匿データから、前記秘匿データに対応付けて記憶されたマスク値を用いて前記マスク処理ステップによりマスクを外し、元のデータを取り出すステップと、
を備える方法。
【請求項７】
コンピュータに、請求項６に記載の方法の各ステップを実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置、方法及びプログラムに関する。
【背景技術】
【０００２】
近年、暗号に対するサイドチャネル攻撃と呼ばれる攻撃が大きな問題となっている。ソフトウェアに対するサイドチャネル攻撃として、メモリアクセスを解析し秘密情報を復元する攻撃がある。そこで、メモリアクセスのパターンを攻撃者から保護するために、Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ（ＯＲＡＭ）の技術や、非特許文献１及び特許文献１に開示されている技術が提案されている。
【０００３】
非特許文献１などで検討されている方式やＯＲＡＭによるメモリの保護は、安全な暗号方式によってデータが保護されているとの前提のもとに、アクセスのパターンを保護することでメモリ上のデータを秘匿している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−２４６６９８号公報
【非特許文献】
【０００５】
【非特許文献１】Ｏｄｅｄ  Ｇｏｌｄｒｅｉｃｈ  ａｎｄ  Ｒａｆａｉｌ  Ｏｓｔｒｏｖｓｋｙ，“Ｓｏｆｔｗａｒｅ  ｐｒｏｔｅｃｔｉｏｎ  ａｎｄ  ｓｉｍｕｌａｔｉｏｎ  ｏｎ  ｏｂｌｉｖｉｏｕｓ  ｒａｍｓ，”Ｊ．  ＡＣＭ，  ４３（３）：４３１−４７３，１９９６
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、アクセスパターン保護に伴うデータの秘匿において、従来の暗号アルゴリズムをそのまま使用する方法は、鍵管理の煩雑性などから現実的ではない。
そこで、アクセスパターン保護に適したデータの秘匿をする装置が求められている。
【０００７】
本発明は、アクセスパターン保護に適したデータの秘匿をする記憶装置、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
具体的には、以下のような解決手段を提供する。
（１）  データに対するアクセスのパターンを保護するアクセスパターン保護手段を有するメモリに、データを秘匿して記憶する記憶装置であって、乱数を生成する乱数生成手段と、データに、前記乱数に基づくマスク値を用いてマスクをして秘匿データを作成し、又はマスクをしたときのマスク値を用いて、前記秘匿データからマスクを外すマスク処理手段と、前記秘匿データ及び前記秘匿データの作成に用いられたマスク値を対応付けて、前記アクセスパターン保護手段により前記メモリに記憶させる記憶制御手段と、を備え、前記記憶制御手段は、前記メモリ上の前記秘匿データに対するアクセスが検出された場合に、前記秘匿データから、前記秘匿データに対応付けて記憶されたマスク値を用いて前記マスク処理手段によりマスクを外し、元のデータを取り出す、記憶装置。
【０００９】
（１）に係る記憶装置は、秘匿データ及び秘匿データの作成に用いられたマスク値を対応付けて、アクセスパターン保護によりメモリに記憶させる。さらに、（１）に係る記憶装置は、秘匿データに対するアクセスが検出された場合に、メモリに記憶された秘匿データから、秘匿データに対応付けて記憶されたマスク値を用いてマスク処理によりマスクを外し、元のデータを取り出す。
【００１０】
アクセスパターン保護手段を有するメモリ（例えば、ＯＲＡＭ）では、データへのアクセスのパターンが秘匿されているため、攻撃者がメモリを監視している状況においても、どのデータがどの乱数によってマスクされているかは、攻撃者には不明である。
よって、（１）に係る記憶装置は、マスク値とデータとを同じメモリに安全に記憶させることができ、データそのものの秘匿化を高速に行うことができる。
したがって、（１）に係る記憶装置は、アクセスパターン保護に適したデータの秘匿をすることができる。
【００１１】
（２）  前記記憶制御手段は、前記秘匿データに対するアクセスが完了したことが検出されると、前記元のデータに、前記マスク処理手段によって新たな前記乱数に基づくマスクをさせて新たな前記秘匿データとし、新たな前記秘匿データ及び前記秘匿データの作成に用いられたマスク値を対応付けて、前記アクセスパターン保護手段により前記メモリに記憶させる、（１）に記載の記憶装置。
【００１２】
（２）に係る記憶装置は、データをメインメモリに戻す場合、過去と異なる乱数でマスクをすることによってデータの値を変化させる。このことにより、（２）に係る記憶装置は、メインメモリを監視している攻撃者が、データに対するアクセスが読み出しであったのか、書き出しであったのかを、判別できないようにすることができる。
したがって、（２）に係る記憶装置は、攻撃者が読み出しと書き出しとのアクセスのパターンを判別できないようにすることによって、アクセスパターン保護に適したデータの秘匿をすることができる。
【００１３】
（３）  前記マスク処理手段は、データとマスク値との排他的論理和の演算をする（１）又は（２）に記載の記憶装置。
【００１４】
（３）に係る記憶装置は、アクセスパターン保護に適したデータの秘匿を排他的論理和の演算で高速に処理することができる。
【００１５】
（４）  前記秘匿データを記憶する前記メモリのアドレスと、前記秘匿データの作成に用いられたマスク値を記憶する前記メモリのアドレスとを対応付ける対応テーブルをさらに備え、前記記憶制御手段は、前記対応テーブルに基づいて、前記秘匿データに対応するマスク値を取得する、（１）から（３）のいずれか一に記載の記憶装置。
【００１６】
（４）に係る記憶装置は、アクセスパターン保護に適したデータの秘匿を対応テーブルによって容易にすることができる。
【００１７】
（５）  前記メモリは、ＯＲＡＭ（Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ）である（１）から（４）のいずれか一に記載の記憶装置。
【００１８】
（５）に係る記憶装置は、ＯＲＡＭのアクセスパターン保護に適したデータの秘匿をすることができる。
【００１９】
（６）  （１）に記載された記憶装置が実行する方法であって、前記乱数生成手段が、乱数を生成する乱数生成ステップと、前記マスク処理手段が、データに、前記乱数に基づくマスク値を用いてマスクをして秘匿データを作成し、又はマスクをしたときのマスク値を用いて、前記秘匿データからマスクを外すマスク処理ステップと、前記記憶制御手段が、前記秘匿データ及び前記秘匿データの作成に用いられたマスク値を対応付けて、前記アクセスパターン保護手段により前記メモリに記憶させる記憶制御ステップと、前記記憶制御手段が、前記メモリ上の前記秘匿データに対するアクセスが検出された場合に、前記秘匿データから、前記秘匿データに対応付けて記憶されたマスク値を用いて前記マスク処理ステップによりマスクを外し、元のデータを取り出すステップと、を備える方法。
【００２０】
（６）に係る方法は、アクセスパターン保護に適したデータの秘匿をすることができる。
【００２１】
（７）  コンピュータに、（６）に記載の方法の各ステップを実行させるためのプログラム。
【００２２】
（７）に係るプログラムは、コンピュータに、アクセスパターン保護に適したデータの秘匿をさせることができる。
【発明の効果】
【００２３】
本発明によれば、アクセスパターン保護に適したデータの秘匿をすることができる。
【図面の簡単な説明】
【００２４】
【図１】本発明の一実施形態に係る記憶装置の構成を示すブロック図である。
【図２】本発明の一実施形態に係る対応テーブルと、秘匿データ及び秘匿データの作成に用いられたマスク値との例を示す図である。
【図３】本発明の一実施形態に係る記憶装置の書き出し処理の例を示すフローチャートである。
【図４】本発明の一実施形態に係る記憶装置の読み出し処理の例を示すフローチャートである。
【発明を実施するための形態】
【００２５】
以下、本発明の実施形態について、図を参照しながら説明する。
図１は、本発明の一実施形態に係る記憶装置１０の構成を示すブロック図である。
記憶装置１０は、乱数生成手段１１と、マスク処理手段１２と、記憶制御手段１３と、対応テーブル２１とを備え、データを秘匿してメインメモリ３０に記憶する。各手段ごとに詳述する。
【００２６】
記憶装置１０は、データに対するアクセスのパターンを保護するアクセスパターン保護手段３１を有するメインメモリ３０に、データを秘匿して記憶する。
アクセスパターン保護手段３１は、例えば、書き出し処理（例えば、データをキャッシュメモリ４０からメインメモリ３０に戻すとき）において、メインメモリ３０へデータを書き出すときのアドレスを、メインメモリ３０からデータを読み出したときのアドレスとは異なるアドレスに変更する。その結果、アクセスパターン保護手段３１は、データを読み出すメインメモリ３０のアドレスを都度変化させる。このように、アクセスパターン保護手段３１は、読み出し処理及び書き出し処理におけるアドレスが同一のアドレスとなって、同じパターンのアクセスが発生することを防止する。アクセスパターン保護手段３１は、例えば、ＯＲＡＭにおいて実現されている。
【００２７】
乱数生成手段１１は、乱数生成装置により乱数を生成する。生成される乱数は、暗号学的に安全な乱数であることが望ましい。乱数生成手段１１は、ストリーム暗号（初期鍵及び初期ベクトルに基づいて乱数を生成する）などを用いて乱数を生成してもよい。
【００２８】
マスク処理手段１２は、データに、乱数に基づくマスク値を用いてマスクをして秘匿データを作成する。又は、マスク処理手段１２は、マスクをしたときのマスク値を用いて、秘匿データからマスクを外す。具体的には、マスク処理手段１２は、データとマスク値との排他的論理和の演算をする。すなわち、マスク処理手段１２は、データに、乱数に基づくマスク値を用いて排他的論理和の演算をして秘匿データを作成する。又は、マスク処理手段１２は、秘匿データの作成に用いたマスク値と秘匿データとの排他的論理和の演算をし、秘匿データからマスクを外す。
【００２９】
マスク値は、データと同じ長さの乱数であってよい。また、マスク値は、乱数に基づいて生成されてもよい。例えば、マスク値は、データ長が６４ビットの場合、乱数生成装置により生成したデータ長が３２ビットの乱数に基づいて、生成した乱数と加工した乱数とを結合するなどして、データ長が６４ビットのマスク値にされたものであってもよい。この場合、乱数を生成する時間が、データと同じ長さの乱数を生成する時間よりも、短縮される。
マスク値のデータ長は、データに対するマスク処理の種類に応じて必要な長さ（例えば、排他的論理和の場合、データの長さとマスク値の長さとは同一）が確保されるとしてよい。
【００３０】
記憶制御手段１３は、秘匿データ及び秘匿データの作成に用いられたマスク値を対応付けて、アクセスパターン保護手段３１によりメインメモリ３０に記憶させる。記憶制御手段１３は、秘匿データと、秘匿データの作成に用いられたマスク値との対応付けを、対応テーブル２１に記憶させる。対応テーブル２１は、秘匿データを記憶するメインメモリ３０のアドレスと、秘匿データの作成に用いられたマスク値を記憶するメインメモリ３０のアドレスとを対応付ける（後述する図２参照）。
記憶制御手段１３は、対応テーブル２１に基づいて、秘匿データに対応するマスク値を取得する。
【００３１】
記憶制御手段１３は、メインメモリ３０上の秘匿データに対するアクセスが検出された場合に、秘匿データから、秘匿データに対応付けて記憶されたマスク値を用いてマスク処理手段１２によりマスクを外し、元のデータを取り出す。
具体的には、記憶制御手段１３は、秘匿データに対する読み出し要求が検出された場合であって読み出すべきデータがキャッシュメモリ４０に存在しない場合に、メインメモリ３０に記憶された秘匿データ及び秘匿データに対応付けて記憶されたマスク値を読み出し、読み出した秘匿データとマスク値との排他的論理和の演算によって秘匿データからマスクを外し、元のデータを取り出し、取り出した元のデータをキャッシュメモリ４０に移動させる。
【００３２】
秘匿データに対するアクセスが完了したことが検出されると、記憶制御手段１３は、元のデータに、マスク処理手段１２によって新たな乱数に基づくマスクをさせて新たな秘匿データとし、新たな秘匿データ及び新たな秘匿データの作成に用いられたマスク値を対応付けて、アクセスパターン保護手段３１によりメインメモリ３０に記憶させる。
具体的には、キャッシュメモリ４０からメインメモリ３０への書き出し要求が検出されると、記憶制御手段１３は、メインメモリ３０へ書き出すべきデータに、新たな乱数に基づくマスク値を用いて、マスク処理手段１２によって排他的論理和の演算をさせて、新たな秘匿データを作成させる。次に、記憶制御手段１３は、新たな秘匿データと、新たな秘匿データの作成に用いられたマスク値とを対応付けて、メインメモリ３０に記憶させ、対応関係を対応テーブル２１に記憶させる。メインメモリ３０では、秘匿データ及びマスク値は、アクセスパターン保護手段３１により、例えば、メインメモリ３０から読み出したときのアドレスとは異なるアドレスに記憶される。
【００３３】
図２は、本発明の一実施形態に係る対応テーブル２１と、秘匿データ及び秘匿データの作成に用いられたマスク値との例を示す図である。
図２（１）が示すように、対応テーブル２１は、データアドレスと、マスク値格納アドレスとを対応付ける。データアドレスは、秘匿データを記憶するメインメモリ３０のアドレスである。マスク値格納アドレスは、秘匿データの作成に用いられたマスク値を記憶するメインメモリ３０のアドレスである。
図２（２）は、秘匿データから、対応テーブル２１によって秘匿データに対応付けられたマスク値を用いてマスクを外し、元データを取り出したことを示す図である。
図２（２）が示すように、記憶装置１０は、メインメモリ３０から読み出した秘匿データとマスク値との排他的論理和の演算によりマスク値を外した元のデータをキャッシュメモリ４０に移動させる。
図２（３）は、秘匿データと秘匿データの作成に用いられたマスク値とを対応付けてメインメモリ３０に記憶させたことを示す図である。
図２（３）が示すように、記憶装置１０は、キャッシュメモリ４０の元のデータから排他的論理和の演算により秘匿データを作成し、秘匿データ及び秘匿データの作成に用いられたマスク値を対応付けてメインメモリ３０に記憶させる。
【００３４】
図３は、本発明の一実施形態に係る記憶装置１０の書き出し処理の例を示すフローチャートである。記憶装置１０は、コンピュータ及びその周辺装置が備えるハードウェア並びに該ハードウェアを制御するソフトウェアによって構成される。以下の処理は、制御部（例えば、ＣＰＵ）が、所定のソフトウェアに従い実行する処理であり、所定のプログラムからの書き出し要求（例えば、秘匿データをキャッシュメモリ４０からメインメモリ３０へ書き出す要求など）を検出することによって起動される。
【００３５】
ステップＳ１０１において、ＣＰＵ（乱数生成手段１１）は、キャッシュメモリ４０からメインメモリ３０への書き出し要求がされたデータについて、マスク値を作成するために、乱数を生成する。
【００３６】
ステップＳ１０２において、ＣＰＵ（マスク処理手段１２）は、生成した乱数に基づくマスク値を用いて、データとマスク値との排他的論理和の演算をし、秘匿データを作成する。
【００３７】
ステップＳ１０３において、ＣＰＵ（記憶制御手段１３）は、秘匿データ及び秘匿データの作成に用いられたマスク値を対応付けて、ＯＲＡＭであるメインメモリ３０に記憶させる。
【００３８】
ステップＳ１０４において、ＣＰＵ（記憶制御手段１３）は、秘匿データ及び秘匿データの作成に用いられたマスク値の対応付けを対応テーブル２１に記憶させる。その後、ＣＰＵは、処理を終了する。
【００３９】
図４は、本発明の一実施形態に係る記憶装置１０の読み出し処理の例を示すフローチャートである。以下の処理は、制御部（例えば、ＣＰＵ）が、所定のソフトウェアに従い実行する処理であり、所定のプログラムからの読み出し要求（例えば、メインメモリ３０からの読み出し要求など）を検出することによって起動される。
【００４０】
ステップＳ２０１において、ＣＰＵ（記憶制御手段１３）は、秘匿データをメインメモリ３０から読み出すと共に、秘匿データに対応付けられたマスク値を対応テーブル２１に基づいて読み出す。
【００４１】
ステップＳ２０２において、ＣＰＵ（マスク処理手段１２、記憶制御手段１３）は、秘匿データとマスク値との排他的論理和の演算をして、秘匿データからマスクを外し、元のデータを取り出し、元のデータをキャッシュメモリ４０に記憶させる。その後、ＣＰＵは、処理を終了する。
【００４２】
本実施形態によれば、記憶装置１０は、排他的論理和の演算がされた秘匿データ及び秘匿データの作成に用いられたマスク値を対応付けて、ＯＲＡＭであるメインメモリ３０に記憶させる。さらに、記憶装置１０は、メインメモリ３０のデータに対する読み出し要求が検出された場合に、メインメモリ３０に記憶された秘匿データから、秘匿データに対応付けて記憶されたマスク値を用いて排他的論理和の演算をしてマスクを外し、元のデータを取り出し、キャッシュメモリ４０に記憶させる。
さらに、記憶装置１０は、キャッシュメモリ４０からメインメモリ３０への書き出し要求が検出されると、対象の元のデータに、新たな乱数に基づいて生成されたマスク値を用いて排他的論理和の演算をして新たな秘匿データを作成する。次に、記憶装置１０は、新たな秘匿データ及び新たな秘匿データの作成に用いられたマスク値を対応付けて、ＯＲＡＭであるメインメモリ３０に記憶させると共に、対応付けを対応テーブル２１に記憶させる。
よって、記憶装置１０は、メインメモリ３０に書き出すごとにデータの秘匿化を高速に行い、秘匿データと秘匿化に用いたマスク値とを対応付けてメインメモリ３０に記憶させ、対応付けてメインメモリ３０に記憶させた秘匿データとマスク値とによりメインメモリ３０から元のデータを高速に取り出すことができる。
メインメモリ３０は、アクセスのパターンが保護されているので、記憶装置１０は、どのデータがどの乱数によってマスクされているかが攻撃者には不明なように、メインメモリ３０に記憶させることができる。
したがって、記憶装置１０は、アクセスパターン保護に適したデータの秘匿をすることができる。
【００４３】
以上、本発明の実施形態について説明したが、本発明は上述した実施形態に限るものではない。
本実施形態では、記憶装置１０と、メインメモリ３０及びアクセスパターン保護手段３１とを別にしたが、記憶装置１０とアクセスパターン保護手段３１とが組み合わされてもよい。組み合わされた装置は、アクセスパターン保護を行って秘匿データをメインメモリ３０に記憶させることができる。さらに、記憶装置１０と、メインメモリ３０及びアクセスパターン保護手段３１とを一体化させてもよい。一体化させた装置は、アクセスパターン保護を行って秘匿データを記憶することができる。
また、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施形態に記載されたものに限定されるものではない。
【００４４】
記憶装置１０による一連の処理は、ソフトウェアにより行うこともできる。一連の処理をソフトウェアによって行う場合には、そのソフトウェアを構成するプログラムが、汎用のコンピュータなどにインストールされる。また、当該プログラムは、コンピュータ読み取り可能な記録媒体（例えば、ＣＤ−ＲＯＭのようなリムーバブルメディアなど）に記録されてユーザに配布されてもよいし、ネットワークを介してユーザのコンピュータにダウンロードされることにより配布されてもよい。
【符号の説明】
【００４５】
１０    記憶装置
１１    乱数生成手段
１２    マスク処理手段
１３    記憶制御手段
２１    対応テーブル
３０    メインメモリ
３１    アクセスパターン保護手段
４０    キャッシュメモリ
【図１】
2016066860.tif 000003
【図２】
2016066860.tif 000004
【図３】
2016066860.tif 000005
【図４】
2016066860.tif 000006