From e3456407d6281440aa7553349a1fd6533e46e89d Mon Sep 17 00:00:00 2001 From: wangyoukang Date: Sat, 13 May 2023 16:09:11 +0800 Subject: [PATCH] tpm2-tss-engine:add README.md file Signed-off-by: wangyoukang --- README.md | 151 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 126 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 63284a9..5d18ef6 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,138 @@ -# tpm2-tss-engine +tpm2-tss-engine +# 介绍 +这个tpm2-tss-engine工程为openssl实现对于可信平台模块(TPM2.0)引擎加密,调用满足TCG规则的tss协议栈. +它使用 TSS 2.0 的增强型系统 API (ESAPI) 接口进行向下通信。它支持 RSA 解密和签名以及 ECDSA 签名. +如果你想找到遵循OpenSSL3.0提供的API,而不是引擎的API,请转到这个项目tpm2-openssl(https://github.com/tpm2-software/tpm2-openssl). -#### 介绍 -support openssl use intel tss stack +# 操作 -#### 软件架构 -软件架构说明 +## 密钥层级 +此引擎使用的密钥都位于 ECC 受限的主存储解密密钥下,此密钥在每次调用时创建 +(因为 ECC 密钥创建速度比 RSA 快),因此,无需预先部署持久SRK密钥。 +假定存储层次结构(所有者密码)的授权值是清楚的(长度为零)。 +如果不是这种情况,则需要使用引擎 ctrl 进行设置 -#### 安装教程 +## 密钥类型 +创建 RSA 密钥时具有签名和解密功能,这允许所有 RSA 密钥用于任一操作. +注意:TPM 的 RSA 签名操作将使用所用哈希算法的 ASN.1 编码标识符强制标记有效负载. +这与OpelSSL的RSA接口结构不兼容。因此,TPM2_RSA_Decrypt方法也用于签名操作, +这也需要为此密钥激活解密功能。 -1. xxxx -2. xxxx -3. xxxx +ECDSA 密钥被创建为具有执行签名操作能力的 ECDSA 密钥 +#编译和安装指令 +编译和安装tpm2-tss-engine是可用的指令在 +[INSTALL](INSTALL.md)文件中。 -#### 使用说明 +# 使用 -1. xxxx -2. xxxx -3. xxxx +为了更多的测试用力,请考虑`tests/*.sh`集成测试 +For additional usage examples, please consider the integration tests under +`tests/*.sh`. -#### 参与贡献 +## 查看引擎信息 +可以使用检索引擎信息 +``` +openssl engine -t -c tpm2tss +``` -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request +## 生成随机数 +检索使用一组10个随机数 +``` +openssl rand -engine tpm2tss -hex 10 +engine "tpm2tss" set. +WARNING:esys:src/tss2-esys/esys_tcti_default.c:137:tcti_from_file() Could not load TCTI file: libtss2-tcti-default.so +WARNING:esys:src/tss2-esys/esys_tcti_default.c:137:tcti_from_file() Could not load TCTI file: libtss2-tcti-tabrmd.so +40ac9191079e490d17b7 +WARNING:esys:src/tss2-esys/esys_tcti_default.c:137:tcti_from_file() Could not load TCTI file: libtss2-tcti-default.so +WARNING:esys:src/tss2-esys/esys_tcti_default.c:137:tcti_from_file() Could not load TCTI file: libtss2-tcti-tabrmd.so +``` +注意:这些警告源于tpm2-tss库且不是问题,只要之后由不同的tcti建立了TPM链接。 +## RSA操作 -#### 特技 +### RSA加密 +以下命令序列使用 TPM 创建 RSA 密钥,导出 +公钥,加密数据文件并使用 TPM 解密: +``` +tpm2tss-genkey -a rsa -s 2048 mykey +openssl rsa -engine tpm2tss -inform engine -in mykey -pubout -outform pem -out mykey.pub +openssl pkeyutl -pubin -inkey mykey.pub -in mydata -encrypt -out mycipher +openssl pkeyutl -engine tpm2tss -keyform engine -inkey mykey -decrypt -in mycipher -out mydata +``` +或者,可以使用 TPM 密钥直接加密数据: +``` +openssl pkeyutl -engine tpm2tss -keyform engine -inkey mykey -encrypt -in mydata -out mycipher +``` -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +### RSA 签名 +以下命令序列使用 TPM 创建 RSA 密钥,导出 +公钥,使用 TPM 签署数据文件并验证签名: +``` +openssl rsa -engine tpm2tss -inform engine -in mykey -pubout -outform pem -out mykey.pub +openssl pkeyutl -engine tpm2tss -keyform engine -inkey mykey -sign -in mydata -out mysig +openssl pkeyutl -pubin -inkey mykey.pub -verify -in mydata -sigfile mysig +``` +可选的,可以直接使用验证数据 +`openssl pkeyutl -engine tpm2tss -keyform engine -inkey mykey -verify -in mydata -sigfile mysig` +注意:'mydata'一定不能超过RSA密钥的大小,因为这些操作没有对数据执行任何的哈希 + +## ECDSA 操作 +以下命令序列使用 TPM 创建 ECDSA 密钥,符号 +使用 TPM 并验证签名的数据文件: +``` +tpm2tss-genkey -a ecdsa mykey +openssl pkeyutl -engine tpm2tss -keyform engine -inkey mykey -sign -in mydata -out mysig +openssl pkeyutl -engine tpm2tss -keyform engine -inkey mykey -verify -in mydata -sigfile mysig +``` + +导出公钥使用: + +``` +openssl ec -engine tpm2tss -inform engine -in mykey -pubout -outform pem -out mykey.pub +``` + +## 自签名证书生成操作 +以下命令序列使用 TPM 密钥创建自签名证书。Openssl 命令将 tpm2tss 设置为引擎, +并根据提供的 CSR 配置信息生成自签名证书。 +``` +$ tpm2tss-genkey -a rsa rsa.tss +$ openssl req -new -x509 -engine tpm2tss -key rsa.tss -keyform engine -out rsa.crt +``` + +## 使用受限密钥签名 +可以使用受限制的 ECDSA 密钥进行签名,但需要注意的是, +TPM 必须用于摘要,因此必须改用更高级别的摘要和签名操作,例如: +``` +$ openssl dgst -engine tpm2tss -keyform engine -sha256 -sign ${HANDLE} -out mysig mydata.txt +``` +其中$ {handle}是由外部工具创建的限制密钥的tpm持久句柄ID +(因为tpm2tss-genkey不支持创建受限密钥)。 + +## TLS和s_server +该引擎可用于使用OpenSSL创建TLS的所有地方 +安全通道连接。您可以指定命令 +``` +./tpm2tss-genkey -a rsa rsa.tss +openssl req -new -x509 -engine tpm2tss -key rsa.tss -keyform engine -out rsa.crt +openssl s_server -cert rsa.crt -key rsa.tss -keyform engine -engine tpm2tss -accept 8443 +``` + +但是,对于ECDSA密钥,需要指定哈希算法,因为TPM不支持SHA512。您可以普遍列入SHA512. +通过openssl.cnf可以做到这一点。请参阅此页面上的“ signaturealgorithms”配置文件命令: +https://www.openssl.org/docs/man1.1.1/man3/SSL_CONF_cmd.html + +注意:仅在OpenSSL 1.1.0和新版本上支持使用HSM保护的私钥的S_Server使用 + +## 开发前缀 +为了在没有“make install”的情况下使用这个引擎进行测试调用: +``` +export LD_LIBRAY_PATH=${TPM2TSS}/src/tss2-{tcti,mu,sys,esys}/.libs +export PKG_CONFIG_PATH=$PWD/../tpm2-tss/lib +./bootstrap +./configure \ + CFLAGS="-I$PWD/../tpm2-tss/include" \ + LDFLAGS="-L$PWD/../tpm2-tss/src/tss2-{esys,sys,mu,tcti}/.libs" +make +make check +``` -- Gitee