(57)【要約】      （修正有）【課題】ＣＰＵやメモリ機構などの特別のハードウェアのサポート無しで、メインメモリ上に書き込むデータの暗号化、復号化を可能にすることにより、データに対するセキュリティを向上させる情報処理装置およびデータ処理方法を提供する。【解決手段】プログラムのインストーラは、ＣＰＵ情報に基づいて、インストールするプログラムの処理を分割して、主記憶装置に格納された暗号化されたデータを読み出して復号する復号処理と、平文データを暗号化する暗号処理と、サブルーチンとを合わせた実行単位の実行時間が、所定の単位時間を越えないようなコードを生成してインストールを行う。そして、所定の単位時間の間に、ＣＰＵが、主記憶装置に格納された暗号化されたデータを読み出して復号する復号処理と、プログラムのサブルーチンの実行をする処理と、平文データを暗号化する暗号処理と、暗号化されたデータを主記憶装置に書き込む処理とを実行する。【選択図】図６
2019074913.tif 000002
【特許請求の範囲】
【請求項１】
主記憶装置に格納されたデータとプログラムをＣＰＵ（Central Processing Unit）が参照して演算することにより処理をおこなう情報処理装置であって、
前記プログラムのインストーラは、
ＣＰＵ情報に基づいて、インストールするプログラムの処理を分割して、前記主記憶装置に格納された暗号化されたデータを読み出して復号する復号処理と、平文データを暗号化する暗号処理と、サブルーチンとを合わせた実行単位の実行時間が、前記所定の単位時間を越えないようなコードを生成してインストールをおこない、
所定の単位時間の間に、
前記ＣＰＵが、前記主記憶装置に格納された暗号化されたデータを読み出して復号する復号処理と、
前記ＣＰＵが、前記プログラムのサブルーチンの実行をする処理と、
前記ＣＰＵが、平文データを暗号化する暗号処理と、
前記ＣＰＵが、暗号化されたデータを前記主記憶装置に書き込む処理とを実行することを特徴とする情報処理装置。
【請求項２】
前記所定の単位時間は、ソフトウェア割込みの時間であることを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記プログラムのインストーラは、
前記プログラムをインストールする際に、前記主記憶装置に格納された暗号化されたデータを読み出して復号する復号処理のコードと、平文データを暗号化する暗号処理のコードとをインストールし、
前記主記憶装置に格納された暗号化されたデータを読み出して復号する復号処理のコードと、平文データを暗号化する暗号処理のコードとに共通の秘密鍵を埋め込むことを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記プログラムのサブルーチンは、
前記主記憶装置に格納された暗号化されたデータを読み出して、前記ＣＰＵのレジスタ上に復号する復号処理と、
前記ＣＰＵのレジスタ上にある平文データを暗号化する暗号処理とをおこない、
前記情報処理装置は、エントロピー発生源を有し、
前記エントロピー発生源の発生したエントロピー源に基づいて、
前記復号処理と、前記暗号処理とで、共通の秘密鍵を生成することを特徴とする請求項１記載の情報処理装置。
【請求項５】
前記情報処理装置は、複数のＣＰＵを有し、
各々のＣＰＵがプロセスを並行に実行し、
第一のＣＰＵが実行する復号処理と暗号処理の共通の秘密鍵と、
第二のＣＰＵが実行する復号処理と暗号処理の共通の秘密鍵とは異なることを特徴とする請求項１記載の情報処理装置。
【請求項６】
第一のＣＰＵは、第一のＣＰＵが実行する復号処理と暗号処理の共通の秘密鍵により、平文を暗号化して、前記主記憶装置に暗号文として書込み、
前記第二のＣＰＵは、前記第一のＣＰＵが前記主記憶装置に書き込んだ暗号文を読み出して、さらに、第二のＣＰＵが実行する復号処理と暗号処理の共通の秘密鍵によりその暗号文を暗号化して、前記主記憶装置に暗号文として書き込むことを特徴とする請求項５記載の情報処理装置。
【請求項７】
主記憶装置に格納されたデータとプログラムをＣＰＵ（Central Processing Unit）が参照して演算することにより処理を行う情報処理装置のデータ処理方法であって、
前記プログラムをインストールする際に、前記プログラムのサブルーチンの実行前に、前記主記憶装置に格納された暗号化されたデータを読み出して復号する復号処理のコードをインストールし、前記プログラムのサブルーチンの実行後に、平文を暗号化する暗号処理のコードとをインストールするステップとを有し、
前記復号処理のコードと、前記暗号処理のコードとに共通の秘密鍵埋め込まれ、
ソフトウェア割込みの復帰時に、前記主記憶装置に格納された暗号化されたデータを読み出して復号する復号処理を実行するステップと、
前記復号処理を実行するステップの後に、前記プログラムのサブルーチンの実行するステップと、
前記プログラムのサブルーチンの実行するステップの後に、平文を前記暗号処理により暗号化して、暗号文として、主記憶装置に書き込むステップとを有し、
前記プログラムをインストールする際に、前記復号処理を実行するコードと、前記プログラムのサブルーチンを実行するコードと、前記平文を暗号化する暗号処理のコードが、合わせて所定の単位時間内に実行するようなコードを生成することを特徴とする情報処理装置のデータ処理方法。
【請求項８】
主記憶装置に格納されたデータとプログラムをＣＰＵ（Central Processing Unit）が参照して演算することにより処理を行う情報処理装置のデータ処理方法であって、
エントロピー発生源が、エントロピー源を発生するステップと、
前記ＣＰＵが、暗号鍵を前記エントロピーに基づいて、暗号鍵を生成するステップと、
前記ＣＰＵが、前記プログラムのサブルーチンの実行において、レジスタ上のデータを前記暗号鍵により暗号処理をして暗号文を生成するステップと、
前記ＣＰＵが、前記プログラムのサブルーチンの実行において、前記生成した暗号文を主記憶装置に書き込むステップと、
前記ＣＰＵが、前記プログラムのサブルーチンの実行において、前記主記憶装置に書き込まれた暗号文を読み出すステップと、
前記ＣＰＵが、前記プログラムのサブルーチンの実行において、読み出された暗号文を、前記暗号鍵よりレジスタ上のデータとして復号化するステップと、
前記ＣＰＵが、前記復号化の後は、前記暗号鍵を廃棄するステップとを有することを特徴とする請求項７記載の情報処理装置のデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および情報処理装置のデータ処理方法に係り、特に、スマートフォンやパーソナルコンピュータにおけるデータの盗用を防止し、セキャリティを確保することのできる情報処理装置および情報処理装置のデータ処理方法に関する。
【背景技術】
【０００２】
モバイル端末の普及とＷｅｂサービスの高度化に伴い、サービスの種類も多様化している。特に近年では、モバイル決済のように、従来ＡＴＭや窓口、専用端末を経由していた支払や送金に関するサービスをモバイル端末上で実行するサービスが流行の兆しを見せている。
このようなサービスを利用する際には、専用のアプリケーションソフトウェア（以下、単に「アプリ」という）をインストールし、そのアプリを介してサービスを利用するのが一般的である。
【０００３】
また、サービスの利用に際してユーザ認証（または端末認証）を行う必要があるが、このとき、ユーザ（または端末）のみが有する秘密情報を用いる。このような処理は、ＳＩＭチップ上の領域内で行われることが望ましいが、上記のようにアプリ上で秘密情報を取り扱うケースがほとんどである。これは、サービス用アプリをインストールするためには、ＳＩＭチップの記憶容量や処理能力が低いことが理由である。
【０００４】
一方で、モバイル端末のセキュリティという観点では、一定の割合で端末がマルウェア（不正ソフトウェア）に感染しているという現実があり、金融サービスに特化したマルウェアの存在も確認されている。特に、メモリ上に置かれたデータを読み取りクレジットカード番号などを取り出すマルウェアが報告されており、アプリの実行中にメモリに置かれるデータを保護する必要がある。
【０００５】
上記のような課題に対する対策として、メインメモリ上のデータを暗号化して格納する方法が知られている。例えば、特許文献１には、メインメモリ上のデータを暗号化して格納する方法が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願公開第２０１３／１５９７２６号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記特許文献１は、ＣＰＵ（Central Processing Unit）の機能として、ハードウェア的にセキュアな領域の確保およびＯＳとは独立にメインメモリへのアクセス制御機能を提供するものである。その一方で、この機能は利用端末を限定することになり、サービス提供者にとって機会損失となる可能性がある。
【０００８】
本発明の目的は、ＣＰＵやメモリ機構などの特別のハードウェアのサポート無しで、メインメモリ上に書き込むデータの暗号化、復号化を可能にすることにより、情報処理装置におけるデータに対するセキュリティを向上させることにある。
【課題を解決するための手段】
【０００９】
本発明の情報処理装置の構成は、好ましくは、主記憶装置に格納されたデータとプログラムをＣＰＵ（Central Processing Unit）が参照して演算することにより処理をおこなう情報処理装置であって、プログラムのインストーラは、ＣＰＵ情報に基づいて、インストールするプログラムの処理を分割して、主記憶装置に格納された暗号化されたデータを読み出して復号する復号処理と、平文データを暗号化する暗号処理と、サブルーチンとを合わせた実行単位の実行時間が、所定の単位時間を越えないようなコードを生成してインストールをおこない、所定の単位時間の間に、ＣＰＵが、主記憶装置に格納された暗号化されたデータを読み出して復号する復号処理と、ＣＰＵが、プログラムのサブルーチンの実行をする処理と、ＣＰＵが、平文データを暗号化する暗号処理と、ＣＰＵが、暗号化されたデータを主記憶装置に書き込む処理とを実行するようにしたものである。
【発明の効果】
【００１０】
本発明によれば、ＣＰＵやメモリ機構などの特別のハードウェアのサポート無しで、メインメモリ上に書き込むデータの暗号化、復号化を可能にすることにより、情報処理装置におけるデータに対するセキュリティを向上させることができる。
【図面の簡単な説明】
【００１１】
【図１】情報処理装置が用いられるシステムのシステム構成図である。
【図２】ネットワーク端末の機能構成を表す図である。
【図３】アプリのインストーラの機能構成図である。
【図４】ＲＡＭ暗号化機能を内蔵したアプリをインストールする手順を表したフローチャートである。
【図５】図４のＳ４０５の処理分割を説明するイメージ図である。
【図６】実施形態１における定期的なソフトウェア割り込み時にデータを暗号化および復号を行う場合の処理を示す図である。
【図７】割り込みが発生しないタイミングでＲＡＭ２５０に書き込むデータを暗号化する場合の処理を示す図である。
【図８】ＣＰＵのハードウェア機構と暗号処理の関係について説明する図である。
【図９】３２ビットＡＲＭプロセッサ上で実行可能な暗号処理の具体例を示した図である。
【図１０】実施形態２における定期的なソフトウェア割り込み時にデータを暗号化および復号を行う場合の処理を示す図である。
【図１１】図１０の処理を詳細に示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本発明に係る各実施形態を、図１ないし図１１を用いて説明する。
【００１３】
〔実施形態１〕
以下、本発明に係る実施形態１を、図１ないし図９を用いて説明する。
実施形態１の情報処理装置は、シングルＣＰＵで構成された装置の例について説明する。
【００１４】
先ず、図１を用いて情報処理装置が用いられるシステム構成について説明する。
ユーザが情報処理装置を用いるシステムにおける情報処理端末は、スマートフォンなどのネットワーク端末であり、システムは、ユーザ１０１が携帯するネットワーク端末１０２と、アプリ配信サーバ１０３、サービス提供者１０４における認証サーバ１１０、アプリケーションサーバ１１１で構成されている。
【００１５】
ユーザ１０１は、アプリ配信サーバ１０３からアプリをネットワーク端末１０２にダウンロードする。ダウンロードしたアプリは、サービス提供者１０４が提供する特定のサービスを利用するために用いられる。ユーザ１０１は、アプリ配信サーバ１０３からダウンロードしたアプリをネットワーク端末１０２に、インストールした後に認証サーバに対してユーザ登録を実行する。サービスを利用する際には、サービスの認証サーバ１１０に対してユーザ認証または機器認証を行った後に、アプリケーションサーバ１１１を通じてサービスを利用する。
【００１６】
次に、図２を用いてネットワーク端末の機能構成について説明する。
ネットワーク端末（以下、単に「端末」という）１０２は、ネットワークインターフェース２１０、センサ２２０、ストレージ２３０、ＣＰＵ２４０、処理中の中間データやプログラムを保持するＲＡＭ（Random Access Memory）２５０（主記憶装置）などで構成される。
【００１７】
ネットワークインターフェース２１０は、３Ｇ、４Ｇなどの規格、ＩＥＥＥ８０２．１１などのＬＡＮの規格による無線通信、または、Ｅｔｈｅｒｎｅｔ（登録商標）の有線通信の規格により、外部と情報のやり取りを行うインタフェース部である。センサ２２０は、加速度や光などの物理情報を読み取る装置である。ストレージ２３０は、データやプログラムを保存する不揮発性の記憶装置である。ＣＰＵ２４０は、プログラムを実行し、演算処理や端末１０２制御を行う。ＲＡＭ（Random Access Memory）２５０は、情報処理装置の主記憶装置として用いられ、処理中の中間データやプログラムを保持する揮発性の記憶装置である。
これらの機能はデータバスで互いにつながれており、ＲＡＭ２５０を介してデータのやり取りをする。
【００１８】
ＣＰＵ２４０は複数のレジスタ２４１、演算器２４２の他、物理乱数生成器などのエントロピー発生源２４３や時計に相当するサイクルカウンタ２４４を内蔵している。
【００１９】
ストレージ２３０上には保存されているアプリ２３１のバイナリデータや設定ファイルが保存されている。処理対象データ２５１は、センサ２２０から取得したセンサデータ２２１やネットワークＩＦ２１０から取得した通信データ２２１である。また、処理対象データ２５１は、ストレージ２３０上に保存されているデータでもよい。
【００２０】
端末１０２のハードウェア上では、通常ＯＳ（Operation System）が常駐しており、ハードウェアとアプリのやり取りを仲介や、複数のアプリの実行権限とリソースの管理を行っている。一般的なアプリ２３１と処理対象データ２５１は、ユーザ領域に格納され、ユーザ権限と呼ばれる限られた権限の元で実行される。一方、ＯＳの実行するリソース管理などはより強い権限特権の元で実行され、特権領域には割り込み制御部２４５を有している。
【００２１】
これにより、実行中のアプリの一時中断などを行うことが可能となる。具体的には、ＯＳは、サイクルカウンタ２４４などの時刻情報を基準にして、定期的に割り込み登録の有無を確認し、必要に応じて現在実行中のアプリを中断し、ＲＡＭ２５０とレジスタ２４１の状態を退避して、他の処理にリソースを割り当てる。割り込み処理が終了したら、退避していたレジスタとＲＡＭの状態を復元し、中断したアプリを再開する。
【００２２】
このようなシステムがマルウェアに感染した場合、機能間の通信路保護が課題となる。攻撃者にとって、もっともアクセスしやすいデータは、ＲＡＭ上に置かれたデータである。本実施形態では、アプリが受け取り、ＲＡＭ上に配置するデータを保護する方法を提供する。
【００２３】
次に、図３を用いてアプリのインストーラの機能構成について説明する。
本実施形態のアプリは、ＲＡＭ上のデータを暗号化する機能（ＲＡＭ暗号化機能）を有しており、端末１０２にアプリをインストールするためのプログラム（インストーラ）は、特有の機能を有する。
【００２４】
一般に、端末１０２は、機能構成として、記憶部３００と演算部３１０と通信部３２０とを含む。また、端末は、端末固有の情報３３０を有する。端末固有の情報は、記憶部に記憶された情報でもよいし、ＣＰＵの型番や通信機能部のＩＤＭＡＣアドレスなどでもよい。
【００２５】
通信部３２０を介してダウンロードされたインストーラ３４０は、記憶部３００に保存される。その後、インストーラ３４０が実行されると、端末固有の情報を補助情報として、保護対象のプログラムを分割処理し、不要な機能を消去したアプリインストール後のアプリ３５０を記憶部に書き込む。
【００２６】
インストーラ３４０は、単数または複数のサブルーチンからなる保護対象プログラム３４１、鍵生成部３４２、暗号化部３４３、復号部３４４、割り込み頻度取得部３４５、処理分割部３４６を内包している。なお、各々の機能部の処理は、後に詳説する。
【００２７】
また、インストール後のアプリ３５０は最構成された処理ブロック１（３５１）〜処理ブロックｋ′（３５２）および鍵を埋め込んだ暗号化部３５３と鍵を埋め込んだ復号部３５４で構成される。
【００２８】
なお、インストーラ３４０と保護対象プログラム３４１は別々にダウンロードしてもよい。例えば、保護対象プログラム３４１を含まないインストーラ３４０のみを先行してダウンロードし、インストーラ３４０が実行されると、インストーラは保護対象プログラム３４１を、改めてダウンロードしてもよい。この場合、インストーラ３４０は通信部３２０を利用して外部との通信を行う機能を具備する。
【００２９】
次に、図４および図５を用いてアプリのインストールの処理について説明する。
先ず、端末１０２は、ネットワーク２０１を介して図１に示したアプリ配信サーバ１０３に接続して、ＴＬＳ（Transport layer Security）等の暗号通信を確立する（Ｓ４０１）。
【００３０】
次に、端末１０２は、アプリ配信サーバ１０３にアプリダウンロード要求を送信する（Ｓ４０２）。
次に、アプリ配信サーバ１０３は、受信したアプリダウンロード要求にしたがい、アプリのインストーラ３４０を端末１０２に送信する（Ｓ４０３）。
次に、端末１０２は、受信したインストーラ３４０をストレージ２３０またはＲＡＭ２５０に置き、インストーラを実行する（Ｓ４０４）。
【００３１】
次に、インストーラ３４０の割り込み頻度取得部３４５は、ＯＳ情報と、システム内に記録されている端末１０２のＣＰＵ情報とから、ＯＳの単位時間ソフトウェア割り込みが発生する周期で実行可能な処理量を判断する。この情報に基づき、処理分割部３４６は、保護対象プログラム３４１の処理分割を行う（Ｓ４０５）。
【００３２】
次に、インストーラ３４０の鍵生成部３４２は、ＭＡＣアドレスなどの端末固有の値や、時刻情報、システムログなどをエントロピー源として、暗号化部３４３と復号部３４４で用いる秘密鍵を生成する。さらに、鍵を埋め込んだ暗号化部３５３と鍵を埋め込んだ復号部３５４を生成して、インストール後のアプリ３５０を作成する（Ｓ４０６）。
最後に、端末１０２は、作成されたアプリイメージをストレージ２３０に格納する（Ｓ４０７）。
【００３３】
Ｓ４０６では、例えば、エントロピー源から擬似乱数を生成し、これに基づき関数やデータのアドレス配置のランダム化を施すことにより、マルウェアによるアプリの静的解析を困難にすることができる。また、同じくエントロピー源から生成された擬似乱数を鍵として、アプリ全体を暗号化するパッキングを施すこともできる。
【００３４】
次に、図５を用いて図４のＳ４０５の処理分割について説明する。
図５（ａ）は、処理を分割する前のアプリの処理構造の例、図５（ｂ）は、処理を分割した後のアプリの処理構造の例を示している。
【００３５】
アプリは、一般に複数の関数、または処理ブロックから構成されている。アプリの作成時には、個々の関数または処理ブロックを単位時間で実行可能なサイズに分割しておく。例えば、図５の例では、保護対象プログラム３４１の中でｆｕｎｃｔｉｏｎ１（）、ｆｕｎｃｔｉｏｎ２（）、ｆｕｎｃｔｉｏｎ３（）、ｆｕｎｃｔｉｏｎ４（）の四つの関数を実行する。これらの関数の実行には、それぞれ０．２ミリ秒、０．５ミリ秒、０．１ミリ秒、０．８ミリ秒を要するものとする。また、単位時間を１ミリ秒とする。ここで、単位時間は、ＯＳのソフトウェア割込が発生する周期にすることが望ましい。例えば、周知のＯＳであるＬｉｎｕｘ（登録商標）では、１ミリ秒である。このとき、ｆｕｎｃｔｉｏｎ１（）とｆｕｎｃｔｉｏｎ２（）を１回の単位時間で実行可能なので、この二つの関数をサブルーチン１（５０１）にまとめる。
【００３６】
次に、ｆｕｎｃｔｉｏｎ３（）を含むループ処理は、全体で２ミリ秒を要するため、複数のループに分割し、単位時間で終了するループをサブルーチン２（５０２）にまとめる。最後に残った処理をサブルーチン３（５０３）にまとめる。このようにして、アプリを単位時間で処理が完了する複数のサブルーチンに分割することができる。
【００３７】
本実施形態では、さらにサブルーチンの前後には、復号処理５１０と暗号処理５１１を付加する（暗号処理については後述する）。この暗復号処理は、図３における鍵を埋め込んだ復号部３５４と鍵を埋め込んだ暗号化部３５３を呼び出して実行する。ただし、これらを関数呼び出しでは無く、個々のサブルーチンの前後にコードを付加してもよい。この場合には、それぞれで用いる鍵として別の値を用いてもよい（サブルーチン１後の暗号化とサブルーチン２前の復号をセットで同じ鍵を用いるようにすればよい）。再帰処理や、処理時間が外部処理の応答に依存するような場合には、その前後で処理を分割する。
【００３８】
単位時間は端末１０２の機種等によって異なるため、インストーラがＯＳの単位時間で実行可能な処理量を判断し、適切な分割を行う。ただし、アプリを実行する機種が限定されている場合であれば、事前に処理を分割し、インストール時の処理を軽減してもよい。また、端末１０２がアプリ配信サーバ１０３に端末のハードウェア構成を送信して、アプリ配信サーバ１０３がアプリの分割を実行してもよい。また、アプリの分割を行うサーバを別に設けてもよい。
【００３９】
次に、図６を用いて定期的なソフトウェア割り込み時にデータを暗号化および復号を行う場合の処理について説明する。
以下、図６にしたがって、定期的なソフトウェア割り込みに伴う処理の中断および復帰と、中断時に退避されるデータの暗号化プロセスについて説明する。
アプリの分割した処理ブロック６１０は、暗号処理１（６１１）と復号処理１（６１２）、暗号処理および復号処理に用いる鍵１（６１３）、そしてアプリが本来行うべきサブルーチン６１４で構成される。
【００４０】
先ず、実行を中断されたアプリが割り込みから復帰すると、アプリは割り込みが発生する前にＲＡＭ２５０上に退避したデータ（暗号文Ｃ（６２０））を読み込む（ステップ１：６１５）。
【００４１】
次に、鍵１（６１３）をパラメータとして、読み込んだデータを復号し、復号文Ｐ（６１６）をレジスタ（２４１）またはＲＡＭ２５０上に置く（ステップ２：復号処理１（６１２））。
次に、アプリは、復号文Ｐ（６１６）に対して、サブルーチン６１４の処理を実行し、処理の結果として平文Ｐ′（６１７）を出力する（ステップ３）。
次に、アプリは、鍵１（６１３）をパラメータとして、平文Ｐ′（６１７）を暗号化し、暗号文Ｃ′（６２１）を出力する（ステップ４：暗号処理１（６１１））。
次に、アプリは、暗号文Ｃ・（６２１）をＲＡＭ２５０上に書き出す（ステップ５：６１８)。
同様にして、レジスタ上のデータも暗号化してＲＡＭに書き出す（ステップ６：暗号処理１（６１１））。
【００４２】
次に、アプリはレジスタ上のデータを消去し、処理を中断する（ステップ７）。
最後に、ＯＳは割り込み処理を実行し、アプリのプロセスを退避する（ステップ８：６０２）。
この構成により、割り込みが発生しても、退避されたデータはすべて暗号化されているため、マルウェアは秘密情報を取り出すことができない。
【００４３】
図６中の暗号処理１（６１１）と復号処理１（６１２）は一般的な共通鍵暗号アルゴリズム、例えばＡＥＳ（Advanced Encryption Standard）を用いてもよい。図６中では、鍵１（６１３）は復号処理１（６１２）および暗号処理１（６１１）とは独立なデータとして描いているが、例えば、white-box AESのように、鍵１（６１３）を復号処理１（６１２）および暗号処理１（６１１）に隠蔽して埋め込んでもよい。
【００４４】
また、暗号処理と復号処理は秘密分散を用いて構成してもよい。このとき、暗号処理１（６１１）は、鍵１（６１３）を乱数情報として平文Ｐ・（６１７）を分散し、復号処理１（６１２）は、分散した情報（暗号文Ｃ）から復号文Ｐ（６１６）を復元する。さらに、暗号処理１（６１１）で分散した暗号文Ｃ・（６２１）をＲＡＭ２５０上にランダムに配置することにより、攻撃者がすべての分散した情報を入手することを困難にすることができる。
【００４５】
秘密分散を構成する方法の１つに、線形写像を用いる方法が知られている。特に排他的論理和のみを用いて構成する方法や、算術加算と減算のみを用いて構成する方法によれば、コンパクトな復号器を構成することができ、復号器の隠ぺいが容易になる。また、秘密分散を構成する別の方法として、All-Or-Not-Transformを用いてもよい。
【００４６】
また、図６では、便宜上サブルーチンの外側で退避するデータの暗号化を実施しているが、レジスタ上でのデータ渡しができない場合には、サブルーチンの開始直後に復号処理を行い、終了直前に暗号処理を行えばよい。
【００４７】
次に、図７を用いて割り込みが発生しないタイミングでＲＡＭ２５０に書き込むデータを暗号化する場合の処理について説明する。
【００４８】
サブルーチン６１４は、鍵生成処理７０１、鍵廃棄処理７０２、暗号処理２（７０３）、復号処理２（７０４）、ＲＡＭからのデータ読み込み処理７０７、ＲＡＭへのデータ書き込み処理７０６、そして、レジスタ上でのデータ処理７０８で構成される。
（Ｉ）短期鍵の生成
先ず、実行を中断されたアプリが割り込みから復帰すると、エントロピー発生源２４３からエントロピー源７１０を取得し、鍵２（７１１）を生成し、レジスタ上に配置する（ステップ１：鍵生成処理７０１）。
（ＩＩ）復号文Ｐ６１６の暗号化
次に、鍵２（７１１）をパラメータとして復号文６１６を暗号化する（ステップ２：暗号処理２７０３）。
次に、は暗号文ＣＴ７１２をＲＡＭ２５０に書き込む（ステップ３：ＲＡＭへのデータ書き込み機能７０６）。
（ＩＩＩ）処理中のＲＡＭアクセスと暗号処理
次に、暗号文ＣＴ７１２をレジスタ上に読み込む（ステップ４：ＲＡＭからのデータ読み込み処理７０７）)。
次に、鍵２（７１１）をパラメータとして暗号文ＣＴ７１２を復号する（ステップ５：復号処理２７０４）。
【００４９】
次に、復号されたデータに対してレジスタ上で処理を行う（ステップ６：レジスタ上でのデータ処理７０８)。処理後のデータは、ステップ２、ステップ３と同様に、暗号化してＲＡＭ上に保存する。
以下、必要に応じてステップ４〜ステップ６を繰り返す。
（ＩＶ）サブルーチン完了後の処理
最後に、サブルーチン６１４は、鍵２７１１を配置したレジスタをゼロリセットするまたは乱数を書き込むことで、鍵を廃棄し、処理を終了する（ステップ７：鍵廃棄処理７０２）。
【００５０】
なお、図７に示した処理では、サブルーチン６１４内で、ＲＡＭ２５０にデータを書き込む際には、そのデータを暗号化して暗号文ＣＴ７１２として書き込む処理を行っている。そのため、プログラムを作成する際には、データのストア処理、ロード処理には、コンパイル時にそのようなコード生成を行うコンパイラを使用することが必要になる。
【００５１】
この構成により、マルウェアが割り込み以外の任意のタイミングでＲＡＭ上のデータを読み取ったとしても、すべてのデータは暗号化されているため、マルウェアは秘密情報を取り出すことができない。また、鍵２はサブルーチンの中で、レジスタ上で生成／保管／廃棄されるため、マルウェアはこれを入手することが困難である。
ここで、復号文Ｐ６１６は、図４におけるステップ２で復号されたデータであるが、アプリの外側から入力された暗号化されていないデータでもよい。
【００５２】
ステップ１で鍵生成に用いるエントロピー発生源２４３としては、ＣＰＵタイマ(サイクルカウンタ２４４)や、サブルーチン開始時の初期化されていないレジスタの値を用いてもよい。また、システム情報、時刻情報やＯＳの有する乱数生成機能などを利用してもよい。
【００５３】
次に、図８および図９を用いてＣＰＵのハードウェア機構と暗号処理の関係について説明する。
ＣＰＵは、３２ビットレジスタをｍ本有しているものとする。このうち２本のレジスタＲ［ｍ−１］８１１、Ｒ［ｍ］８１２に、鍵２（７１１）を配置する。また、暗号化されるデータ暗号化対象データ１８０１、暗号化対象データ２８０２はレジスタＲ［２］８１３、Ｒ［ｋ］８１４に配置されているものとする。暗号処理２（７０３）では、暗号化対象データおよび鍵２を入力として、暗号文を生成する。暗号文は、レジスタ長に等しい二つのデータブロック暗号文データＣ１（８０３）と暗号文データＣ２（８０４）を生成し、レジスタＲ［２］、Ｒ［ｋ］の値を書き換える。
【００５４】
図８の構成を具体的に３２ビットＡＲＭプロセッサ上で実現し、暗号処理のための命令後も示すと、図９に示されるようになる。
３２ビットＡＲＭアーキテクチャは、１６本の汎用レジスタを有する。このうち、実際に利用可能なのはＲ０からＲ１２の１３本のレジスタである。図９の例では、鍵維持用レジスタにＲ０，Ｒ１を割り当てている。また、レジスタＲ２，Ｒ３に配置しているデータを暗号化対象とする。
Ｒ２，Ｒ３に配置されている暗号化対象データＰ１，Ｐ２と、Ｒ０，Ｒ１に配置されている鍵Ｋ０，Ｋ１と、それぞれ排他的論理和をとる（ステップ１）。
以下の処理を定められた回数繰り返す（ステップ２）。  
Ｒ３←ＡＤＤＲ３，Ｒ２
Ｒ２←ＲＯＴＬ３２Ｒ２，ｓ１
Ｒ２←ＸＯＲＲ２，Ｒ３
Ｒ３←ＲＯＴＬ３２Ｒ３，ｓ２
Ｒ３←ＡＤＤＲ３，Ｒ２
Ｒ２←ＲＯＴＬ３２Ｒ２，ｓ３
Ｒ２←ＸＯＲＲ２，Ｒ３
Ｒ３←ＲＯＴＬ３２Ｒ３，ｓ４
【００５５】
ここで、Ｒｘ←ｆｕｎｃは処理ｆｕｎｃの結果をレジスタＲｘに代入する処理を表し、ＡＤＤＲｘ，ＲｙはレジスタＲｘとＲｙ上のデータの加算を、ＸＯＲＲｘ，ＲｙはレジスタＲｘとＲｙ上のデータの排他的論理和を、ＲＯＴＬ３２Ｒｘ，ｓはレジスタＲｘ上のデータをｓビット左巡回シフトする処理を、それぞれ表している。
【００５６】
次に、Ｒ２，Ｒ３に配置されている暗号化対象データＰ１，Ｐ２と、Ｒ０，Ｒ１に配置されている鍵Ｋ０，Ｋ１と、それぞれ排他的論理和をとる（ステップ３）。
この構成により、暗号処理対象データを配置したレジスタと、鍵を配置したレジスタのみで暗号処理を実行できる。復号処理は、暗号処理を逆順に行えばよい。
【００５７】
また、ここでは暗号化対象データを６４ビットとし、暗号化のみを行っているが、例えば、レジスタＲ３の暗号化対象データを常にゼロとし、復号後にレジスタＲ３の値がゼロであるかどうかをチェックすることにより、ＲＡＭ上に置かれたデータの改ざんを検出することができる。
【００５８】
以上、本実施形態の情報処理装置のデータ処理方法によれば、ソフトウェア割り込みの有無によらず、ＲＡＭ上のデータは、常に暗号化して書き込まれる。そのため、マルウェアがＲＡＭ上のデータから秘密情報を得るためには、暗号化鍵の推定、またはアプリの実行内容の解析により割り込み発生時に秘匿されたデータを復号する必要があるため、秘密情報の漏えいリスクを軽減できる。
【００５９】
〔実施形態２〕
以下、本発明に係る実施形態２を、図１０および図１１を用いて説明する。
実施形態１では、シングルＣＰＵでＲＡＭ上のデータを暗号化する処理について説明したが、本実施形態２の情報処理装置は、マルチＣＰＵ、マルチコアで構成された装置であり、マルチＣＰＵで暗号処理を分割実行するものである。
【００６０】
以下、図１０および図１１にしたがって、定期的なソフトウェア割り込みに伴う処理の中断および復帰と、中断時に退避されるデータの暗号化プロセスについて説明する。
本実施形態では、ＣＰＵはマルチコアであり、アプリが同時に複数のサブルーチンを実行している場合を考える。アプリは処理ブロック１（１０１０）、処理ブロック２（１０２０）を、それぞれＣＰＵ１（１００１）、ＣＰＵ２（１００２）上で実行しているものとする。実施形態１の場合と同様に、アプリ２３１は単位時間で実行可能な処理ブロックに分割されているものとする。
【００６１】
先ず、処理ブロック１（１０１０）がサブルーチンの処理を完了すると、暗号処理１（１０１１）として、鍵１（１０１２）をパラメータとして平文１０１３を暗号化し、暗号文１（１０５１）をＲＡＭ２４０に置く（ステップ１：Ｓ１１０１）。そして、処理ブロック１（１０１０）は、鍵１（１０１２）を廃棄し、処理を中断する。
【００６２】
次に、処理ブロック２（１０２０）の暗号処理２（１０２１）では、鍵２（１０２２）をパラメータとしてＲＡＭ２４０上の暗号文１（１０５１）をさらに暗号化した暗号文２（１０５２）をＲＡＭ２４０に置く（ステップ２：Ｓ１１０２）。そして、処理ブロック２（１０２０）は、鍵２（１０２２）を廃棄し、処理を中断する。
【００６３】
次に、割り込み処理１０６０から復帰後、鍵２（１０４２）と処理ブロック４（１０４０）で復号処理２（１０４１）として、ＲＡＭ２４０から暗号文２（１０５２）を読み出し、鍵２（１０４２）と復号処理２（１０４１）で復号した暗号文１′（１０５３）を、ＲＡＭ２４０に書き込む（ステップ３：Ｓ１１０４）。
【００６４】
次に、割り込み処理１０６０から復帰後、処理ブロック３（１０３０）で、復号処理１（１０３１）により、鍵１（１０３２）とＲＡＭ２４０から暗号文１′（１０５３）を読み出し、鍵１（１０３２）で暗号文１′（１０５３）を復号し、平文１０３３を得る（ステップ４：Ｓ１１０５））。その後、必要に応じてサブルーチン６１４に相当する処理を行う。
【００６５】
最後に、処理ブロック４（１０４０）で、エントロピー発生源（２４３）からエントロピー源を取得し、鍵生成処理２’（１０４３）により、鍵２’（１０４４）を生成し、鍵２（１０４２）を上書きし、処理ブロック３（１０３０）で、エントロピー発生源２４３からエントロピー源を取得し、鍵生成処理１（１０３４）により、鍵１’（１０３５）を生成し、鍵１（１０３２）を上書きする（ステップ５：Ｓ１１０６）：。
【００６６】
この構成とＲＡＭデータの暗号化方法により、ＲＡＭ上のデータは、鍵１（１０１２）、鍵２（１０２２）で二重暗号化される。例えば、処理ブロック１（１０１０）がダンプされて鍵１（１０１２）が漏えいした場合であっても、同時に二つの処理ブロックをダンプすることは難しいため、鍵２（１０２２）は漏えいせず、秘密情報の漏えいを防止することができる。また、各処理ブロックで鍵を廃棄、更新していくため、攻撃者が次の割り込みタイミングで他の処理ブロックがダンプしたとしても、得られたデータは二つ以上の鍵で暗号化されているため、攻撃者はやはり秘密情報を取得することはできない。
【００６７】
図１０ではマルチコアで二つのプロセスが同時に実行されているケースを想定しているが、三つ以上のプロセスによる多重暗号化を行ってもよい。また、多重暗号化を行う代わりに、複数の処理ブロックで秘密分散処理を行ってもよい。
【００６８】
また、ここではマルチコアのシステムを想定しているので、ステップ２（１０２２）において処理ブロック２（１０２０）は処理を中断せず、ＣＰＵ１（１００１）上で処理ブロック３（１０３０）が実行されるまで、ＲＡＭ暗号処理とは、独立の処理を実行していてもよい。この場合、処理ブロック２（１０２０）と処理ブロック４（１０４０）は実質的に同一の処理ブロックであり、復号のタイミングまで鍵２（１０２２）は廃棄されない。処理ブロック１（１０１０）と処理ブロック３（１０３０）についても同様である。
【００６９】
また、図１１で説明した処理では、ＣＰＵ１（１００１）上で実行される処理ブロック１（１０１０）の平文１０１３のみを二重暗号化しているが、同様にしてＣＰＵ２（１００２）上で実行される処理ブロック２（１０２０）の保持するデータについても、処理ブロック１（１０１０）で多重暗号化を施してもよい。反対に、処理ブロック２（１０２０）は多重暗号化を施すための専用の処理ブロックでもよい。
以上、本実施形態では、ＲＡＭ上のデータをマルチコアによって、多重に暗号化するため、セキュリティの強度を高めることが可能になる。
【符号の説明】
【００７０】
１０２…ネットワーク端末、２１０…ネットワークインターフェース、２２０…センサ、２３０…ストレージ、２４０…ＣＰＵ、２４１…レジスタ、２４２…演算器、２４３…エントロピー発生源、２４４…サイクルカウンタ、
３００…記憶部、３１０…演算部、３２０…通信部、３３０…端末固有の情報、３４０…インストーラ、３４１…保護対象プログラム、３４２…鍵生成部、３４３暗号化部、３４４…復号部、３４５…割り込み頻度取得部、３４６…処理分割部、３５１…処理ブロック１、３５２…処理ブロックｋ′、３５３…鍵を埋め込んだ暗号化部、３５４…鍵を埋め込んだ復号部
【図１】
2019074913.tif 000003
【図２】
2019074913.tif 000004
【図３】
2019074913.tif 000005
【図４】
2019074913.tif 000006
【図５】
2019074913.tif 000007
【図６】
2019074913.tif 000008
【図７】
2019074913.tif 000009
【図８】
2019074913.tif 000010
【図９】
2019074913.tif 000011
【図１０】
2019074913.tif 000012
【図１１】
2019074913.tif 000013