Update #4: JEP 123: SecureRandom Draft and Implementation. (original) (raw)
Xuelei Fan xuelei.fan at oracle.com
Thu Jan 17 15:44:33 UTC 2013
- Previous message (by thread): Update #4: JEP 123: SecureRandom Draft and Implementation.
- Next message (by thread): hg: jdk8/tl/langtools: 8004834: Add doclint support into javadoc
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi Brad,
Please note the priorities for each comment. As the M6 is coming, you can only take P1 comments.
P1: need to update P2: suggested update, you can take it after M6. P3: minor comments, it's OK to leave it unchanged. P4: personal preference for your consideration, or my question.
java/security/SecureRandom.java
1-1. the performance of Pattern.compile [P2] Pattern.compile() is expensive. I would suggest to use private static lazy-initialized class attribute the patterns.
public class SecureRandom extends java.util.Random { private static final String regex = "..."; private static final Pattern pattern;
public static SecureRandom getStrongSecureRandom() {
...
if (pattern == null) {
pattern = Pattern.compile(regex);
}
...
}
}
1-2. spaces are allowed between algorithm and provider [P4] According to the regex ("\s*(\S+)\s\:\s(\S+)\s*"), spaces are allowed around the tokens. For example, " NativePRNGBlocking : SUN " is valid. I would like to use a stricter syntax at the beginning in case of any special requirement comes in the future.
1-3. may only need one regex for both "algorithm" and "algorithm:provider" [P3] I think one regex is OK for both: "([\S&&[^:]]+)(\:([\S&&[^:]]+))?".
NativePRNGBlocking:Sun group 1: NativePRNGBlocking group 2: :Sun group 3: Sun
NativePRNGBlocking group 1: NativePRNGBlocking group 2: null group 3: null
If group 2 is non-null, it is of the "algorithm:provider" style.
1-4. a typo at line 614 [P1]:
- 614 // Pattern for "algorithm.provider"
- 614 // Pattern for "algorithm:provider"
java.security-windows
2-1. Is it possible to enable "NativePRNGBlocking:SUN" in Windows? [P2]
- securerandom.strongAlgorithms=Windows-PRNG:SunMSCAPI
I was wondering to enable "NativePRNGBlocking:SUN" here before I know that the "NativePRNGBlocking:SUN" is not available on Windows:
- securerandom.strongAlgorithms=Windows-PRNG:SunMSCAPI, \
NativePRNGBlocking:SUN
The availability of "securerandom.strongAlgorithms" property depends on the enabled security providers, and the platform. If "SunMSCAPI" provider is not enabled, the "Windows-PRNG:SunMSCAPI" will not work. I think "NativePRNGBlocking:SUN" is not available on Windows system. It is not as obviously as that the "Windows-PRNG:SunMSCAPI" is not available on Unix/Linux/Mac OS systems. We need to documentation this behaviors clear somewhere else.
P11SecureRandom.java
3-1: to support strong algorithm in PKCS11 [P4] Is SHA1PRNG:SunPKCS11 a strong algorithm? I think it would be nice to add it as a backup in the strong algorithm property.
SeedGenerator.java
4-1: downgrade normative reference to java security property file [P3] [line 57-60] As you have already there, I would suggest to use the new style of security property. See http://hg.openjdk.java.net/jdk8/tl/jdk/rev/346c0af4af41 and the description from SeanM, http://mail.openjdk.java.net/pipermail/security-dev/2012-December/006144.html.
line 57-60:
- accomplished by setting the value of the "securerandom.source"
- Security property (in the Java security properties file) to a URL
- specifying the location of the entropy gathering device, or by setting
- the "java.security.egd" System property.
- accomplished by setting the value of the
- {@code securerandom.source} security property to a URL
- specifying the location of the entropy gathering device, or by setting
- the {@code java.security.egd} System property.
SunEntries.java
5-1: what's the usage of "NativePRNGNonBlocking"? [P2]
if (NativePRNG.NonBlocking.isAvailable()) {
map.put("SecureRandom.NativePRNGNonBlocking",
"sun.security.provider.NativePRNG$NonBlocking");
}
I did not find the description of this algorithm in the specification (CCC) or other export documentation. Do you want to add it to Oracle provider names doc? Otherwise, I would suggest to comment out this algorithm. The above would set a external SecureRandom algorithm, I think.
sun/security/provider/NativePRNG.java
6-1: line 36-42, wordsmithing. [P3]
"It obtains seed and random numbers by reading system files such as the special device files /dev/random and /dev/urandom. This implementation respects the {@code securerandom.source} security property and {@code java.security.egd} system property for obtaining seed material. If the file specified by the properties does not exist, /dev/random is the default seed source, and /dev/urandom is the default source of random numbers."
6-2: Do you want to put something here? [P4]
321 // XXX change the urandom/random to seed/next
src/windows/classes/sun/security/provider/NativeSeedGenerator.java
7-1: Not about this fix, but the code looks strange to me. [P4] The constructor calls: 44 super();
The SeedGenerator static block will be called and SeedGenerator.instance will be initialized.
According to the code in SeedGenerator.java: 145 static public void generateSeed(byte[] result) { 146 instance.getSeedBytes(result); 147 }
The getSeedBytes() method of the initialized instance will be used. However, in Windows platform, I think the NativeSeedGenerator.getSeedBytes() should be called, I think.
I think the NativeSeedGenerator class should override the generateSeed() method. About the super() call in NativeSeedGenerator, I think the initialization of instance (line 92-142, SeedGenerator.java) may be not necessary. The initialized instance in SeedGenerator is useless in Windows from my understand. Am I missing something?
Otherwise, looks fine to me.
Xuelei
On 1/11/2013 8:24 AM, Brad Wetmore wrote:
Minor tweak. It occurred to me that people might use "." as separators (for example using some OIDs scheme), so I changed the syntax slightly of the system property to use ":" instead.
For example: # This is a comma-separated list of algorithm and/or algorithm:provider # entries. # securerandom.strongAlgorithms=NativePRNGBlocking:SUN, SP800-90A/AES/CTR:IBMJDK Latest is now webrev.04. http://cr.openjdk.java.net/~wetmore/6425477/ Brad
- Previous message (by thread): Update #4: JEP 123: SecureRandom Draft and Implementation.
- Next message (by thread): hg: jdk8/tl/langtools: 8004834: Add doclint support into javadoc
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]