硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1028|回复: 9
收起左侧

[ThreadX全家桶] 请教使用NetXDuo crypto_libraries进行RSA加密的方法

[复制链接]

2

主题

72

回帖

78

积分

初级会员

积分
78
发表于 2022-10-13 10:10:26 | 显示全部楼层 |阅读模式
不知道大家有没有使用过NetXDuo 里面带的 crypto_libraries 库,最近需要用单片机跟一个设备进行HTTP进行通信,这个设备登陆阶段需要使用RSA加密的密码(密文)作为验证,目前使用crypto_libraries做了一些测试,根据需求可以将计算步骤进行分解如下:

1)将设备厂商给的 RSA 公钥进行 base64解码
2)对解码后的 RSA 公钥进行分解,得到 RSA计算需要的 模数 和 指数
3)对要加密的明文进行填充,填充至128字节
4)使用加密函数进行加密,得到密文
5)对密文进行 base64 编码,得到需要发送给设备进行验证的密文

上述步骤,有在单片机上已经实现的,还有的步骤需要借助一些网站网页版的计算工具计算,最终得到的密文是可以通过设备验证的。

目前的情况如下:
第1、5步,已经找到了相应的函数就是:_nx_utility_base64_encode  和 _nx_utility_base64_decode,只是目前还没有在单片机上验证
第2步,还没有在单片机上实现
第3步,目前是根据规则自行使用伪随机数填充的
第4步,目前已经在单片机上实现了,使用的函数是:_nx_crypto_method_rsa_init 和 _nx_crypto_method_rsa_operation

我的问题是:
第2部,能否使用 crypto_libraries 库来实现,相应的公钥分解的函数是啥
第3部,crypto_libraries 库 里面有没有相应的函数可以实现填充,省的造轮子了(虽然已经造了,但还是想知道 库里面有没有实现的方法)。



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106709
QQ
发表于 2022-10-13 12:55:08 | 显示全部楼层
得参考这个搞,他们之前做的test例子。

https://github.com/azure-rtos/ne ... hod_self_test_rsa.c
回复

使用道具 举报

2

主题

72

回帖

78

积分

初级会员

积分
78
 楼主| 发表于 2022-10-13 13:21:09 | 显示全部楼层
eric2013 发表于 2022-10-13 12:55
得参考这个搞,他们之前做的test例子。

https://github.com/azure-rtos/netxduo/blob/master/crypto_lib ...

谢谢,现在就是参考这个例子调出来的,这个例子也只是实现了我所需功能的 第4步。

base64 编解码,刚刚也试了,也是可以的,明文填充自己造了个轮子在用,现在就是差 RSA 公钥解析的功能了, 公钥解析成 模数(数组) 和 指数(数组)之后, 才是上面这个例子的用法了。现在只能先把 公钥在电脑上解析好2个数组后,然后写死在设备里面,希望设备商不要随便换 加密公钥。

主要是现在缺少相关资料,在线文档我看了,也没有把 crypto 的功能讲全,只有一部分函数。
回复

使用道具 举报

1

主题

75

回帖

78

积分

初级会员

积分
78
发表于 2022-10-14 09:59:31 | 显示全部楼层
2. 可以用这个接口来解析DER格式的证书:nx_secure_x509_certificate_initialize,解析出来的公钥存储在NX_SECURE_X509_CERT::nx_secure_x509_public_key.rsa_public_key
3. 可以用_nx_crypto_huge_number_rbg来产生指定长度的随机数
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106709
QQ
发表于 2022-10-14 12:02:36 | 显示全部楼层
catro 发表于 2022-10-14 09:59
2. 可以用这个接口来解析DER格式的证书:nx_secure_x509_certificate_initialize,解析出来的公钥存储在NX_ ...

感谢分享。
回复

使用道具 举报

2

主题

72

回帖

78

积分

初级会员

积分
78
 楼主| 发表于 2022-10-14 16:26:47 | 显示全部楼层
catro 发表于 2022-10-14 09:59
2. 可以用这个接口来解析DER格式的证书:nx_secure_x509_certificate_initialize,解析出来的公钥存储在NX_ ...

感谢分享,我试一下。
回复

使用道具 举报

8

主题

21

回帖

45

积分

新手上路

积分
45
发表于 2023-4-23 20:20:33 | 显示全部楼层
请问楼主实现了么,可以分享出来参考下你的例程么?
回复

使用道具 举报

1

主题

75

回帖

78

积分

初级会员

积分
78
发表于 2023-4-25 09:42:59 | 显示全部楼层
RSA加解密可以参考这个自测函数:https://github.com/azure-rtos/ne ... elf_test_rsa.c#L601
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106709
QQ
发表于 2023-4-26 17:49:01 | 显示全部楼层
catro 发表于 2023-4-25 09:42
RSA加解密可以参考这个自测函数:https://github.com/azure-rtos/netxduo/blob/e67c70ef358e36887bdb2ff702 ...

谢谢分享,这个应该是我二楼回复基础上做的修正版吧
回复

使用道具 举报

2

主题

72

回帖

78

积分

初级会员

积分
78
 楼主| 发表于 2024-4-15 21:39:25 | 显示全部楼层
Devil_920 发表于 2023-4-23 20:20
请问楼主实现了么,可以分享出来参考下你的例程么?

后来是实现了的,当时工作有点忙,把这个帖子忘了, 我现在相关代码发上来吧。

硬件基于STM32F407,用到了随机数发生器, 软件基于nx_crypto。

顶层函数在 Crypto_GUIDE.c 里面,有2个函数:
其中,Crypto_GUIDE_RSA_Init 是初始化函数,用于申请缓存,初始化随机数发生器等
Crypto_GUIDE_RSA_Encode函数用于加密

Crypto.rar (2.55 KB, 下载次数: 2)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 12:17 , Processed in 0.256020 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表