Good idea. Will do that. Thanks. Regards Felix
On 06.09.2010 17:10, Justin Edelson wrote: > How about adding a log message on component activation (if fast seeding > is off) which says something like "The generation of securely random > numbers on some operating systems can take up to several minutes > depending upon environment factors. If this is a problem for you, set > the system property java.security.egd to file:/dev/./urandom or enable > the "fast seeding" mode in the OSGi web console" > > Justin > > > On 9/6/10 9:41 AM, Felix Meschberger wrote: >> Thanks for the feedback. >> >> I committed the patch but did not enable the "fast seeding" by default >> because I am not really sure how strong it is for general use. >> >> But I have no strong feelings about it and if the general consensus is >> to enable it by default, we can change this. >> >> Regards >> Felix >> >> On 06.09.2010 13:10, Ian Boston wrote: >>> Yes LvGTM, I like the MD5 of tmp names to create non sequential entropy. >>> I am almost tempted to say this should be on by default. >>> Ian >>> >>> On 6 Sep 2010, at 10:57, Felix Meschberger wrote: >>> >>>> 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 >>>>>> >>>>>> >>> >>> > >