Key Missing Feature for IoT

Daniel Jeliński djelinski1 at gmail.com
Wed Mar 20 09:19:07 UTC 2024


> any recommendation or example of this kind of work?

Check out these JEPs, the description section:
https://openjdk.org/jeps/329
https://openjdk.org/jeps/8245551
https://openjdk.org/jeps/8281710

In the PSK case the main question is, how is the user going to
configure the keys?
Cheers,
Daniel

wt., 19 mar 2024 o 16:36 Simon Bernard <contact at simonbernard.eu> napisał(a):
>
> > Well I think AES-CCM is a decent candidate to start.
> OK, I will probably take time to see if this is something within my reach.
> (I have limited time by week to give on that and not an expert on this
> topic, so this will be mid/long term task)
>
> > Regarding PSK API, if you could put together a more complete proposal
> > of the API changes, together with an example of how this would look
> > from the API consumer side, this would be a good starting point for a
> > discussion
> I'm not sure a mail is a right way to do that, any recommendation or
> example of this kind of work ?
> Eventually I can write some code/documentation in a personal github
> repository.
>
> Regards,
> Simon
>
> Le 18/03/2024 à 09:59, Daniel Jeliński a écrit :
> > Well I think AES-CCM is a decent candidate to start. If you choose to
> > work on this, you'll need to add support for AES/CCM to the JCE first.
> > Most of the code is already there: AES is implemented, CTR and CBC are
> > implemented, AEAD mode is implemented, so it's probably just a matter
> > of wiring these things together, and adding some known-answer tests,
> > which you can find here:
> > https://csrc.nist.gov/Projects/Cryptographic-Algorithm-Validation-Program/CAVP-TESTING-BLOCK-CIPHER-MODES
> >
> > Yes, you'll need the Oracle Contributor Agreement before you can
> > contribute code to the JDK. Once you have it, you can open a PR. Use
> > 8176395 in the PR title. The guide contains the instructions for
> > running selected tests only.
> >
> > Regarding PSK API, if you could put together a more complete proposal
> > of the API changes, together with an example of how this would look
> > from the API consumer side, this would be a good starting point for a
> > discussion. I know this is a lot to ask, but this is necessary to make
> > progres on the PSK.
> >
> > Cheers,
> > Daniel
> >
> > pt., 15 mar 2024 o 16:43 Simon Bernard <contact at simonbernard.eu> napisał(a):
> >> Thx for all this clarification.
> >>
> >>   For example, how will the user configure the list of available PSKs?
> >>
> >> Regarding PSK API from other libraries :
> >>
> >> AdvancedPskStore from Scandium 3.x which is not so straight forward to use mainly because it supports async request : https://github.com/eclipse-californium/californium/blob/3.11.0/scandium-core/src/main/java/org/eclipse/californium/scandium/dtls/pskstore/AdvancedPskStore.java
> >>
> >> PskStore from Scandium 2.x is more simple to understand but no async way to request PSK : https://github.com/eclipse-californium/californium/blob/2.8.0/scandium-core/src/main/java/org/eclipse/californium/scandium/dtls/pskstore/PskStore.java
> >>
> >> PSKKeyManager from Concrypt is a more JSSE oriented API (no async too). I also understand that this API is available when coding for Android but I think there is a drawback a client is not able to select Identity based on InetSocketAddress of destination.
> >>   - https://android.googlesource.com/platform/frameworks/base/+/ba12af5/core/java/android/net/PskKeyManager.java
> >>   - https://github.com/google/conscrypt/blob/2.5.2/common/src/main/java/org/conscrypt/PSKKeyManager.java
> >> Note that this class is deprecated in concrypt : I tried to get more about this : https://github.com/google/conscrypt/issues/1197
> >>
> >> TlsPSKIdentityManager is very simple and very limited API from Bouncy Castle : https://github.com/bcgit/bc-java/blob/1.72/tls/src/main/java/org/bouncycastle/tls/TlsPSKIdentityManager.java
> >>
> >> Note that most of them would probably have been thought with (D)TLS 1.2 in mind. I don't know if this is adapted for (D)TLS 1.3.
> >>
> >> Well, for AES-CCM a pull request would have been nice :)
> >>
> >> I'm not so familiar with JSSE API/SunJSSE provider design for now. Do you think AES-CCM is a good candidate to start ?
> >> I guess if I want to try to help on this, I need to have a look at : https://openjdk.org/guide/ (and also Contribution agreement)
> >> Oh and working on JSSE when it's time to build/running tests is there a more simple way than building/testing whole JDK ?
> >>
> >> Simon
> >>
> >> Le 15/03/2024 à 13:16, Daniel Jeliński a écrit :
> >>
> >> Hi Simon,
> >> Yes, the cipher suites in CipherSuite class are available in both TLS
> >> and DTLS by default. TLS 1.3 uses different cipher suites from TLS
> >> 1.2, so both protocols need to be updated.
> >>
> >> Regarding backporting to other versions of Java, backports are
> >> reviewed on a case-by-case basis. TLS changes are usually backported,
> >> but that's not a given.
> >>
> >> RPK is not implemented either; we have a declaration for the relevant
> >> handshake extensions here:
> >> https://github.com/openjdk/jdk/blob/80ccc989a892e4d9f4e2c9395a100cfabbdcda64/src/java.base/share/classes/sun/security/ssl/SSLExtension.java#L239-L240,
> >> but the producers and consumers aren't defined.
> >>
> >> Which kind of help do you need 🙂 ?
> >>
> >> Well, for AES-CCM a pull request would have been nice :)
> >> For the other topics, I think we'd need to agree on the scope of the
> >> API changes needed. For example, how will the user configure the list
> >> of available PSKs? Will we need an API change? If not, which of the
> >> available APIs will we use to configure the keys?
> >>
> >> Cheers,
> >> Daniel
> >>
> >>
> >>
> >>
> >> pt., 15 mar 2024 o 11:58 Simon Bernard <contact at simonbernard.eu> napisał(a):
> >>
> >> Hi Daniel,
> >>
> >> Thx for quick answer.
> >>
> >> For PSK and AES, if this is added then this will be also for TLS ? (not only DTLS  right ?) and for version 1.2 and 1.3 ? and also when this feature will be added, would they be available on next JDK version OR also old version ? (e.g. I know some recent security feature was backported in java8)
> >>
> >> Today, I was looking at Raw Public Key support (RPK) and I understand this is not supported too. Am I right ?
> >> RPK is also part of LWM2M specification and also refered in (RFC7925§Section4.3 - TLS / DTLS -Profiles for the Internet of Things) :
> >> "The use of raw public keys with TLS/DTLS, as defined in [RFC7250], is the first entry point into public key cryptography without having to pay the price of certificates and a public key infrastructure (PKI)."
> >>
> >>   Help is welcome.
> >>
> >> Which kind of help do you need 🙂 ?
> >>
> >> Simon
> >>
> >> Le 15/03/2024 à 11:38, Daniel Jeliński a écrit :
> >>
> >> Hi Simon, welcome to security-dev!
> >>
> >> You got the situation of DTLS right:
> >> - PSK cipher suites were first requested in JDK-6476446, then in JDK-8049402.
> >> - connection identifier is not implemented, and not on the to-do list yet;
> >> - AES-CCM was requested in JDK-8008342, then in JDK-8176395. If I
> >> understand correctly, this one should be relatively easier to
> >> implement, using the implementation of the ChaCha20 cipher as an
> >> example (see JDK-8140466, JDK-8204192).
> >>
> >> It makes perfect sense to add these features to the OpenJDK. They were
> >> never high enough on the priority list to get implemented. Help is
> >> welcome.
> >>
> >> Cheers,
> >> Daniel
> >>
> >>
> >> czw., 14 mar 2024 o 17:31 Simon Bernard <contact at simonbernard.eu> napisał(a):
> >>
> >> Hi all,
> >>
> >> I'm the main Maintainer of Leshan. An open Source Java Implementation of LWM2M protocol.
> >>
> >> LWM2M is mainly based on coap and coap+tcp protocol.
> >> Security is available by usage of coaps and coaps+tcp which are based respectively on DTLS and TLS (mainly v1.2 for now)
> >>
> >> Currently we only have support of coap and coaps. We are using Scandium as DTLS implementation, this is an historical choice because DTLS was not available OpenJDK initially.
> >>
> >> Recently, I begin to work about adding coap+tcp and coaps+tcp to Leshan and so I looked again on available security feature in OpenJDK to see if I should rely on it but  I understand there still missing key features for IoT.
> >>
> >> My understanding, DTLS 1.2 was added but there is still no support of :
> >>
> >> Pre-Shared Key for (D)TLS 1.2 :  PSK is one of the most basic techniques for TLS/DTLS since it is both computationally efficient and bandwidth conserving. (RFC7925§Section4.2 - TLS / DTLS -Profiles for the Internet of Things)
> >> Connection Identifier for DTLS 1.2 (RFC 9146) : CID is key feature to limit handshake in dynamic IP environment. (and also be used for load balancing)
> >> Cipher suite based on AES_128_CCM_8 (TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8, TLS_PSK_WITH_AES_128_CCM_8) which are the recommended or mandatory ciphersuite for CoAP or to create implementation compliant with RFC7925.
> >>
> >> If I missed something and one of those feature is already available let me know.
> >>
> >> The point I want to raise here it that it's pretty hard for Java IoT developer to support commons Security IoT Feature.
> >>
> >> Community can eventually rely on Scandium but it is currently maintain by only 1 person and doesn't follow JSSE API and only target DTLS.
> >> Other alternative is maybe Bouncy Castle but Pre-shared key seems not available in their JSSE provider.
> >> There is also possibility to bind native library but this is not so easy and also have drawback.
> >> All that solution sounds not so good...
> >>
> >> So do you think it could make sense to add this kind of feature in OpenJDK ?
> >> Or Maybe there is already plan to add it ?
> >>
> >> (I hope this is the right place for this kind of question)
> >>
> >> Thx,
> >>
> >> Simon
> >>



More information about the security-dev mailing list