Hi, I have implemented a different method to generate a seed value for the SecureRandom number generator and attached to SLING-1729 [1]. This method is not used by default and must be explicitly enabled using configuration.
Does this make sense ? Regards Felix [1] https://issues.apache.org/jira/secure/attachment/12453934/SLING-1729.patch On 06.09.2010 08:51, Felix Meschberger wrote: > Hi, > > I have run both your tests with no differing behaviour. I got > non-blocking results when setting the java.security.egd system property > as follows: > > -Djava.security.egd=file:/dev/./urandom > > Note "/./" notation, which seems to be required to not have Java use > /dev/urandom as an alias for /dev/random.... > > So I wonder whether we could do something like this in the form handler: > > if (exists /dev/random) { // check for Linux > set system property java.security.egd=file:/dev/./urandom > } > explicitly seed SecureRandom > reset java.security.egd system property > > Its not nice but would solve the problem .... > > Regards > Felix > > > On 05.09.2010 11:16, Ian Boston wrote: >> java.util.Random does not have enough entropy to be used for security >> purposes. IIRC the sequence can be repeated as the seed is based on the >> epoch, and so is predictable. >> You could use it, but the keys would be predictable and since these keys are >> used to generate the HMACs for all user logins, then it would be relatively >> easy to zero in on the key by watching generated HMACs and looking for the >> points at which they change, and expire. >> If there was 1 key for all time, even SecureRandom would not be good enough, >> which is why the keys rotate every 5 min and expire after 30min >> (configurable). >> >> So, in this instance we have to use SecureRandom. >> ---------------------------------------------------------------------------- >> >> The problem is down to the configuration for SecureRandom on the OS >> platform. And the way we get an instance. I think we do >> getInstance(SHA1PRNG), but that might be a mistake as it will force the JRE >> to use that one, (see notes on [1]) >> >> IIRC on Solaris and Linux un.security.provider.NativePRNG is used which >> binds to /dev/urandom or equiv. On WIndows SHA1PRNG is used. also IIRC >> SHA1PRNG will use the OS's random generator to provide the seed, so whatever >> PRNG you use, it will always need a seed and the seed is OS depenant >> >> You can set the source using securerandom.source in the JRE or >> -Djava.security.egd=file:/dev/urandom on the command line. >> >> However, there are some JRE bugs in various versions, see [1]. >> >> Can you try running the following 2 tests on you OS to see if there is any >> difference. >> >> import java.security.SecureRandom; >> >> public class Test { >> public static void main(String args[]) throws Exception { >> SecureRandom rnd = SecureRandom.getInstance("SHA1PRNG"); >> for (int i=0; i < 1000; i++) { >> rnd.generateSeed(256); >> System.out.println("Got " + i); >> } >> } >> } >> >> and >> >> import java.security.SecureRandom; >> >> public class Test2 { >> public static void main(String args[]) throws Exception { >> SecureRandom rnd = SecureRandom.getInstance(); >> for (int i=0; i < 1000; i++) { >> rnd.generateSeed(256); >> System.out.println("Got " + i); >> } >> } >> } >> >> HTH >> Ian >> >> 1 >> http://bugs.sun.com/view_bug.do;jsessionid=e1244ca9c599cffffffffd8eb336175a921b?bug_id=6202721 >> >> >> On 3 Sep 2010, at 22:25, Felix Meschberger wrote: >> >>> Hi all, >>> >>> I noticed slow (extremely slow, actually: something like 30seconds) >>> startup of the Form Authentication Handler [1]. Tracking this down I >>> found, that the SecureRandom implementation uses /dev/random which may >>> block indefinitely to gather enough entropy to ensure secure random byte >>> stream. >>> >>> Now, a local quick hack solution is to create a symbolic link from >>> /dev/urandom to /dev/random. But I don't think this is the right >>> solution in the long run -- and I doubt this is a viable solution on a >>> server system. >>> >>> I wonder, whether we really new SecureRandom here or whether >>> java.util.Random would just be random enough ? >>> >>> Do others have experience with this ? >>> >>> (ah, Sun has a whole range of bugs for this /dev/random issue) >>> >>> Regards >>> Felix >>> >>> >>> [1] https://issues.apache.org/jira/browse/SLING-1729 >> >>