研究概要 |
Java, C言語等で記述されたプログラム中のデータ,及び,演算式の隠蔽を目的とした難読化法を提案した.機密保護,認証等のセキュリティに関わるプログラムにおいては,不正な解析によってプログラム中の秘匿データ(パスワードや暗号鍵,復号鍵等)が漏洩することが大きな問題となっており,データおよび演算の隠蔽の意義や需要は極めて大きい. 提案する難読化法は,秘匿データを符号化し,さらに,データを符号化したままで演算する枠組みを提供する.提案方法は,次の三つのプロセスより構成される.(1)プログラム中のデータを符号化する,(2)符号化されたデータに対する四則演算の変換を行う,(3)必要に応じて演算結果の復号を行う.本方法により,「実行時にメモリスタック上に現れるデータを監視する」という従来防ぐことが困難であったプログラム解析に対しても秘匿データを隠蔽できる.これまで,このような攻撃からデータを隠蔽する手法は提案されておらず,本研究が初めてである. 提案方法をいくつかの小規模なプログラムに適用して評価した結果,難読化されたプログラムは,秘匿データを知ることが人間にとって著しく困難となっていることが確認された.また,多くのソフトウェアメトリクス(トークン数,演算数,参照数,代入数)が増加していることが定量的に確認された.また,難読化後のプログラムの実行効率,及び,規模の増大は,プログラムの読みにくさの増大とトレードオフの関係にあることが確認された.
|