Not long ago there was a discussion on blinding which must be read if
this is to make perfect sense, but it seems to me that it makes
sufficient sense without it to be worth posting without rewriting to
allow for the time lag - the context is that I disappeared in the midst
of the discussion to go on holiday, and wrote this while I was away. I
have only just retrieved it from my laptop. :-)

Firstly, as I mentioned earlier, if you have a blinding function b for
your oracle, f' [Editor's note: f is the easy function that f' can undo
- most people think f' is hard, of course], then the unblinding function
(u) is clearly going to be f'.b'.f. Now, since f' is known to be hard, u
is only going to be any fun if it somehow renders itself non-hard. The
obvious way for this to happen is for b' to commute with either f or f',
in which case u becomes simply b' (see, it wasn't so silly to think the
unblinding function was the inverse of the blinding function[1] :-).

Conversely, if u is, in fact, b', then b' must commute with f, since
b'=f'.b'.f => f.b'=b'.f. I'm not sure if this is useful, but it is true.

Secondly, I've been thinking about the original question (blinding RSA
cracking) - the only way I can see this working is if we have an oracle
that is prepared to factor any number (that is, it needs to work with
more than two prime factors) -
i.e. f(p_1,...,p_n)=p_1.p_2...p_n and f'(p_1.p_2...p_n)=(p_1,...,p_n),
and we have an x we want to crack blindly, we choose some extra factors
b_1,...,b_k and multiply x by them. We submit the result to the oracle.
When we get the answer, we discard the extra factors, and
are left with the factors of x.

In order for this to be any use, we have to use a sufficiently large
number of factors that it is impractical for the oracle to determine
which pair of factors (assuming that x actually only has two, as is
usual) are the interesting ones. Since the oracle can factor public keys
at will, the only way to achieve this is for the b_i to include a
number of factors of other keys. But we don't know the factors of other
keys[2], so we have to choose enough numbers that this happens at
random.

This means that k has to be exceedingly large, and the blinded number,
correspondingly, will be k.log_2(x)/2 bits long, roughly (since the b_i
must be around log_2(x)/2 bits long each to be convincing). IMO this
makes RSA blinding possible but impractical, unless the oracle
has access to alien technology that allows it to factor arbitrarily
large numbers at little extra cost, but does not otherwise endow it with
unusual computational powers.

Note that the b_i must also be prime, so the cost of producing the
blinded version of x is not insignificant.

Cheers,

Ben.

[1] But only in the case where f' is hard, of course, which is why my
earlier example was a bad one (square and square root, for those who,
like me, are memory-impaired).

[2] We could, of course, use the oracle to derive them, but the
dangers of that are obvious.

--
http://www.apache-ssl.org/ben.html

Coming to ApacheCon Europe 2000? http://apachecon.com/

Reply via email to