tpm2-tss-engine/README.md
wangyoukang e3456407d6 tpm2-tss-engine:add README.md file
Signed-off-by: wangyoukang <wangyoukang@xfusion.com>
2023-05-13 16:12:43 +08:00

139 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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).
# 操作
## 密钥层级
此引擎使用的密钥都位于 ECC 受限的主存储解密密钥下,此密钥在每次调用时创建
(因为 ECC 密钥创建速度比 RSA 快因此无需预先部署持久SRK密钥。
假定存储层次结构(所有者密码)的授权值是清楚的(长度为零)。
如果不是这种情况,则需要使用引擎 ctrl 进行设置
## 密钥类型
创建 RSA 密钥时具有签名和解密功能,这允许所有 RSA 密钥用于任一操作.
注意TPM 的 RSA 签名操作将使用所用哈希算法的 ASN.1 编码标识符强制标记有效负载.
这与OpelSSL的RSA接口结构不兼容。因此TPM2_RSA_Decrypt方法也用于签名操作
这也需要为此密钥激活解密功能。
ECDSA 密钥被创建为具有执行签名操作能力的 ECDSA 密钥
#编译和安装指令
编译和安装tpm2-tss-engine是可用的指令在
[INSTALL](INSTALL.md)文件中。
# 使用
为了更多的测试用力,请考虑`tests/*.sh`集成测试
For additional usage examples, please consider the integration tests under
`tests/*.sh`.
## 查看引擎信息
可以使用检索引擎信息
```
openssl engine -t -c tpm2tss
```
## 生成随机数
检索使用一组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
```
### 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
```