(57)【要約】【課題】秘匿演算を行うコンピュータプログラムが実装されているメモリ位置が秘匿演算ごとに変わるように構成されたセキュリティデバイスを提供する。【解決手段】セキュリティデバイス１は，秘匿演算を行う秘匿演算モジュールの実行可能コード１００を記憶した不揮発性メモリ（ＲＯＭ１２２）と，上位ソフトウェア１１から秘匿演算モジュールの実行可能コード１００の呼出しを受けると，データの読み書き可能なメモリの中から，秘匿演算モジュールの実行可能コード１００を配置するメモリ位置をランダムに決定し，不揮発性メモリに記憶された秘匿演算モジュールの実行可能コード１００をメモリ位置にロードした後，メモリ位置にロードした秘匿演算モジュールの実行可能コード１００を実行し，メモリ位置にロードした秘匿演算モジュールの実行可能コード１００の実行結果を上位ソフトウェア１１に引き渡す秘匿演算制御部１０１を備えている。【選択図】図１
2018169694.tif 000002
【特許請求の範囲】
【請求項１】
秘密データを用いた秘匿演算処理を行う秘匿演算モジュールの実行可能コードを記憶した不揮発性メモリと，
セキュリティ機能をユーザに提供する上位ソフトウェアから前記秘匿演算モジュールの実行可能コードの呼出しを受けると，データの読み書き可能なメモリの中から，前記秘匿演算モジュールの実行可能コードを配置するメモリ位置をランダムに決定し，不揮発性メモリに記憶された前記秘匿演算モジュールの実行可能コードを前記メモリ位置にロードした後，前記メモリ位置にロードした前記秘匿演算モジュールの実行可能コードを実行し，前記メモリ位置にロードした前記秘匿演算モジュールの実行可能コードの実行結果を前記上位ソフトウェアに引き渡す秘匿演算制御部を，
備えたことを特徴とするセキュリティデバイス。
【請求項２】
前記秘匿演算モジュールが行う秘匿演算処理を，暗号鍵を前記秘密データとする暗号演算処理としたことを特徴とする，請求項１に記載したセキュリティデバイス。
【請求項３】
不揮発性メモリに記憶する前記秘匿演算モジュールの実行可能コードにチェックコードを付加し，前記秘匿演算制御部は，前記メモリ位置にロードした前記秘匿演算モジュールの実行可能コードから算出したチェックコードと，不揮発性メモリに記憶された前記秘匿演算モジュールの実行可能コードに付加されたチェックコードを照合し，チェックコードの照合に失敗すると，エラーコードを前記上位ソフトウェアに引き渡すことを特徴とする，請求項１または請求項２に記載したセキュリティデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，暗号鍵を用いた暗号演算など，秘密データを用いた秘匿演算処理を行う秘匿演算モジュールを実装したセキュリティデバイスに関し，更に詳しくは，故障利用攻撃に対する秘匿演算モジュールの耐タンパー性を高める技術に関する。
【背景技術】
【０００２】
秘密鍵を用いた暗号演算など，外部に秘匿にする秘密データを用いる演算処理である秘匿演算処理を行うセキュリティデバイスは，暗号演算で用いる暗号鍵など，秘匿演算処理で用いる秘密データを秘匿に記憶する。通常，セキュリティデバイスに記憶された秘密データは外部から読み出せないが，セキュリティデバイスに記憶された秘密データを不正に読み出す様々な攻撃方法が提案されている。
【０００３】
非特許文献１に記載があるように，セキュリティデバイスに記憶された秘密データを不正に読み出す攻撃方法は，セキュリティデバイスに実装されたＩＣチップ（Integrated Circuit）の破壊を必要とする破壊攻撃と，セキュリティデバイスに実装されたＩＣチップの破壊を必要としない非破壊攻撃に分類でき，更に，非破壊攻撃は，外部から観測可能なセキュリティデバイスのサイドチャネルを観測するサイドチャネル攻撃と，意図的なエラーを暗号演算中に発生させる故障利用攻撃に分類できる。サイドチャネル攻撃は，セキュリティデバイスに対する重要な脅威の一つになるが，本発明では，非破壊攻撃の一つである故障利用攻撃を対象とする。
【０００４】
非破壊攻撃に一つである故障利用攻撃とは，通常はありえない外部刺激を加える操作を秘匿演算処理中のセキュリティデバイスに行うことで，意図的な演算エラーをセキュリティデバイスに発生させ，セキュリティデバイスに記憶された秘密データを不正に読み取ろうとする攻撃方法である。通常はありえない外部刺激としては，パルス状の電源ノイズ，周波数が定格外のクロック信号，電磁波およびレーザー照射などがある。
【０００５】
非破壊攻撃の一つである故障利用攻撃に対する対策として，特許文献１には，同一処理の二度以上の計算の実施や逆算による処理の検算が推奨されるとの記載があり，特許文献１に係る発明では，代表的な秘匿演算の一つである暗号演算の逆算を行って検算を行う場合，暗号演算の逆算において最終的に用いた暗号鍵が当初の演算で最初に用いた暗号鍵に一致するかを検証する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第５４８３８３８号公報
【非特許文献】
【０００７】
【非特許文献１】“平成１５年度セキュリティ評価技術等に関する調査研究 「システムＬＳＩのセキュリティ評価」に関する調査研究報告書"，平成１６年３月３１日，電子商取引安全技術研究組合
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら，上記の対策を実施したとしても，暗号演算などの秘匿演算を行うコンピュータプログラムが実装されているメモリ位置を特定し，特定したメモリ位置にレーザー光などを照射して，同一の誤動作を複数回誘発すれば，秘匿演算に用いる秘密データ（例えば，暗号鍵）を推定することは可能である。
【０００９】
そこで，本発明は，暗号演算などの秘匿演算を行うモジュールの実行可能コードを配置するメモリ位置が秘匿演算ごとに変わるように構成されたセキュリティデバイスを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決する本発明は，秘密データを用いた秘匿演算処理を行う秘匿演算モジュールの実行可能コードを記憶した不揮発性メモリと，セキュリティ機能をユーザに提供する上位ソフトウェアから前記秘匿演算モジュールの実行可能コードの呼出しを受けると，データの読み書き可能なメモリの中から，前記秘匿演算モジュールの実行可能コードを配置するメモリ位置をランダムに決定し，不揮発性メモリに記憶された前記秘匿演算モジュールの実行可能コードを前記メモリ位置にロードした後，前記メモリ位置にロードした前記秘匿演算モジュールの実行可能コードを実行し，前記メモリ位置にロードした前記秘匿演算モジュールの実行可能コードの実行結果を前記上位ソフトウェアに引き渡す秘匿演算制御部を備えたことを特徴とするセキュリティデバイスである。
【００１１】
更に，第２の発明は，第１の発明に記載したセキュリティデバイスにおいて，前記秘匿演算モジュールが行う秘匿演算処理を，暗号鍵を前記秘密データとする暗号演算処理としたことを特徴とする。
【００１２】
更に，第３の発明は，第１の発明または第２の発明に記載したセキュリティデバイスにおいて，不揮発性メモリに記憶する前記秘匿演算モジュールの実行可能コードにチェックコードを付加し，前記秘匿演算制御部は，前記メモリ位置にロードした前記秘匿演算モジュールの実行可能コードから算出したチェックコードと，不揮発性メモリに記憶された前記秘匿演算モジュールの実行可能コードに付加されたチェックコードを照合し，チェックコードの照合に失敗すると，エラーコードを前記上位ソフトウェアに引き渡すことを特徴とする。
【発明の効果】
【００１３】
本発明に係るセキュリティデバイスによれば，セキュリティデバイスの秘匿演算制御部は秘匿演算モジュールの実行可能コードをロードするメモリ位置をランダムに決定するため，秘密データを用いた秘匿演算処理を行う秘匿演算モジュールの実行可能コードのメモリ位置は秘匿演算処理を行うごとに異なることになる。秘匿演算モジュールの実行可能コードのメモリ位置が秘匿演算ごとに異なれば，攻撃者は，秘匿演算モジュールのメモリ位置を特定して行う故障利用攻撃を実施できないため，暗号鍵などの秘密データがセキュリティデバイスの外部へ漏洩してしまうことを防止できる。
【図面の簡単な説明】
【００１４】
【図１】セキュリティデバイスの構成を説明する図。
【図２】セキュリティデバイスが備えるハードウェアを説明する図。
【図３】秘匿演算制御部の動作を説明する図。
【図４】セキュリティデバイスのメモリ状態を説明する図。
【図５】セキュリティデバイスの形態を説明する図。
【発明を実施するための形態】
【００１５】
ここから，本発明の好適な実施形態を記載する。なお，以下の記載は本発明の技術的範囲を束縛するものでなく，理解を助けるために記述するものである。
【００１６】
図１は，本実施形態に係るセキュリティデバイス１の構成を説明する図である。本実施形態に係るセキュリティデバイス１は，下位層から順に，ハードウェア１２，オペレーティングシステム１０（OS: Operating System）および上位ソフトウェア１１を備える。
【００１７】
図２は，本実施形態に係るセキュリティデバイス１が備えるハードウェア１２を説明する図である。図２で図示したように，本実施形態に係るセキュリティデバイス１は，ハードウェア１２として，データの入出力を行うＩ／Ｏ１２５，各種演算を行うＣＰＵ１２０(Central Processing Unit),電気的に書き換え可能な揮発性メモリであるＲＡＭ１２１(Random Access Memory),電気的に書き換えできない不揮発性メモリであるＲＯＭ１２２（Read-Only Memory），電気的に書き換え可能な不揮発性メモリであるＮＶＭ１２３（Non-volatile memory）に加え，コプロセッサとして，暗号演算機能に特化した暗号演算回路１２４を備える。
【００１８】
本実施形態に係るセキュリティデバイス１が備える上位ソフトウェア１１は，秘密データを用いた秘匿演算処理を利用したセキュリティ機能をユーザに提供するためのコンピュータプログラムで，具体的には，アプリケーションやミドルウェアである。上位ソフトウェア１１によってユーザに提供されるセキュリティ機能は任意でよい。例えば，暗号演算を利用したセキュリティ機能として，メッセージの暗号化・復号，デジタル署名の生成・認証およびユーザ認証などが考えられる。なお，本実施形態において，上位ソフトウェア１１は，セキュリティデバイス１が有する不揮発性メモリ（ここでは，ＲＯＭ１２２またはＮＶＭ１２３）に実装されている。
【００１９】
本実施形態に係るセキュリティデバイス１が備えるＯＳ１０は，セキュリティデバイス１の内部におけるコンピュータプログラムの実行を制御するソフトウェアである。本実施形態において，ＯＳ１０は，秘密データを用いた秘匿演算処理を行う秘匿演算モジュールの実行可能コード１００と，上位ソフトウェア１１が秘匿演算モジュールの実行可能コード１００を利用するための機能を提供する秘匿演算制御部１０１を有し，本実施形態において，ＯＳ１０は，セキュリティデバイス１が有する不揮発性メモリの一つであるＲＯＭ１２２に実装されている。
【００２０】
秘匿演算モジュールの実行可能コード１００とは，ＣＰＵ１２０が解釈実行可能なコードを意味し，本実施形態ではＲＯＭ１２２にＯＳ１０を実装しているため，ＯＳ１０が有する秘匿演算モジュールの実行可能コード１００も，セキュリティデバイス１が有する不揮発性メモリの一つであるＲＯＭ１２２に実装され，秘匿演算モジュールの実行可能コード１００にはチェックコードを付加している。なお，秘匿演算モジュールの実行可能コード１００は，ＲＯＭ１２２ではなくＮＶＭ１２３に実装させることもできる。
【００２１】
秘匿演算モジュールの実行可能コード１００が行う秘匿演算処理の内容は任意でよいが，本実施形態において，秘匿演算モジュールの実行可能コード１００は，暗号演算回路１２４を利用して所定のアルゴリズムに従う暗号演算処理を実行する。なお，暗号アルゴリズムとしては，ＤＥＳ（Data Encryption Standard），ＡＥＳ（Advanced Encryption Standard）および公開鍵暗号などが挙げられる。
【００２２】
ＯＳ１０が有する秘匿演算制御部１０１は，ＣＰＵ１２０を動作させるコンピュータプログラムにより実現される機能で，秘匿演算モジュールの実行可能コード１００を利用するためのＡＰＩ（Application Programming Interface）を上位ソフトウェア１１に提供し，上位ソフトウェア１１から秘匿演算モジュールの実行可能コード１００の呼出しを受けると，故障利用攻撃に対する耐タンパー性が高まるように秘匿演算モジュールの実行可能コード１００を実行する。
【００２３】
図３は，本実施形態に係る秘匿演算制御部１０１の動作を説明する図である。本実施形態に係る秘匿演算制御部１０１が提供しているＡＰＩを利用して，上位ソフトウェア１１から秘匿演算モジュールの実行可能コード１００の呼出しを受けると（Ｓ１），秘匿演算制御部１０１は，セキュリティデバイス１が有するデータの読み書き可能なメモリの中から，秘匿演算モジュールの実行可能コード１００をロードするメモリ位置をランダムに決定する処理を行う（Ｓ２）。図２で説明したように，本実施形態に係るセキュリティデバイス１は，データの読み書き可能なメモリとしてＲＡＭ１２１とＮＶＭ１２３を有しているため，本実施形態に係る秘匿演算制御部１０１は，秘匿演算モジュールの実行可能コード１００をロードするメモリとしてＲＡＭ１２１またはＮＶＭ１２３のいずれか一つをランダムに決定し，更に，ランダム決定したメモリの空き領域の中から，秘匿演算モジュールの実行可能コード１００に対応したサイズの領域をランダムに決定することで，秘匿演算モジュールの実行可能コード１００をロードするメモリ位置をランダムに決定する。なお，メモリなどをランダムに決定する際，乱数を用いることが一般的である。
【００２４】
次に，本実施形態に係る秘匿演算制御部１０１は，Ｓ２において決定したメモリ位置に，秘匿演算モジュールの実行可能コード１００（チェックコードは含まない）をロードする処理を実行する（Ｓ３）。本実施形態において，秘匿演算モジュールの実行可能コード１００はＲＯＭ１２２に記憶されているので，ＲＯＭ１２２に記憶されている秘匿演算モジュールの実行可能コード１００が，Ｓ２において決定したメモリ位置にロードされることになる。
【００２５】
次に，本実施形態に係る秘匿演算制御部１０１は，Ｓ２において決定したメモリ位置にロードした秘匿演算モジュールの実行可能コード１００を実行する処理を実行する（Ｓ４）。例えば，秘匿演算制御部１０１は，Ｓ２において決定したメモリ位置の先頭アドレスを呼び出すことで，Ｓ２において決定したメモリ位置にロードした秘匿演算モジュールの実行可能コード１００を実行する。
【００２６】
Ｓ２において決定したメモリ位置にロードした秘匿演算モジュールの実行可能コード１００の実行が終了すると，本実施形態に係る秘匿演算制御部１０１は，Ｓ２において決定したメモリ位置にロードした秘匿演算モジュールの実行可能コード１００から算出したチェックコードと，不揮発性メモリ（ここでは，ＲＯＭ１２２）に記憶されている秘匿演算モジュールの実行可能コード１００に付加されたチェックコードを照合することで，実際に暗号演算を行った秘匿演算モジュールの実行可能コード１００の正当性，すなわち，Ｓ２において決定したメモリ位置にロードした秘匿演算モジュールの実行可能コード１００の正当性を検証する処理を実行する（Ｓ５）。Ｓ２において決定したメモリ位置にロードした秘匿演算モジュールの実行可能コード１００の正当性を検証することで，故障利用攻撃により，Ｓ２において決定したメモリ位置にロードした秘匿演算モジュールの実行可能コード１００の内容に変更があったか否かを判定できる。正当性検証に失敗すると，エラーコードを上位ソフトウェア１１に引き渡すことで，故障利用攻撃が行われても暗号演算結果が攻撃者に渡ることはない。なお，チェックコードは任意でよいが，例えば，チェックコードをチェックサムの場合，秘匿演算モジュールの実行可能コード１００をデータ列とみなして各列の総和をから，秘匿演算モジュールの実行可能コード１００のチェックサムを算出できる。
【００２７】
本実施形態に係る秘匿演算制御部１０１は，秘匿演算モジュールの実行可能コード１００の正当性検証結果に基づいて処理を分岐する（Ｓ６）。秘匿演算モジュールの実行可能コード１００の正当性検証に成功した場合，秘匿演算制御部１０１は，Ｓ２において決定したメモリ位置にロードした秘匿演算モジュールの実行可能コード１００はＲＯＭ１２２に記憶されたものと一致する，すなわち，故障利用攻撃は実行されていないと判断し，Ｓ２において決定したメモリ位置にロードした秘匿演算モジュールの実行可能コード１００を実行することで得られた暗号演算結果を秘匿演算モジュールの実行可能コード１００の実行結果にセットする（Ｓ７ａ）。また，秘匿演算モジュールの実行可能コード１００に付加されているチェックコードの検証結果が失敗の場合，秘匿演算制御部１０１は，Ｓ２において決定したメモリ位置にロードした秘匿演算モジュールの実行可能コード１００はＲＯＭ１２２に記憶されたものと一致しない，すなわち，故障利用攻撃が実行された可能性があると判断し，秘匿演算モジュールの実行に失敗したことを示すエラーコードを秘匿演算モジュールの実行可能コード１００の実行結果にセットする（Ｓ７ｂ）。
【００２８】
次に，本実施形態に係る秘匿演算制御部１０１は，Ｓ２において決定したメモリ位置にロードした秘匿演算モジュールの実行可能コード１００を消去する処理を実行した後（Ｓ８），秘匿演算モジュールの実行可能コード１００の実行結果を上位ソフトウェア１１へ引き渡して（Ｓ９），図３で図示した手順は終了する。
【００２９】
図４は，セキュリティデバイス１のメモリ状態を説明する図である。図４（ａ）では，秘匿演算モジュールの実行可能コード１００の呼出しを受ける前におけるメモリの状態を示し，秘匿演算モジュールの実行可能コード１００の呼出しを上位ソフトウェア１１から受ける前，秘匿演算モジュールの実行可能コード１００はＲＯＭ１２２にのみ記憶された状態で，電気的に書き換え可能なメモリであるＲＡＭ１２１およびＮＶＭ１２３のいずれにも秘匿演算モジュールの実行可能コード１００はロードされていない。図４（ｂ）では，秘匿演算モジュールの実行可能コード１００をロードするメモリにＲＡＭ１２１が決定されたときの状態を示し，秘匿演算制御部１０１が，秘匿演算モジュールの実行可能コード１００をＲＡＭ１２１にロードすることで，秘匿演算モジュールの実行可能コード１００は，ＲＯＭ１２２に加え，ＲＡＭ１２１にも記憶されている状態になる。なお，ＲＯＭ１２２に記憶されている秘匿演算モジュールの実行可能コード１００にはチェックコード（CC: Check Code）が付加されているが，ＲＡＭ１２１に記憶された秘匿演算モジュールの実行可能コード１００にはチェックコードが付加されていない。図４（ｃ）では，秘匿演算モジュールの実行可能コード１００をロードするメモリにＮＶＭ１２３が決定されたときの状態を示し，秘匿演算制御部１０１が，秘匿演算モジュールの実行可能コード１００をＮＶＭ１２３に配置することで，秘匿演算モジュールの実行可能コード１００は，ＲＯＭ１２２に加え，ＮＶＭ１２３にも記憶されている状態になる。なお，ＲＯＭ１２２に記憶されている秘匿演算モジュールの実行可能コード１００にはチェックコードが付加されているが，ＮＶＭ１２３に記憶された秘匿演算モジュールの実行可能コード１００にはチェックコードは付加されていない。図４（ｂ）または図４（ｃ）の状態で，秘匿演算モジュールが終了すると，ＲＡＭ１２１またはＮＶＭ１２３にロードされた秘匿演算モジュールの実行可能コード１００は，秘匿演算モジュールの実行可能コード１００がロードされたメモリから削除され，図４（ａ）の状態に戻る。
【００３０】
本実施形態に係る秘匿演算制御部１０１が，図３で示した手順を実行することで，秘匿演算モジュールの実行可能コード１００を配置するメモリ位置は秘匿演算ごとに異なることになる。実際に暗号演算を行う秘匿演算モジュールの実行可能コード１００のメモリ位置が秘匿演算ごとに異なれば，攻撃者が秘匿演算モジュールの実行可能コード１００のメモリ位置を特定できないため，故障利用攻撃を用いて同一の誤動作を繰り返し誘発できず，暗号演算に用いる暗号鍵がセキュリティデバイス１の外部へ漏洩してしまうことを防止できる。
【００３１】
最後に，本実施形態に係るセキュリティデバイス１の具体的な形態を説明する。図５は，セキュリティデバイス１の形態を説明する図である。本実施形態に係るセキュリティデバイス１の具体的な形態は任意で，例えば，本実施形態に係るセキュリティデバイス１は，図５（ａ）で図示したＩＣカード１ａ，または，図５（ｂ）で図示したインターネットバンク用のトークン１ｂにでき，更には，図５（ｃ）で図示した大容量のメモリを有するＵＳＢキー１ｃにも適用できる。
【符号の説明】
【００３２】
１    セキュリティデバイス
１０  オペレーティングシステム
１００  秘匿演算モジュールの実行可能コード
１０１  秘匿演算制御部
１１  上位ソフトウェア
１２  ハードウェア
１２１  ＲＡＭ
１２２  ＲＯＭ
１２３  ＮＶＭ
【図１】
2018169694.tif 000003
【図２】
2018169694.tif 000004
【図３】
2018169694.tif 000005
【図４】
2018169694.tif 000006
【図５】
2018169694.tif 000007