[PATCH 1/2] Add 'gen-dhchap-key' command

Sagi Grimberg sagi at grimberg.me
Mon Sep 13 23:49:52 PDT 2021


>> On 9/13/21 1:24 PM, Hannes Reinecke wrote:
>>> Add command 'gen-dhchap-key' to generate an DH-HMAC-CHAP host key
>>> for NVMe in-band authentication.
>>>
>>> Signed-off-by: Hannes Reinecke <hare at suse.de>
>>> ---
>>>   Documentation/nvme-gen-dhchap-key.txt |  52 +++++++++
>>>   Makefile                              |  17 ++-
>>>   nvme-builtin.h                        |   1 +
>>>   nvme.c                                | 155 ++++++++++++++++++++++++++
>>>   util/argconfig.h                      |   1 +
>>>   util/base64.c                         |  62 +++++++++++
>>>   util/base64.h                         |   6 +
>>>   7 files changed, 293 insertions(+), 1 deletion(-)
>>>   create mode 100644 Documentation/nvme-gen-dhchap-key.txt
>>>   create mode 100644 util/base64.c
>>>   create mode 100644 util/base64.h
>>>
>>> diff --git a/Documentation/nvme-gen-dhchap-key.txt 
>>> b/Documentation/nvme-gen-dhchap-key.txt
>>> new file mode 100644
>>> index 0000000..eecde76
>>> --- /dev/null
>>> +++ b/Documentation/nvme-gen-dhchap-key.txt
>>> @@ -0,0 +1,52 @@
>>> +nvme-gen-dhchap-key(1)
>>> +===================
>>> +
>>> +NAME
>>> +----
>>> +nvme-gen-dhchap-key - Generate a host DH-HMAC-CHAP key
>>> +
>>> +SYNOPSIS
>>> +--------
>>> +[verse]
>>> +'nvme gen-dhchap-key' [--hmac=<hmac-id> | -h <hmac-id>]
>>> +              [--secret=<secret> | -s <secret> ]
>>> +              [--key-length=<len> | -l <len> ]
>>> +              [--nqn=<host-nqn> | -n <host-nqn> ]
>>
>> Maybe it is a good idea to have some sane defaults create
>> /etc/nvme/hostkey when installing nvme-cli? Or will it
>> take it unconditionally?
>>
> That was the idea; will put some statements into the man-page.
> But 'gen-dhchap-key' shouldn't be doing it automatically, but rather 
> behave similar to 'gen-hostnqn' (which also only prints out the host NQN 
> to stdout, and leaves is to the caller to forward that to 
> /etc/nvme/hostnqn).

Yes, but we also install these files when installing nvme-cli,
look at the spec and makefile (install-hostparams target).

However this one is different I think and we don't want to generate it
by default.

>> Overall looks good, do we want to allow different host keys
>> for different NVM subsystems?
> 
> Sigh. It's the same issue as we currently have with allowing different 
> host NQNs for the same system.
> 
> In theory we could, and there is nothing in the current code which 
> forbids us to do so. But tooling around it will be getting arbitrarily 
> complex; remember, it's not only the different host keys for different 
> NVM subsystems, but possibly also the various NVM subsystem keys if 
> someone were to enable bi-directional authentication.

Yee... it won't be long until we'll hear complaints on this one.
I think we need to have some simple format like:
<default>:<def_hostkey>
<subsystem1>:<hostkey1>
<subsystem2>:<hostkey2>
...

And we will need /etc/nvme/subsyskey in the same format:
<default>:<def_subsyskey>
<subsystem1>:<subsyskey1>
<subsystem2>:<subsyskey2>
...

And ideally we also have a way for nvme-cli to populate it in this
format (or some helper script for it).

> So would just stick with the simple case, and leave this as an exercise 
> to the reader.

Don't know if that is good enough...
What do others think?

> Which reminds me; might be that there's an update required to handle 
> keys for bi-directional authentication ... hmm.

Yes.



More information about the Linux-nvme mailing list