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