> On Mar 29, 2022, at 10:18 AM, Anders Rundgren <anders.rundgren....@gmail.com> 
> wrote:
> 
> On 2022-03-28 21:57, xueleifan(XueleiFan) wrote:
>> Thank you for the information and discussion, Anders, Bernd and Mike.  I had 
>> a better understand of JOSE/COSE and the problems.
> 
> Thanx Xuelei!
> May I ask a highly related question?
> 
> Assume there is a new cool XYZ algorithm family supported by a third party 
> JCE provider.
> What would be needed in order to make XYZ public keys in X.509 certificates 
> automatically decode into an associated XYXPublicKey (also supplied by the 
> third party)?
> 
It depends.  For the JDK X509 certificate implementation, KeyFactory are used  
to generated the public key from X509 encoded key specification (public key DER 
value in the cert).

    X509EncodedKeySpec x509KeySpec
        = new X509EncodedKeySpec(x509EncodedKeyStream.toByteArray());
    KeyFactory keyFac = KeyFactory.getInstance(algid.getName());
    keyFac.generatePublic(x509KeySpec);

The “algid” is also recorded in the X.509 certificate.  So, a third party 
provider may be able to get it supported by support XYZ algorithm in its 
KeyFactory implementation.

    KeyFactory keyFac = KeyFactory.getInstance(“XYZ”/“XYZ-OID”);

But it really depends on the X.509 provider implementation behaviors.  I know 
there are cases that X.509 provider was updated, or forked, here and there in 
order to support new algorithms, unfortunately.

Best,
Xuelei


> I tried to follow the JDK X.509 decoder source but I failed :(
> 
> Regards,
> Anders
> 
>> For the crypto implementation, for example Ed25519 in the SunEC provider, I 
>> would prefer to keep the footprint in OpenJDK as minimal as possible.  For 
>> example, the Ed25519 key factory could accept XECPublicKeySpec and 
>> XECPrivateKeySpec only, and support no more encoding format (currently, 
>> X509EncodedKeySpec and PKCS8EncodedKeySpec are also supported by the SunEC 
>> provider).  Except COSE/JOSE/PEM, there may be a few other known encoding 
>> formats, and more in the future.  It would be challenging to track many 
>> encoding formats in specific protocols and their development in OpenJDK.  If 
>> a provider does not support protocol specific format, the application rely 
>> on it could fail, which is not good for application developers.  And thus 
>> the purpose to support more encoding format in one provider could be 
>> frangible.
>> There could be third party's encoding format specific provider, for example 
>> a KeyFactory provider accepting JOSE/COSE format and converting between 
>> XECPublicKeySpec/XECPrivateKeySpec and protocol specific formats.  The 
>> factory might belong more to the protocol specific library, rather than the 
>> OpenJDK reference implementation. Unfortunately, the current 
>> KeyFactory.getInstance(“ Ed25519”) design cannot identify the encoding 
>> formats, and thus may just return a provider that does not support the 
>> expected encoding format.  It might be a workaround to use different 
>> algorithm name, like “JOSE/Ed25519”.
>> Alternatively, the JOSE/COSE could transfer the encoded stream to 
>> XECPublicKeySpec and XECPrivateKeySpec, without using KeyFactory.  It may be 
>> transparent to application developers if the transferring is wrapped in the 
>> protocol specific lib.
>> Just my $.02.
>> Xuelei
>>> On Mar 28, 2022, at 2:30 AM, Bernd Eckenfels <e...@zusammenkunft.net 
>>> <mailto:e...@zusammenkunft.net>> wrote:
>>> 
>>> Hello,
>>> 
>>> I think both might be too protocol specific to include it in JCE, but a 
>>> library for JWK would fit into JWT support in Jakarta EE.
>>> 
>>>  For COSE the key descriptors are very simple (no certificates), not sure 
>>> if anything besides a cose library is really needed. (That library would 
>>> benefit from a curve registry, but since cose uses its own code values for 
>>> the curve access to the CurveDB would not help I think).
>>> 
>>> CBOR is not QR specific, it’s specific for the Covid Vaccination 
>>> Certificate framework (due to the QR code size restriction it can’t use 
>>> JSON).
>>> 
>>> Gruss
>>> Bernd
>>> -- 
>>> http://bernd.eckenfels.net <http://bernd.eckenfels.net>
>>> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>>> *Von:* Anthony Scarpino <anthony.scarp...@oracle.com 
>>> <mailto:anthony.scarp...@oracle.com>>
>>> *Gesendet:* Monday, March 28, 2022 6:31:29 AM
>>> *An:* Anders Rundgren <anders.rundgren....@gmail.com 
>>> <mailto:anders.rundgren....@gmail.com>>
>>> *Cc:* Bernd Eckenfels <e...@zusammenkunft.net 
>>> <mailto:e...@zusammenkunft.net>>; security-dev@openjdk.java.net 
>>> <mailto:security-dev@openjdk.java.net> <security-dev@openjdk.java.net 
>>> <mailto:security-dev@openjdk.java.net>>
>>> *Betreff:* Re: [Internet]Re: "Pluggable" key serialization in JCE/JCA
>>> Thanks for all the info. We don’t have experience with JOSE or COSE, I 
>>> think we need to digest some of this data before making a future step
>>> 
>>> Not knowing this technology until you brought it up a few days ago, a few 
>>> questions i have are how is this used and how common?  Would I see this 
>>> used for more secure sites like banks or shopping through the browser or it 
>>> more common sites. Is it only browser-based or are their other used cases?  
>>> Bernd mentioned QR codes, is COSE used inside the QR code or the 
>>> authentication for the user to get to their QR code?
>>> 
>>> Thanks
>>> 
>>> Tony
>>> 
>>> > On Mar 26, 2022, at 11:48 PM, Anders Rundgren 
>>> > <anders.rundgren....@gmail.com <mailto:anders.rundgren....@gmail.com>> 
>>> > wrote:
>>> > > On 2022-03-26 23:14, Bernd Eckenfels wrote:
>>> >> Just for completeness, the standard for key transport in JOSE is JWK 
>>> >> (RFC7517).
>>> >> In COSE it is a COSE_Key(Set) as defined in RFC8152 sect13.
>>> >> BTW the most widely used CBOR/COSE application are probably the QR codes 
>>> >> around Covid and Vaccination certificates of the EU.
>>> > > Thanx Bernd and Michael for the additional clarifications!
>>> > > Now to the thing that spurred this discussion: 
>>> > > https://datatracker.ietf.org/doc/html/rfc8037 
>>> > > <https://datatracker.ietf.org/doc/html/rfc8037>
>>> > >   This document defines how to use the Diffie-Hellman algorithms
>>> >   "X25519" and "X448" as well as the signature algorithms "Ed25519" and
>>> >   "Ed448" from the IRTF CFRG elliptic curves work in JSON Object
>>> >   Signing and Encryption (JOSE).
>>> > > When RFC 8037 was created the assumption was that the "OKP" key 
>>> > > container {sh|c}ould be used for other crypto systems having the same 
>>> > > parameter set.  This is now an active proposal:
>>> > https://www.ietf.org/archive/id/draft-looker-cose-bls-key-representations-00.html
>>> >  
>>> > <https://www.ietf.org/archive/id/draft-looker-cose-bls-key-representations-00.html>
>>> > > Obviously everything works just fine if you look at the container in 
>>> > > isolation. However, it means that "OKP" encoder/decoder code must be 
>>> > > updated for every new reuse ("overloading").  To be meaningful these 
>>> > > new algorithms would also have to coerced into the existing XEC or 
>>> > > EdDSA interfaces.
>>> > > IMO, this would be VERY UNFORTUNATE since it is incompatible with the 
>>> > > provider concept as well as with object oriented crypto APIs.  I'm 
>>> > > therefore suggesting that key containers for specific crypto systems 
>>> > > should have unique names.  In this particular case "BLS" seems logical. 
>>> > >  In Java it could eventually be mapped to BLSPublicKey and 
>>> > > BLSPrivateKey.
>>> > > WDYT?
>>> > > There is no need for a JEP at this stage, only some kind of indication 
>>> > > of what the JDK crypto team see as the best way forward from your 
>>> > > horizon.  The same discussion has emerged for Post Quantum Crypto 
>>> > > algorithms.
>>> > > Thanx,
>>> > Anders
> 

Reply via email to