データと演算の隠蔽を目的としたプログラムの難読化手法

佐藤 弘紹 (0151050)


近年,プログラムに対する不正な解析を防止したいという要求が非常に高まっている. これを防止するために,プログラムを難読化する(Program Obfuscation)という手法がある. プログラムの難読化手法は,従来より数多く提案されている. しかし,従来の方法は,プログラムの構造自体を複雑にしているが, 実行時にプログラムスタック上に現れるデータをそのままの状態で処理するために, スタックを常に監視するような解析に対してはデータを保護する機能が働いていなかった.

そこで,本研究では,プログラム中のデータを符号化し,かつ 符号化したままの状態で演算するような難読化手法を提案する. 提案手法の実施手順は,大きく分けて3つのステップから構成される: (1)プログラム中のデータを符号化する, (2)演算結果も符号化された状態になるように,演算子の置き換えを行う, (3)得られた演算結果を必要な時に復号する. そして,線形変換によるデータの符号化に対して,演算子の変換規則を提案し, 規則的適用後のプログラムの仕様が保存されることを数学的に証明した. また,符号化するデータを選択することによって, それぞれ異なる難読化変換の結果が得られることを示した.

提案手法によって得られるプログラムは, データが符号化されたままの状態で演算が行われるため, プログラムスタック上には符号化されたデータが現れることになる. 提案手法は,実行時にプログラムスタック上に現れるデータを 常に監視するような解析に対しても有効であり, 復号鍵,復号アルゴリズム,認証等のセキュリティに関わる ソフトウェアシステムを保護する効果が期待できる.