Sorry, busy on something else. > On May 11, 2018, at 11:47 PM, Michael StJohns <mstjo...@comcast.net> wrote: > > On 5/9/2018 6:06 AM, Weijun Wang wrote: >> Hi Mike >> >> Your comments make sense. However, >> >> 1. I don't think it's easy in JDK to break a PBE algorithm into PBKDF + >> Cipher. For example, I cannot create a SecretKey from >> SecretKeyFactory.getInstance("PBEWithSHA1AndDESede") and use it to init a >> Cipher.getInstance("DESede"). I still have to use >> Cipher.getInstance("PBEWithSHA1AndDESede"). >> > > No - you'd instantiate a KDF using PBE, derive the secret key from the > password, and use it with DESede. Right now, you're hiding a KDF under the > cover of turning a secret key spec into a secret key.
Last time I tried, SecretKeyFactory.getInstance("PBEWithSHA1AndDESede") can only generate a PBEKey (which has not been derived) and Cipher.getInstance("DESede") does not accept it. I'll take another look. I know it's a good practice using the same PBKDF for certs and keys. Must we enforce it and not allow people to use different ones? > > And right now, all of this is actually hidden under the KeyStore covers. > If you're going to use compound algorithm names, what I'd rather do is > > KeyStore ks = KeyStore.getInstance("PKCS12/PBKDF2/HMAC-SHA256/AES-KW"); > > Or <keystoretype>/<kdfalg>/<kdfprf and mac alg>/<dataencryption alg> Big change, not this time. > > And have the generic KeyStore.getInstance("PKCS12") return what you specify > in the preferences, or a general parser for things you're reading in. > > >> .... > > > But, after thinking about it a bit more, the preference list isn't useful > without additional providers - and at that point you're probably generating > stuff by specifying algorithms and such so I agree with no preference list. > Could you please, please, please not use weak algorithms as the default here > though? PBEWithHmacSHA256AndAES_128? I'll see how other tools support it. Thanks Max > >> >> Thanks >> Max >> >> >>> On May 5, 2018, at 10:50 PM, Michael StJohns <mstjo...@comcast.net> >>> wrote: >>> >>> On 5/5/2018 3:38 AM, Weijun Wang wrote: >>> >>>> Please take a review of >>>> >>>> >>>> >>>> https://bugs.openjdk.java.net/browse/JDK-8202590 >>>> >>>> >>>> >>>> This enhancement has two major purposes: >>>> >>>> 1. Provide a way to change encryption and Mac algorithms used in PKCS 12. >>>> >>>> 2. The ability to create a password-less PKCS 12 keystore containing >>>> unencrypted certificates and no Mac. >>>> >>>> Especially, the long paragraph in the spec on behavior of an existing >>>> keystore makes sure that once a password-less keystore is generated (with >>>> -Dkeystore.pkcs12.certProtectionAlgorithm=NONE and >>>> -Dkeystore.pkcs12.macAlgorithm=NONE), one can add new certificates to it >>>> without any special setting and keep it password-less. >>>> >>>> Thanks >>>> Max >>>> >>>> >>>> >>> I think you want to break this into two parts - the first part specifies >>> the algorithm used to convert a password into key material. The second >>> defines the algorithms used for protection for the various parts. >>> # password to key material scheme >>> .pbkdf=PBKDF2withHMAC-SHA256 (Form is base function with the PRF) >>> # PKCS12 macData >>> .macAlgorithm=HMAC-SHA256 # this is the algorithm for the PKCS12 macData >>> component, if NONE, this component is not present >>> # protection scheme for PKCS8ShroudedKeyBagn if NONE, then a PKCS8KeyBag is >>> produced instead. >>> .keyProtectionAlgorithm=AES-KWA >>> #protection scheme for certificates - produces an encryptedData object >>> encrypted under the scheme, or a certBag object if "NONE" is specified >>> .certProtectionAlgorithm=NONE >>> >>> >>> Second, you probably want to do this as multi-choice entries in the >>> java.security file ala providers: >>> >>> .pbkdf.0=PBKDF2withSHA256 >>> .pbkdf.9=PBKDF1withSHA1 # the current default aka pbe >>> >>> So that you can specify a somewhat secure default, but still allow for >>> providers that don't implement the stronger versions. >>> >>> This requires a bit more work in figuring out what the embedded OIDs should >>> be, and there is always the chance of mismatch, but it turns out there is >>> the chance of mismatch even in the proposed version if you have protection >>> algorithms coming from two different PBE schemes. >>> >>> Specifying it this way is closer to the PKCS5 2.0 model rather than PKCS12 >>> and matches the recommendations in the IETF's version of PKCS12. You also >>> *really* don't want to use two different KDFs with the same password. >>> >>> Mike >>> >>> >>> >>> >>> >