From: Hannes Reinecke <hare@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>, Keith Busch <kbusch@kernel.org>,
linux-nvme@lists.infradead.org, Hannes Reinecke <hare@kernel.org>
Subject: [PATCHv4 00/19] nvme: implement secure concatenation
Date: Wed, 8 May 2024 12:22:46 +0200 [thread overview]
Message-ID: <20240508102305.108949-1-hare@kernel.org> (raw)
Hi all,
here's my attempt to implement secure concatenation for NVMe-of TCP
as outlined in TP8018.
Secure concatenation means that a TLS PSK is generated from the key
material negotiated by the DH-HMAC-CHAP protocol, and the TLS PSK
is then used for a subsequent TLS connection.
The difference between the original definition of secure concatenation
and the method outlined in TP8018 is that with TP8018 the connection
is reset after DH-HMAC-CHAP negotiation, and a new connection is setup
with the generated TLS PSK.
To implement that I have decided on resetting the connection from the
nvme-tcp driver after the initial connection has been set up.
Another way would have been to offload the connection reset to userspace,
and let nvme-cli reset the connection. But that would be a modification
to the userspace interface, and hence I didn't go that way.
The drawback with this approach is that we'll create all I/O queues
before resetting for TLS, as the current implementation of the TCP
driver doesn't allow us to skip I/O queue initialisation.
But the queues are never started, and the namespace scan is skipped,
so the I/O queues are never visible to userspace until TLS has
been enabled.
As usual, comments and reviews are welcome.
Patchset can be found at
git.kernel.org:/pub/scm/linux/kernel/git/hare/nvme.git
branch secure-concat.v4
Changes to v3:
- Include reviews from Sagi
- Do not start I/O queues after DH-HMAC-CHAP negotiation
- Use bool to indicate TLS has been enabled on a queue
- Add 'tls_keyring' sysfs attribute
- Add 'tls_configured_key' sysfs attribute
Changes to v2:
- Fixup reset after dhchap negotiation
- Disable namespace scanning on I/O queues after
dhchap negotiation
- Reworked TLS key handling (again)
Changes to the original submission:
- Sanitize TLS key handling
- Fixup modconfig compilation
Hannes Reinecke (19):
nvme-keyring: restrict match length for version '1' identifiers
crypto,fs: Separate out hkdf_extract() and hkdf_expand()
nvme: add nvme_auth_generate_psk()
nvme: add nvme_auth_generate_digest()
nvme: add nvme_auth_derive_tls_psk()
nvme-keyring: add nvme_tls_psk_refresh()
nvme-tcp: sanitize TLS key handling
nvme-tcp: check for invalidated or revoked key
nvme: add a newline to the 'tls_key' sysfs attribute
nvme-sysfs: add 'tls_configured_key' sysfs attribute
nvme-sysfs: add 'tls_keyring' attribute
nvme-tcp: request secure channel concatenation
nvme-fabrics: reset connection for secure concatenation
nvme-tcp: reset after recovery for secure concatenation
nvme-tcp: do not start queues when TLS is not enabled for secure
concatenation
nvmet-auth: allow to clear DH-HMAC-CHAP keys
nvme-target: do not check authentication status for admin commands
twice
nvme-target: do not check authentication status for I/O commands twice
nvmet-tcp: support secure channel concatenation
crypto/Makefile | 1 +
crypto/hkdf.c | 112 +++++++++
drivers/nvme/common/auth.c | 303 +++++++++++++++++++++++++
drivers/nvme/common/keyring.c | 103 ++++++++-
drivers/nvme/host/auth.c | 105 ++++++++-
drivers/nvme/host/core.c | 9 +-
drivers/nvme/host/fabrics.c | 40 +++-
drivers/nvme/host/fabrics.h | 3 +
drivers/nvme/host/nvme.h | 2 +-
drivers/nvme/host/sysfs.c | 37 ++-
drivers/nvme/host/tcp.c | 130 +++++++++--
drivers/nvme/target/admin-cmd.c | 3 +-
drivers/nvme/target/auth.c | 84 ++++++-
drivers/nvme/target/core.c | 3 -
drivers/nvme/target/fabrics-cmd-auth.c | 46 +++-
drivers/nvme/target/fabrics-cmd.c | 29 ++-
drivers/nvme/target/nvmet.h | 30 ++-
drivers/nvme/target/tcp.c | 25 +-
fs/crypto/hkdf.c | 68 +-----
include/crypto/hkdf.h | 18 ++
include/linux/nvme-auth.h | 7 +
include/linux/nvme-keyring.h | 10 +-
include/linux/nvme.h | 7 +
23 files changed, 1051 insertions(+), 124 deletions(-)
create mode 100644 crypto/hkdf.c
create mode 100644 include/crypto/hkdf.h
--
2.35.3
next reply other threads:[~2024-05-08 10:23 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-08 10:22 Hannes Reinecke [this message]
2024-05-08 10:22 ` [PATCH 01/19] nvme-keyring: restrict match length for version '1' identifiers Hannes Reinecke
2024-05-08 10:22 ` [PATCH 02/19] crypto,fs: Separate out hkdf_extract() and hkdf_expand() Hannes Reinecke
2024-05-08 10:22 ` [PATCH 03/19] nvme: add nvme_auth_generate_psk() Hannes Reinecke
2024-05-08 10:22 ` [PATCH 04/19] nvme: add nvme_auth_generate_digest() Hannes Reinecke
2024-05-08 10:22 ` [PATCH 05/19] nvme: add nvme_auth_derive_tls_psk() Hannes Reinecke
2024-05-08 10:22 ` [PATCH 06/19] nvme-keyring: add nvme_tls_psk_refresh() Hannes Reinecke
2024-05-08 10:22 ` [PATCH 07/19] nvme-tcp: sanitize TLS key handling Hannes Reinecke
2024-05-08 10:22 ` [PATCH 08/19] nvme-tcp: check for invalidated or revoked key Hannes Reinecke
2024-05-08 10:22 ` [PATCH 09/19] nvme: add a newline to the 'tls_key' sysfs attribute Hannes Reinecke
2024-05-08 10:22 ` [PATCH 10/19] nvme-sysfs: add 'tls_configured_key' " Hannes Reinecke
2024-05-08 10:22 ` [PATCH 11/19] nvme-sysfs: add 'tls_keyring' attribute Hannes Reinecke
2024-05-08 10:22 ` [PATCH 12/19] nvme-tcp: request secure channel concatenation Hannes Reinecke
2024-05-08 10:22 ` [PATCH 13/19] nvme-fabrics: reset connection for secure concatenation Hannes Reinecke
2024-05-08 10:23 ` [PATCH 14/19] nvme-tcp: reset after recovery " Hannes Reinecke
2024-05-08 10:23 ` [PATCH 15/19] nvme-tcp: do not start queues when TLS is not enabled " Hannes Reinecke
2024-05-08 10:23 ` [PATCH 16/19] nvmet-auth: allow to clear DH-HMAC-CHAP keys Hannes Reinecke
2024-05-08 10:23 ` [PATCH 17/19] nvme-target: do not check authentication status for admin commands twice Hannes Reinecke
2024-05-08 10:23 ` [PATCH 18/19] nvme-target: do not check authentication status for I/O " Hannes Reinecke
2024-05-08 10:23 ` [PATCH 19/19] nvmet-tcp: support secure channel concatenation 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=20240508102305.108949-1-hare@kernel.org \
--to=hare@kernel.org \
--cc=hch@lst.de \
--cc=kbusch@kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=sagi@grimberg.me \
/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.