(57)【要約】【課題】耐タンパ装置の容量を超えるプログラムやデータについて、プログラム実行時の攻撃に対し機密情報の漏洩を防ぐ。【解決手段】本発明に係る計算機システムは、暗号鍵を管理する耐タンパ装置と、前記暗号鍵で暗号化されたプログラムおよびデータを格納するサーバと、を備え、前記耐タンパ装置は、前記サーバから取得した前記暗号化されたプログラムおよびデータを前記暗号鍵で復号して処理する。【選択図】図１
2014011739.tif 000002
【特許請求の範囲】
【請求項１】
暗号鍵を管理する耐タンパ装置と、
前記暗号鍵で暗号化されたプログラムおよびデータを格納するサーバと、を備え、
前記耐タンパ装置は、前記サーバから取得した前記暗号化されたプログラムおよびデータを前記暗号鍵で復号して処理する、ことを特徴とする計算機システム。
【請求項２】
前記プログラムは、行単位に分割され暗号化される、ことを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記プログラムは、関数単位のスクリプトに分割され暗号化される、ことを特徴とする請求項１又は２に記載の計算機システム。
【請求項４】
秘密鍵を管理する耐タンパ装置と、サーバとを備える計算機システムの計算方法であって、
前記サーバが、前記秘密鍵の公開鍵で暗号化されたプログラムおよびデータを格納するステップと、
前記耐タンパ装置が、前記サーバから取得した前記暗号化されたプログラムおよびデータを前記秘密鍵で復号して処理するステップと、を含むことを特徴とする計算方法。
【請求項５】
前記プログラムは、行単位に分割され暗号化される、ことを特徴とする請求項４に記載の計算方法。
【請求項６】
前記プログラムは、関数単位のスクリプトに分割され暗号化される、ことを特徴とする請求項４又は５に記載の計算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、計算機システムおよび計算方法に関し、特に、個人情報など機密性の高い情報を扱うシステムのセキュリティを確保するための計算機システムおよび計算方法に関する。
【背景技術】
【０００２】
個人情報など機密性の高いデータを扱うシステムにおいて、従来は、データを暗号化して保存し、暗号鍵を耐タンパ装置（ＨＳＭ：ハードウェアセキュリティモジュール）で管理していた（例えば、特許文献１参照）。ＨＳＭの容量は小さく、暗号処理など最低限の処理のみＨＳＭ内で行い、その他の処理はＨＳＭの外で実行していた。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−５０３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
個人情報といった機密性の高いデータを扱うシステムでは、データを暗号化して保管しているが、実行時には復号して処理を行う必要がある。耐タンパ装置（ＨＳＭ）の内部で全ての処理が行えれば、実行時に機密情報が平文になることは問題とならないが、ＨＳＭの容量は小さく、大規模なプログラムやデータをＨＳＭに格納することは不可能であるため、暗号演算など最低限の処理以外はＨＳＭ内で行うことができなかったので、実行時を攻撃されると機密情報が漏えいする危険性があった。
【０００５】
したがって、かかる点に鑑みてなされた本発明の目的は、耐タンパ装置の容量を超えるプログラムやデータについて、プログラム実行時の攻撃に対し機密情報の漏洩を防ぐことが可能な計算機システムおよび計算方法を提供することにある。
【課題を解決するための手段】
【０００６】
上述した諸課題を解決すべく、本発明に係る計算機システムは、暗号鍵を管理する耐タンパ装置と、前記暗号鍵で暗号化されたプログラムおよびデータを格納するサーバと、を備え、前記耐タンパ装置は、前記サーバから取得した前記暗号化されたプログラムおよびデータを前記暗号鍵で復号して処理する、ことを特徴とする。
【０００７】
また、前記プログラムは、行単位に分割され暗号化される、ことが望ましい。
【０００８】
また、前記プログラムは、関数単位のスクリプトに分割され暗号化される、ことが望ましい。
【０００９】
さらに、上述した諸課題を解決すべく、本発明に係る計算方法は、秘密鍵を管理する耐タンパ装置と、サーバとを備える計算機システムの計算方法であって、前記サーバが、前記秘密鍵の公開鍵で暗号化されたプログラムおよびデータを格納するステップと、前記耐タンパ装置が、前記サーバから取得した前記暗号化されたプログラムおよびデータを前記秘密鍵で復号して処理するステップと、を含むことを特徴とする。
【００１０】
また、前記プログラムは、行単位に分割され暗号化される、ことが望ましい。
【００１１】
また、前記プログラムは、関数単位のスクリプトに分割され暗号化される、ことが望ましい。
【発明の効果】
【００１２】
本発明による計算機システムおよび計算方法によれば、耐タンパ装置の容量を超えるプログラムやデータについて、プログラム実行時の攻撃に対し機密情報の漏洩を防ぐことが可能となる。特に、暗号鍵による暗号化により、公開鍵によって不正なプログラムが暗号化されてＨＳＭに読み込まれる脅威を防ぐことができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施形態に係る計算機システムの概略構成を示す図である。
【図２】プログラム暗号化の一例を示す図である。
【図３】計算機システムの鍵生成の処理シーケンスである。
【図４】計算機システムのプログラム暗号化の処理シーケンスである。
【図５】計算機システムのデータ暗号化の処理シーケンスである。
【図６】計算機システムのプログラム実行の処理シーケンスである。
【発明を実施するための形態】
【００１４】
以降、諸図面を参照しながら、本発明の実施態様を詳細に説明する。
【００１５】
図１は、本発明の一実施形態に係る計算機システムの概略構成を示す図である。計算機システムは、暗号化用端末１０と、サーバ２０と、耐タンパ装置であるＨＳＭ３０と、クライアント４０とを備える。暗号化用端末１０はプログラムおよびデータを暗号化して、サーバ２０に格納しておく。サーバ２０はクライアント４０からの処理要求に従って処理に必要な暗号化された「行」およびデータをＨＳＭ３０に送信する。ＨＳＭ３０は、サーバ２０から送られた、暗号化された「行」およびデータを復号し、正当性を確認したうえで実行する。実行後のデータは暗号化してサーバ２０に保存される。以下、暗号化用端末１０と、サーバ２０と、ＨＳＭ３０と、クライアント４０の構成について詳述する。
【００１６】
暗号化用端末１０は、プログラム暗号化手段１１と、データ暗号化手段１２と、「行」・データ送信手段１３とを備える。プログラム暗号化手段１１は、クライアント４０からのプログラム暗号化命令を受け取る。データ暗号化手段１２は、クライアント４０からのデータ暗号化命令を受け取る。「行」・データ送信手段１３は、暗号化した「行」及びデータをサーバ２０に保存するために、サーバ２０に送信する。
【００１７】
プログラム暗号化手段１１は、プログラム分割手段１１１と、ハッシュ生成・付加手段１１２と、行番号付加手段１１３と、結果通知手段１１４とを備える。図２は、プログラム暗号化の一例を示す図である。（１）プログラム分割手段１１１は、プログラムを行単位で分割する。（２）ハッシュ生成・付加手段１１２は、「行」正当性識別タグを各行に付加する。「行」正当性識別タグとは、プログラムを分割した「行」のハッシュ値である。（３）データ暗号化手段１２は、「行＋行正当性識別タグ」を暗号化する。「行＋行正当性識別タグ」を暗号化したものを暗号化された「行」と呼ぶ。（４）行番号付加手段１１３は、クライアント４０から暗号化された「行」を呼び出す際に用いる行番号を付加する。行番号とは、プログラムを行単位に分割した際の、各行の行番号のことである。結果通知手段１１４は、クライアント４０へプログラム暗号化が成功したことを通知する。
【００１８】
サーバ２０は、「行」・データ転送手段２１と、「行」・データ格納手段２２と、「行」保管庫２３と、データ保管庫２４とを備える。「行」・データ転送手段２１は、クライアント４０からの処理要求および、ＨＳＭ３０からの「行」・データ転送要求に従って、「行」保管庫２３及びデータ保管庫２４から暗号化された「行」およびデータをＨＳＭ３０に転送する。「行」・データ格納手段２２は、暗号化された「行」およびデータを「行」保管庫２３およびデータ保管庫２４に格納する。「行」保管庫２３は、暗号化された「行」を格納しておく。データ保管庫２４は、暗号化されたデータを格納しておく。
【００１９】
ＨＳＭ３０は、暗号鍵生成手段３１と、復号手段３２と、ハッシュ照合手段３３と、「行」実行手段３４と、データ暗号化手段３５と、データ送信手段３６と、「行」・データ要求手段３７と、暗号鍵保管庫３８と、暗号化手段３９とを備える。暗号鍵生成手段３１は、プログラムおよびデータの暗号化および復号に用いる暗号鍵を生成する。復号手段３２は、暗号化された「行」およびデータを暗号鍵保管庫３８に保存された暗号鍵で復号する。ハッシュ照合手段３３は、復号された「行」の「行」部分(「行」正当性識別タグを除く部分)のハッシュをとり、そのハッシュと、暗号化用端末１０のハッシュ生成・付加手段１１２が付加した「行」正当性識別タグが一致することを確認する。「行」実行手段３４は、復号された「行」およびデータを処理する。データ暗号化手段３５は、処理後のデータを暗号鍵保管庫３８に保存された暗号鍵で暗号化する。データ送信手段３６は、暗号化された処理後のデータをサーバ２０のデータ保管庫２４に格納するために、「行」・データ格納手段２２に送信する。「行」・データ要求手段３７は、「行」実行中に呼び出された行番号・データ名にしたがって、対応する行番号が付加された暗号化された「行」を、サーバ２０の「行」・データ転送手段２１から受け取り、復号手段３２に引数とともに渡す機能と、次に要求する「行」・データがない場合は、処理の結果をサーバ２０の「行」・データ転送手段２１に伝える機能を持つ。暗号鍵保管庫３８は、暗号鍵生成手段３１が生成した暗号鍵を保存しておく。暗号化手段３９は、暗号鍵保管庫３８に格納されている暗号鍵で、プログラム暗号化手段１１、データ暗号化手段１２からの入力を暗号化し返却する。
【００２０】
クライアント４０は、暗号鍵生成要求手段４１と、プログラム暗号化要求手段４２と、データ暗号化要求手段４３と、処理要求送信手段４４とを備える。暗号鍵生成要求手段４１は、ユーザからの暗号鍵生成要求をＨＳＭ３０に伝える。プログラム暗号化要求手段４２は、ユーザからソースコードとして入力されたプログラムの暗号化を暗号化用端末１０に要求する。データ暗号化要求手段４３は、ユーザから入力されたデータの暗号化を暗号化用端末１０に要求する。処理要求送信手段４４は、ユーザの処理要求(行番号、データのデータ保管庫２４における位置情報)をサーバ２０の「行」・データ転送手段２１に伝える。
【００２１】
以降、各構成要素の動作を計算機システムの処理シーケンスとともに説明する。
【００２２】
（鍵生成）
図３は、計算機システムの前処理として行われる鍵生成の処理シーケンスである。ユーザからの暗号鍵生成要求を受け、クライアント４０の暗号鍵生成要求手段４１は、ＨＳＭ３０の暗号鍵生成手段３１に鍵生成を要求する（ステップＳ１０１）。ＨＳＭ３０の暗号鍵生成手段３１は、暗号鍵を生成し、暗号鍵を暗号鍵保管庫３８に保存する（ステップＳ１０２、Ｓ１０３）。暗号鍵生成手段３１は、保存が成功したことをクライアント４０の暗号鍵生成要求手段４１に伝える（ステップＳ１０４）。暗号鍵生成要求手段４１は、暗号鍵生成が成功したという結果をユーザに返す（ステップＳ１０５）。
【００２３】
（プログラム暗号化）
図４は、計算機システムの前処理として行われるプログラム暗号化の処理シーケンスである。ユーザからプログラム（ソースコード）を受けると、クライアント４０のプログラム暗号化要求手段４２は、暗号化用端末１０のプログラム暗号化手段１１にプログラムの暗号化を要求する（ステップＳ２０１）。プログラム暗号化手段１１のプログラム分割手段１１１は、プログラムを行単位で分割する（ステップＳ２０２）。ハッシュ生成・付加手段１１２は、「行」のハッシュを取り、「行」正当性識別タグとして付加する（ステップＳ２０３）。プログラム暗号化手段１１は、「「行」+「行」正当性識別タグ」の暗号化を、ＨＳＭ３０の暗号化手段３９に要求する（ステップＳ２０４）。「「行」+「行」正当性識別タグ」を暗号化したものを、暗号化された「行」と呼ぶ。暗号化手段３９は、暗号鍵保管庫３８に保存されている暗号鍵を用いて暗号化し、暗号化された「行」を暗号化用端末１０のプログラム暗号化手段１１に返す（ステップＳ２０５）。プログラム暗号化手段１１の行番号付加手段１１３は、暗号化された「行」に行番号を付加する（ステップＳ２０６）。プログラム暗号化手段１１は、「行」・データ送信手段１３に、暗号化された「行」+「行」識別子をサーバ２０の「行」・データ格納手段２２に送信することを要求し、「行」・データ送信手段１３は、サーバ２０の「行」・データ格納手段２２に「行」の保存を要求する（ステップＳ２０７）。サーバ２０の「行」・データ格納手段２２は、暗号化された「行」+「行」識別子を「行」保管庫２３に保存し、保存が終わったら暗号化用端末１０の「行」・データ送信手段１３に伝える（ステップＳ２０８）。プログラム暗号化手段１１の結果通知手段１１４は、クライアント４０のプログラム暗号化要求手段４２に「行」識別子を送信する（ステップＳ２０９）。プログラム暗号化要求手段４２は、「行」識別子を保存し（ステップＳ２１０）、暗号化が成功したという結果をユーザに返す（ステップＳ２１１）。
【００２４】
図５は、計算機システムの前処理として行われるデータ暗号化の処理シーケンスである。ユーザからデータを受けると、クライアント４０のデータ暗号化要求手段４３は、暗号化用端末１０のデータ暗号化手段１２にデータの暗号化を要求する（ステップＳ３０１）。データ暗号化手段１２は、データの暗号化を、ＨＳＭ３０の暗号化手段３９に要求する（ステップＳ３０２）。暗号化手段３９は、暗号鍵保管庫３８に保存されている暗号鍵を用いて暗号化し、暗号化されたデータを暗号化用端末１０のデータ暗号化手段１２に返す（ステップＳ３０３）。データ暗号化手段１２は、「行」・データ送信手段１３に、暗号化されたデータをサーバ２０の「行」・データ格納手段２２に送信することを要求し、「行」・データ送信手段１３は、サーバ２０の「行」・データ格納手段２２に暗号化されたデータの保存を要求する（ステップＳ３０４）。サーバ２０の「行」・データ格納手段２２は、暗号化されたデータをデータ保管庫２４に保存し、保存が終わったら暗号化用端末１０の「行」・データ送信手段１３に伝える（ステップＳ３０５）。データ暗号化手段１２は、クライアント４０のデータ暗号化要求手段４３に暗号化が成功したことを伝える（ステップＳ３０６）。データ暗号化要求手段４３は、暗号化が終了したという結果をユーザに返す（ステップＳ３０７）。なお、当該結果には、暗号化されたデータのデータ保管庫２４における位置情報も含まれる。
【００２５】
（プログラム実行）
図６は、計算機システムのプログラム実行の処理シーケンスである。ユーザから行番号および処理するデータのデータ保管庫２４における位置情報を受けると、クライアント４０の処理要求送信手段４４は、行番号および処理するデータのデータ保管庫２４における位置情報を含んだ処理要求をサーバ２０の「行」・データ転送手段２１に送信する（ステップＳ４０１）。「行」・データ転送手段２１は、処理要求に従って「行」保管庫２３、データ保管庫２４から暗号化された「行」と暗号化されたデータをＨＳＭ３０の復号手段３２に送信する（ステップＳ４０２）。ＨＳＭ３０の復号手段３２は、転送されてきた暗号化された「行」、暗号化されたデータを暗号鍵保管庫３８に保管されている暗号鍵を用いて復号する（ステップＳ４０３）。ハッシュ照合手段３３は、復号された「行」の「行」部分(「行」正当性識別タグを除いた部分)のハッシュを取り、そのハッシュと「行」正当性識別タグを照合して一致するかを確認する（ステップＳ４０４）。「行」実行手段３４は、「行」を実行する（ステップＳ４０５）。データ暗号化手段３５は、暗号鍵保管庫３８に格納されている暗号鍵を用いて処理後のデータを暗号化する（ステップＳ４０６）。データ送信手段３６は、暗号化されたデータをサーバ２０の「行」・データ格納手段２２に送信する（ステップＳ４０７）。サーバ２０の「行」・データ格納手段２２は、暗号化されたデータをデータ保管庫２４に格納し、完了したらＨＳＭ３０のデータ送信手段３６に保存が完了したことを伝える（ステップＳ４０８）。「行」・データ要求手段３７は、「行」内容がプログラム終了(例えばＥＮＤ)ならばステップＳ４１１に移る（ステップＳ４０９のＹｅｓ）。
【００２６】
「行」・データ要求手段３７は、「行」内容がプログラム終了以外の場合（ステップＳ４０９のＮｏ）、次の処理を行う。
（１）「行」実行中に特定の行番号に移動する命令(例えば強制移動(ＧＯＴＯ)、条件分岐(ＩＦ)、ループ(ＦＯＲ)、サブルーチン分岐(ＧＯＳＵＢ)等)があれば、対応する行番号の「行」を、サーバ２０の「行」・データ転送手段２１に要求する。
（２）「行」実行中に必要なデータがあれば、対応するデータのデータ保管庫２４における位置情報によって、サーバ２０の「行」・データ転送手段２１に要求する。
（３）特定の行番号に移動する命令もなければ、実行した「行」の次の行番号の「行」を、サーバ２０の「行」・データ転送手段２１に要求する。
【００２７】
「行」・データ転送手段２１は、渡された行番号およびデータのデータ保管庫２４における位置情報に従い、対応する暗号化された「行」および暗号化されたデータを、「行」・データ要求手段３７に渡す（ステップＳ４１０）。「行」・データ要求手段３７は、暗号化された「行」および暗号化されたデータを復号手段３２に渡し、処理はステップＳ４０３に戻る。
【００２８】
プログラムが終了すると、「行」・データ要求手段３７は、「行」の返り値を、サーバ２０の「行」・データ転送手段２１に送信する（ステップＳ４１１）。「行」・データ転送手段２１は、クライアント４０の処理要求送信手段４４に処理結果を返す（ステップＳ４１２）。処理要求送信手段４４は、処理結果をユーザに返す（ステップＳ４１３）。
【００２９】
このように、本実施形態によれば、サーバ２０は暗号鍵で暗号化されたプログラムおよびデータを格納し、耐タンパ装置であるＨＳＭ３０は、サーバ２０から取得した暗号化されたプログラムおよびデータを暗号鍵で復号して処理する。これにより、ＨＳＭ３０内で動作するプログラムやデータを容量の大きなＨＳＭ３０の外部ストレージ（サーバ２０）に格納することができるため、ＨＳＭ３０の容量を超えるプログラムやデータをＨＳＭ３０内で安全に実行することが可能となる。すなわち、プログラム実行時の攻撃に対し機密情報の漏洩を防ぐことが可能となる。特に、暗号鍵は、公開鍵とは異なり誰もが入手できるものではない。つまり、暗号鍵による暗号化により、公開鍵によって不正なプログラムが暗号化されてＨＳＭに読み込まれる脅威を防ぐことができる。
【００３０】
また、上述の暗号化されるプログラムは、行単位に分割され暗号化される。これにより、ＨＳＭ３０はプログラム的に意味のあるまとまり毎に外部ストレージ（サーバ２０）と暗号化されたプログラムの交換が可能となる。
【００３１】
本発明を諸図面や実施例に基づき説明してきたが、当業者であれば本開示に基づき種々の変形や修正を行うことが容易であることに注意されたい。従って、これらの変形や修正は本発明の範囲に含まれることに留意されたい。例えば、各部材、各手段、各ステップなどに含まれる機能などは論理的に矛盾しないように再配置可能であり、複数の手段やステップなどを１つに組み合わせたり、或いは分割したりすることが可能である。
【００３２】
例えば、上述の実施形態において、プログラム暗号化手段１１は、プログラムを行単位に分割して暗号化を行った。これは、いわゆる手続き型言語を対象とした例であり、本発明は、関数型の他の言語にも適用することが可能である。例えば、本発明を関数型言語に適用する場合、プログラム暗号化手段１１は、プログラムを関数単位でスクリプトに分割し、「行」の代わりに、当該スクリプトに対してハッシュ生成・付加や、スクリプト識別子の付加をすればよい。スクリプト識別子は、行単位に分割する際に付加する行番号のように、クライアント４０からスクリプトを呼び出す際に用いる識別子である。例えば、スクリプト識別子は、プログラムの関数名を変換し、関数名を変換されたプログラムを関数ごとにスクリプトに分割した際の、各スクリプトの変換後の関数名のことである。このように、上述の暗号化されるプログラムを、関数単位のスクリプトに分割して暗号化することにより、ＨＳＭ３０はプログラム的に意味のあるまとまり毎に外部ストレージ（サーバ２０）と暗号化されたプログラムの交換が可能となる。
【００３３】
また、暗号化用端末１０は、クライアント４０やサーバ２０の機能の一部として実装することも可能である。また、暗号鍵生成の命令や、プログラムおよびデータの暗号化の命令を行う主体はクライアント４０でなく、サーバ２０が行ってもよい。
【符号の説明】
【００３４】
１０  暗号化用端末
１１  プログラム暗号化手段
１１１  プログラム分割手段
１１２  ハッシュ生成・付加手段
１１３  行番号付加手段
１１４  結果通知手段
１２  データ暗号化手段
１３  「行」・データ送信手段
２０  サーバ
２１  「行」・データ転送手段
２２  「行」・データ格納手段
２３  「行」保管庫
２４  データ保管庫
３０  ＨＳＭ
３１  暗号鍵生成手段
３２  復号手段
３３  ハッシュ照合手段
３４  「行」実行手段
３５  データ暗号化手段
３６  データ送信手段
３７  「行」・データ要求手段
３８  暗号鍵保管庫
３９  暗号化手段
４０  クライアント
４１  暗号鍵生成要求手段
４２  プログラム暗号化要求手段
４３  データ暗号化要求手段
４４  処理要求送信手段
【図１】
2014011739.tif 000003
【図２】
2014011739.tif 000004
【図３】
2014011739.tif 000005
【図４】
2014011739.tif 000006
【図５】
2014011739.tif 000007
【図６】
2014011739.tif 000008