June 2004, 36pp.
An obfuscation is a program transformation whose aim is to make a program "harder to understand" so that reverse engineering of that program becomes more difficult.
This paper considers a fresh approach to obfuscation by considering the operations of a data-type, which we model as functional programs. Obfuscation is mainly applied to object-oriented programs and we can view an object as a data-type and methods as the operations. We study matrices and the implementation of some operations using functional lists.
Constructing obfuscations for imperative programs usually requires expensive program analysis, but our method allows us to derive obfuscations directly. Whilst establishing the correctness of imperative obfuscations can be a challenging task, our approach enables this to be achieved easily. Our derivations are aided by taking advantage of standard functional programming results such as fold fusion.
To date obfuscation has been an area largely untouched by the formal method approach to program correctness. Formal methods allow us to establish a framework that provides support for the obfuscation of matrix data-types which exploit properties of matrices.