JP2011204105A - スクリプト起動プログラム、スクリプト起動プログラムの生成プログラム、およびプログラムセット - Google Patents
スクリプト起動プログラム、スクリプト起動プログラムの生成プログラム、およびプログラムセット Download PDFInfo
- Publication number
- JP2011204105A JP2011204105A JP2010072168A JP2010072168A JP2011204105A JP 2011204105 A JP2011204105 A JP 2011204105A JP 2010072168 A JP2010072168 A JP 2010072168A JP 2010072168 A JP2010072168 A JP 2010072168A JP 2011204105 A JP2011204105 A JP 2011204105A
- Authority
- JP
- Japan
- Prior art keywords
- program
- script
- secret information
- storage unit
- activation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
【課題】特権ユーザを含めた他のユーザに対して、スクリプトプログラムが扱う秘密情報の漏洩を防ぐことができるスクリプト起動プログラム、スクリプト起動プログラムの生成プログラム、およびプログラムセットを提供する。
【解決手段】スクリプト起動プログラム10は、自身が有する秘密情報を主記憶装置2または二時記憶装置3に書き込み、スクリプトプログラム11を起動する。スクリプト起動プログラム10は、秘密情報が書き込まれた主記憶装置2または二時記憶装置3の位置を、起動したスクリプトプログラム11に通知する。
【選択図】図1
【解決手段】スクリプト起動プログラム10は、自身が有する秘密情報を主記憶装置2または二時記憶装置3に書き込み、スクリプトプログラム11を起動する。スクリプト起動プログラム10は、秘密情報が書き込まれた主記憶装置2または二時記憶装置3の位置を、起動したスクリプトプログラム11に通知する。
【選択図】図1
Description
本発明は、スクリプトプログラムを起動するスクリプト起動プログラムおよびその生成プログラムに関する。また、本発明は、スクリプト起動プログラムとその生成プログラムを組としたプログラムセットに関する。
計算機システムで実行されるプログラムは、機械語プログラムとスクリプトプログラムに大別される。機械語プログラムは、コンパイラ言語で記述されたソースコードを、コンパイラと呼ばれるプログラムにより、CPUが直接実行可能な機械語に翻訳したものである。スクリプトプログラムは、スクリプト言語で記述されたソースコードそのものであり、インタプリタと呼ばれるプログラムがソースコードを逐次解釈することにより、実行される。
ソースコードは通常、テキストファイルとして計算機内に保存される。機械語プログラムはバイナリファイル(二進数値列からなるファイル)として保存される。機械語プログラムには、ソースコードの記述が比較的低水準である、プログラムの生産性が低い、翻訳後の機械語プログラムがあればソースコードなしに実行できる、実行速度が高速、等の特徴がある。スクリプトプログラムには、ソースコードの記述が高水準である、プログラムの生産性が高い、実行時にソースコードが必要である、実行速度が低速、等の特徴がある。
図7は、一般的な計算機システムの構成を示している。図7に示す計算機システムは、CPU(中央処理装置)1、主記憶装置(メモリ)2、二次記憶装置(ディスク装置)3を有し、これらがシステムバス4を介して接続されている。機械語プログラムは、バイナリファイル40としてディスク装置3に格納されている。プログラムを起動する場合、オペレーティングシステム(OS)32が主記憶装置2内に領域を確保し、プログラムを読み込んで、CPU1の実行制御をプログラムに渡す。
主記憶装置2内の機械語プログラム30は、命令列と初期化データ、および一時的な記憶領域であるスタック領域とヒープ領域から構成される。二次記憶装置3内のバイナリファイル40には、この命令列と初期化データが保存されている。
主記憶装置2内のスクリプトプログラム31は機械語プログラムの特別な形態であり、機械語命令列としてインタプリタ41を与えられ、初期化データとしてテキストファイルであるスクリプトプログラムのソースコード42を与えられる。実行を開始したインタプリタは、ソースコード42を逐次解釈し、実行する。
尚、オペレーティングシステム自体も特別な機械語プログラムである。オペレーティングシステムの機械語プログラムであるバイナリファイル43がシステム起動時に特別な手段によって主記憶装置2に転送されると、オペレーティングシステム32は実行を開始する。
スクリプトプログラムの実行にはテキストファイルの形態のソースコードが必要で、その可読性は高い。従って、スクリプトプログラムに秘密情報が含まれている場合、この秘密情報を読み出すことは極めて容易である。計算機システムでは、通常、安定的な運用のために、システム上のすべてのファイルの読み書きを行う権限が与えられた、スーパーユーザあるいは特権ユーザが存在する。このため、スクリプトプログラムに秘密情報が含まれると、容易に特権ユーザに漏洩してしまう。
従来、スクリプトプログラムで秘密情報を保護したい場合、プログラムの開始時にユーザが端末から秘密情報を手入力するなどの方法しかなく、例えばシステム起動時などにプログラムを自動的に実行できないという問題があった。逆に、プログラムの自動的な実行を可能とするためには、ソースコード内に秘密情報を格納することが必要であり、特権ユーザによる秘密情報の参照を防ぐことができないという問題があった。秘密情報を暗号化したとしても、プログラムがこれを復号可能とするためには、復号鍵をやはりソースコード内に格納する必要があり、問題は解決されない。
上記のような問題に対して、特許文献1では、スクリプトプログラムの遅延評価と即時実行処理の非同期化とにより、デバッガによるブレークポイントの挿入や、ステップ実行、データ更新の監視を困難とすることで、スクリプトプログラムの解析や秘密情報の漏洩を防いでいる。
しかし、特許文献1の手法は、HTTPプロトコルに依拠したものであるため、本発明が対象としているような、計算機システムにおいて単体で実行されるスクリプトプログラムに適用することができない。
データセンタやホスティングサービスなどでは、計算機システムの運用者(特権ユーザ)とアプリケーションの運用者とが異なる状況がある。近年、ブログやSNS (Social Network Service) 等のWebアプリケーションが広く普及しており、Webアプリケーションの構築基盤として、スクリプト言語に基づくフレームワークが多く利用されている。このようなフレームワークでは、一般的に、バックエンドのRDBMS (Relational Data Base Management System) に接続するためのパスワード情報が保護されてなく、計算機システムの運用者がSNSの会員情報等に容易にアクセスできる状況となっている。
本発明は、上述した課題に鑑みてなされたものであって、特権ユーザを含めた他のユーザに対して、スクリプトプログラムが扱う秘密情報の漏洩を防ぐことができるスクリプト起動プログラム、スクリプト起動プログラムの生成プログラム、およびプログラムセットを提供することを目的とする。
本発明は、上記の課題を解決するためになされたもので、秘密情報を有し、機械語プログラムとして構成されるスクリプト起動プログラムであって、前記秘密情報を記憶部に書き込む処理と、前記秘密情報を処理するスクリプトプログラムを起動する処理と、前記秘密情報が書き込まれた前記記憶部の位置を、起動した前記スクリプトプログラムに通知する処理と、をコンピュータに実行させるためのスクリプト起動プログラムである。
また、本発明のスクリプト起動プログラムにおいて、前記秘密情報を記憶部に書き込む処理では、前記記憶部のランダムな位置に前記秘密情報を書き込む。
また、本発明のスクリプト起動プログラムにおいて、前記秘密情報は暗号化されており、前記秘密情報を復号するための復号鍵をさらに有し、前記秘密情報を記憶部に書き込む処理の前に前記復号鍵により前記秘密情報を復号する処理をコンピュータに実行させる。
また、本発明は、秘密情報を記憶部に書き込む処理と、前記秘密情報を処理するスクリプトプログラムを起動する処理と、前記秘密情報が書き込まれた前記記憶部の位置を、起動した前記スクリプトプログラムに通知する処理と、をコンピュータに実行させるためのスクリプト起動プログラムの命令列と前記秘密情報とを含むソースコードを生成する処理と、コンパイラを起動して前記ソースコードをコンパイルして前記スクリプト起動プログラムの機械語プログラムを生成する処理と、をコンピュータに実行させるためのスクリプト起動プログラムの生成プログラムである。
また、本発明は、秘密情報を有し、機械語プログラムとして構成されるスクリプト起動プログラムであって、前記秘密情報を記憶部に書き込む処理と、前記秘密情報を処理するスクリプトプログラムを起動する処理と、前記秘密情報が書き込まれた前記記憶部の位置を、起動した前記スクリプトプログラムに通知する処理と、をコンピュータに実行させるためのスクリプト起動プログラムと、テキストファイルとして構成され、実行時にインタプリタによって命令列が解釈され、命令が実行されるスクリプトプログラムであって、起動後に前記スクリプト起動プログラムから通知された前記記憶部の位置から前記秘密情報を読み込む処理と、読み込んだ前記秘密情報を前記記憶部の位置から消去する処理と、読み込んだ前記秘密情報に基づく処理と、をコンピュータに実行させるためのスクリプトプログラムと、を有するプログラムセットである。
本発明によれば、機械語プログラムとして構成されるスクリプト起動プログラムが秘密情報を有しており、その秘密情報を記憶部に書き込んで、秘密情報が書き込まれた記憶部の位置をスクリプトプログラムに通知することによって、秘密情報をスクリプトプログラムのソースコードに格納しなくてよいので、特権ユーザを含めた他のユーザに対して、スクリプトプログラムが扱う秘密情報の漏洩を防ぐことができる。
以下、図面を参照し、本発明の実施形態を説明する。本発明の対象となるスクリプト言語とは、前述したように、プログラム実行時に、インタプリタと呼ばれる処理プログラムがテキストファイル形式のソースコードを読み込み逐次解釈実行することを前提としたプログラミング言語であり、代表的なものとして、BasicやLisp、Perl、PHP、Python、Ruby等が挙げられる。尚、本発明は、中間言語に翻訳されバイトコードインタプリタで解釈実行されるPascalやJava(登録商標)にも適用可能である。
本実施形態は、スクリプトプログラムとは別に、機械語に翻訳されたスクリプト起動プログラムを準備し、スクリプト起動プログラムに秘密情報を格納して、スクリプト起動プログラムがスクリプトプログラムを起動する際にスクリプトプログラムに対して秘密情報を通知するというものである。このために、計算機システムにはスクリプトプログラムの実行環境と共にファイルシステムあるいはプロセス間通信機能が必要である。これらの機能は殆どあらゆる計算機システムで提供されている。
図1は、本発明の一実施形態による計算機システムの構成を示しており、特にスクリプトプログラムに係る処理を実行するための構成を示している。図1に示す計算機システムは、CPU(中央処理装置)1、主記憶装置(メモリ)2、二次記憶装置(ディスク装置)3を有し、これらがシステムバス4を介して接続されている。
二次記憶装置3は、スクリプトプログラムを起動するスクリプト起動プログラムの機械語プログラム20(バイナリファイル)と、スクリプトプログラムの処理を記述したソースコード21(テキストファイル)と、インタプリタ22とを有する。スクリプト起動プログラムの機械語プログラム20は、スクリプトプログラムによって処理される秘密情報を含んでいる。スクリプト起動プログラムの機械語プログラム20はバイナリファイルであるため、例えばデータベースにアクセスするためのパスワードなどの秘密情報がスクリプト起動プログラムのソースコードに含まれていても、翻訳後の機械語プログラム20を参照して秘密情報を知ることは容易ではない。難読性をより高めるため、秘密情報は、暗号化された状態でスクリプト起動プログラムのソースコードに記述される。秘密情報を復号するための復号鍵もスクリプト起動プログラムの機械語プログラム20に含まれている。
スクリプト起動プログラムの機械語プログラム20が主記憶装置2に読み込まれると、スクリプト起動プログラム10が起動される。起動されたスクリプト起動プログラム10は、スクリプトプログラムを起動するスクリプトプログラム起動部として動作する。
スクリプト起動プログラム10によって、スクリプトプログラムのソースコード21とインタプリタ22とが主記憶装置2に読み込まれると、スクリプトプログラム11が起動される。起動されたスクリプトプログラム11は、スクリプトプログラムのソースコード21に記述された命令列に基づく処理を実行するスクリプト処理部として動作する。前述したように、主記憶装置2に読み込まれたインタプリタがスクリプトプログラムのソースコード21を逐次解釈し、実行することによって、所望の処理が実行される。
次に、スクリプトプログラムに係る処理を実行する際の動作を説明する。本実施形態では、3通りの動作を説明する。
<第1の動作例>
第1の動作例では、秘密情報の通知に一時ファイルを使用する。図2は、第1の動作例におけるスクリプトプログラムに係る処理の手順を示している。
第1の動作例では、秘密情報の通知に一時ファイルを使用する。図2は、第1の動作例におけるスクリプトプログラムに係る処理の手順を示している。
(ステップS100)
スクリプト起動プログラム10は、起動されると、復号鍵を用いて秘密情報を復号する。スクリプト起動プログラム10は、図7に示した初期化データに秘密情報および復号鍵を保持している。続いて、スクリプト起動プログラム10は、二次記憶装置3に一時ファイルを作成し、復号した秘密情報を一時ファイルに書き込む。
スクリプト起動プログラム10は、起動されると、復号鍵を用いて秘密情報を復号する。スクリプト起動プログラム10は、図7に示した初期化データに秘密情報および復号鍵を保持している。続いて、スクリプト起動プログラム10は、二次記憶装置3に一時ファイルを作成し、復号した秘密情報を一時ファイルに書き込む。
(ステップS110)
スクリプト起動プログラム10は、スクリプトプログラムのソースコード21とインタプリタ22を二次記憶装置3から主記憶装置2に読み込むことによってスクリプトプログラム11を起動し、一時ファイルのパス名(ファイルシステム上の位置とファイル名)をスクリプトプログラム11に通知する。パス名の通知方法としては、プログラム引数や環境変数等を利用すればよい。プログラム引数や環境変数は、他のユーザからも参照可能であるため、スクリプト起動プログラム10が一時ファイルのパス名を実行時にランダムに生成することが望ましい。これによって、スクリプト起動プログラム10は主記憶装置2上のランダムな位置に秘密情報を書き込むことになるので、秘密情報の漏洩をより確実に防ぐことができる。
スクリプト起動プログラム10は、スクリプトプログラムのソースコード21とインタプリタ22を二次記憶装置3から主記憶装置2に読み込むことによってスクリプトプログラム11を起動し、一時ファイルのパス名(ファイルシステム上の位置とファイル名)をスクリプトプログラム11に通知する。パス名の通知方法としては、プログラム引数や環境変数等を利用すればよい。プログラム引数や環境変数は、他のユーザからも参照可能であるため、スクリプト起動プログラム10が一時ファイルのパス名を実行時にランダムに生成することが望ましい。これによって、スクリプト起動プログラム10は主記憶装置2上のランダムな位置に秘密情報を書き込むことになるので、秘密情報の漏洩をより確実に防ぐことができる。
(ステップS120)
スクリプトプログラム11は、起動されると、スクリプト起動プログラム10によって通知された二次記憶装置3上の位置から主記憶装置2に秘密情報を読み込む。スクリプトプログラム11は、図7に示したヒープ領域に、読み込んだ秘密情報を保持する。さらに、スクリプトプログラム11は、一時ファイル上の秘密情報に対して乱数で上書きを行い、一時ファイルを消去する。秘密情報が一時ファイル上に平文で存在する時間を短くし、さらにパス名をランダムに選ぶことにより、秘密情報の不正な取得を困難にすることができる。
スクリプトプログラム11は、起動されると、スクリプト起動プログラム10によって通知された二次記憶装置3上の位置から主記憶装置2に秘密情報を読み込む。スクリプトプログラム11は、図7に示したヒープ領域に、読み込んだ秘密情報を保持する。さらに、スクリプトプログラム11は、一時ファイル上の秘密情報に対して乱数で上書きを行い、一時ファイルを消去する。秘密情報が一時ファイル上に平文で存在する時間を短くし、さらにパス名をランダムに選ぶことにより、秘密情報の不正な取得を困難にすることができる。
(ステップS130)
スクリプトプログラム11は、保持している秘密情報を用いて処理を行う。秘密情報を用いた処理として例えば、RDBMSとの接続処理が挙げられる。RDBMSは、正しいパスワード情報を持つデータベースユーザにのみ接続を許可する。一旦接続されると、この接続された通信路を経由して問合せの発行や検索結果の読み出しを行うことができるようになる。
スクリプトプログラム11は、保持している秘密情報を用いて処理を行う。秘密情報を用いた処理として例えば、RDBMSとの接続処理が挙げられる。RDBMSは、正しいパスワード情報を持つデータベースユーザにのみ接続を許可する。一旦接続されると、この接続された通信路を経由して問合せの発行や検索結果の読み出しを行うことができるようになる。
上記では、スクリプトプログラム11が一時ファイル上の秘密情報を主記憶装置2に読み込んだ後、一時ファイル上の秘密情報に対して乱数で上書きを行っているが、0等の定数で上書きを行ってもよい。ただし、乱数で上書きを行ったほうが、秘密情報の不正な取得をより困難にすることができる。
図3は、スクリプト起動プログラムの生成に係る処理を実行するための構成を示している。図3に示すハードウェア構成は、図1に示したハードウェア構成と同様である。スクリプト起動プログラム生成プログラムの機械語プログラム23は、スクリプト起動プログラムを生成するプログラムであり、二次記憶装置3に格納されている。スクリプト起動プログラム生成プログラムの機械語プログラム23が主記憶装置2に読み込まれると、スクリプト起動プログラム生成プログラム12が起動される。起動されたスクリプト起動プログラム生成プログラム12は、スクリプト起動プログラムを生成するスクリプト起動プログラム生成部として動作する。
起動されたスクリプト起動プログラム生成プログラム12は、二次記憶装置3に格納されている秘密情報25を主記憶装置2に読み込み、スクリプト起動プログラムの命令列と秘密情報とを含むスクリプト起動プログラムのソースコード26を生成する。生成されたスクリプト起動プログラムのソースコード26は二次記憶装置3に格納される。
また、スクリプト起動プログラム生成プログラム12は、二次記憶装置3に格納されているコンパイラの機械語プログラム27を主記憶装置2に読み込んでコンパイラ13を起動し、コンパイラ13によってスクリプト起動プログラムのソースコード26をコンパイルしてスクリプト起動プログラムの機械語プログラム20を生成する。生成されたスクリプト起動プログラムの機械語プログラム20は二次記憶装置3に格納される。
必須ではないが、スクリプト起動プログラムの生成時に、テキストファイルであるスクリプトプログラムのソースコード24のハッシュ値を計算し、秘密情報25に付加しておくことで、スクリプトプログラムの検証機能を持たせることもできる。スクリプト起動プログラムの実行時に、起動すべきスクリプトプログラムのハッシュ値を計算し、秘密情報内に保持した値と比較することにより、スクリプトプログラムの改変の検知と秘密情報の漏洩防止が可能となる。
図3では、スクリプト起動プログラム生成プログラムを機械語プログラムとして実装しているが、スクリプトプログラムとして実装してもよい。スクリプト起動プログラムの機械語プログラム20の生成後、スクリプト起動プログラム生成プログラム12は二次記憶装置3上の秘密情報25とスクリプト起動プログラムのソースコード26を消去する。スクリプトプログラムの実行時、二次記憶装置3上には、秘密情報を含まないスクリプトプログラムのソースコード24と、人間による解析が難しいスクリプト起動プログラムの機械語プログラム20が保存されていればよい。
図4は、スクリプト起動プログラムの生成手順を示している。スクリプト起動プログラム生成プログラム12は、起動されると、秘密情報を格納可能な整数配列を準備し、その整数配列に乱数データを書き込む。続いて、スクリプト起動プログラム生成プログラム12は、整数配列中のランダムに選んだ位置に秘密情報を配置し(秘密情報の埋め込み)、秘密情報を含む整数配列全体を暗号化する。この暗号化は必須ではないが、暗号化することで、秘密情報の不正な取得をより困難にすることができる。
続いて、スクリプト起動プログラム生成プログラム12は、暗号化したデータを初期化済み整数配列の宣言文として記述したコンパイラ言語のソースコードを生成する。このソースコードがスクリプト起動プログラムのソースコード26である。図4には、暗号化したデータを含む整数配列(sec_data[])の宣言文がソースコードに記述されている様子が示されている。秘密情報の復号に必要となる復号情報(秘密情報の開始位置や長さ、スクリプトプログラムのパス名、復号鍵等)もこのソースコードに含まれている。復号情報は、定数定義としてもよいし、配列の宣言としてもよい。
続いて、スクリプト起動プログラム生成プログラム12は、スクリプトプログラムに依存しない処理を記述した定型処理部を上記のソースコードと結合する。秘密情報の復号処理や、スクリプトプログラムの起動処理、秘密情報の通知処理は、スクリプトプログラムによらず共通に作成可能であるため、これらの処理を定型処理部としてソースファイルの形式で予め準備しておくことができる。これによって、プログラミングに係る人的なコストを削減することができる。
続いて、スクリプト起動プログラム生成プログラム12は、コンパイラ13を起動し、上記のように結合した定型処理部とソースコードをコンパイラ13によってコンパイルし、スクリプト起動プログラムの機械語プログラム20を生成する。上記の生成手順は完全に機械的であるため、秘密情報とスクリプトプログラムのパス名が与えられるとスクリプト起動プログラムを自動的に生成するようなプログラムも容易に開発することができる。
<第2の動作例>
第2の動作例では、主記憶装置2に設定される共有メモリを秘密情報の通知に使用する。図5は、第2の動作例におけるスクリプトプログラムに係る処理の手順を示している。
第2の動作例では、主記憶装置2に設定される共有メモリを秘密情報の通知に使用する。図5は、第2の動作例におけるスクリプトプログラムに係る処理の手順を示している。
(ステップS200)
スクリプト起動プログラム10は、起動されると、復号鍵を用いて秘密情報を復号する。続いて、スクリプト起動プログラム10は、オペレーティングシステムに共有メモリの割り当てをリクエストし、その結果として割り当てられた共有メモリに、復号した秘密情報を書き込む。
スクリプト起動プログラム10は、起動されると、復号鍵を用いて秘密情報を復号する。続いて、スクリプト起動プログラム10は、オペレーティングシステムに共有メモリの割り当てをリクエストし、その結果として割り当てられた共有メモリに、復号した秘密情報を書き込む。
(ステップS210)
スクリプト起動プログラム10は、スクリプトプログラムのソースコード21とインタプリタ22を二次記憶装置3から主記憶装置2に読み込むことによってスクリプトプログラム11を起動し、共有メモリの識別子をスクリプトプログラム11に通知する。共有メモリの識別子の通知方法としては、プログラム引数や環境変数等を利用すればよい。共有メモリの識別子は、オペレーティングシステムにより動的に設定されるため、他のユーザが推測することは困難である。
スクリプト起動プログラム10は、スクリプトプログラムのソースコード21とインタプリタ22を二次記憶装置3から主記憶装置2に読み込むことによってスクリプトプログラム11を起動し、共有メモリの識別子をスクリプトプログラム11に通知する。共有メモリの識別子の通知方法としては、プログラム引数や環境変数等を利用すればよい。共有メモリの識別子は、オペレーティングシステムにより動的に設定されるため、他のユーザが推測することは困難である。
(ステップS120)
スクリプトプログラム11は、起動されると、スクリプト起動プログラム10によって通知された識別子を有する共有メモリから秘密情報を読み込む。さらに、スクリプトプログラム11は、一時ファイル上の秘密情報に対して0等のデータで上書きを行い、共有メモリを開放する。秘密情報が共有メモリ上に平文で存在する時間を短くすることにより、秘密情報の不正な取得を困難にすることができる。
スクリプトプログラム11は、起動されると、スクリプト起動プログラム10によって通知された識別子を有する共有メモリから秘密情報を読み込む。さらに、スクリプトプログラム11は、一時ファイル上の秘密情報に対して0等のデータで上書きを行い、共有メモリを開放する。秘密情報が共有メモリ上に平文で存在する時間を短くすることにより、秘密情報の不正な取得を困難にすることができる。
(ステップS230)
スクリプトプログラム11は、保持している秘密情報を用いて処理を行う。
スクリプトプログラム11は、保持している秘密情報を用いて処理を行う。
<第3の動作例>
第3の動作例では、主記憶装置2に設定されるFIFO(First In First Out: 先入れ先出しキュー、名前付パイプ)を秘密情報の通知に使用する。図6は、第3の動作例におけるスクリプトプログラムに係る処理の手順を示している。
第3の動作例では、主記憶装置2に設定されるFIFO(First In First Out: 先入れ先出しキュー、名前付パイプ)を秘密情報の通知に使用する。図6は、第3の動作例におけるスクリプトプログラムに係る処理の手順を示している。
(ステップS300)
スクリプト起動プログラム10は、起動されると、FIFOを生成する。
スクリプト起動プログラム10は、起動されると、FIFOを生成する。
(ステップS310)
スクリプト起動プログラム10は、スクリプトプログラムのソースコード21とインタプリタ22を二次記憶装置3から主記憶装置2に読み込むことによってスクリプトプログラム11を起動し、FIFOのパス名をスクリプトプログラム11に通知する。FIFOのパス名の通知方法としては、プログラム引数や環境変数等を利用すればよい。プログラム引数や環境変数は、他のユーザからも参照可能であるため、スクリプト起動プログラム10が一時ファイルのパス名を実行時にランダムに生成することが望ましい。これによって、スクリプト起動プログラム10は主記憶装置2上のランダムな位置に秘密情報を書き込むことになるので、秘密情報の漏洩をより確実に防ぐことができる。
スクリプト起動プログラム10は、スクリプトプログラムのソースコード21とインタプリタ22を二次記憶装置3から主記憶装置2に読み込むことによってスクリプトプログラム11を起動し、FIFOのパス名をスクリプトプログラム11に通知する。FIFOのパス名の通知方法としては、プログラム引数や環境変数等を利用すればよい。プログラム引数や環境変数は、他のユーザからも参照可能であるため、スクリプト起動プログラム10が一時ファイルのパス名を実行時にランダムに生成することが望ましい。これによって、スクリプト起動プログラム10は主記憶装置2上のランダムな位置に秘密情報を書き込むことになるので、秘密情報の漏洩をより確実に防ぐことができる。
(ステップS320)
続いて、スクリプト起動プログラム10は、復号鍵を用いて秘密情報を復号する。さらに、スクリプト起動プログラム10は、FIFOをオープンし、FIFOに秘密情報を書き込んだ後、FIFOをクローズする。
続いて、スクリプト起動プログラム10は、復号鍵を用いて秘密情報を復号する。さらに、スクリプト起動プログラム10は、FIFOをオープンし、FIFOに秘密情報を書き込んだ後、FIFOをクローズする。
(ステップS330)
スクリプトプログラム11は、起動されると、スクリプト起動プログラム10によって通知されたパス名のFIFOをオープンし、FIFOから秘密情報を読み込んだ後、FIFOをクローズする。FIFO内の情報は、スクリプトプログラム11によって読み込まれると同時にオペレーティングシステムによって消去されるので、秘密情報の不正な取得を困難にすることができる。FIFOの代わりにストリーム型のソケットの機能を利用しても同様の手順で実行することができる。
スクリプトプログラム11は、起動されると、スクリプト起動プログラム10によって通知されたパス名のFIFOをオープンし、FIFOから秘密情報を読み込んだ後、FIFOをクローズする。FIFO内の情報は、スクリプトプログラム11によって読み込まれると同時にオペレーティングシステムによって消去されるので、秘密情報の不正な取得を困難にすることができる。FIFOの代わりにストリーム型のソケットの機能を利用しても同様の手順で実行することができる。
(ステップS340)
スクリプトプログラム11は、保持している秘密情報を用いて処理を行う。
スクリプトプログラム11は、保持している秘密情報を用いて処理を行う。
上述したように、本実施形態によれば、秘密情報をスクリプトプログラムのソースコードに格納する必要がない。秘密情報は、機械語プログラムであるスクリプト起動プログラムに保持されるため、機械語プログラムと同等の秘匿性を容易に達成することができる。さらに、人手を介すことなくスクリプトプログラムの自動実行を行うことができる。これらにより、可読性、生産性が高いというスクリプト言語の特長を有したまま、秘密情報の漏洩を防ぐことができる。
また、スクリプト起動プログラムが一時ファイルやFIFOのパス名をランダムに選択することによって、二次記憶装置3あるいは主記憶装置2上のランダムな位置に秘密情報が書き込まれるので、秘密情報の漏洩をより確実に防ぐことができる。さらに、秘密情報を暗号化してスクリプト起動プログラムに埋め込むことによっても、秘密情報の漏洩をより確実に防ぐことができる。
また、スクリプト起動プログラムにスクリプトプログラムの検証機能を付与することが可能であり、スクリプトプログラムが改竄された場合にも、秘密情報の漏洩を防止することができる。スクリプト起動プログラムは、計算機システム上でのスクリプトプログラムの位置(パス名)と秘密情報とを与えることにより自動的に作成可能であるため、秘匿性確保のための開発コストが発生しない。さらに、スクリプト起動プログラムに一般の手段による難読化を施すことにより、秘密情報を一層堅固に守ることができる。
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
1・・・CPU、2・・・主記憶装置(記憶部)、3・・・二次記憶装置(記憶部)、10・・・スクリプト起動プログラム、11・・・スクリプトプログラム、12・・・スクリプト起動プログラム生成プログラム、13・・・コンパイラ、20・・・スクリプト起動プログラムの機械語プログラム、21・・・スクリプトプログラムのソースコード、22・・・インタプリタ、23・・・スクリプト起動プログラム生成プログラムの機械語プログラム、24・・・スクリプトプログラムのソースコード、25・・・秘密情報、26・・・スクリプト起動プログラムのソースコード、27・・・コンパイラの機械語プログラム
Claims (5)
- 秘密情報を有し、機械語プログラムとして構成されるスクリプト起動プログラムであって、
前記秘密情報を記憶部に書き込む処理と、
前記秘密情報を処理するスクリプトプログラムを起動する処理と、
前記秘密情報が書き込まれた前記記憶部の位置を、起動した前記スクリプトプログラムに通知する処理と、
をコンピュータに実行させるためのスクリプト起動プログラム。 - 前記秘密情報を記憶部に書き込む処理では、前記記憶部のランダムな位置に前記秘密情報を書き込む請求項1に記載のスクリプト起動プログラム。
- 前記秘密情報は暗号化されており、前記秘密情報を復号するための復号鍵をさらに有し、前記秘密情報を記憶部に書き込む処理の前に前記復号鍵により前記秘密情報を復号する処理をコンピュータに実行させるための請求項1に記載のスクリプト起動プログラム。
- 秘密情報を記憶部に書き込む処理と、
前記秘密情報を処理するスクリプトプログラムを起動する処理と、
前記秘密情報が書き込まれた前記記憶部の位置を、起動した前記スクリプトプログラムに通知する処理と、
をコンピュータに実行させるためのスクリプト起動プログラムの命令列と前記秘密情報とを含むソースコードを生成する処理と、
コンパイラを起動して前記ソースコードをコンパイルして前記スクリプト起動プログラムの機械語プログラムを生成する処理と、
をコンピュータに実行させるためのスクリプト起動プログラムの生成プログラム。 - 秘密情報を有し、機械語プログラムとして構成されるスクリプト起動プログラムであって、
前記秘密情報を記憶部に書き込む処理と、
前記秘密情報を処理するスクリプトプログラムを起動する処理と、
前記秘密情報が書き込まれた前記記憶部の位置を、起動した前記スクリプトプログラムに通知する処理と、
をコンピュータに実行させるためのスクリプト起動プログラムと、
テキストファイルとして構成され、実行時にインタプリタによって命令列が解釈され、命令が実行されるスクリプトプログラムであって、
起動後に前記スクリプト起動プログラムから通知された前記記憶部の位置から前記秘密情報を読み込む処理と、
読み込んだ前記秘密情報を前記記憶部の位置から消去する処理と、
読み込んだ前記秘密情報に基づく処理と、
をコンピュータに実行させるためのスクリプトプログラムと、
を有するプログラムセット。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010072168A JP2011204105A (ja) | 2010-03-26 | 2010-03-26 | スクリプト起動プログラム、スクリプト起動プログラムの生成プログラム、およびプログラムセット |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010072168A JP2011204105A (ja) | 2010-03-26 | 2010-03-26 | スクリプト起動プログラム、スクリプト起動プログラムの生成プログラム、およびプログラムセット |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2011204105A true JP2011204105A (ja) | 2011-10-13 |
Family
ID=44880669
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010072168A Pending JP2011204105A (ja) | 2010-03-26 | 2010-03-26 | スクリプト起動プログラム、スクリプト起動プログラムの生成プログラム、およびプログラムセット |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2011204105A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015103253A (ja) * | 2013-11-21 | 2015-06-04 | エヌエックスピー ビー ヴィNxp B.V. | 構造体を生成する方法および対応する構造体 |
JP2021526670A (ja) * | 2018-06-08 | 2021-10-07 | シャンハイ カンブリコン インフォメーション テクノロジー カンパニー リミテッドShanghai Cambricon Information Technology Co.,Ltd. | 汎用機械学習モデル、モデルファイルの生成および解析方法 |
-
2010
- 2010-03-26 JP JP2010072168A patent/JP2011204105A/ja active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015103253A (ja) * | 2013-11-21 | 2015-06-04 | エヌエックスピー ビー ヴィNxp B.V. | 構造体を生成する方法および対応する構造体 |
US9563754B2 (en) | 2013-11-21 | 2017-02-07 | Nxp B.V. | Method of generating a structure and corresponding structure |
JP2021526670A (ja) * | 2018-06-08 | 2021-10-07 | シャンハイ カンブリコン インフォメーション テクノロジー カンパニー リミテッドShanghai Cambricon Information Technology Co.,Ltd. | 汎用機械学習モデル、モデルファイルの生成および解析方法 |
US11726754B2 (en) | 2018-06-08 | 2023-08-15 | Shanghai Cambricon Information Technology Co., Ltd. | General machine learning model, and model file generation and parsing method |
JP7386706B2 (ja) | 2018-06-08 | 2023-11-27 | シャンハイ カンブリコン インフォメーション テクノロジー カンパニー リミテッド | 汎用機械学習モデル、モデルファイルの生成および解析方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10708051B2 (en) | Controlled access to data in a sandboxed environment | |
CN102043932B (zh) | 一种防止Java程序被反编译的方法 | |
JP4048382B1 (ja) | 情報処理システムおよびプログラム | |
US20160203087A1 (en) | Method for providing security for common intermediate language-based program | |
CN109784007B (zh) | 一种字节码加密的方法、字节码解密的方法及终端 | |
EP1736848A1 (en) | Execution device | |
WO2013170724A1 (zh) | 安卓系统中java应用程序的保护方法 | |
CN111656345B (zh) | 启用容器文件中加密的软件模块 | |
US20110271350A1 (en) | method for protecting software | |
CN101957903A (zh) | 一种保护类文件的方法和装置 | |
US9256731B2 (en) | System, information processing apparatus, secure module, and verification method | |
WO2020165447A1 (en) | Securing virtual-machine software applications | |
CN107870793B (zh) | 一种应用程序中加载so文件的方法及装置 | |
JP2012128536A (ja) | データ保護処理プログラム | |
US9256756B2 (en) | Method of encryption and decryption for shared library in open operating system | |
CN103116715A (zh) | Windows平台可执行文件API延迟导入保护方法 | |
CN108133147B (zh) | 可执行代码的保护方法、设备及可读存储介质 | |
JP4664055B2 (ja) | プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法 | |
CN107871066B (zh) | 基于安卓系统的代码编译方法及装置 | |
JP2010217975A (ja) | 情報処理装置、アプリケーションプログラム、及びアプリケーションプログラムの実行方法 | |
JP2011204105A (ja) | スクリプト起動プログラム、スクリプト起動プログラムの生成プログラム、およびプログラムセット | |
CN110737910B (zh) | 一种Android log解密管理方法、装置、设备和介质 | |
JP2013045277A (ja) | プログラム難読化方法およびリモートデバッグシステム | |
DONG et al. | Sesoa: Security enhancement system with online authentication for android apk | |
JP4120702B2 (ja) | 情報処理システムおよびプログラム |