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.
CHAPTER 3. TECHNIQUES FOR OBFUSCATION 49<br />
So, for obfuscation we require an abstraction function af with type<br />
af :: O → D<br />
and a data-type invariant dti such that for elements x :: D and y :: O<br />
x ❀ y ⇔ x = af (y) ∧ dti(y) (3.1)<br />
The term x ❀ y is read as “x is data refined by y” (or in our case, “. . .is<br />
obfuscated by. . . ”) which expresses how data-types are related.<br />
For obfuscation the abstraction function acts as a “deobfuscation” and therefore<br />
it is important to keep this function secret from an attacker. In our situation,<br />
it turns out that af is a surjective function so that if we have an obfuscation<br />
function <strong>of</strong><br />
<strong>of</strong> :: D → O<br />
that satisfies<br />
then<br />
<strong>of</strong> (x) = y ⇒ x ❀ y<br />
af · <strong>of</strong> = id (3.2)<br />
Thus, <strong>of</strong> is a right-inverse for af . Note that it is not necessarily the case that<br />
<strong>of</strong> · af = id (3.3)<br />
since we could have another obfuscation function <strong>of</strong> ′ such that <strong>of</strong> ′ (x) = y ′ and<br />
x ❀ y ′ and so we have that<br />
<strong>of</strong> (af (y ′ )) = <strong>of</strong> (x) = y<br />
The abstraction function will have a left-inverse only if it is injective. In that<br />
case, each object <strong>of</strong> D will be refined by exactly one <strong>of</strong> O and we will call the<br />
inverse (which is both left and right) <strong>of</strong> af the conversion function (cf ) for the<br />
obfuscation.<br />
3.2.1 Homogeneous operations<br />
Suppose that the operation f with type<br />
f :: D → D<br />
is defined in D. Then to obfuscate f we want a operation f O with type<br />
f O :: O → O<br />
which preserves the correctness <strong>of</strong> f . In terms <strong>of</strong> data refinement, we say that<br />
f O is correct if it is satisfies:<br />
(∀x :: D;y :: O) • x ❀ y ⇒ f (x) ❀ f O (y) (3.4)