USER GUIDE / SECURITY / SC RSA / OVERVIEW
概述
RSA 是一种非对称加密算法,在加密和解密过程中使用不同的密钥。该模块基于 RSA 加密算法的原理,使用公钥对明文进行加密,或者使用私钥对密文进行解密。
特性
- 最大密钥长度为 4096bit
- N 的长度可调,范围在 96bit~4096bit
- CPU 的多次读写
- 结果数据读取完成后,内部 N、E、M、中间数据以及结果数据所对应的 RAM 自动复位为零。
- 支持单纯的 RSA 运算
模块框图

模块功能描述及处理流程
- rsa_slave:将 AHB 做跨时钟域处理,以及根据写数据计算 M 的长度 m_len_w,以及 E 的长度 e_len_w。
- rsa_ram_ctrl:存储来自 rsa_slave 的 N、M、E 数据,以及来自 rsa_bi_mul 计算的中间数据和最终数据 P。根据 E 控制内部三块 RAM 的交换使用,并将读数据传递给 rsa_bi_mul 计算。
- rsa_bi_mul:以密钥长度为 2048bit 举例:对于 2048bitx2048bit 的乘法器,通过 a ctrl 和 b ctrl 接口获取被乘数和乘数,通过 cctrl 接口获取乘法的中间数据以及输出乘法的计算结果。对于取模中的每一次循环 2112bit-64bitx2048bit,被乘数为 rsa_div 模块的 quo+div_p,乘数通过 bctrl 接口获取乘数,通过 c ctrl 接口获取被减数以及输出当前循环的计算结果。对于 div_p 时的 64bitx32bit+64bit,被乘数为 quo,乘数为 N 的次高 32bit n_bms,加数为 rem 左移 32 位。在输出最终有效数据的同时,通过 nctrl 接口获取 N 数据,并将计算结果、N 数据以及结果数据的长度 c_len 一起传递给 rsa_bilt 做数据的比较。
- rsa_bilt:比较 N 和 rsa_bi_mul 模块的计算结果的大小,输出 break 信号决定取模是否结束,如果没有结束,控制 rsa_div 做除法。
- rsa_div:做 96bit/32bit 的除法,被除数为 rsa_bi_mul 模块的 o_last(结果数据的高 96bit 数据),除数为 N 的高 32bitn_bm。