查看: 1462|回复: 5

[原创] RSA基础及在LPC55上的实现

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20213
最后登录
2024-5-11
发表于 2022-2-28 17:18:15 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2022-2-28 17:21 编辑

  RSA基础及在LPC55上的实现
    RSA是一种非对称公钥密码算法,也是现在使用最广泛的公钥密码算法,通过使用公钥解密,私钥加密,来完成加解密操作。为支持安全需求,在LPC55系列中,也多处藏有它的身影,例如:
-RSA私钥签名安全启动中的引导代码,在安全启动中通过RSA验签来验证代码的真实性
-图像使用RSA签名,摘要计算要使用RSA密钥
    那么RSA的基本原理是什么,如何通过LPC55来确切实践呢?本文将浅谈RSA理论与在LPC55中的实现。
1  RSA基础
1.1 RSA加密:
-公式表达为:明文^Emod N = 密文
-解释:将明文和自己做E次乘方,然后将结果除以N求余数,余数就是密文。
1.2 RSA解密:
-公式表达为:密文^Dmod N = 明文
-解释:将密文和自己做D次乘法,再对结果除以N求余数,结果为明文。

下面用图表来总结加密与解密过程:
加解密归纳表.png
1.3 密钥对生成:
    由加密和解密过程得知我们需要得到D、E、N的值才能进行操作。在求解时按N、E、D的顺序生成密钥是最快捷的,且需要再添加L(仅在生成密钥过程中使用)完成求解。
-N:N是由任意两个很大的质数P、Q相乘得到,它与E组成公钥,与D组成私钥。
-L:L是P-1与Q-1的乘积
-E:E一般取大于1小于L的任意与L互质的数
-D:由公式由E*D mod L=1得到
1.4 举例:
    下面为方便读者理解,举一个较小的例子来验证:
求N时,不妨令P=17,Q=19,得到N=323,L=16*18=144,E取大于1小于144与N互质的数,E=5,最后由E*D modL=1得到D=29。此时,我们得到了公钥:E=5,N=323,私钥:D=29,N=323。
取明文进行加密,任取一个数,例如123。
加密算法为:123^5mod 323 = 225,所以密文为225。
解密算法为:225^29mod 323 = 123,所以明文为123。
与理论吻合。
2 RSA在LPC55上的实现
    mbedtls 是最小巧的SSL代码库。高效、便于移植和集成。支持常见的安全算法,如:AES、DES、RSA、ECC、SHA256、MD5、BASE64等等,它提供了具有直观的 API 和可读源代码的 SSL 库,即开即用,可以在大部分系统上直接构建它,为方便大家更直观的感受RSA算法在程序中的实现,故以LPC55系列中MCUXpresso SDK示例为例,路径为mbedtls_examples\mbedtls_selftest。
    由于演示版本SDK中demo默认开启RSA算法,可直接使用,若用户版本未开启可按照路径mbedtls/include/mbedtls/config.h自己进行配置。
2.1确定参数
    从源文件调试进入mbedtls_rsa_self_test函数,即进入rsa.c文件中,RSA所需要的各个核心参数N、E、D、P、Q等已提前清晰定义(如下图),通过查看算法运行情况和运行结果来验证RSA算法是否能在LPC55中实现。

rsa.c:
核心参数.png
2.2 RSA加密操作与解密操作
加密操作:
    mbedtls_rsa_pkcs1_encrypt是RSA加密算法实现函数,*input为输入数据,即明文,*output为输出数据,即密文。
该函数所用到的各个参数如图所示:
加密算法参数.png
    除以上参数外,*ctx所包含的内容就是需要进行RSA运算的各个重要参数如:RSA_N、RSA_E、RSA_D等,详细数据2.1中已给出。明确参数意义与具体数值后,进行程序调试并记录下运行前后明文密文所对应的数值。

    在加密操作中,rsa_plaintext为输入的明文数据,rsa_ciphertext为输出的密文数据,二者数值是我们的重点关注。运行前rsa_plaintext中的数据如下图所示(与解密后的输出相对比)。
加密前明文.png
  输出的密文及其位置如图(与解密操作的输入相对比)。
加密后密文.png
  此时,加密过程已经完成,分别记录两个变量的数值,下面开始进行解密。

解密操作:
    mbedtls_rsa_pkcs1_decrypt是RSA解密算法实现函数,*input为加密的结果,即密文,*output为明文,其他参数与加密函数类似。
解密算法参数.png
    在解密操作中,rsa_ciphertext为输入的密文数据(也是加密操作输出的密文数据),rsa_decrypted为解密操作后输出的明文数据,rsa_decrypted数值是我们的重点关注。
解密前密文.png
     得到输出后的解密结果如下图,通过rsa_decrypted与rsa_plaintext数据对比,可得到经过加密解密后,符合RSA理论数据,算法在LPC55上实现成功。
解密后明文.png
小结:

    在mbedtls 这一ssl代码库中包括很多常见的安全算法,如:AES、DES、RSA、ECC、SHA256、MD5、BASE64等等,RSA仅仅是其中的一个, 而对于RSA算法,除了它的加密解密功能,还有数字签名验签等功能,因此本文的作用仅仅是抛砖引玉,在LPC55基础上浅谈RSA,如果读者对加解密算法感兴趣,也可以继续尝试其他算法和实例,将算法应用于更多领域。

回复

使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 1338 天

    [LV.10]以坛为家III

    88

    主题

    4296

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9067
    最后登录
    2024-5-11
    发表于 2022-2-28 17:42:06 | 显示全部楼层
    这样下去,嵌入式MCU的算力有一大部分都被加密/解密给占用了。
    通讯这个事情,貌似也没有别的办法了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 17:30
  • 签到天数: 1487 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    93291
    最后登录
    2024-5-11
    发表于 2022-2-28 18:42:33 | 显示全部楼层
    LPC55有AES硬件加密,通常情况下应该够用了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    20213
    最后登录
    2024-5-11
     楼主| 发表于 2022-3-2 14:38:12 | 显示全部楼层
    本帖最后由 小恩GG 于 2022-3-2 16:29 编辑
    jobszheng5 发表于 2022-2-28 17:42
    这样下去,嵌入式MCU的算力有一大部分都被加密/解密给占用了。
    通讯这个事情,貌似也没有别的办法了。 ...

    RSA 是非对称加密算法,一般在建立连接认证的时候使用,连接一旦完成了,以后数据的加密就用对称加密算法了,对称加密给MCU的负担就少很多。
    就是说RSA只在建立连接时候使用,总体来说没有占用MCU太多资源。
    mbedtls底层使用了casper加速器,提高了算法的执行速度。
    如果是LPC55S69, 双核系统的其中一个可以用于算法实现,我们没有这样的demo,不过在技术上是可行的。


    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 1338 天

    [LV.10]以坛为家III

    88

    主题

    4296

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9067
    最后登录
    2024-5-11
    发表于 2022-3-2 15:41:05 | 显示全部楼层
    小恩GG 发表于 2022-3-2 14:38
    RSA 是非对称加密算法,一般在建立连接认证的时候使用,连接一旦完成了,以后数据的加密就用对称加密算法 ...

    谢谢 小恩GG。
    等有机会,我也对比一下实验,分享出来数据
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    20213
    最后登录
    2024-5-11
     楼主| 发表于 2022-3-2 16:22:06 | 显示全部楼层
    jobszheng5 发表于 2022-3-2 15:41
    谢谢 小恩GG。
    等有机会,我也对比一下实验,分享出来数据

    太好了!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-5-12 08:14 , Processed in 0.116747 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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