Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp5061728pxb; Mon, 15 Feb 2021 08:30:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJw2knk/uTCcw+sjASXBfLc1GQ8cnfgBguRwJDhdlxMtprzGEvkfokfHSjJLHXC+jyKZOjo7 X-Received: by 2002:a17:906:b001:: with SMTP id v1mr16397973ejy.217.1613406649192; Mon, 15 Feb 2021 08:30:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613406649; cv=none; d=google.com; s=arc-20160816; b=vap8g82CaDziy58LX/2b/g7X3jU71Wjzy+DrdyiinrWtAxF+dWx540RwP+rS0nw2/Q bHpzE6utCMYXfTApwXd0n0DuBthFbSQd1WxQ8ssMUtW4hOcjyvxKfuPgfH2oOqtacOJh EW0P5S3FZ9pCQcjjRMPdzh4wkNXQOTwVtCcqHPkoxE2y+1IxWo74Bb5NFwWeo6TiYMmz 2VlyS2bmsWbyk+0XJQz2s8s2xFZcok2Dab+zoeXFzNohKEI/k9ICbhX5KpNT82MU59O6 aJ4s2aW+jK1PfosB9jxTKt4fjYDEntJfH9tqB5094IBOymyg4jcAPRpDHLPsbntEA7rP dsRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=VznWH/st8iEX8OCNg2iZEx5HK0tTns1td9csB+iRJEA=; b=T/v93y7ZhYBkZ9LVEY7KOubjVCu1SDjDR+FVm8x/ihMksJii/Z/0B0hL7PmHeiInT2 zpilomM2BcItwqogx4+TlR7XkQDqlxvwrTdREOCSx7yX96IPnIvSc3vNy92979GWPc/S VzE6Iuivl+Y1vNV+28+5Bo/pvv6Souw0m7ptfrVkwEz3N0NxX4z3LxzMbWh/fbchpSoH UEQAWfvzPPKAxREx0F3u6uJUQ81mxjNw5tavz/M7LmnwHVcYfnZ6L4KT7IslHhbl3kZm ElnbJ00u0FTyJ1niannMBHx6b3DdRIrp/HzALZM7oyZ38lMF2CfqNKpnVQGu9hmjqdwX Xl8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ibm.com header.s=pp1 header.b=Oa3dab+v; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q4si4863956edh.345.2021.02.15.08.30.15; Mon, 15 Feb 2021 08:30:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@ibm.com header.s=pp1 header.b=Oa3dab+v; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231165AbhBOQ3L (ORCPT + 99 others); Mon, 15 Feb 2021 11:29:11 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:12570 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S230256AbhBOQ0k (ORCPT ); Mon, 15 Feb 2021 11:26:40 -0500 Received: from pps.filterd (m0098413.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 11FG3URf013038; Mon, 15 Feb 2021 11:25:52 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=VznWH/st8iEX8OCNg2iZEx5HK0tTns1td9csB+iRJEA=; b=Oa3dab+vW7b9UAYaEq0hwtgeljHhE9i1LV7apBvFxwG4RGpQlj8jvCfPjQx28TwlakeX LUUaW5gfnPDNiV+5uBs/Cgxw/G/UiCRUrkbEZLase4pUmNXS8255eoa8raHBCZ+CK4uy mbrz1bZs+0J/J2skYAR70qgL8bkNbZwZkQO39EhNdxF/Hk/HJmOQ5J3/8H/JSULNWNge mHlC4kH6RKCV6Yv//XjI3XgCZjvGdeFqSzBtyc9FAo8J4pZwG7mui/wZJRhrGFnWrYMN WNjq8k/hGT1bcD+MMDmtNDbJOFOm/KWC7oT9+IZoVVA6ve+4Ug5m44GVG2MifI3X+bnK fw== Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-001b2d01.pphosted.com with ESMTP id 36qutyscaa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 15 Feb 2021 11:25:52 -0500 Received: from m0098413.ppops.net (m0098413.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 11FG4ach018365; Mon, 15 Feb 2021 11:25:51 -0500 Received: from ppma02wdc.us.ibm.com (aa.5b.37a9.ip4.static.sl-reverse.com [169.55.91.170]) by mx0b-001b2d01.pphosted.com with ESMTP id 36qutysc9t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 15 Feb 2021 11:25:51 -0500 Received: from pps.filterd (ppma02wdc.us.ibm.com [127.0.0.1]) by ppma02wdc.us.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 11FGM5wB031920; Mon, 15 Feb 2021 16:25:50 GMT Received: from b03cxnp08027.gho.boulder.ibm.com (b03cxnp08027.gho.boulder.ibm.com [9.17.130.19]) by ppma02wdc.us.ibm.com with ESMTP id 36p6d908n5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 15 Feb 2021 16:25:50 +0000 Received: from b03ledav003.gho.boulder.ibm.com (b03ledav003.gho.boulder.ibm.com [9.17.130.234]) by b03cxnp08027.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 11FGPnsT13238902 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 15 Feb 2021 16:25:49 GMT Received: from b03ledav003.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 607D86A047; Mon, 15 Feb 2021 16:25:49 +0000 (GMT) Received: from b03ledav003.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 82A0B6A054; Mon, 15 Feb 2021 16:25:48 +0000 (GMT) Received: from sbct-3.pok.ibm.com (unknown [9.47.158.153]) by b03ledav003.gho.boulder.ibm.com (Postfix) with ESMTP; Mon, 15 Feb 2021 16:25:48 +0000 (GMT) From: Stefan Berger To: keyrings@vger.kernel.org, linux-crypto@vger.kernel.org, davem@davemloft.net, herbert@gondor.apana.org.au, dhowells@redhat.com, zohar@linux.ibm.com Cc: linux-kernel@vger.kernel.org, patrick@puiterwijk.org, linux-integrity@vger.kernel.org, Stefan Berger , Dmitry Kasatkin , Vitaly Chikunov , Tianjia Zhang Subject: [PATCH v8 4/4] ima: Support EC keys for signature verification Date: Mon, 15 Feb 2021 11:25:32 -0500 Message-Id: <20210215162532.1077098-5-stefanb@linux.ibm.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210215162532.1077098-1-stefanb@linux.ibm.com> References: <20210215162532.1077098-1-stefanb@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.369,18.0.761 definitions=2021-02-15_11:2021-02-12,2021-02-15 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 mlxlogscore=999 priorityscore=1501 clxscore=1015 suspectscore=0 malwarescore=0 mlxscore=0 spamscore=0 phishscore=0 impostorscore=0 adultscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2102150124 Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Add support for IMA signature verification for EC keys. Since SHA type of hashes can be used by RSA and ECDSA signature schemes we need to look at the key and derive from the key which signature scheme to use. Since this can be applied to all types of keys, we change the selection of the encoding type to be driven by the key's signature scheme rather than by the hash type. Cc: Dmitry Kasatkin Cc: linux-integrity@vger.kernel.org Cc: David Howells Cc: keyrings@vger.kernel.org Signed-off-by: Stefan Berger Reviewed-by: Vitaly Chikunov Reviewed-by: Tianjia Zhang Acked-by: Mimi Zohar --- v7->v8: - use strncmp to check for 'ecdsa-' to match 'ecdsa-nist-p192' and 'ecdsa-nist-p256' key types; previously they were just 'ecdsa' --- include/keys/asymmetric-type.h | 6 ++++++ security/integrity/digsig_asymmetric.c | 30 ++++++++++++-------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/include/keys/asymmetric-type.h b/include/keys/asymmetric-type.h index a29d3ff2e7e8..c432fdb8547f 100644 --- a/include/keys/asymmetric-type.h +++ b/include/keys/asymmetric-type.h @@ -72,6 +72,12 @@ const struct asymmetric_key_ids *asymmetric_key_ids(const struct key *key) return key->payload.data[asym_key_ids]; } +static inline +const struct public_key *asymmetric_key_public_key(const struct key *key) +{ + return key->payload.data[asym_crypto]; +} + extern struct key *find_asymmetric_key(struct key *keyring, const struct asymmetric_key_id *id_0, const struct asymmetric_key_id *id_1, diff --git a/security/integrity/digsig_asymmetric.c b/security/integrity/digsig_asymmetric.c index a662024b4c70..23240d793b07 100644 --- a/security/integrity/digsig_asymmetric.c +++ b/security/integrity/digsig_asymmetric.c @@ -84,6 +84,7 @@ int asymmetric_verify(struct key *keyring, const char *sig, { struct public_key_signature pks; struct signature_v2_hdr *hdr = (struct signature_v2_hdr *)sig; + const struct public_key *pk; struct key *key; int ret; @@ -105,23 +106,20 @@ int asymmetric_verify(struct key *keyring, const char *sig, memset(&pks, 0, sizeof(pks)); pks.hash_algo = hash_algo_name[hdr->hash_algo]; - switch (hdr->hash_algo) { - case HASH_ALGO_STREEBOG_256: - case HASH_ALGO_STREEBOG_512: - /* EC-RDSA and Streebog should go together. */ - pks.pkey_algo = "ecrdsa"; - pks.encoding = "raw"; - break; - case HASH_ALGO_SM3_256: - /* SM2 and SM3 should go together. */ - pks.pkey_algo = "sm2"; - pks.encoding = "raw"; - break; - default: - pks.pkey_algo = "rsa"; + + pk = asymmetric_key_public_key(key); + pks.pkey_algo = pk->pkey_algo; + if (!strcmp(pk->pkey_algo, "rsa")) pks.encoding = "pkcs1"; - break; - } + else if (!strncmp(pk->pkey_algo, "ecdsa-", 6)) + /* edcsa-nist-p192 etc. */ + pks.encoding = "x962"; + else if (!strcmp(pk->pkey_algo, "ecrdsa") || + !strcmp(pk->pkey_algo, "sm2")) + pks.encoding = "raw"; + else + return -ENOPKG; + pks.digest = (u8 *)data; pks.digest_size = datalen; pks.s = hdr->sig; -- 2.29.2