我国商用公钥密码算法SM2和SM9主要是基于素域上𝐹_𝑝域的特征p,p是大素数椭圆曲线密码算法实现的,在FPGA上面实现,主要面临大数的模乘、模逆、模加、模减的时序收敛问题,这样LUT使用量肯定非常多,好歹现在高级芯片这种不是问题,但使用性价比高的客户需求那就比较烧脑。功能模块只能像俄罗斯套娃一层一层的套进去,可读性变的非常差,但省下很多LUT还是非常值得的。
实现主要参数:
素域上选用𝑦^2=𝑥^3+𝑎𝑥+𝑏作为加密曲线,令𝐸(𝐹_𝑃)={(𝑥,𝑦)|𝑦^2=𝑥^3+𝑎𝑥+𝑏}∪𝑂, 包含了椭圆曲线上的所有点,其中O是一个无穷远点,不能用有序整数对(x,y)即仿射坐标表示,用#E(𝐹_𝑞)表示E(𝐹_𝑞)上元素的个数,称为椭圆曲线的阶。SM2算法使用固定的𝐹_𝑝域,系统参数如下:
𝐹_𝑝域的特征p,p是大素数;
p:FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF
n:FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123
a:FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC
b:28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93
Gx:32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7
Gy:BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0
后续准备整理下开发心得发帖,针对大数模乘、模逆、模减、模加在FPGA应该注意的问题。