研究概要 |
動的命令を含んだプログラムPをオートマトンにより解釈・実行するシステムを実装した.攻撃者の視点からシステムの安全性を評価し,システムが満たすべき性質について整理するともに,主に次の2点についてシステム設計の見直しを行った. (1)動的命令を含むプログラムPから元のプログラムP_0を推測する手がかりとして,(a)分岐オペコード,(b)ダミー命令,(c)オペコード出現頻度の偏り,が存在することが分かった.そこで,(a)(b)の手がかりを隠蔽するために,Pの言語にオートマトンの状態遷移のみを行う命令を追加し,ダミー命令を用いないこととした.これにより,オートマトン上での分岐オペコードとそれ以外のオペコードの区別が不要となった.また,(c)を解決するために,状態遷移関数に次の制約を設けた.全てのc__-_jに対し,{λ^<i-1>(c__-_j):0【less than or equal】i<n}=Σを満たすという制約である.ここで,c__-_jはプログラムP_oの言語に含まれるオペコードであり,nはオートマトンの状態数であり,λ^iは状態iにおける出力関数,Σは全動的命令(オペコード)の集合であり.この意味するところは,任意のオペコードを選び,オートマトンの各状態で動的命令へと変換した場合,得られる動的命令の集合が常に全動的命令の集合と等しくなるということである. (2)オペランドを隠蔽するために,1対多の写像を用いた.例えば,オペコードが2バイトのオペランドop1,op2を取る場合,オペランドをb1,b2,b3,b4,b5の5バイトに拡張する.ただし,b3,b4,b5は一様分布0,…,255からランダムに選ばれる値であり,また,b1|b2={op1|op2}XOR{R_i(b3)|R_i(b4)}XOR{R_i(b5)|R_i(b5)}とする.ここで,R_iはオートマトンの各状態iに対応付けられる1バイト幅の全単射である.
|