cannot be traversed with a small set of input values.
We are currently exploring which code structures
are suitable for protection. In particular, we are in-
vestigating how variants can be created in such a way
that they fulfill the VSA and if such a variant creation
process can be automatized. In this section, we briefly
sketch some of our current research. We list some tech-
niques that are useful for designing variants in such
a way that the VSA holds and mention some of our
findings on the efficiency of our scheme.
Techniques.
In the following, we describe some
techniques that are useful for creating variants that
fulfill the VSA.
•
Local optimization: Optimize the code for a partic-
ular input range, e.g., by deleting operations that
are not necessary on a specific interval. For in-
stance, one can delete additions with functions that
are close to zero on a given interval.
•
Adding redundant operations: Add redundant op-
erations on a specific interval, e.g., multiplications
with functions that are close to one on a given
interval.
•
Approximation: Create variants using approxima-
tion techniques (such as taylor approximation).
Each approximation (variant) only gives local in-
formation about the original function block. If
the original function is complex enough then an
adversary cannot use this local information to de-
duce the entire function since the global behavior
of this function may strongly differ from the local
approximations. Note that it suffices if the original
function is only complex on a particular critical
part of its domain.
•
Exploiting branches: Exploit the branched struc-
ture (e.g. if-then-else or switch statements) of the
program code. If each branch contains code that is
not easily implied by other branches, then one can
define a variant for each branch.
•
Code Moving: As mentioned earlier, the wrapper
functions of each function block is moved into the
dongle in order to hide the input ranges of vari-
ants. This technique makes it much harder for an
adversary to find new variants. This is because, in
general, knowledge of the input ranges of variants
considerably facilitates finding new variants. In
particular, without knowing the ranges an adver-
sary cannot find out if he has retrieved all variants.
Implementation and Hackers Contest.
In order to
assess the practicality of our scheme, we have carried
out various performance experiments together with an
industrial partner specializing in the field of software
protection. As it turned out, the dominating overhead
is the latency of the communication between the com-
puter on which the program is executed and the don-
gle. Variant decryption only plays a minor role. Our
protection scheme does not use significantly more don-
gle calls than the (commercially available) protection
schemes of our industry partner. This indicates that
our scheme is practically viable. However, we still
need to thoroughly benchmark our scheme in order to
assess its exact efficiency.
We have carried out a global hacker contest with
over 300 participants. Each participant received a
small video game created by our industry partner and
protected by our scheme. Every participant was given
a dongle with a valid license that enabled running
the protected program. No submitted solution con-
tained functional program code. We believe that video
games are among the classes of programs that can be
effectively protected by our scheme due to their high
complexity. This is because most modern games have
a high number of “special cases” that are triggered by
the behavior of the user. These special cases can be,
e.g., a mission, a part of the balancing system, or an
easter egg. In general, every complex code structure
seems to be exploitable for variant creation.
6 OUTLOOK
The techniques for secure variant creation mentioned
above are already applicable assuming the developer
aids the variant creation process with his domain
knowledge. Since the variant creation process should
be as cheap and fast as possible, we are currently ex-
ploring ways to automatize secure variant creation.
REFERENCES
Barak, B., Goldreich, O., Impagliazzo, R., Rudich, S., Sahai,
A., Vadhan, S., and Yang, K. (2001). On the (im)
possibility of obfuscating programs. In Advances in
cryptology – CRYPTO 2001, volume 2139, pages 1–18.
Springer.
Canetti, R. (2000). Security and composition of multiparty
cryptographic protocols. Journal of CRYPTOLOGY,
13(1):143–202.
Garg, S., Miles, E., Mukherjee, P., Sahai, A., Srinivasan, A.,
and Zhandry, M. (2016). Secure obfuscation in a weak
multilinear map model. In Theory of Cryptography
Conference, pages 241–268. Springer.
Goldreich, O. and Ostrovsky, R. (1996). Software protection
and simulation on oblivious rams. Journal of the ACM
(JACM), 43(3):431–473.
Towards Efficient Software Protection Obeying Kerckhoffs’s Principle using Tamper-proof Hardware
557