Trustzone RSA加解密Demo解析

精选 0 19
知识社区小编
知识社区小编 7月22日 07:09 发表
摘要:RSA密码算法由美国麻省理工学院(MIT)的Rivest, Shamir 和Adleman在1978年提出,被广泛接受并实现的通用公开密钥密码算法,目前已成为公钥密码的国际通用标准。关于RSA加密算法原理的知识,本文不再赘述,感兴趣的同学可以看一下这两篇博文:

1    先了解一下背景

1.1   RSA加密原理

RSA密码算法由美国麻省理工学院(MIT)的Rivest, Shamir 和Adleman在1978年提出,被广泛接受并实现的通用公开密钥密码算法,目前已成为公钥密码的国际通用标准。关于RSA加密算法原理的知识,本文不再赘述,感兴趣的同学可以看一下这两篇博文:

http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

1.2   RSA数字签名

1.2.1 RSA数字签名基本概念

RSA数字签名体制是基于RSA公钥密码算法的,由于RSA算法在实践中被验证了是安全的(到目前为止),这样,RSA数字签名体制在许多安全标准中得以较为广泛的应用。

RSA数字签名算法,包括签名算法和验证算法,它是基于RSA算法加密和解密算法来进行的数字签名,实际上把通过一个散列函数(本设计使用的是SHA256算法)来产生的消息摘要(MD)作为加密的对象,而不是对原文进行直接的加密。原文消息如果发生改变,消息摘要也将发生改变,进而,数字签名的值也将发生改变,也就是说有不同的消息将得到不同的数字签名。有效的数字签名使接收方可以得到正确验证消息:确实来自发送方,因为签名的私钥只有发送方自己才有,他人是无法做相同的数字签名的,如果第三方冒充发送方发出了一个消息,接收方在对数字签名进行验证时使用的是发送方公开的公钥,在第三方不知道发送方私钥的情况下,加密生成的数字签名和重新计算的数字签名必然是不同的,这样,数字签名的真实性就得到了有效的保证。

1.2.2 RSA数字签名算法的实现原理

RSA数字签名算法分为以下两个步骤:

1)        签名算法:

(1)生成消息摘要:消息在签名前首先通过SHA256算法计算相应的消息摘要。

(2)对消息摘要作RSA加密算法:采用发送方的私钥加密消息摘要,加密后的字符串序列即为要嵌入到原文中的数字签名序列值。

2)        验证签名算法:

(1)签名解密:签名值实际上是RSA加密后的消息摘要,用RSA解密算法、利用发送方的公钥对消息摘要进行解密。

(2)再进行消息摘要的计算和两个消息摘要的比较:接受方对原文利用SHA256算法重新计算一个消息摘要,得到验证者自己的消息摘要。验证者比较解密得到的消息摘要和自己的消息摘要,如果两者相同,那么验证成功,可以确定消息的完整性以及签名者的身份,否则,验证失败,确认签名是冒充的或是被篡改过的。

1.3   准备好环境

1)  基于鲲鹏芯片的TaiShan服务器;

2)openEuler操作系统;

3)  已加载安全OS和tzdriver,且已通过teecd开启安全模式;

2       CA与TA之间的通信过程

GP标准中对REE侧和TEE侧提供给CA和TA调用的接口都做出了明确的定义,包括接口函数的函数名、作用、参数说明、返回值等。在CA和TA开发过程中,需要遵循GP标准定义的接口,实现TA和CA之间通信和数据传递。

2.1   TA必备接口

每个TA都必须实现下面的五个接口函数,实现TA和CA之间通信和数据传递。

函数名称

函数介绍

TA_CreateEntryPoint

安全服务的构造函数接口,该接口在客户端应用第一次打开会话并创建TA实例时得到调用。如果此函数执行失败,则该TA实例构建失败。

TA_DestroyEntryPoint

安全服务的析构函数接口,该接口在客户端应用关闭会话并销毁TA实例时得到调用。

TA_OpenSessionEntryPoint

当客户端应用打开会话时,安全OS会调用对应TA的此接口在安全世界创建一个会话。

TA_CloseSessionEntryPoint

当客户端应用关闭会话时,安全OS会调用对应TA的此接口在安全世界关闭会话。

TA_InvokeCommand

当客户端应用发送命令(TEEC_InvokeCommand)给安全OS时,安全OS会调用对应TA的此接口在安全世界执行相应操作,比如加解密,安全存储等。

2.2   CA必备接口

CA必备接口函数与TA接口函数的对应关系如下表所示:

非安全侧接口

安全侧TA接口

说明

TEEC_OpenSession

TA_CreateEntryPoint

TA_OpenSessionEntryPoint

会话打开函数。当客户端应用执行TEEC_OpenSession时,安全OS会执行对应TA的TA_OpenSessionEntryPoint。

当TA实例未创建时,需要调用TA_CreateEntryPoint。

TEEC_InvokeTACommand

TA_InvokeCommand

执行cmd命令。

TEEC_CloseSession

TA_CloseSessionEntryPoint

TA_DestroyEntryPoint

会话关闭函数。当客户端应用执行TEEC_CloseSession时,安全OS会执行对应TA的TA_CloseSessionEntryPoint。

如果客户端应用关闭的会话为此TA的最后一个会话,则安全OS核心框架会执行TA_DestroyEntryPoint函数销毁TA实例。


2.3   CA与TA通信

CA和TA接口函数的执行过程为:

1)打开会话:客户端应用调用TEEC_OpenSession接口后,安全OS核心框架会调用安全服务的TA_CreateEntryPoint接口和TA_OpenSessionEntryPoint接口;

2)执行命令:客户端应用执行TEEC_InvokeCommand后,安全OS核心框架会调用安全服务的TA_InvokeCommandEntryPoint接口,针对客户端应用发送的命令,安全服务进行处理并返回相应结果;

3)关闭会话:客户端应用执行TEEC_CloseSession后,安全OS核心框架先调用TA的TA_CloseSessionEntryPoint,之后调用安全服务的析构函数TA_DestroyEntryPoint。

整体过程如下图所示:

3    功能概览

这里CA侧传递密钥有两种形式,一种是首先将密钥作为文件存入TEE 环境中,然后把密钥文件路径作为参数传递以进行加解密操作;另外一种直接将密钥数据作为参数传递以进行加解密操作。

根据前文的描述,CA侧执行TEEC_InvokeCommand后,安全OS核心框架会调用TA的TA_InvokeCommandEntryPoint接口,针对CA发送的命令,TA进行处理并返回相应结果。

在Demo中,传递了如下的command,相应的动作如下表所示:

3.1   建立连接

预备动作,建立CA与TA之间的通信,通过调用TEEC_InitializeContext和TEEC_OpenSession,初始化TEE Context,建立CA与TA之间的会话;

3.2   加密和解密

第一步,CA发送CMD_GENERATE_RANDOM命令,TA响应,调用TEE_GenerateRandom函数产生随机数,用于后面秘钥生成:

第二步,CA发送CMD_GENERATE_KEYPAIR命令,TA使用前面随机数,通过TEE_GenerateKey函数产生公钥-私钥对:

第三步,CA发送CMD_SAVE_KEYPAIR命令,TA调用CmdRSASaveKeypair将生成的密钥数据存储到指定路径中:

第四步,CA发送CMD_READ_KEYPAIR命令,TA调用CmdRSAReadKeypair函数读取存储的秘钥文件,获得公共秘钥数据:

第五步,CA发送CMD_ENC_OAEP_MGF1_SHA512命令,TA调用用前面生成的公共秘钥数据,以TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA512模式去加密数据对要传输的数据进行加密:

第六步,CA发送CMD_DEC_OAEP_MGF1_SHA512命令,TA使用前面生成的私钥数据,对加密的数据进行解密,并将原始数据与解密数据进行对比:

image.png

3.3   签名和验签

第七步,数字签名,CA发送CMD_SIGN_PSS_MGF1_SHA256命令,TA主要实现以下功能:

(1)生成消息摘要:消息在签名前首先通过SHA256算法计算相应的消息摘要。

(2)对消息摘要作RSA加密算法:采用发送方的私钥加密消息摘要,加密后的字符串序列即为要嵌入到原文中的数字签名序列值。

第八步,验证数字签名,CA发送CMD_VERIFY_PSS_MGF1_SHA256命令,TA主要实现以下功能:

(1)签名解密:签名值实际上是RSA加密后的消息摘要,用RSA解密算法、利用发送方的公钥对消息摘要进行解密。

(2)再进行消息摘要的计算和两个消息摘要的比较:接受方对原文利用SHA256算法重新计算一个消息摘要,得到验证者自己的消息摘要。验证者比较解密得到的消息摘要和自己的消息摘要,如果两者相同,那么验证成功,可以确定消息的完整性以及签名者的身份,否则,验证失败,确认签名是冒充的或是被篡改过的。

3.4   断开连接

调用TEEC_CloseSession和TEEC_FinalizeContext函数关闭会话关闭CA与TA之间的会话和上下文。

收功。

点赞 0 收藏(0)    分享
相关标签: RSA 加解密 Trustzone
0个评论
  • 消灭零评论