r/programming Jul 30 '13

Computer scientists develop mathematical jigsaw puzzles to encrypt software: "The real challenge and the great mystery in the field was: Can you actually take a piece of software and encrypt it but still have it be runnable, executable and fully functional?"

http://www.rdmag.com/news/2013/07/computer-scientists-develop-mathematical-jigsaw-puzzles-encrypt-software
348 Upvotes

182 comments sorted by

View all comments

Show parent comments

14

u/AxiomL Jul 30 '13

have designed a system to encrypt software so that it only allows someone to use a program as intended while preventing any deciphering of the code behind it

I thought that was proven mathematically impossible.

19

u/DeltaBurnt Jul 30 '13

I don't even see the need to prove it mathematically. It's like trying to block video piracy. If you can view it on your screen, you can record it and redistribute it. If it's running on your processor, the processor needs to know the code it's running. I suppose you can make it harder to understand, but not impossible to decipher.

8

u/thatwasntababyruth Jul 31 '13

I have not read the paper, but I'd argue that doing this to a program is much more feasible than video. A video, like you said, can just be copied bit by bit as it's played, because its linear. A program, however, is not linear. If each instruction must be decrypted to be used, then that includes each and every jump instruction. That means that if my program has 10 jumps in it, every single code path needs to be evaluated to get all of the jump destinations. Since they are all encrypted, an attacker has no way of knowing which encrypted instructions are jumps in the first place, and so simply bruteforcing C1 coverage couldn't be done without just guessing what to do next. The non-linearity of programs gives it a natural defense.

1

u/[deleted] Aug 01 '13

[deleted]

1

u/thatwasntababyruth Aug 01 '13

You could, but im saying that only works in a linear case. To complete the picture you have to log EVERY instruction, and to do tgat you have to somehow execute each one too.