From: Eric Biggers <ebiggers@kernel.org>
To: "Christoph Böhmwalder" <christoph.boehmwalder@linbit.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>,
"David S. Miller" <davem@davemloft.net>,
linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] crypto: expose needs_key in procfs
Date: Mon, 1 Mar 2021 14:09:47 -0800 [thread overview]
Message-ID: <YD1mK8HseZpiCWDU@gmail.com> (raw)
In-Reply-To: <e82c30b0-e96f-d5cd-f7a3-d97f4e049b83@linbit.com>
On Mon, Mar 01, 2021 at 09:51:56PM +0100, Christoph Böhmwalder wrote:
> > Do you have a specific use case in mind for this information? Normally, users
> > should already know which algorithm they want to use (or set of algorithms they
> > might want to use).
>
> I have a pretty specific use case in mind, yes. For DRBD, we use crypto
> algorithms for peer authentication and for the online-verify mechanism (to
> verify data integrity). The peer authentication algos require a shared
> secret (HMAC), while the verify algorithms are just hash functions without
> keys (we don't configure a shared secret here, so these must explicitly be
> "keyless").
>
> Now, we also have a solution which sits on top of DRBD (LINSTOR), which
> resides purely in userspace. We recently implemented a feature where LINSTOR
> automatically chooses the "best" verify algorithm for all nodes in a
> cluster. It does this by parsing /proc/crypto and prioritizing accordingly.
> The problem is that /proc/crypto currently doesn't contain information about
> whether or not an algorithm requires a key – i.e. whether or not it is
> suitable for DRBD's online-verify mechanism.
>
> See this commit for some context:
> https://github.com/LINBIT/drbd/commit/34ee32e6922994c8e9390859e1790ca
Shouldn't you know ahead of time which algorithm you are using (or set of
algorithms which you might use), and not be parsing /proc/crypto and choosing
some random one (which might be a non-cryptographic algorithm like CRC-32, or
something known to be insecure like MD5)?
Using the algorithm attributes in /proc/crypto only really makes sense if the
decision of which algorithm to use is punted to a higher level and the program
just needs to be able to pass through *any* algorithm available in Linux -- like
how 'cryptsetup' works. But it's preferable to avoid that sort of design, as it
invites users to start depending on weird or insecure things.
> >
> > Also, what about algorithms such as blake2b-256 which optionally take a key (as
> > indicated by CRYPTO_ALG_OPTIONAL_KEY being set)? So it's not really "yes" or
> > "no"; there is a third state as well.
>
> Correct me if I'm missing something, but crypto_shash_alg_needs_key reads:
>
> static inline bool crypto_shash_alg_needs_key(struct shash_alg *alg)
> {
> return crypto_shash_alg_has_setkey(alg) &&
> !(alg->base.cra_flags & CRYPTO_ALG_OPTIONAL_KEY);
> }
>
> So this already accounts for optional keys. It just returns "no" for an
> optional key, which seems like reasonable behavior to me (it doesn't *need*
> a key after all).
>
> Another option would be to make it "yes/no/optional". I'm not sure if that's
> more desirable for most people.
>
BLAKE2 does need a key if it is being used as a keyed hash algorithm. So it
depends on the user, not the algorithm per se.
- Eric
prev parent reply other threads:[~2021-03-02 7:11 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-01 16:59 [PATCH] crypto: expose needs_key in procfs Christoph Böhmwalder
2021-03-01 18:47 ` Eric Biggers
2021-03-01 20:51 ` Christoph Böhmwalder
2021-03-01 22:09 ` Eric Biggers [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YD1mK8HseZpiCWDU@gmail.com \
--to=ebiggers@kernel.org \
--cc=christoph.boehmwalder@linbit.com \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox