Gary,

Can you have a look at this?

https://github.com/apache/commons-crypto/pull/242

Alex

On Sun, Aug 27, 2023 at 8:38 AM Gary Gregory <garydgreg...@gmail.com> wrote:

> On Fri, Aug 25, 2023 at 9:48 PM Alex Remily <alex.rem...@gmail.com> wrote:
> >
> > <A big item to consider is if and how 1.1 vs 3.0 should be handled.
> Breakup
> > the current module into different maven modules? Not support both?>
> >
> > Agreed.  Just to provide some history, when I was working on the 1.1.x
> > upgrade I was guided by commons committer Marcelo Vanzin.  Marcelo
> required
> > a design that supported runtime discovery of the underlying openssl
> API.  I
> > don't recall all of the rationale for the requirement, but he insisted
> that
> > any commons-crypto upgrade must support legacy and current versions of
> > openssl transparently to the calling program.  The end result is what we
> > have now.  I don't recall where in the code commons-crypto makes the
> > underlying version checks, at library initialization time or when a
> > specific function is called, but the end result is that users need only
> > download the latest commons-crypto release regardless of their underlying
> > openssl API--as long as they are running supported openssl versions.
> >
> > In my view there are a few open questions regarding the current approach
> as
> > compared to an API-specific one.  One, what is the performance penalty
> > associated with the dynamic version checks?  Two, how much complexity
> does
> > it introduce into the codebase?  Finally, what was the use case that
> drove
> > the runtime checking requirement?  Marcelo could answer the last
> question.
> > I don't know if he is still involved in the community (I haven't seen him
> > around for awhile.  IIRC, he was primarily a Spark committer).
> >
> > Another consideration is the FIPS certification.  I work in a heavily
> > regulated industry and FIPS is a real constraint.  I haven't personally
> > encountered a requirement to deploy a FIPS compliant openssl in our
> > application code, but it's probably just a matter of time.  In terms of
> > expanding our user base, it may make sense to provide that capability.
> It
> > doesn't seem to be generally available from an existing provider.
> >
> > Regarding message digests/HMAC, I question whether the performance gain
> > from native code would significantly outperform some of the modern JCA
> > providers.  As Matt Sicker pointed out, there are other implementations
> > supported by major vendors, like AWS, that may be as fast as a JNI
> wrapper
> > on OpenSSL, or at least close enough not to bother with the added
> > complexity of the native stuff.  The only way I know to answer that
> > question is to write the code and run a load test comparison.
> >
> >
> https://aws.amazon.com/blogs/opensource/introducing-amazon-corretto-crypto-provider-accp/
> >
> > In what forum should we discuss these issues?
>
> This developer's mailing list is where all decisions MUST be recorded,
> so it makes sense that discussions occur here. We can also use Jira
> tickets for specific tasks. Different discussions can use these
> different forums as we best see fit. I would not recommend using Slack
> as that data does or will eventually disappear. I do use Slack as a
> convenience at times for reminding people/channels to vote or pay
> attention to something happening in Jira or on a mailing list.
>
> > Are we limited to this
> > distro or do we have other options?
>
> I'm not sure what this means.
>
> > How do we form teams?
> I'm not sure what that means in the context of Apache. Apache has no
> notion of teams that I am aware of. We have Projects like Apache
> Commons, and Commons has Components like Commons Crypto.
> We are all on this mailing list, we can work on whatever we want, and
> we can use Jira to track tasks. If someone wants to work on a task,
> they can announce it here or in a Jira ticket, to avoid clashes or
> just be informative.
>
> > What is our
> > governance model?
> The same as any Apache project with the usual leeway allowed to each PMC.
>
>  > How do we make decisions?
> The same as any Apache project with the usual leeway allowed to each PMC.
> See https://httpd.apache.org/dev/guidelines.html
> A project can come up with it's own processes, for example see
> https://www.apache.org/foundation/voting.html
>
> Gary
>
> >
> > FYI:  There's already issues on the backlog for OpenSSL 3 and HMAC:
> > https://issues.apache.org/jira/browse/CRYPTO-165
> > https://issues.apache.org/jira/browse/CRYPTO-164
> >
> > Alex
> >
> >
> > On Wed, Aug 23, 2023 at 10:21 PM Gary Gregory <garydgreg...@gmail.com>
> > wrote:
> >
> > > That would be great. I think this is worth the effort. A big item to
> > > consider is if and how 1.1 vs 3.0 should be handled. Breakup the
> current
> > > module into different maven modules? Not support both?
> > >
> > > Gary
> > >
> > > On Wed, Aug 23, 2023, 8:37 PM Alex Remily <alex.rem...@gmail.com>
> wrote:
> > >
> > > > <Ack about licensing. The idea wouldn't be to copy the code, but to
> learn
> > > > how to implement message digests and HMAC on top of OpenSSL 3.0.8.>
> > > >
> > > > Implementing the OpenSSL 3 API and exposing OpenSSL HMAC
> functionality in
> > > > commons-crypto are things I've wanted to engage on for a while now.
> I
> > > was
> > > > involved in the commons-crypto OpenSSL 1.1.x upgrade so I have some
> > > > familiarity with the code base, albeit dated.  The reason that
> neither
> > > the
> > > > OpenSSL 3 API nor the HMAC functionality have been added to
> > > commons-crypto
> > > > yet, IMHO, is because both are non-trivial efforts and we all have
> day
> > > > jobs. Until now, there hasn't been much of an ask for either
> feature, but
> > > > considering the recent chatter maybe there's enough interest to
> generate
> > > > some momentum.  I would be happy to collaborate on this effort if it
> > > gains
> > > > traction.
> > > >
> > > > Alex
> > > >
> > > > On Wed, Aug 23, 2023 at 5:21 PM Matt Sicker <m...@musigma.org>
> wrote:
> > > >
> > > >> You may find this project (also Apache licensed, so fairly safe for
> > > reuse
> > > >> with commons-crypto updates) to be helpful for that aspect of
> message
> > > >> digests, Macs, etc.
> > > >>
> > > >> [image: amazon-corretto-crypto-provider.png]
> > > >>
> > > >> corretto/amazon-corretto-crypto-provider: The Amazon Corretto Crypto
> > > >> Provider is a collection of high-performance cryptographic
> > > implementations
> > > >> exposed via standard JCA/JCE interfaces.
> > > >> <https://github.com/corretto/amazon-corretto-crypto-provider>
> > > >> github.com <
> https://github.com/corretto/amazon-corretto-crypto-provider
> > > >
> > > >> <https://github.com/corretto/amazon-corretto-crypto-provider>
> > > >>
> > > >>
> > > >> On Aug 1, 2023, at 9:17 AM, Jim Showalter <
> jamesleeshowal...@gmail.com>
> > > >> wrote:
> > > >>
> > > >> I'm still trying to come up to speed on your PR/fork. A lot to
> learn!
> > > >>
> > > >> Ack about licensing. The idea wouldn't be to copy the code, but to
> learn
> > > >> how to implement message digests and HMAC on top of OpenSSL 3.0.8.
> > > >>
> > > >> On Tue, Aug 1, 2023, 5:03 AM Gary Gregory <garydgreg...@gmail.com>
> > > wrote:
> > > >>
> > > >> In the short, the best way to help is to provide PRs.
> > > >> In more detail, we should probably come up with some kind of a plan
> so
> > > >> that
> > > >> everyone uses their time wisely.
> > > >>
> > > >> I'll review my branch this week or next and see where that stands,
> but
> > > >> feel
> > > >> free to look at it, use it, PR it, as I might not actually be able
> to
> > > take
> > > >> the time this week.
> > > >>
> > > >> WRT openssl4j, you CANNOT bring in anything licensed under the LGPL.
> > > >> IANAL,
> > > >> but our documentation seems clear to me, please see
> > > >> https://www.apache.org/legal/resolved.html#category-x
> > > >>
> > > >> Hope this helps and we can make it work!
> > > >> Gary
> > > >>
> > > >>
> > > >> On Mon, Jul 31, 2023, 8:02 PM Jim Showalter <
> > > jamesleeshowal...@gmail.com>
> > > >> wrote:
> > > >>
> > > >> A split seems reasonable. We were amazed at how few changes you had
> to
> > > >>
> > > >> make
> > > >>
> > > >> to support OpenSSL 3.x. The EVPs are very different. But it sounds
> like
> > > >> there's more to do.
> > > >>
> > > >> The problem with commons-codec is that it doesn't use OpenSSL or any
> > > >>
> > > >> other
> > > >>
> > > >> FIPS-certified cryptographic module. For example, HmacUtils uses
> Mac,
> > > >>
> > > >> which
> > > >>
> > > >> is supplied by the JRE, which isn't FIPS-certified.
> > > >>
> > > >> In order to qualify for FedRAMP High, which is table stakes for a
> lot of
> > > >> corporate and government contracts, FIPS has to be used. It's
> mandated
> > > by
> > > >> statute. No wiggle room.
> > > >>
> > > >> The promise of bc-fips is that it is FIPS-certified, is a JSP, and
> > > >> implements the full JCE. The drawback is that the bc-fips org is
> funded
> > > >> through donations and consulting, and is always very far behind Java
> > > >> releases (it's still on Java 11, for example).
> > > >>
> > > >> What we need is a full-featured JSP that is based on a
> FIPS-certified
> > > >> cryptographic module that is implemented using native code and JNI.
> > > >>
> > > >> We can get FIPS-certified digests and HMAC from openssl4j. What we
> need
> > > >> from commons-crypto are the ciphers, and they need to be on OpenSSL
> > > >>
> > > >> 3.0.8.
> > > >>
> > > >>
> > > >> If there's anything we can do to help make that happen, please let
> us
> > > >>
> > > >> know.
> > > >>
> > > >>
> > > >> On Mon, Jul 31, 2023 at 2:58 PM Gary Gregory <
> garydgreg...@gmail.com>
> > > >> wrote:
> > > >>
> > > >> Hi Jim,
> > > >>
> > > >> My branch has not been merged because it does not fully work. It's
> > > >> challenging to update the code such that one can use either OpenSSL
> > > >>
> > > >> 1.1.1
> > > >>
> > > >> or 3.0.0 or both. We might need the component split into more than
> one
> > > >> Maven module.
> > > >>
> > > >> The name commons-crypto might have been poorly chosen because it's
> > > >>
> > > >> current
> > > >>
> > > >> remit is an OpelSSL wrapper. That said there is room for more
> features,
> > > >> which may mean splitting things up into more than one Maven module.
> > > >>
> > > >> Commons Code provides more convenience wrappers for JRE message
> digests
> > > >> including HMAC:
> > > >> https://commons.apache.org/proper/commons-codec/apidocs/index.html
> > > >>
> > > >> Are you looking to wrap or implement HMAC and message digests
> > > >>
> > > >> differently?
> > > >>
> > > >>
> > > >> Gary
> > > >>
> > > >>
> > > >> On Mon, Jul 31, 2023, 5:04 PM Jim Showalter <
> > > >>
> > > >> jamesleeshowal...@gmail.com
> > > >>
> > > >>
> > > >> wrote:
> > > >>
> > > >> We are trying to replace bc-fips (
> > > >>
> > > >> https://www.bouncycastle.org/fips-java/)
> > > >>
> > > >> with a JSP that is based on a cryptographic module that is 1) a
> > > >>
> > > >> native
> > > >>
> > > >> library and 2) is certified for FIPS 140-2 (
> > > >> https://csrc.nist.gov/pubs/fips/140-2/upd2/final).
> > > >>
> > > >> A native library is faster, plus it doesn't entangle the Java
> > > >>
> > > >> classpath
> > > >>
> > > >> with restrictions on Java versions or load order the way bc-fips
> > > >>
> > > >> does.
> > > >>
> > > >>
> > > >> The two available native libraries we're aware of are BoringSSL and
> > > >> OpenSSL.
> > > >>
> > > >> For various reasons, we want to use OpenSSL.
> > > >>
> > > >> OpenSSL 1.1.1 was only FIPS-certified on RedHat (and they had to
> > > >>
> > > >> modify
> > > >>
> > > >> it
> > > >>
> > > >> to add FIPS support), and the certification expires soon.
> > > >>
> > > >> OpenSSL 1.1.1 is the version commons-crypto is currently based on.
> > > >>
> > > >> OpenSSL 3.0.8 is FIPS-certified on a variety of platforms, supports
> > > >>
> > > >> FIPS
> > > >>
> > > >> mode natively, and its successor (3.1.x) will be certified for FIPS
> > > >>
> > > >> 140-3.
> > > >>
> > > >>
> > > >> We're very interested in
> > > >> https://github.com/garydgregory/commons-crypto/tree/openssl3, which
> > > >>
> > > >> adds
> > > >>
> > > >> support for OpenSSL 3.0.8 to commons-crypto, per
> > > >> https://issues.apache.org/jira/browse/CRYPTO-164.
> > > >>
> > > >> But that PR was never merged, hasn't been touched since December 20,
> > > >>
> > > >> 2022,
> > > >>
> > > >> and is currently 92 commits behind the main branch.
> > > >>
> > > >> What would it take to update that PR with all of the commits since
> > > >>
> > > >> then,
> > > >>
> > > >> and get it merged?
> > > >>
> > > >> Once that's done, we'd be happy to submit a PR to add FIPS mode, per
> > > >> https://issues.apache.org/jira/browse/CRYPTO-136.
> > > >>
> > > >> Also, commons-crypto doesn't support message digests or HMAC. We're
> > > >>
> > > >> in
> > > >>
> > > >> the
> > > >>
> > > >> process of adding HMAC and FIPS mode to
> > > >> https://github.com/sfuhrm/openssl4j,
> > > >> which has message digests, and targets OpenSSL 3.0.8.
> > > >>
> > > >> It seems like the message digests and HMAC from openssl4j could be
> > > >>
> > > >> merged
> > > >>
> > > >> into commons-crypto, to bring it closer to being a full JCE
> > > >>
> > > >> implementation.
> > > >>
> > > >> Is there any interest in seeing that happen?
> > > >>
> > > >>
> > > >>
> > > >>
> > > >>
> > > >>
> > >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>

Reply via email to