lanse闪电 发表于 2022-10-13 10:10:26

请教使用NetXDuo crypto_libraries进行RSA加密的方法

不知道大家有没有使用过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 库 里面有没有相应的函数可以实现填充,省的造轮子了(虽然已经造了,但还是想知道 库里面有没有实现的方法)。



eric2013 发表于 2022-10-13 12:55:08

得参考这个搞,他们之前做的test例子。

https://github.com/azure-rtos/netxduo/blob/master/crypto_libraries/src/nx_crypto_method_self_test_rsa.c

lanse闪电 发表于 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 的功能讲全,只有一部分函数。

catro 发表于 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来产生指定长度的随机数

eric2013 发表于 2022-10-14 12:02:36

catro 发表于 2022-10-14 09:59
2. 可以用这个接口来解析DER格式的证书:nx_secure_x509_certificate_initialize,解析出来的公钥存储在NX_ ...

感谢分享。

lanse闪电 发表于 2022-10-14 16:26:47

catro 发表于 2022-10-14 09:59
2. 可以用这个接口来解析DER格式的证书:nx_secure_x509_certificate_initialize,解析出来的公钥存储在NX_ ...

感谢分享,我试一下。 :lol

Devil_920 发表于 2023-4-23 20:20:33

请问楼主实现了么,可以分享出来参考下你的例程么?

catro 发表于 2023-4-25 09:42:59

RSA加解密可以参考这个自测函数:https://github.com/azure-rtos/netxduo/blob/e67c70ef358e36887bdb2ff7029807eaf234e97f/crypto_libraries/src/nx_crypto_method_self_test_rsa.c#L601

eric2013 发表于 2023-4-26 17:49:01

catro 发表于 2023-4-25 09:42
RSA加解密可以参考这个自测函数:https://github.com/azure-rtos/netxduo/blob/e67c70ef358e36887bdb2ff702 ...

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

lanse闪电 发表于 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函数用于加密


页: [1]
查看完整版本: 请教使用NetXDuo crypto_libraries进行RSA加密的方法