On Tue, Oct 29, 2024 at 11:24:57AM +0100, Lukas Wunner wrote: > Commit 1e562deacecc ("crypto: rsassa-pkcs1 - Migrate to sig_alg backend") > enforced that rsassa-pkcs1 sign/verify operations specify a hash > algorithm. That is necessary because per RFC 8017 sec 8.2, a hash > algorithm identifier must be prepended to the hash before generating or > verifying the signature ("Full Hash Prefix"). > > However the commit went too far in that it changed user space behavior: > KEYCTL_PKEY_QUERY system calls now return -EINVAL unless they specify a > hash algorithm. Intel Wireless Daemon (iwd) is one application issuing > such system calls (for EAP-TLS). > > Closer analysis of the Embedded Linux Library (ell) used by iwd reveals > that the problem runs even deeper: When iwd uses TLS 1.1 or earlier, it > not only queries for keys, but performs sign/verify operations without > specifying a hash algorithm. These legacy TLS versions concatenate an > MD5 to a SHA-1 hash and omit the Full Hash Prefix: > > https://git.kernel.org/pub/scm/libs/ell/ell.git/tree/ell/tls-suites.c#n97 > > TLS 1.1 was deprecated in 2021 by RFC 8996, but removal of support was > inadvertent in this case. It probably should be coordinated with iwd > maintainers first. > > So reinstate support for such legacy protocols by defaulting to hash > algorithm "none" which uses an empty Full Hash Prefix. > > If it is later on decided to remove TLS 1.1 support but still allow > KEYCTL_PKEY_QUERY without a hash algorithm, that can be achieved by > reverting the present commit and replacing it with the following patch: > > https://lore.kernel.org/r/ZxalYZwH5UiGX5uj@xxxxxxxxx/ > > It's worth noting that Python's cryptography library gained support for > such legacy use cases very recently, so they do seem to still be a thing. > The Python developers identified IKE version 1 as another protocol > omitting the Full Hash Prefix: > > https://github.com/pyca/cryptography/issues/10226 > https://github.com/pyca/cryptography/issues/5495 > > The author of those issues, Zoltan Kelemen, spent considerable effort > searching for test vectors but only found one in a 2019 blog post by > Kevin Jones. Add it to testmgr.h to verify correctness of this feature. > > Examination of wpa_supplicant as well as various IKE daemons (libreswan, > strongswan, isakmpd, raccoon) has determined that none of them seems to > use the kernel's Key Retention Service, so iwd is the only affected user > space application known so far. > > Fixes: 1e562deacecc ("crypto: rsassa-pkcs1 - Migrate to sig_alg backend") > Reported-by: Klara Modin <klarasmodin@xxxxxxxxx> > Tested-by: Klara Modin <klarasmodin@xxxxxxxxx> > Closes: https://lore.kernel.org/r/2ed09a22-86c0-4cf0-8bda-ef804ccb3413@xxxxxxxxx/ > Signed-off-by: Lukas Wunner <lukas@xxxxxxxxx> > --- > crypto/asymmetric_keys/public_key.c | 2 +- > crypto/rsassa-pkcs1.c | 20 +++++++++++--- > crypto/testmgr.c | 6 ++++ > crypto/testmgr.h | 55 +++++++++++++++++++++++++++++++++++++ > 4 files changed, 78 insertions(+), 5 deletions(-) Patch applied. Thanks. -- Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt