From: Eric Biggers <ebiggers@kernel.org>
To: Mimi Zohar <zohar@linux.ibm.com>
Cc: Vitaly Chikunov <vt@altlinux.org>,
linux-integrity@vger.kernel.org, linux-fscrypt@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1 4/5] ima: support fs-verity file digest based signatures
Date: Thu, 20 Jan 2022 13:05:44 -0800 [thread overview]
Message-ID: <YenOqJtjS/Y2zBQC@sol.localdomain> (raw)
In-Reply-To: <c0676336a7992b6495c5f5dec7ca1897fb4005eb.camel@linux.ibm.com>
On Thu, Jan 20, 2022 at 11:39:56AM -0500, Mimi Zohar wrote:
> Eric, Vitaly,
>
> On Tue, 2022-01-18 at 16:39 -0800, Eric Biggers wrote:
>
> > > > The easiest way to do this would be sign/verify the following struct:
> > > > struct ima_file_id {
> > > > u8 is_fsverity;
> > > > u8 hash_algorithm;
> > > > u8 hash[];
> > > > };
>
>
> > > This would be the *data* that is signed/verified -- meaning that it
> would be
> > > > hashed again as part of the signature algorithm (whether that hash is built-in
> > > > to the signature algorithm, as is the case for modern algorithms, or handled by
> > > > the caller as is the case for legacy algorithms).
> > >
> > > There seems to be an inconsistency, here, with what you said above,
> > > "... ECDSA just signs/verifies a raw hash, and in fact it *must* be a
> > > raw hash for it to be secure."
> >
> > There isn't an inconsistency. ECDSA is among the algorithms where the caller is
> > expected to handle the hash.
> >
> > It is confusing dealing with all these different signature algorithms. I think
> > the right way to think about this is in terms of what *data* is being
> > signed/verified. Currently the data is the full file contents. I think it
> > needs to be made into an annotated hash, e.g. the struct I gave.
> >
> > public_key_verify_signature() also needs to be fixed to support both types of
> > signature algorithms (caller-provided hash and internal hash) in a logical way.
> > Originally it only supported caller-provided hashes, but then SM2 support was
> > added and now it is super broken.
>
> Eric, did you say you're working on fixes to address these problems?
Yes, I was working on some patches at
https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux.git/log/?h=wip-keys-fixes
but got distracted by other things, as well as finding the problems with SM2
which will take some time to decide what to do with. I'll try to get some
patches ready, but there are a lot of things to fix.
>
> Instead of using a flexible array, Vitaly suggested defining the hash
> as FS_VERITY_MAX_DIGEST_SIZE, so that it could be allocated temporarily
> on stack
> instead of kalloc.
>
> As the above struct is not limited to fsverity, we could use
> MAX_HASH_DIGESTSIZE, if it was exported, but it isn't. Would the
> following work for you?
>
> /*
> * IMA signature header version 3 disambiguates the data that is signed
> by
> * indirectly signing the hash of this structure, containing either the
> * fsverity_descriptor struct digest or, in the future, the traditional
> IMA
> * file hash.
> */
> struct ima_file_id {
> __u8 is_fsverity; /* set to 1 for IMA_VERITY_DIGSIG */
> __u8 hash_algorithm; /* Digest algorithm [enum hash_algo] */
> #ifdef __KERNEL__
> __u8 hash[HASH_MAX_DIGESTSIZE];
> #else
> __u8 hash[];
> #endif
> };
You could certainly declare a fixed-length struct, but only sign/verify the used
portion of it. The fixed-length struct would just be an implementation detail.
Alternatively, you could always sign/verify a fixed-length struct, with any
shorter hashes zero-padded to HASH_MAX_DIGESTSIZE (64 bytes). This would be
fine if you're confident that hashes longer than 64 bytes will never be used.
(They don't make sense cryptographically, but who knows.)
For future extensibility, you might want to call the 'is_fsverity' field
something like 'hash_type', so it would be like an enum rather than a bool. I
just used 'is_fsverity' as a minimal example.
- Eric
next prev parent reply other threads:[~2022-01-20 21:05 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-02 21:55 [PATCH v1 0/5] ima: support fs-verity signatures stored as Mimi Zohar
2021-12-02 21:55 ` [PATCH v1 1/5] fs-verity: define a function to return the integrity protected file digest Mimi Zohar
2021-12-02 22:15 ` Eric Biggers
2021-12-02 21:55 ` [PATCH v1 2/5] ima: define a new signature type named IMA_VERITY_DIGSIG Mimi Zohar
2021-12-02 21:55 ` [PATCH v1 3/5] ima: limit including fs-verity's file digest in measurement list Mimi Zohar
2021-12-02 22:22 ` Eric Biggers
2021-12-02 22:55 ` Mimi Zohar
2021-12-02 21:55 ` [PATCH v1 4/5] ima: support fs-verity file digest based signatures Mimi Zohar
2021-12-02 22:07 ` Eric Biggers
2021-12-02 22:13 ` Mimi Zohar
2021-12-02 22:18 ` Eric Biggers
2021-12-31 15:35 ` Mimi Zohar
2022-01-05 23:37 ` Eric Biggers
2022-01-09 20:45 ` Vitaly Chikunov
2022-01-09 21:07 ` Eric Biggers
2022-01-15 5:31 ` Vitaly Chikunov
2022-01-15 6:21 ` Eric Biggers
2022-01-16 3:31 ` Stefan Berger
2022-01-16 5:24 ` Stefan Berger
2022-01-19 0:49 ` Eric Biggers
2022-01-19 15:41 ` Stefan Berger
2022-01-16 17:01 ` Mimi Zohar
2022-01-19 0:39 ` Eric Biggers
2022-01-20 16:39 ` Mimi Zohar
2022-01-20 21:05 ` Eric Biggers [this message]
2021-12-02 21:55 ` [PATCH v1 5/5] fsverity: update the documentation Mimi Zohar
2021-12-02 22:09 ` Eric Biggers
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=YenOqJtjS/Y2zBQC@sol.localdomain \
--to=ebiggers@kernel.org \
--cc=linux-fscrypt@vger.kernel.org \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=vt@altlinux.org \
--cc=zohar@linux.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox