From: Chris Leech <cleech@redhat.com>
To: Hannes Reinecke <hare@suse.de>
Cc: linux-nvme@lists.infradead.org, Daniel Wagner <dwagner@suse.de>,
Prashanth Nayak <prashanth.nayak@netapp.com>,
John Meneghini <jmeneghi@redhat.com>
Subject: Re: [PATCH 1/1] libnvme: TLS PSK derivation fixes
Date: Mon, 11 Aug 2025 21:33:06 -0700 [thread overview]
Message-ID: <aJrEAia9jVk17y-j@my-developer-toolbox-latest> (raw)
In-Reply-To: <df8bfa36-c1a9-4398-8246-5bc31991b8c9@suse.de>
On Mon, Jul 28, 2025 at 09:12:15AM +0200, Hannes Reinecke wrote:
> ...
> But: this is an incompatible change. Once we integrate this patch
> the keyring will end up with a _different_ derived PSK than it would
> without that patch. So the _same_ PSK (in interchange format) will
> result in different PSKs in the keyring, causing the handshake to
> fail if the other side is not aware of that.
>
> > > _However_: PSKs generated with after applying this patch will be
> > > different than those prior to this patch.
> > > Consequently there will be interop issues with existing implementations
> > > (which will use the original encoding).
> > >
> > > I guess we would need to wait for the target implementations to be fixed
> > > or introduce a flag switching to the old / compat implementation to avoid
> > > interop issues.
> >
> > Yes, it is a breaking change for compatibility with other out-of-spec
> > implementations. I'm hesitant to carry a flag for that, but it wouldn't
> > be too much trouble to implement.
> >
> > Just don't touch your keyfile? The tls-key import/export commands are
> > operating on the final derived TLS PSKs right?
> >
> That might be the way out, and in fact what we should be doing.
> However, the fact still remains: after this patch has been applied
> one _cannot_ generate new PSKs until the other side has been updated,
> too.
> For linux it's easy, we can just require 'version xyz' from libnvme
> and the issue is solved. But for other implementations?
> There are IHVs out there who already shipped their products with TLS
> enablement, and they need to be fixed, too.
> And their timeline is vastly longer than ours.
>
> So to avoid us having to synchronize against all of the others I think
> it might be easier to add a 'compat' flag of sorts to generate PSKs
> with the 'original' derivation algorithm, and then increase the
> libnvme version number once it's in.
> Then we can point the IHVs to that number so that they reference
> that version once their firmware is updated.
I've spent a bit of time on this, and while I don't have patches ready
to share just yet I do think it's worth commenting on the scope of the
change to keep the existing functionality behind a cli switch.
libnvme:
- keeping both sets of key derivation functions (this is not bad)
- need to expose that functionality, so new exported APIs
(I was thinking something like a flag field over a legacy-only function)
- #define NVME_TLS_PSK_LEGACY (1u << 0)
- char *nvme_generate_tls_key_identity_2(..., unsigned int flags)
- long nvme_insert_tls_key_versioned_2(..., unsigned int flags)
- support paths that load keys through nvme_fabrics_cfg [1]
(for nvme-cli fabrics commands that take --tls_key)
- add some sort of flag there, like nvme_fabrics_cfg.tls_legacy
- add to merge_config, nvmf_update_config, build_options,
supported_options, etc.
- the JSON schema/code would need to support this for persistent
configurations
nvme-cli:
- add a command line flag to keyring command functions
- convert to use of new libnvme APIs to pass flag
- gen_tls_key, check_tls_key
(I don't think nvme_tls_key does key conversions)
- add command line flag to generic parsing into nvme_fabrics_cfg
- handles connect, connect-all, discover, discover-all
- man pages, shell completions, etc.
It may be possible to keep this to just in libnvme and switch on an
environment variable, but that sounds like just as big of a support
nightmare as remembering to pass an option to every command.
If we don't have a resolution by then, maybe this is something we can
resolve at ALPSS.
[1] Side note; with nvme_fabrics_cfg _not_ being allocated through
libnvme, I don't see how the various additions there can be ABI safe. It
looks to me like this struct alone broke ABI in libnvme 1.4, 1.8, 1.9,
and 1.11.
- Chris
next prev parent reply other threads:[~2025-08-12 4:33 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-21 2:17 [PATCH 0/1] NVMe/TLS connection issues to SPDK Chris Leech
2025-07-21 2:17 ` [PATCH 1/1] libnvme: TLS PSK derivation fixes Chris Leech
2025-07-21 6:36 ` Hannes Reinecke
2025-07-21 15:31 ` Chris Leech
2025-07-25 9:36 ` Hannes Reinecke
2025-07-25 18:08 ` Chris Leech
2025-07-28 7:12 ` Hannes Reinecke
2025-08-08 16:18 ` John Meneghini
2025-08-12 4:33 ` Chris Leech [this message]
2025-08-18 9:42 ` Hannes Reinecke
2025-08-20 8:10 ` Daniel Wagner
2025-08-20 8:22 ` Hannes Reinecke
2025-08-26 14:09 ` John Meneghini
2025-07-21 7:11 ` [PATCH 0/1] NVMe/TLS connection issues to SPDK Hannes Reinecke
2025-07-21 15:44 ` Chris Leech
2025-07-22 6:27 ` Hannes Reinecke
2025-07-24 14:35 ` Daniel Wagner
2025-07-24 15:07 ` Chris Leech
2025-07-24 15:37 ` Daniel Wagner
2025-08-12 22:05 ` Chris Leech
2025-08-12 22:11 ` [RFC PATCH 1/2] crypto: hkdf: add hkdf_expand_label() Chris Leech
2025-08-18 9:44 ` Hannes Reinecke
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=aJrEAia9jVk17y-j@my-developer-toolbox-latest \
--to=cleech@redhat.com \
--cc=dwagner@suse.de \
--cc=hare@suse.de \
--cc=jmeneghi@redhat.com \
--cc=linux-nvme@lists.infradead.org \
--cc=prashanth.nayak@netapp.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.