23.11.2013 Views

Obfuscation of Abstract Data-Types - Rowan

Obfuscation of Abstract Data-Types - Rowan

Obfuscation of Abstract Data-Types - Rowan

SHOW MORE
SHOW LESS

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:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!