Computer Scientists Develop 'Mathematical Jigsaw Puzzles' To Encrypt Software
another random user writes "The claim here is that the encrypted software can be executed, but not reverse-engineered. To quote from the article: 'UCLA computer science professor Amit Sahai and a team of researchers 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. According to Sahai, previously developed techniques for obfuscation presented only a "speed bump," forcing an attacker to spend some effort, perhaps a few days, trying to reverse-engineer the software. The new system, he said, puts up an "iron wall," making it impossible for an adversary to reverse-engineer the software without solving mathematical problems that take hundreds of years to work out on today's computers — a game-change in the field of cryptography.'"
I'm sure they can further obfuscate the actual code, but at the end of the day the processor is going to have to run machine code, and one way or the other you can tap the processor's activity to read the "decrypted" code. Beyond that, I imagine the performance penalties involved will be monstrous. Even normal obfuscation techniques have pretty heavy penalties.
The world's burning. Moped Jesus spotted on I50. Details at 11.
Deciphering/Decrypting is not the same thing as Reverse Engineering.
Reverse Engineering is duplicating the functionality without seeing the source code. That should still be possible if you have the ability to run the program.
I'm out of my mind right now, but feel free to leave a message.....
so..the next Stuxnet will be untraceable , cool
Clearly the journalist had no idea what they were writing about.
Who gains from this? Most of all? Virus writers.
Perhaps the real solution is to have the OS never execute code looking anything like this.
If they really think it is so good, then they should put their money where their mouth is.
Make it into a crackme, issue a large award for solving it.
Post it online. I give it a few weeks max, if that.
And who is to say it can't still be manipulated once running?
Think of the performance cost.
Either way, I have no faith in an article with little details.
I can't imagine any circumstance where an execution trace could not be used to reconstruct the original behavior of the code, no matter how obfuscated it is.
and programs will continue to run like it's 1987
Or is there an original unscrambled source code retained somewhere?
From page 7 of the paper: "While our current obfuscation construction runs in polynomialtime, it is likely too inefficient for most practical problems. An important objective is to improve the efficiency for use in practical applications"
iron wall.... hahaha... impossible for.... No please STOP... reverse-engineer HAHAHAHA
Oh my sides. Man that was good. Wait, they are serious? LOL
Having to work for a living is the root of all evil.
Call the kernel to access files, sockets, etc.
Also unless the developer is super 31337 and likes to write everything I expect shares library calls too.
By watching calls to those interfaces we can figure out what it does.
If they really think it is so good, then they should put their money where their mouth is. Make it into a crackme.
Yeah agree TOTALLLLLLY! They're choosing instead to show it at a fly-weight pseudo-meeting, the so-called "IEEE Symposium on Foundations of Computer Science." Fraudsters!
Cryptology ePrint Archive: Report 2013/451
Candidate Indistinguishability Obfuscation and Functional Encryption for all circuits
Sanjam Garg and Craig Gentry and Shai Halevi and Mariana Raykova and Amit Sahai and Brent Waters
Abstract: In this work, we study indistinguishability obfuscation and functional encryption for general circuits:
Indistinguishability obfuscation requires that given any two equivalent circuits C_0 and C_1 of similar size, the obfuscations of C_0 and C_1 should be computationally indistinguishable.
In functional encryption, ciphertexts encrypt inputs x and keys are issued for circuits C. Using the key SK_C to decrypt a ciphertext CT_x = Enc(x), yields the value C(x) but does not reveal anything else about x. Furthermore, no collusion of secret key holders should be able to learn anything more than the union of what they can each learn individually.
We give constructions for indistinguishability obfuscation and functional encryption that supports all polynomial-size circuits. We accomplish this goal in three steps:
- We describe a candidate construction for indistinguishability obfuscation for NC1 circuits. The security of this construction is based on a new algebraic hardness assumption. The candidate and assumption use a simplified variant of multilinear maps, which we call Multilinear Jigsaw Puzzles.
- We show how to use indistinguishability obfuscation for NC1 together with Fully Homomorphic Encryption (with decryption in NC1) to achieve indistinguishability obfuscation for all circuits.
- Finally, we show how to use indistinguishability obfuscation for circuits, public-key encryption, and non-interactive zero knowledge to achieve functional encryption for all circuits. The functional encryption scheme we construct also enjoys succinct ciphertexts, which enables several other applications.
Category / Keywords: public-key cryptography / Obfuscation, Functional Encryption, Multilinear Maps
Date: received 20 Jul 2013, last revised 21 Jul 2013
Contact author: amitsahai at gmail com
Available format(s): PDF | BibTeX Citation
Silicon & Charybdis McLuhan Kildall Papert Kay
Well that fixed that.
If the goal is to make it impractical for someone WITHOUT the ability to monitor the computer including the CPU "from the inside" they may be on to something.
If I can monitor the system at a level of detail where I understand what each "step" does, then I can just put the pieces together and I'll know what's going on. If I'm a debugger that can monitor the CPU and the rest of the system in a way that isn't visible to the code I'm trying to snoop on, it's pretty much game over, I win.
Here's where it gets interesting:
If two computers are collaborating on a task and I have debugger-access to one but I see the other as a "black box" you could design a system in which the fact that I have perfect knowledge of what is going on in computer A doesn't give me a huge amount of insight into what task the two computers are collaborating on and how they are doing it.
Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
Great for malware writers and anyone who writes sloppy code. Nobody gets to see how badly they code, and if it doesn't run well, then it's because of all the overhead with the encryption.
I call BS on the notion that you have already read and digested TFP and are in a position to make anything close to an informed comment about the methodology proposed. In particular you seem to be completely unaware that your concern about performance penalties is specifically addressed.
There are two choices here. either the government has the key to easily deal with this or they will make it illegal to use.
Governments will not permit the exchange of information without observation.
The paper says:
In other words, this is currently too slow for almost anybody except virus-writers.
I just scanned the original paper, reserving its detailed lecture for another moment. But it is one of those things that make me think: "Damn ! Wish I had thought of this myself..."
Religous speak to God. Insane are spoken to by God. When all shut up, one can finally hear Shostakovich in peace
Yeah I agree, there is something fundamentally wrong with the claims being made. If I have byte code, I can rebuild loops and conditionals with a decompiler. Sure, I don't have comments or var names, but those can be guessed or worked out in something less than 'several hundred years'.
Suppose you build something that throws in a lot of crazy random jmp calls to make this harder, and I cant be bothered to re-construct a program I want to steal. At some point a single Boolean decision hits the call stack that says, 'Is the app unlocked, yes or no?', and that conditional jmp can be replaced so it is cracked. Unless this guy has come up with a super magic method to keep me out of my own computer, I can crack whatever crackpot protection scheme he cooks up.
DRM doesn't work, on a theoretical level, because you cannot keep people from having access to the data at every single point in the delivery chain. Code is just data. So......QUACK QUACK QUACK.
HA! I just wasted some of your bandwidth with a frivolous sig!
A computer program is deterministic (except for machine specific fp round errors) determined to do a certain set of tasks.
Thus my steam powered von-Neumann-Automaton is able to execute the software (with human help) within a certain (normal) amount of time,
so this is only a speed bump too.
And if the mathematical puzzle is so puzzling that the non-mathemations aren't able to solve it,
I'd call the software simply unusable.for 99% of the users.
You run the executable...
You ask kernel to stop executing it...
You dump the memory...
Voila - you have the unencrypted executable...
This process, including writing the tools for it, will take a person who knows what hes doing around 5 minutes... (if the program is large, it might take longer due to disk write speeds)...
Yes, they can obfuscate the assembly, but it still will be the assembly - perfectly human readable.
It might be pain to reverse engineer the whole program, but it can be done. But in most cases I've seen the hacker doesn't want to reverse engineer the whole program, he just wants to alter it a little / extract some crucial information from it (i.e. private keys). Obfuscation doesn't make this harder at all - You find some interesting OS level calls (i.e. socket creation - you cant obfuscate that...) and using debugger/stack traces/assembly/hooks you poke around a bit to find the part that is interesting to you...
From security point of view, assembly encryption (no matter how good it is) is comparable to covering your house with packing paper to prevent thieves from entering...
encryption used for DVDs was believed to be unbreakable, until it was broken. How many companies have released encryption schemes, for DRM or otherwise and it gets cracked within hours of actual release. more than once Microsoft encryption has been cracked before its official release.
Though I haven't studied this particular one, my general impression is that it was not designed by cryptography experts and then vetted the way well known cryptographic algorithms are vetted by other experts.
Eventually those who don't understand maths will be freed of being slaves to those that do. Could this be the first step?
Time is what keeps everything from happening all at once.
We've been hearing this absurdly false claim for decades, now. If it worked, they would gladly prove it, but notice how they don't dare let anyone try it.
It's called Forth
Take the cheese to sickbay, the doctor should see it as soon as possible - B'Elanna Torres, "Learning Curve"
Assuming current processors, the CPU still has to fetch code & data from memory in the clear. Put a logic analyzer on the CPU (or elsewhere) to monitor all address and data lines. Capture it all and then see what code the CPU is executing. Come up with some clever software to derive large portions of functional source code from the capture. Clean it up by hand, and you've successfully reverse engineered it. Am I missing something?
This is fascinating, but hard to understand. It's not clear how broad a result this is.
This seems to apply to "circuits", which are loop-free arrangements of AND, OR and NOT gates. These take in some bit string with a fixed number of bits and emit another bit string with a fixed (but possibly different) number of bits. Many computations can be encoded into this form, but the "circuits" are typically very deep, since this is sort of like loop unwinding. Although this seems kind of limited, you could, for example, make a reasonably sized "circuit" to compute DES, which is a static pattern of Boolean operations.
"Obfuscation" here means taking in some "circuit" and producing a bit for bit equivalent "circuit" from which little information can be extracted. The obfuscated circuit may be (will be?) more complex than the original, because additional logic has been inserted in a somewhat random way.
The contribution in this paper seems to be that this might be useful for "functional encryption". This is where you have some values, such as A and B, which are encrypted and are to be protected, but the result of some function f(A,B) is not protected. The idea is to have an implementation of f which combines the decryption and the desired function, an implementation which cannot be reverse engineered to return decrypted versions of A or B. While this has been suggested as a possible feature for databases, it's hard to apply to useful functions, and so far, it's mostly a research idea there. It's been suggested for some complex access control schemes involving mutual mistrust, but that too is a research topic.
Anyway, this doesn't mean you're going to be able to run your big executable program through some kind of magic obfuscator that will prevent someone from figuring out how it works. Not yet, anyway.
I can't really comment on the slashdot summary, but take a look at the actual abstract: http://eprint.iacr.org/2013/451
"In functional encryption, ciphertexts encrypt inputs x and keys are issued for circuits C. Using the key SK_C to decrypt a ciphertext CT_x = Enc(x), yields the value C(x) but does not reveal anything else about x. Furthermore, no collusion of secret key holders should be able to learn anything more than the union of what they can each learn individually."
In other words, it seems that their technique allows you to encrypt some secret data, then (provably) only release the result of some arbitrary function of that data. It sounds like this means you could (in principle) release health data in encrypted form, then allow researchers to study some ensemble properties of it by giving out the appropriate keys. This aspect of it certainly seems pretty cool.
spaghetti-code. Thats probably all this is.
You don't need to emulate the hardware to see a program's output, you can just look at your screen. There is little point in hiding the output of a program from the user who's running it so I don't see that as the point (if one cannot observe the output of a program, it is of little utility).
Which instructions a given program executes depends on the inputs to said program. For any given input, most programs only execute a tiny portion of their code. Therefore, in order to completely reverse engineer a program, you would have to observe the output for all possible inputs. This is almost certainly intractable for any sufficiently complex program. Suppose you wrote a program to iterate over all possible inputs observing the output of each input; things get interesting if you liken this to the halting problem.
either you misunderstand or i do, but my understanding was that this system allows a function to be expressed so that the code will only execute with certain parameters, hence the function can only compute certain evaluations (lets say one for simplicity) of the original function, and the true function can be hidden. so that the function evaluated for other parameters cannot be computed with this expression.
basically a really complex way of designing a look up table ?
now as you say, you can never hide the value of the function evaluated at the parameters for allowable parameters, because you can stick it in an emulator but the emulator tells you nothing more about the function and so you might as well just 'run' the whole procedure cause you cant extract anything other than the answer, to the function evaluated at a predetermined set of values.
this is achieved by making the original universal (or with domain expanded over the single or fixed set or parameters) algorithm into the 'jigsaw' that will only assemble with the particular parameters which are 'allowed', as these parameters direct the fitting of the jigsaw.
so can the jigsaw be fit with the 'allowed' parameters and still evaluate the original algorithm for different values? i believe the point of the algorithm is to achieve the same result as a look up table, and if it doesnt do it more efficiently then there is no point to the algorithm.
You just know that some crack DRM whore like UBISoft will incorporate this as part of their next game release.
Donte Alistair Anderson Roberts - hi son!
Karma: Chameleon
But UCLA doesn't get to claim the credit. MIT was first to present homomorphic encryption: http://web.mit.edu/newsoffice/2013/algorithm-solves-homomorphic-encryption-problem-0610.html
Roughly speaking, homomorphism is a map which preservers the properties pertinent to a category. Now think of data as acting on code instead of code acting on data. Since "acting" is a mapping, acting in a homomorphic way would produce program results which are equivalent but without the decrypting step.
Any guest worker system is indistinguishable from indentured servitude.
can any explain how exactly this will be helpful ....
(14) A person having a right to use a computer program should not be prevented from performing acts necessary to observe, study or test the functioning of the program, provided that those acts do not infringe the copyright in the program.
(15) [...]Nevertheless, circumstances may exist when such a reproduction of the code and translation of its form are indispensable to obtain the necessary information to achieve the interoperability of an independently created program with other programs.
It has therefore to be considered that, in these limited circumstances only, performance of the acts of reproduction and translation by or on behalf of a person having a right to use a copy of the program is legitimate and compatible with fair practice and must therefore be deemed not to require the authorisation of the rightholder. An objective of this exception is to make it possible to connect all components of a computer system, including those of different manufacturers, so that they can work together. [...].
Questions raise, answers kill. Raise questions to stay alive.
now ive thought a little more and basically everything on the continuum, from a complete look-up-table which can describe all functions on the given domain to the constant function, is probably most efficiently described with some form of hash function.
so, by replacing all software with octaves of hash functions :), we retain some involutional or evolutional control ?
as a defense against allowing our 'original algorithm' to be reverse engineered we can even intentionally obfuscate, if there is some purpose, and bulk up the original algorithm arbitrarily. the reverse engineer can never determine if this bulk is actually necessary, or if he would more properly use a look up table which gives no information just like a one time pad. one issue is that most currently used forms of coded forms of algorthms do not include a specification of their proper domain.
for eg. take the code for the gamma function on some universal turing machine, replacing it with an arbitrary or obfuscated code can never retain the infinite generating capability of the original gamma function and also remain obfuscated.
but at how many values do you have to check a function to know if it is actually the gamma function or not?
this may come down to the study of algorithms that use an oracle to classify a given function as say balanced or fixed. if humans are quantum computers then perhaps we use a similar advantageous algorithm to assess other infinite valued functions such as the complete state of a point in hilbert space. might even underlie concepts such as reflection, and identity.
the quantum spin statistics theorem relates the integer or half integer spin, fermions or bosons, and this relates to the two solutions of the quadratic application of the exchange operator.
see david deutsch.
The only thing you can do with it is put it together the way that it was meant to interlock
yes an emulator can evaluate the obfuscated algorithm for a fixed input. might as well be a look up table, imho.
unless there is some advantage like size or flexiblility, so replace it with a series of hash tables.
its hash tables all the way down.
Remember, kids, everything that can be applied for good can be applied for ill. And code that is impossible to decipher and analyze is the holy grail of malware.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
It sounds like what they are trying to do here is to refactor the algorythm such that f(x)=y produces the same answer but it's not practical to modify because the new function is mathematically scrambled-- the effect of each component of the code is so obscured that it's not so easy to tell how it contributes to the results. It's like using a neural net to implement your solution, the contribution of each neural node to the overall result can be significantly obscure. Won't stop someone from stealing the algorythm as is, but hacking it to produce an alternate result set will be out of the question, as long as they can't just build a truth table of inputs to outputs...
Show me the maths
Sure, here you go.
Problem with this is, its designed by humans. Anything someone designs, can be designed around by someone else. Its just matter of finding that someone that can do it.
THE FRIGGING POINT of copyright is that you can learn from it. Just like patents. Then it goes into the public domain. But if you've cripped it by this method, it will never be used for its intended purpose by copyright law unless the eventual owner is bound by law (and even if they agreed, the law would be changed well before then: see Mickey Mouse) to open up the source.
So if you're using this, you get no copyright: that right is based on a quid pro quo and you have indicated you are completely uninterested in doing so. So therefore you get no copyright.
If I were to patent something then put "REDACTED" over it all because I wanted to keep it a trade secret, the PTO will refuse patent.
This does no different.
And they won't. You will not know that you can't hack it until after you try. And if you're in the USA, you won't be able to get a refund even if you'd said you wanted it as a learning tool.
They will not inform you, since if you were informed properly of each products points, you may choose a competitors 100% of the time. Whereas if they don't inform you reliably at all, then you're equally likely to choose any of them (in practice, you choose based on price alone, so the margins move to the bottom pretty quick). Why risk losing ALL business when you can guarantee a fair slice?
Where can we buy/download the package?
so that it only allows someone to use a program as intended
making it impossible for an adversary to reverse-engineer the software without solving mathematical problems that take hundreds of years to work out on today's computers
in ten years computers will have the capacity to solve the problem in mere days, if not hours, due to availability of mass parallel computing. this mass parallelism is mostly hidden from the user as they simply call up how much parallelism they need (eg 65k cores) and the virtualisation layer takes care of allocating the computations across the hardware. as a result the advice will be to simply add another layer of mathematical "jigsaw". so in the end it is no different than rsa advising people to double the encryption key length every few years.
We will have to wait until the full paper is published, but right now this looks awfully similar to CloakWare's patents such as US Patent No.7,809,135, also 7,506,177. Really, I don't see any difference.
RTFA is shallow on details, but it sounds very much like the "phantom" self-mutating MS-DOS viruses from the later 90. (The ones which forced anti-virus vendors to effectively implement a debugger/a interpreter for the code to detect the malicious code not by the look but by the actual work it does.)
Otherwise, the main problems with such intrusive obfuscations is that code is never 100% bug free and bugs sometimes trigger undefined/unspecified behaviors. It might work before obfuscation - but would break (in unexplainable, obfuscated fashion) afterwards. (Ditto after system updates.)
All hope abandon ye who enter here.
Back in the days OS's ran off of floppies (Amiga OS for example) there were programs that would compress an executable to save space. This made me think of that using encryption instead. Now in that case on 7Mhz machines. The speed of decompression in that case was close to the time saved by loading less data from the floppy drive. Now with Ghz of speed instead of Mhz and it needing to be run once, I am not convinced the speed loss would be that great. However with VM's and the like it's too easy to stop and look at the executable that way - nothing can stop that.
always... more effort in hiding code = less effort in making code looses to just making code.
...(or rather, skimming TFA) I am come to the conclusion that the authors have proven that
1) encrypted software is impossible to RE by inspection alone
2) PKI is indeed secure
3) theoretically an encrypted program should be able to run
There is no detail about how to implement this scheme, no detail about how to obfuscate during run time.
If the processor can decrypt it to execute it then someone else can decrypt it to view it. This is a stupid claim by someone who just wants attention. Who edits for slashdot? Why did this get through? Oh wait... It's slashdot
Normally obfuscation is bad in cryptography - it means that the system is theoretically broken, but that the way to break it is quite well hidden.
This refers to cryptographically secure obfuscation. This is an entirely new field, and hasn't been possible till now. This paper doesn't prove how to do it, but proves that it is possible for a certain subset of operations.
Basicly it boils down to the fact it is possible to make a computer program that, for a given set of inputs a) generates a set of outputs b) in such a way that it wouldn't be possible to modify the program to make it generate a particular output without doing an exhaustive search (ie. try every possible input).
It's similar in principle to a "designer" hash algorithm - ie. I can choose the output for a given input, but after compilation it will not be possible to find out the mapping without knowing the input.
This type of algorithm could enable things people hate (DRM), but also many other new fields of computing, in particular doing computation on untrusted processors.
It runs slower.
This kind of petty activity is only going to hurt the software industry as this will only put an end to hot-fixes and patches. Of course virus and malware writers (as well as shadowy government agencies) will love this concept.
With software being so easy to create this days, what is the point of obfuscation?
Haven't decades of development and improvements in software tools and frameworks actually achieved anything? If not, then obfuscation is essential to protect hard-to-develop software. Otherwise obfuscation is a total waste of time because sophisticated software is now dead easy to create.
Finally. People have been asking for years for software to become even harder to maintain and debug. For too long, we have tolerated too-high quality and reliability, too-low prices, and projects completing absurdly ahead of deadline. I'm glad to see that someone is finally doing something about it.
As copyright owner of this comment, I authorize everyone to defeat any technological measure which limits access to it.
All you have to do is outsource your project to India. The code you'll get back will be virtually indecipherable already.
The problem is always running the code. In fact, running the code in an emulator or simply stepping through PC will reveal the entire program state. Common calling methods and return methods must still be followed. The stack must be preserved. Data still must be de-obfuscated (at least the ones that matter) in order to be displayed as output or written to disk.
So in the end you're just adding a layer of stupid and slow, which must output good values. An fuzzer, code optimizer, or genetic algorithm could probably be used to re-optimize such systems based on output tables by repeatedly calling obfuscated functions, and a functional equivalent built for many functions. It would be somewhat slow, and it wouldn't work for some complex algorithms, but it's likely that someone will write it if necessary.
what's the difference between the normal packer with encryption that being used by Windows executable, for example Themida with this?
I can see the advantages but I can also see great disadvantages - mainly copyrights and being locked out of your own system.
Great! Another genius harvested from a dead culture screaming, "eureka!" OK, without wining, how is this going to:
fix my tractor?
food?
cure some, currently, uncurable illness?
put a new roof on my home?
clothing?
No comment? I figured as much.
Number of (behaviorally distinct) programs possible in X Kb of machine code. Number of intelligibly represented programs using a comparable amount of source code in a typical C like language. I suspect the former is much greater than the latter, and this can be exploited for the purpose of creating a program that works but is hard to reverse engineer.
Another thing to think about is various notions of approximation. If only a small number of inputs to a function are actually used, and this set of inputs can be mathematically determined, then the function can be replaced with something weird which gives the right output on desired inputs but various other stuff for other inputs. If an attacker cannot determine the actual inputs used, the function when analysed will look confusing.
John_Chalisque
Just skimmed the paper...
The scope of this is very limited. It applies primarily to functions that encapsulate a secret (not a general piece of code). From reading the paper, it appears that the goal is to attempt to frustrate folks that that want to disassemble software routines to look for small secrets buried in the code.
Example: Let's say you have a function that decrypts a message from a server with a key and you want to say embed that code in javascript. You don't, however, want someone figure out the key by just looking at the javascript, you want it to be a black box.
This technique allegedly can obfuscate the code so that it is just as hard to figure out how the secret is used as it is to infer the secret from sending in values and building a lookup table. Of course you could just cut-out the obfuscated code and use it as an oracle (because you can still run it), but it continues to effectively hide the secret as best as possible.
As I understand it, the basic techique is to create a function (from a class of functions with certain properties) that cuts the input domain into a large number sets and for each set finds a cheap multi-linear function that maps the correct output values for that small set of the input values but is don't care for the rest of the input values. The "trick" is that the class functions that cut the input domain are not fixed, but depend on the input so it is a hard problem to figure out which maps are used without just searching them all. Thus every obfucation instance of a function that encapsulates the same secret could look different and still compute the same result, or conversely, encapsulate different secrets, yet look very similar, but produce the correct result.
The downside of course is that small multi-linear functions aren't the best implementation for actual encryption functions. For example, something very simple like 128-bit AES, might be considered a function with 2^128 entry 128bit table. Unless I'm mistaken, it will be very hard to chop up a 2^128 bit table using their method (even the authors concede the fact that thier construction isn't efficient enough for practical problems).
However, they make a "bold" assertion, that they can apply their technique to stuff like crippleware by obfuscating the function that enables/disables various program features. I'll go out on a limb and say most folks that hack stuff like that don't bother to figure out ways to turn on/off features, but just go for attempting to bypass calls to such a function or disable the function altogether.
The other "bold" assertion they make is that it might be used by software vendors to deploy a patch without tipping off the black-hats about the nature of the vunerablity before all systems can be patched. This is wishful thinking as functions are generally not vunerable (since they by definiton have no-side effects), but procedures (the function-like modules that render side-effects) are the modules that tend to have the bugs. This technique of theirs really only applies to functions, not procedures so it's hard to see how this would help in many circumstances.