Obfuscation of Abstract Data-Types - Rowan
Obfuscation of Abstract Data-Types - Rowan
Obfuscation of Abstract Data-Types - Rowan
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
9<br />
We study abstract data-types (consisting <strong>of</strong> a local state accessible only<br />
by declared operations) and define obfuscations for the whole data-type. In<br />
other words, we obfuscate the state <strong>of</strong> the data-type under the assumption that<br />
the only way it is being accessed is via the operations <strong>of</strong> the type. Different<br />
operations (on a given state) may require different obfuscations.<br />
To date, obfuscation has been an area largely untouched by the formal<br />
method approach to program correctness. We regard obfuscation as data refinement<br />
allowing us to produce equations for proving correctness. We model<br />
the data-type operations as functional programs. That enables us to establish<br />
correctness easily as well as providing us with an elegant style in which to write<br />
definitions <strong>of</strong> our operations. Two benefits <strong>of</strong> using abstract data-types are that<br />
we can specify obfuscations which exploit structural properties inherent in the<br />
data-type; and the ability to create random obfuscations. We also provide a<br />
new definition <strong>of</strong> obfuscation that avoids the impossibility problem considered<br />
by Barak et al. [6] and is appropriate for our data-type approach.<br />
Structure <strong>of</strong> the thesis<br />
The thesis is structured as follows:<br />
• In Chapters 1 and 2 we consider the current view <strong>of</strong> obfuscation. In<br />
Chapter 1 we discuss the need for obfuscation and summarise some <strong>of</strong> the<br />
obfuscations from [10]. Also we evaluate the definitions for obfuscation<br />
given in [6, 10]. In Chapter 2 we look at the .NET Intermediate Language<br />
[23] and discuss joint work with Oege de Moor and Ganesh Sittampalam<br />
that allows us to write some specifications <strong>of</strong> obfuscations for Intermediate<br />
Language.<br />
• In Chapter 3 we give an alternative view <strong>of</strong> obfuscation by concentrating<br />
on abstract data-types. We use data refinement and functional programming<br />
to produce a framework that allows us to prove the correctness <strong>of</strong><br />
obfuscations (or even to derive them) and we give a definition <strong>of</strong> obfuscation<br />
pertinent to our approach.<br />
• In Chapter 4 we use our approach to generalise an obfuscation called array<br />
splitting and we show how to split more general data-types.<br />
• The next three chapters concentrate on specific case studies for different<br />
data-types. In Chapters 5 and 6 we use the results on data-type splitting<br />
to show how to construct obfuscations for sets and matrices. In Chapter<br />
7 we give a transformation suitable for obfuscating binary trees.<br />
• Finally, in Chapter 8, we summarise our results and discuss possible areas<br />
for future work.<br />
Contributions<br />
The thesis provides the following contributions.<br />
Using established work on refinement, abstract data-types and functional<br />
programming, a new approach to obfuscation is developed. This approach has<br />
the following benefits: