From patchwork Mon Oct 11 10:02:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Ahmad Fatoum X-Patchwork-Id: 12549617 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2AD10C433F5 for ; Mon, 11 Oct 2021 10:03:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1775760F5B for ; Mon, 11 Oct 2021 10:03:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235705AbhJKKFO (ORCPT ); Mon, 11 Oct 2021 06:05:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39170 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235748AbhJKKFN (ORCPT ); Mon, 11 Oct 2021 06:05:13 -0400 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 25D59C061745 for ; Mon, 11 Oct 2021 03:03:13 -0700 (PDT) Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mZs8v-0006Si-K8; Mon, 11 Oct 2021 12:02:49 +0200 Received: from afa by dude.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1mZs8r-0002cb-Qj; Mon, 11 Oct 2021 12:02:45 +0200 From: Ahmad Fatoum To: Jarkko Sakkinen , =?utf-8?q?Horia_Geant=C4=83?= , Mimi Zohar , Aymen Sghaier , Herbert Xu , "David S. Miller" , James Bottomley Cc: kernel@pengutronix.de, David Howells , James Morris , "Serge E. Hallyn" , Steffen Trumtrar , Udit Agarwal , Jan Luebbe , David Gstir , Eric Biggers , Richard Weinberger , Franck LENORMAND , Sumit Garg , Andreas Rammhold , linux-integrity@vger.kernel.org, keyrings@vger.kernel.org, linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org, linux-security-module@vger.kernel.org Subject: [PATCH v4 0/5] KEYS: trusted: Introduce support for NXP CAAM-based trusted keys Date: Mon, 11 Oct 2021 12:02:33 +0200 Message-Id: X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: afa@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-integrity@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-integrity@vger.kernel.org Series applies on top of Andreas' regression fix here: https://lore.kernel.org/linux-integrity/20210730012822.3460913-1-andreas@rammhold.de/ v3 was here: https://lore.kernel.org/linux-integrity/cover.9fc9298fd9d63553491871d043a18affc2dbc8a8.1626885907.git-series.a.fatoum@pengutronix.de v3 -> v4: - Collected Acked-by's, Reviewed-by's and Tested-by - Fixed typo spotted by David - Rebased on top of Andreas' regression fix and pulled Kconfig inflexibility fix back into series v2 -> v3: - Split off first Kconfig preparation patch. It fixes a regression, so sent that out, so it can be applied separately (Sumit) - Split off second key import patch. I'll send that out separately as it's a development aid and not required within the CAAM series - add MAINTAINERS entry v1 -> v2: - Added new commit to make trusted key Kconfig option independent of TPM and added new Kconfig file for trusted keys - Add new commit for importing existing key material - Allow users to force use of kernel RNG (Jarkko) - Enforce maximum keymod size (Horia) - Use append_seq_(in|out)_ptr_intlen instead of append_seq_(in|out)_ptr (Horia) - Make blobifier handle private to CAAM glue code file (Horia) - Extend trusted keys documentation for CAAM - Rebased and updated original cover letter: The Cryptographic Acceleration and Assurance Module (CAAM) is an IP core built into many newer i.MX and QorIQ SoCs by NXP. Its blob mechanism can AES encrypt/decrypt user data using a unique never-disclosed device-specific key. There has been multiple discussions on how to represent this within the kernel: The Cryptographic Acceleration and Assurance Module (CAAM) is an IP core built into many newer i.MX and QorIQ SoCs by NXP. Its blob mechanism can AES encrypt/decrypt user data using a unique never-disclosed device-specific key. There has been multiple discussions on how to represent this within the kernel: - [RFC] crypto: caam - add red blobifier Steffen implemented[1] a PoC sysfs driver to start a discussion on how to best integrate the blob mechanism. Mimi suggested that it could be used to implement trusted keys. Trusted keys back then were a TPM-only feature. - security/keys/secure_key: Adds the secure key support based on CAAM. Udit added[2] a new "secure" key type with the CAAM as backend. The key material stays within the kernel only. Mimi and James agreed that this needs a generic interface, not specific to CAAM. Mimi suggested trusted keys. Jan noted that this could serve as basis for TEE-backed keys. - [RFC] drivers: crypto: caam: key: Add caam_tk key type Franck added[3] a new "caam_tk" key type based on Udit's work. This time it uses CAAM "black blobs" instead of "red blobs", so key material stays within the CAAM and isn't exposed to kernel in plaintext. James voiced the opinion that there should be just one user-facing generic wrap/unwrap key type with multiple possible handlers. David suggested trusted keys. - Introduce TEE based Trusted Keys support Sumit reworked[4] trusted keys to support multiple possible backends with one chosen at boot time and added a new TEE backend along with TPM. This now sits in Jarkko's master branch to be sent out for v5.13 This patch series builds on top of Sumit's rework to have the CAAM as yet another trusted key backend. The CAAM bits are based on Steffen's initial patch from 2015. His work had been used in the field for some years now, so I preferred not to deviate too much from it. This series has been tested with dmcrypt[5] on an i.MX6DL. Looking forward to your feedback. Cheers, Ahmad [1]: https://lore.kernel.org/linux-crypto/1447082306-19946-2-git-send-email-s.trumtrar@pengutronix.de/ [2]: https://lore.kernel.org/linux-integrity/20180723111432.26830-1-udit.agarwal@nxp.com/ [3]: https://lore.kernel.org/lkml/1551456599-10603-2-git-send-email-franck.lenormand@nxp.com/ [4]: https://lore.kernel.org/lkml/1604419306-26105-1-git-send-email-sumit.garg@linaro.org/ [5]: https://lore.kernel.org/linux-integrity/20210122084321.24012-2-a.fatoum@pengutronix.de/ --- To: Jarkko Sakkinen To: "Horia Geantă" To: Mimi Zohar To: Aymen Sghaier To: Herbert Xu To: "David S. Miller" To: James Bottomley Cc: David Howells Cc: James Morris Cc: "Serge E. Hallyn" Cc: Steffen Trumtrar Cc: Udit Agarwal Cc: Jan Luebbe Cc: David Gstir Cc: Eric Biggers Cc: Richard Weinberger Cc: Franck LENORMAND Cc: Sumit Garg Cc: Andreas Rammhold Cc: linux-integrity@vger.kernel.org Cc: keyrings@vger.kernel.org Cc: linux-crypto@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: linux-security-module@vger.kernel.org Ahmad Fatoum (5): KEYS: trusted: allow use of TEE as backend without TCG_TPM support KEYS: trusted: allow users to use kernel RNG for key material KEYS: trusted: allow trust sources to use kernel RNG for key material crypto: caam - add in-kernel interface for blob generator KEYS: trusted: Introduce support for NXP CAAM-based trusted keys Documentation/admin-guide/kernel-parameters.txt | 8 +- Documentation/security/keys/trusted-encrypted.rst | 60 +++- MAINTAINERS | 9 +- crypto/asymmetric_keys/Kconfig | 2 +- drivers/crypto/caam/Kconfig | 3 +- drivers/crypto/caam/Makefile | 1 +- drivers/crypto/caam/blob_gen.c | 230 +++++++++++++++- include/keys/trusted-type.h | 2 +- include/keys/trusted_caam.h | 11 +- include/soc/fsl/caam-blob.h | 56 ++++- security/keys/Kconfig | 18 +- security/keys/trusted-keys/Kconfig | 38 ++- security/keys/trusted-keys/Makefile | 10 +- security/keys/trusted-keys/trusted_caam.c | 74 +++++- security/keys/trusted-keys/trusted_core.c | 27 +- 15 files changed, 519 insertions(+), 30 deletions(-) create mode 100644 drivers/crypto/caam/blob_gen.c create mode 100644 include/keys/trusted_caam.h create mode 100644 include/soc/fsl/caam-blob.h create mode 100644 security/keys/trusted-keys/Kconfig create mode 100644 security/keys/trusted-keys/trusted_caam.c base-commit: 69226657a551b835e9bee694313b1e3355fa0ac8