TA签名验签

  • 1、TA的签名
  • 2、TA的验签

★★★ 友情链接 : 个人博客导读首页—点击此处 ★★★

1、TA的签名

在optee或sdk的目录下,有一个default_ta.pem(RSA2048 priv key)和sign.py签名脚本. 在编译TA结束后,会使用这个脚本和key对TA进行签名…

  • export-ta_arm64/keys/default_ta.pem
  • export-ta_arm64/scripts/sign.py

在编译TA时,会调用到TA中的link.mk, 在该文件文件中可以看到rsakey和签名脚本sign.py的引用和makefile的依赖关系.

  • xxx.elf 是编译后的二进制文件
  • xxx.dump 是dump文件
  • xxx.stripped.elf 是删除符号表的二进制文件
  • xxxx.ta 是签名后的文件
(export-ta_arm64/mk/link.mk_SIGN = $(TA_DEV_KIT_DIR)/scripts/sign.py
TA_SIGN_KEY ?= $(TA_DEV_KIT_DIR)/keys/default_ta.pem
......
$(link-script-pp): $(link-script) $(MAKEFILE_LIST)@$(cmd-echo-silent) '  CPP     $@'$(q)mkdir -p $(dir $@)$(q)$(CPP$(sm)) -Wp,-P,-MT,$@,-MD,$(link-script-dep) \$(link-script-cppflags-$(sm)) $< > $@$(link-out-dir)/$(binary).elf: $(objs) $(libdeps) $(link-script-pp)@$(cmd-echo-silent) '  LD      $@'$(q)$(LD$(sm)) $(ldargs-$(binary).elf) -o $@$(link-out-dir)/$(binary).dmp: $(link-out-dir)/$(binary).elf@$(cmd-echo-silent) '  OBJDUMP $@'$(q)$(OBJDUMP$(sm)) -l -x -d $< > $@$(link-out-dir)/$(binary).stripped.elf: $(link-out-dir)/$(binary).elf@$(cmd-echo-silent) '  OBJCOPY $@'$(q)$(OBJCOPY$(sm)) --strip-unneeded $< $@$(link-out-dir)/$(binary).ta: $(link-out-dir)/$(binary).stripped.elf \$(TA_SIGN_KEY)@echo '  SIGN    $@'$(q)$(SIGN) --key $(TA_SIGN_KEY) --uuid $(binary) --version 0 \

2、TA的验签

在编译optee_os时,pem_to_pub_c.py脚本中将default_ta.pem中解析出der格式rsa_pub公钥,放到了ta_pub_key.c文件的ta_pub_key_modulus数组中

(optee_os/core/sub.mk)
ifeq ($(CFG_WITH_USER_TA),y)
gensrcs-y += ta_pub_key
produce-ta_pub_key = ta_pub_key.c
depends-ta_pub_key = $(TA_SIGN_KEY) scripts/pem_to_pub_c.py
recipe-ta_pub_key = scripts/pem_to_pub_c.py --prefix ta_pub_key \--key $(TA_SIGN_KEY) --out $(sub-dir-out)/ta_pub_key.c
cleanfiles += $(sub-dir-out)/ta_pub_key.c
endif

ta_pub_key.c文件是生成在out目录的,编译的时候会引用到.
cat ./optee_os/out/arm-plat-xxxx/core/ta_pub_key.c

#include <stdint.h>
#include <stddef.h>const uint32_t ta_pub_key_exponent = 65537;const uint8_t ta_pub_key_modulus[] = {0xa6, 0x5a, 0x18, 0xad, 0xc0, 0xb3, 0xce, 0xe3,
0x0c, 0x90, 0x2b, 0x7d, 0x40, 0x9b, 0xac, 0xbb,
0x5a, 0x49, 0x88, 0x42, 0x0a, 0xb1, 0xe0, 0x92,
0xc0, 0x86, 0x91, 0xe6, 0x9e, 0xef, 0xa0, 0xe1,
0xf1, 0x2f, 0x90, 0xf6, 0x66, 0xdd, 0xea, 0x15,
0x5a, 0xc0, 0x28, 0xb4, 0x9d, 0xdf, 0x52, 0x0c,
0x6e, 0xa5, 0xc6, 0x19, 0x43, 0xac, 0x69, 0xa8,
0xf2, 0x5f, 0xfe, 0x60, 0x00, 0xa5, 0xd2, 0x3a,
0xcc, 0x12, 0x01, 0xf3, 0x5b, 0xba, 0x0c, 0x51,
0x1c, 0x2c, 0xf4, 0xb0, 0x77, 0xb9, 0xd6, 0x72,
0x35, 0x1c, 0x0f, 0x73, 0xcd, 0x2f, 0x16, 0xf9,
0xba, 0x89, 0x84, 0xa0, 0x9b, 0xbf, 0x8b, 0x5b,
0x7f, 0xe8, 0x8b, 0x8b, 0x9f, 0xc8, 0x71, 0xea,
0x1c, 0x6c, 0x1f, 0x00, 0xa0, 0xee, 0xca, 0x3e,
0xbf, 0x18, 0x8e, 0x57, 0x9b, 0x48, 0x66, 0xeb,
0x8b, 0xd4, 0x40, 0x51, 0xae, 0x86, 0xa1, 0x86,
0xf8, 0xd0, 0x0b, 0xfa, 0xb6, 0x2e, 0x25, 0x2e,
0x05, 0xff, 0x76, 0x01, 0x46, 0xd7, 0x3d, 0xeb,
0x1f, 0x7c, 0xfc, 0xdf, 0x1e, 0x82, 0x8b, 0x5e,
0xb0, 0xca, 0xa3, 0xea, 0x16, 0xbe, 0x2d, 0x6e,
0x54, 0x50, 0x9c, 0xb8, 0x41, 0xef, 0x17, 0xc7,
0x7f, 0x60, 0x54, 0xaa, 0xf9, 0x70, 0xa0, 0xf8,
0x98, 0x2e, 0x82, 0xf9, 0x8c, 0x5f, 0xfb, 0x9c,
0x88, 0x8e, 0x77, 0xb0, 0x32, 0x72, 0x99, 0x1a,
0xe0, 0x04, 0x5e, 0xbf, 0x1d, 0xaa, 0xf7, 0xf0,
0x05, 0x3c, 0xb4, 0x95, 0xdd, 0x4d, 0xba, 0x3a,
0x71, 0xa1, 0xf8, 0x72, 0x8e, 0x1d, 0x98, 0xe3,
0x13, 0xba, 0xca, 0xb0, 0x27, 0xbf, 0x87, 0x59,
0x54, 0x27, 0xf8, 0xe8, 0xec, 0xc6, 0x85, 0x37,
0xd2, 0x3a, 0x95, 0xe4, 0xa5, 0x09, 0x9a, 0xd0,
0x1f, 0xa3, 0x86, 0xb0, 0x92, 0xd8, 0x02, 0x1e,
0x33, 0x75, 0xdb, 0x26, 0xbf, 0x27, 0xfc, 0x35,
};
const size_t ta_pub_key_modulus_size = sizeof(ta_pub_key_modulus);

在open_ta时,会调用到shdr_verify_signature对TA进行验签。我们可以看到在crypto_bignum_bin2bn(ta_pub_key_modulus, ta_pub_key_modulus_size,
key.n)中读取了公钥数组,然后调用rsa_verify

TEE_Result shdr_verify_signature(const struct shdr *shdr)
{struct rsa_public_key key;TEE_Result res;uint32_t e = TEE_U32_TO_BIG_ENDIAN(ta_pub_key_exponent);size_t hash_size;if (shdr->magic != SHDR_MAGIC)return TEE_ERROR_SECURITY;if (TEE_ALG_GET_MAIN_ALG(shdr->algo) != TEE_MAIN_ALGO_RSA)return TEE_ERROR_SECURITY;res = tee_hash_get_digest_size(TEE_DIGEST_HASH_TO_ALGO(shdr->algo),&hash_size);if (res)return TEE_ERROR_SECURITY;if (hash_size != shdr->hash_size)return TEE_ERROR_SECURITY;res = crypto_acipher_alloc_rsa_public_key(&key, shdr->sig_size);if (res)return TEE_ERROR_SECURITY;res = crypto_bignum_bin2bn((uint8_t *)&e, sizeof(e), key.e);if (res)goto out;res = crypto_bignum_bin2bn(ta_pub_key_modulus, ta_pub_key_modulus_size,key.n);if (res)goto out;res = crypto_acipher_rsassa_verify(shdr->algo, &key, -1,SHDR_GET_HASH(shdr), shdr->hash_size,SHDR_GET_SIG(shdr), shdr->sig_size);
out:crypto_acipher_free_rsa_public_key(&key);if (res)return TEE_ERROR_SECURITY;return TEE_SUCCESS;
}

[optee]-TA的签名和验签相关推荐

  1. 【OP-TEE】 TA的签名与验签 基于optee 3.11

    TA的签名 以optee-os 3.11版本为例.在optee_os目录下,存放着签名的私钥和签名脚本. 工程目录/optee_os/keys/default_ta.pem 工程目录/optee_os ...

  2. OP-TEE之TA签名、验签及TA加载过程

    OP-TEE的TA签名.验签以及TA加载过程 文章目录 OP-TEE的TA签名.验签以及TA加载过程 一.TA的签名及验签 1.TA的签名 2.TA的public key处理 3.TA的验签 二.TA ...

  3. 数字证书应用综合揭秘(包括证书生成、加密、解密、签名、验签)

    引言 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件.为现实网络安全化标准如今大部分的 B2B.B2C.P2P.O2O 等商业网站含有重要企业资料个人资料的信息资信网站 ...

  4. PHP SHA1withRSA加密生成签名及验签

    最近公司对接XX第三方支付平台的代付业务,由于对方公司只有JAVA的demo,所以只能根据文档自己整合PHP的签名加密,网上找过几个方法,踩到各种各样的坑,还好最后算是搞定了,话不多说,代码分享出来. ...

  5. ASP VBSCRIPT VBA RSA 公钥加密 私钥解密 私钥签名 公钥验签

    <% '@title: Class_Crypt_Rsa '@author: ekede.com '@date: 2020-10-28 '@description: RSA 公钥加密->私钥 ...

  6. asp版 vbscript RSA公钥加密 / 私钥解密 / 私钥签名 / 公钥验签(支持中文)分段加密解密

    最近有空在把自己的asp站点后端函数全部整理了下,在弄RSA的时候遇到了坑了,然后找到下面这位兄弟刚好发布的文章: https://blog.csdn.net/todaygods/article/de ...

  7. 支付宝支付API之签名与验签

    支付宝开发平台支付API文档: https://docs.open.alipay.com/291/106130 对接支付API出现问题的主要原因:数据被转义,所以在调试时先把数据可以写死 注意:在调试 ...

  8. 使用RSA、MD5对参数生成签名与验签

    在日常的工作中,我们对外提供的接口或调用三方的接口往往有一步生成签名或验签的步骤,这个步骤主要是验证调用方是 不是合法的以及内容是否被修改.比如:对于某些网上公开下载的软件,视频,尤其是镜像文件.如果 ...

  9. 分享一个RSA加解密工具类,公钥加密私钥解密、私钥加密公钥解密、私钥签名公钥验签、生成公钥私钥

    测试: public static void main(String[] args) {try {//生成公钥私钥Map<String, Object> map = RSAUtil.ini ...

最新文章

  1. 2022-2028年中国氟橡胶产业竞争现状及发展前景分析报告
  2. Discuz论坛架设从零起步之二
  3. 计蒜客 - Distance on the tree(树链剖分+离线处理+线段树)
  4. 重构的小故事 Change Value to Reference or Vice Verse
  5. P4022-[CTSC2012]熟悉的文章【广义SAM,dp,单调队列】
  6. mysql table as_Mysql中create table as与like命令的区别
  7. 2019北京国际智慧城市、物联网、大数据博览会
  8. ES6的介绍和let的使用|-ES6连载1
  9. frameset框架如何使左边页面显示,隐藏?wj-wangjun
  10. HorizontalScrollView实现侧滑效果
  11. 卡西欧手机计算机软件,卡西欧5800计算器手机版app
  12. SAS和SATA它两的相同点与不同点
  13. 大数据学习零基础能够学会不?
  14. JavaScript课堂笔记
  15. nova service的heatbeat机制
  16. linux如何开启screen窗口,如何使用 Linux screen
  17. 关于安卓手机安装obb软件包的一个小问题
  18. 高效压缩位图RoaringBitmap的原理与应用
  19. css样式超出部分省略号
  20. Mac虚拟机安装win7攻略 必须点赞

热门文章

  1. 腾讯清新云计算数据中心主体工程明年初竣工
  2. python如何在循环中保存文件_python-如何在for循环中更改为另一行文件
  3. NLP之ASR:语音识别技术(Automatic Speech Recognition)的简介、发展历史、案例应用之详细攻略
  4. Py之moviepy:python库之moviepy的简介、安装、使用方法详细攻略
  5. Py之wordcloud:python中非常有趣的词云图wordcloud简介、安装、使用方法、案例应用详细攻略
  6. 自动化机器学习(二)自动构建机器学习流水线
  7. 方差过滤: Removing features with low variance
  8. 卷积神经网络(cnn)的体系结构
  9. 《疯狂Java讲义》7
  10. OS_CORE.C(2)