7 Star 0 Fork 5

src-openEuler/tpm2-tss-engine

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause

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文件中。

使用

为了更多的测试用力,请考虑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
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

support openssl use intel tss stack 展开 收起
README
BSD-3-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/src-openeuler/tpm2-tss-engine.git
git@gitee.com:src-openeuler/tpm2-tss-engine.git
src-openeuler
tpm2-tss-engine
tpm2-tss-engine
master

搜索帮助