Linux FSCRYPT development
 help / color / mirror / Atom feed
From: Roberto Sassu <roberto.sassu@huawei.com>
To: Roberto Sassu <roberto.sassu@huawei.com>,
	Eric Biggers <ebiggers@kernel.org>,
	Antony Vennard <antony@vennard.ch>
Cc: James Bottomley <James.Bottomley@hansenpartnership.com>,
	"Jason A. Donenfeld" <Jason@zx2c4.com>,
	"dhowells@redhat.com" <dhowells@redhat.com>,
	"dwmw2@infradead.org" <dwmw2@infradead.org>,
	"herbert@gondor.apana.org.au" <herbert@gondor.apana.org.au>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"keyrings@vger.kernel.org" <keyrings@vger.kernel.org>,
	"linux-crypto@vger.kernel.org" <linux-crypto@vger.kernel.org>,
	"linux-integrity@vger.kernel.org"
	<linux-integrity@vger.kernel.org>,
	"linux-fscrypt@vger.kernel.org" <linux-fscrypt@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"zohar@linux.ibm.com" <zohar@linux.ibm.com>
Subject: RE: [PATCH 00/14] KEYS: Add support for PGP keys and signatures
Date: Fri, 21 Jan 2022 16:50:52 +0000	[thread overview]
Message-ID: <289f4694fc084f029187af7e8a3120cc@huawei.com> (raw)
In-Reply-To: <d71ea8ae51e1438c894b44b011f3efda@huawei.com>

> From: Roberto Sassu [mailto:roberto.sassu@huawei.com]
> Sent: Wednesday, January 19, 2022 2:25 PM
> > From: Eric Biggers [mailto:ebiggers@kernel.org]
> > Sent: Wednesday, January 19, 2022 12:04 AM
> > On Tue, Jan 18, 2022 at 09:50:21PM +0100, Antony Vennard wrote:
> > >
> > > Hi All,
> > >
> > > On 17/01/2022 16:02, James Bottomley wrote:
> > > > On Mon, 2022-01-17 at 15:34 +0100, Jason A. Donenfeld wrote:
> > > > > Hi,
> > > > >
> > > > > While it looks like you put a lot of work into this patchset, I think
> > > > > the general idea of adding PGP *to the kernel* is a pretty daunting
> > > > > proposition. The general consensus in the crypto engineering world is
> > > > > that PGP ought to be on its way out. We definitely don't want to
> > > > > perpetuate this project-on-life-support into the permanence of kernel
> > > > > code. Some quick Google searches will reveal a litany of blog posts
> > > > > to the tune of, "why oh why are people still using this?" Here's one
> > > > > from 2019:
> > > > > https://latacora.micro.blog/2019/07/16/the-pgp-problem.html . I
> > > > > think these are arguments to take seriously. And even if you disagree
> > > > > with some parts, you may want to consider whether the remaining parts
> > > > > warrant a bit of pause before adding this to the kernel and
> > > > > perpetuating PGP's design further.
> > >
> > > So while I understand why this is being proposed and clearly effort has gone
> > > into it, I also think it is not the right approach. It seems this proposal
> > > is to include a full PGP packet parser and verification logic in the kernel
> > > as an equivalent to allow PGP signatures to be submitted via
> > > FS_IOC_ENABLE_VERITY:
> > >
> > > "FS_IOC_ENABLE_VERITY accepts a pointer to a PKCS#7 formatted detached
> > > signature in DER format of the file’s fs-verity digest."
> > >
> >
> > It's worth noting that if fs-verity built-in signatures are used, a trusted
> > userspace program is still required to determine and enforce the policy of
> which
> > files are required to be signed.  The kernel only handles the actual signature
> > verification.  This was basically a proof-of-concept which reused the kernel's
> > module signature verification code (which happens to use PKCS#7).
> 
> Just to show how the fsverity code will look like after adding support
> for PGP signatures:
> 
> +       switch (vi->type) {
> +       case PKEY_ID_PKCS7:
> +               err = verify_pkcs7_signature(d, sizeof(*d) + hash_alg->digest_size,
> +                                            signature, sig_size, fsverity_keyring,
> +                                            VERIFYING_UNSPECIFIED_SIGNATURE,
> +                                            NULL, NULL);
> +               break;
> +       case PKEY_ID_PGP:
> +               err = verify_pgp_signature(d, sizeof(*d) + hash_alg->digest_size,
> +                                          signature, sig_size, fsverity_keyring,
> +                                          VERIFYING_UNSPECIFIED_SIGNATURE,
> +                                          NULL, NULL);
> +               break;
> +       default:
> +               err = -EOPNOTSUPP;
> +       }
> 
> As you can see, the change will be straightforward.
> 
> On user space side, I plan to add the capability to fsverity-utils
> to produce a PGP signature with the GPG key passed by rpmsign.

At the end, it was not necessary. With this patch set, rpmsign is able
to produce a PGP signature without modifications to fsverity-utils:

https://github.com/robertosassu/rpm/commits/fsverity-gpg-v1

The modifications are very minimal, basically consist in introducing
the new function rpmVeritySignFileGPG() that creates a file with
the fsverity_formatted_digest structure, and signs it with the
exposed function makeGPGSignatureArgs().

The fsverity rpm plugin works without modification, and the
kernel takes care of the verification of the PGP signatures when
a package is installed.

I wrote a more detailed procedure to sign and install a package
with fsverity signatures in the PGP format. It can be found here:

https://www.spinics.net/lists/fedora-devel/msg296562.html

Roberto

HUAWEI TECHNOLOGIES Duesseldorf GmbH, HRB 56063
Managing Director: Li Peng, Zhong Ronghua

> > I'd encourage new users to either go all-in on a userspace solution, using a
> > trusted userspace program to verify signatures of fs-verity file digests;
> > *or* go all-in on an in-kernel solution, using the IMA support for fs-verity
> > which Mimi Zohar is working on.  A userspace solution could use a simple
> 
> Probably, there is also the third option of an LSM (such as IPE) that gets
> from fsverity the information if the signature was validated, and decide
> depending on a policy. I would also expose the information about the
> restriction imposed on the keyring from which the key used to verify
> the signature was found.
> 
> Maybe IMA could use this approach too, which would avoid the need
> of introducing another signature format. If that is desired, you might
> want to coordinate with the authors of a Fedora feature:
> 
> https://fedoraproject.org/wiki/Changes/FsVerityRPM
> 
> which, as far as I know, plan to use the signature format already
> upstreamed.
> 
> Thanks
> 
> Roberto
> 
> HUAWEI TECHNOLOGIES Duesseldorf GmbH, HRB 56063
> Managing Director: Li Peng, Zhong Ronghua
> 
> > signature format, using a modern algorithm such as Ed25519.  IMA uses a
> simple
> > signature format too, though it uses a complex format (X.509) for public keys.
> >
> > - Eric

  reply	other threads:[~2022-01-21 16:50 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-11 18:03 [PATCH 00/14] KEYS: Add support for PGP keys and signatures Roberto Sassu
2022-01-11 18:03 ` [PATCH 01/14] mpi: Introduce mpi_key_length() Roberto Sassu
2022-01-11 18:03 ` [PATCH 02/14] rsa: add parser of raw format Roberto Sassu
2022-01-11 18:03 ` [PATCH 03/14] PGPLIB: PGP definitions (RFC 4880) Roberto Sassu
2022-01-11 18:03 ` [PATCH 04/14] PGPLIB: Basic packet parser Roberto Sassu
2022-01-11 18:03 ` [PATCH 05/14] PGPLIB: Signature parser Roberto Sassu
2022-01-11 18:03 ` [PATCH 06/14] KEYS: PGP data parser Roberto Sassu
2022-01-11 18:03 ` [PATCH 07/14] KEYS: Provide PGP key description autogeneration Roberto Sassu
2022-01-11 18:03 ` [PATCH 08/14] KEYS: PGP-based public key signature verification Roberto Sassu
2022-01-11 18:03 ` [PATCH 09/14] KEYS: Retry asym key search with partial ID in restrict_link_by_signature() Roberto Sassu
2022-01-11 18:03 ` [PATCH 10/14] KEYS: Calculate key digest and get signature of the key Roberto Sassu
2022-01-11 18:03 ` [PATCH 11/14] verification: introduce verify_pgp_signature() Roberto Sassu
2022-01-11 18:03 ` [PATCH 12/14] PGP: Provide a key type for testing PGP signatures Roberto Sassu
2022-01-11 18:03 ` [PATCH 13/14] KEYS: Provide a function to load keys from a PGP keyring blob Roberto Sassu
2022-01-11 18:03 ` [PATCH 14/14] KEYS: Introduce load_pgp_public_keyring() Roberto Sassu
2022-01-11 20:33 ` [PATCH 00/14] KEYS: Add support for PGP keys and signatures Maciej S. Szmigiero
2022-01-12  9:16   ` Roberto Sassu
2022-01-12 20:15     ` Maciej S. Szmigiero
2022-01-13  9:11       ` Roberto Sassu
2022-01-17 14:34 ` Jason A. Donenfeld
2022-01-17 15:02   ` James Bottomley
2022-01-18 20:50     ` Antony Vennard
2022-01-18 23:03       ` Eric Biggers
2022-01-19 13:25         ` Roberto Sassu
2022-01-21 16:50           ` Roberto Sassu [this message]
2022-01-23 21:00         ` Antony Vennard
2022-01-19 13:02       ` Roberto Sassu
2022-01-17 15:21   ` Roberto Sassu
2022-01-18 18:49     ` Jason A. Donenfeld
2022-01-17 16:59   ` Konstantin Ryabitsev
2022-01-17 17:04     ` Konstantin Ryabitsev
2022-01-17 20:59     ` Maciej S. Szmigiero
2022-01-17 21:54       ` Konstantin Ryabitsev

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=289f4694fc084f029187af7e8a3120cc@huawei.com \
    --to=roberto.sassu@huawei.com \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=Jason@zx2c4.com \
    --cc=antony@vennard.ch \
    --cc=davem@davemloft.net \
    --cc=dhowells@redhat.com \
    --cc=dwmw2@infradead.org \
    --cc=ebiggers@kernel.org \
    --cc=herbert@gondor.apana.org.au \
    --cc=keyrings@vger.kernel.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-fscrypt@vger.kernel.org \
    --cc=linux-integrity@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.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