TL;DR: ソフトウェアの多くは外部からの入力に依存する実行パス(trigger-based code)をもつ. これを記号的実行(symbolic execution, シンボリック実行)などの解析手法から隠蔽する手法として,コラッツの問題を用いた線型難読化(linear obfuscation)がある[1]. 本稿ではしかし,線型難読化されたコードはコンパイラ最適化によってある程度除去できることを示す. コラッツの問題 コラッツの問題は数論の未解決問題のひとつである. 任意の1でない自然数nに対して,nが偶数ならば2で割り,nが奇数ならば3倍して1を足す.この操作を繰り返していくと,どのような自然数nから出発しても,有限回の操作のうちに必ず1に到達する. この定理は経験則的に正しいと考えられているが,いまだ証明はなされていない. 線型難読化 たとえば次のプログラムtr.cは外部からの