I just looked at a note on my desk, which asked if we currently cache
the bytes generated by the pseudo-random functions -- putting them
into some kind of pool so that we can save the number of SHA-1 calls.
We don't, and the reason is that the PRFs are used as follows when we
do pseudo-random secret sharing:
r = PRF(program_counter)
Here we might produce 20 random bytes and only use, say, 65 bit of
them, but future randomness will be generated with different program
counters, and so we cannot easily cache it.
It is of course not impossible to do something :-) We could do the
same as what we do when we generate multiplication triples using the
hyper-invertible matrices. There we generate T triples and assign the
triples to known program counters -- we could in principle start the
computation by generating in advance all the randomness we need and
distribute it nicely over the tree of program counters.
The change would require a fair amount of code, and it's anybody's
guess if the added complexity will pay off.
VIFF (Virtual Ideal Functionality Framework) brings easy and efficient
SMPC (Secure Multiparty Computation) to Python. See: http://viff.dk/.
viff-devel mailing list (http://viff.dk/)