[Mono-bugs] [Bug 70171][Wis] Changed - Montgomery implementation inefficient and insecure

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Mon, 6 Dec 2004 09:24:08 -0500 (EST)

Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by sebastien@ximian.com.


--- shadow/70171	2004-12-03 12:21:19.000000000 -0500
+++ shadow/70171.tmp.25747	2004-12-06 09:24:08.000000000 -0500
@@ -128,6 +128,57 @@
 factor). Plotting a graph with different key size would be useful.
 Let's start small, say 128, 130, 132, ... up to one hour computation,
 as I don't think we'll get very high in bits count very soon ;-).
 There are also other requirements for a timing attack (e.g. having
 several measurements) that aren't required when factoring.
+------- Additional Comments From sebastien@ximian.com  2004-12-06 09:24 -------
+I read (or re-read some) thru references [1] to [4]. I've worked years
+with smartcards so I well aware of the problem - but never much
+considered it a major problem on personal computers (at least wrt
+Montgomery) in large parts due to the fact that much easier attacks
+exists on PC and because the attack scenarios can be quite different. 
+The references didn't help much to convince me otherwise, e.g.
+RSAManaged generally use the Chinese Remainder Theorem (CRT) which
+papers (talking about CRT) seems to think it safe from timing. But you
+said you had results and I'm interested in the subject so I continued
+And found out the document, "Remote Timing Attacks are Practical" [5],
+which is both more recent (2003) and it's attacks are far more
+realistic (i.e. real-life) and related to Mono than the previous
+documents. Indeed very interesting...
+[5] Remote Timing Attacks are Practical
+So I'll assume that even a noisy target, like a PC, on a noisy
+environment, like a network, is not safe from this attack with
+*enough* samples.
+However modifying BigInteger (as suggested) to avoid timing attacks
+doesn't seems a good idea to me. The two main reasons are:
+- it's not a math problem it's a security problem. E.g. someone
+re-using BigInteger for other purpose wouldn't require (nor want) the
+- making the algorithms (not just modpow or montgomery as other timing
+issues could exists) executing constant-time is a *very hard* problem.
+It's doable on a small CPU like "some" smartcards but very difficult
+on PC. Paper [5] talks about how the different architectures and
+compiler optimizations affects the timing results. Running in
+constant-time on multiple JITs (e.g. Mono and MS), with different
+optimizations and different architecture would be a BIG problem (and a
+testing nightmare).
+So right now I'm inclined to fix problem #1 (fixing the problem) using
+the key blinding technique, as suggested in [5], which means that
+RSAManaged (and DHManaged) will need to be fixed (and not BigInteger).
+As for problem #2 (finding out how it affects Mono) I still hope to
+get more informations about your tests (i.e. how they were conducted,
+number of samples required, retrieval time versus key length, ...) and
+how key blinding would affect the results.