Perhaps, as a library (considering the benefit of users), it would be better to allow signature verification with SHA-1, to defer the decision to application.
- Queries
- All Stories
- Search
- Advanced Search
- Transactions
- Transaction Logs
Advanced Search
Oct 20 2021
Thank you for having a look into that. The change looks fine, but I need to get some clarification about what "Legacy use" means for "Digital signature verification" in the Table 8 of https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-131Ar2.pdf
(3-1) is implemented: rCa23cf78102f3: cipher: Reject SHA-1 for hash+sign/verify when FIPS enabled.
For a programmer like me, it is easier if the behavior will be:
The problem is that the SHA-1 as a digest algorithm itself is allowed in FIPS mode (for non-cryptographic digests), but using it as part of approved signature scheme is not allowed
The current code is inconsistent about its behavior: how non-approved digest algos are supported or not when FIPS enabled.
If .fips will mean FIPS 140-3, why not the following patch?
diff --git a/cipher/sha1.c b/cipher/sha1.c index 3bb24c7e..cb50ef66 100644 --- a/cipher/sha1.c +++ b/cipher/sha1.c @@ -759,7 +759,7 @@ static gcry_md_oid_spec_t oid_spec_sha1[] =
Let me move this ticket as DONE (now Testing status), as the subject was solved (MD5 and soft/forced/inactive things).
Oct 19 2021
In T5433#151041, @gniibe wrote:Sorry, I was wrong. We don't need any changes.
When using gcry_pk_hash_sign and gcry_pk_hash_verify, approved digest algos are guaranteed when FIPS enabled.
Yes, it's a user of the function who supplies HD (handle for hash). (I had wrong assumption HD could be with non-approved digest algo.) But it is needed for the user to enable the HD and to feed message beforehand. At that stage, non-approved digest algo must fail.
I investigated if the possible change above (if applied) constitutes an ABI change: Indeed, it will be an ABI change, and an API change; code should be modified and build.
Sorry, I was wrong. We don't need any changes.
Oct 18 2021
I am going to implement rejecting SHA-1 through new API (hash+sign, hash+verify).
( No need to certify the DSA things)
Oct 15 2021
It seems for me that the patches to random/ was written in old days.
- Now, we have getentropy in libc
- This is most reliable one
- better than urandom, because it may block when kernel is not yet seeded
- better than random, because it never blocks once kernel is seeded
- So, the real path in rndlinux.c is actually, call to getentropy
- No access to /dev/random or /dev/urandom any more, in fact
- Although old code remains, non-touched
- like use of syscall when getentropy function is not available
Add doc in gcrypt.texi.
Thank you. Applied.
Oct 14 2021
In T5617#150908, @gniibe wrote:OK, let us start discussion by applying the patch first.
I have wondered if introducing another state in FSM would be needed, because:
OK, let us start discussion by applying the patch first.
Applied the RSA part.
Oct 12 2021
Now configure with
--enable-hmac-binary-check="I know engineers. They love to change things." works.
Oct 11 2021
Oct 8 2021
sorry for a confusion. We do not plan to certify DSA so disregard the second part of the patch.
Do we really need to support DSA in FIPS mode? I mean standard DSA and not ECDSA.
Oct 7 2021
Pushed the change: rC082ea0efa9b1: cipher: Add sign+hash, verify+hash, and random-override API.
Oct 6 2021
Oct 4 2021
How about:
- Only when hash-handle is used for multiple purposes, a user needs to compose SEXP
- when hash-handle is used for a single purpose, a user doesn't need to compose SEXP, but static one.
In the original SuSE's patch, _gcry_pk_sign_md function gets data template as SEXP as an argument, and the implementation does decomposing SEXP to get hash-algo. (A user of the function needs to compose SEXP with hash-algo.)
Sep 27 2021
These are great news. Thank you!
Pushed the change to libgpg-error and libgcrypt (1.9 and master).
Let us see if there are any problem(s) for that, I will apply it to other libraries when it will be found no problem.
Thank you for the information.
For the record, I put the link to the email submitted:
https://lists.gnu.org/archive/html/libtool-patches/2020-06/msg00001.html
Sep 24 2021
Thanks. This looks good to me.
Thank you for pointing out. Since hmac256.{c,h} can be used by others, I think that it is better to keep those two files, instead of merging it into one.
Sep 22 2021
Oh, you are right, it's not upstream. It's actually applied to Homebrew (https://brew.sh/) libtool formula which is where I originally got libtool.m4, see:
I tried to generate a tarball from master and I failed to build the hmac256 binary because the hmac256.h was not packaged into the dist tarball in master. If hmac256 should be standalone binary, I propose it should not need have a separate header file:
I see your point. I'd like to locate/identify where the change comes from.
I think that what you refer by "new libtool.m4" is actually macOS local change (I mean, not from libtool upstream, AFAIK).
Could you please point out the source of the change?
Sep 21 2021
That would work, however we might hit this issue with a new macOS release. Would it make more sense to update to what the new libtool.m4 is doing? Linker flags are the same, it only changes the way they detect macOS versions:
Tsss, requires to allow JS for Google.
Just FYI, see also how GnuTLS has proposed to implement the service indicator:
https://gitlab.com/gnutls/gnutls/-/merge_requests/1465
That does indeed not look like something which could introduce a regression.
I misunderstood as if we need to update libtool from upstream.
macOS has low priority for us and I do not want to risk any regression.
About merging our local changes.
We have our own changes for ltmain.sh and libtool.m4.
And update from automake 1.16:
It's better to update the set of files from libtool:
build-aux/ltmain.sh m4/libtool.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 m4/lt~obsolete.m4
Our libtool was 2.4.2 + Debian patches + our local changes.
Debian patches are:
https://salsa.debian.org/mckinstry/libtool/-/blob/debian/master/debian/patches/link_all_deplibs.patch
https://salsa.debian.org/mckinstry/libtool/-/blob/debian/master/debian/patches/netbsdelf.patch
Sep 20 2021
Thanks. Applied with a minor change: The string is now in a new third field.
Sep 19 2021
Sep 17 2021
I have a draft, which results in the following "API" of the name-version:
I had in my mind something like this:
While data template preparation for RSA-PSS is a bit tricky, it's simple with ECDSA.
Having hash-algo in the s-exp is useful because a hash handle may carry several hashes. This is sometimes useful if you do not know the hash algorithm in advance and you need to make a guess (various PGP compatibility things in gpg). But of course we can simplify this and use the default algo from the hash handle if hash-algo is missing.
Thanks for your comment.
Sep 16 2021
Thank you. On the first sight, it looks reasonable, but I would like to experiment with it a bit to see all use cases are covered.
Thanks. I think we are good here. If we will decide to pursuate the brainpool switch, I will open a new issue.
Pushed my initial implementation: rC117f5c3f8028: experiment-pk_hash_sign/verify: Implement pk_hash_sign/verify.
I am doing an experiment to implement gcry_pk_hash_sign.
Two third patches are applied to master. (@werner those parts are typo fix and tests improvement, which we agreed to push.)
Sep 15 2021
We can easily extend the gcry_get_config API. You can give a key or have it to return all infos. For examle
"gpgconf --show-versions" prints this about libgcrypt:
If a configure switch to disable Brainpool curves will be added, we also need to add a switch to disable NIST curves.
Oh, my bad. I probably used wrong git command. Uploaded now the patches themselves:
disable-brainpool.patch is a text of list of patches.
I think the first two could be applied.
@Jakuje Could you please upload them?
Sep 14 2021
Thanks for the clarification!
The problem of (2), is local side-channel attacks to ElGamal encryption.
We evaluated the impact, mainly for the use case of GnuPG; ElGamal keys are not that popular any more. When such an attack is possible, easier attacks would be possible.
Sep 13 2021
And well, the context area of the handle is also wiped at gcry_cipher_close time. Thus any standard use of aeswrap (open,encrypt/decrypt,close) is not affected.
Good catch. Thanks. This patch should fix the leak:
I looks like the "cipher: Hardening ElGamal by introducing exponent blinding too." commit [1] was never applied to 1.8.x. Is that intentional? If so, is there a specific reasoning that it's not needed in 1.8.x? Thanks!