[Cryptography] Dual_EC_DRBG backdoor: a proof of concept

ianG iang at iang.org
Sat Jan 4 05:49:14 EST 2014


On 4/01/14 01:50 AM, Krisztián Pintér wrote:
>
>
>
> Theodore Ts'o (at Friday, January 3, 2014, 7:01:16 PM):
>> Sure, but a prng is not the only tool in the toolbox.  You can also
>> try to grab entropy from hardware, and from OS-level events.
>
> i call moving goalposts on this one. it can be the case that we don't
> need prngs. we can grab enough unpredictable information from hw
> sources that we can just extract all the randomness we need.


Right, we need collectors of entropy, we need a mixer, and we need an 
output stage, variously called a whitener, expander, PRNG, DRBG.  They 
all need to work together.



> but not needing a solution does not make the solution incorrect. there
> might be a case when we need it.
>
> basically we have two schools on this, and i don't know where i
> belong. one school says that you need true random source. no matter
> how whitened or processed, it won't generate more entropy. the other
> school says you need 128 bits of unpredictability, and then you can
> extract megabytes of randomness with no risk at all. we understand
> that there is only 128 bit uncertainty, but it is enough.


It is the latter, in our space of cryptography (says I).  Entropy was a 
1990s viewpoint, I think.

Entropy is unpredictable by anyone, so it's good for the task, 
theoretically.  But we don't care about us predicting it.  We care about 
the attacker predicting it.

We can draw a circle, and declare everyone inside is us, and everyone 
outside is a potential attacker.  Then we can draw a small amount of 
entropy from inside the circle, and put it into our expansion function. 
  We know by the properties of hashes and ciphers that we can make an 
expansion function that is unpredictable, if the seed is unpredictable: 
  it's the same property as breaking the hash or cipher.  Hence the proofs.

Now, we could use entropy, because it achieves the goal as well.  It 
dominates, which is to say, it is more better in every way, in terms of 
its quality.  But, entropy is very hard to collect, it's expensive.  And 
only comes in small doses.  Not enough to really fill the inputs of say 
big RSA keys, by itself, without a lot of work.  Which we really can't 
rely on, attempts just haven't worked.



Hence we end up with the design:


    Entropy collector  ----\
                            \ _____          _________
                             /     \        /         \
    Entropy collector  ---->( mixer )----->( expansion )-----> RNs
                             \_____/        \_________/
                            /
    Entropy collector  ----/


Which I sometimes call a trident design, someone else called it a 
cascade design, and yet others think of it as Yarrow or Fortuna.  But 
I'm not sure enough about this all to know whether they've stamped the 
name, or what.  They've obviously pioneered the way...


> you can subscribe to the former school. but then, you don't want
> fortuna either, nor any other prng. or you subscribe to the latter
> school, but in this case, you have to admit that the quality of the
> prng matters. and you also have to agree that bbs delivers some
> security properties that for example aes does not.


Well, at the end of the day, it is an engineering problem.  If you 
subscribe to the Entropy school, you do not answer the engineer's 
question of "what happens when it breaks?"

The above design answers it.  We have to care *a fair bit* about the 
mixer and the expansion function, but each component is limited in its 
API and demands on quality.  They are simple black boxes.

Then, say BBS.  Talking about it is fine, but it only makes sense when 
placed in a context.  If it is in the above context, as an expansion, 
then fine, it might work.  (Or as a collector, even.)

But so might AES.  And engineering has it that if we've cared some about 
the modules, once we get to that stage of building the structure, we can 
substitute in different modules and still get the same good result.

As engineers in software, the acid test is whether we can throw it at an 
intern and say "build it this way."  (Which I just did.  It worked. 
RNGs are now a solved engineering problem, as far as I can see.  Until 
someone turns it upside down in a paper...)



iang


More information about the cryptography mailing list