笔者从事各种数据加解密算法相关的工作若干年,今天要说的是基于大数分解难题的RSA算法,可能有些啰嗦。
事情的起因是这样的,我最近针对一款芯片进行RSA CRT解密的性能优化。因为期望值是1024bits长度能做到20ms左右,但我的实现结果接近40ms。为了找到更加快速的实现方式,我在各大论坛查找不基于Jebelean和Montgomery的模乘实现。在查找过程中非常偶然的获得了一组密钥数据,现在按照一般生成密钥的顺序,先对该组数据简单说明一下,证明其正确性。
1. 密钥产生过程
选取两个512bits的大素数
P =
E3DB3B70833CFAC57472BE9234AECC4E0EECFD909015F199BDD109F05F89CE72B2CDAE24BD4D7923C1472DC719F9B987649C96675685D9F4EEDDA9EAE5C853EF
Q =
D534A891DB7899D60A917379105B9EE4589CB32046F850489539938C2EA8DF77A55BB21FA7B4FC30B2CAB67DF530918BB1267530F6A2E0C82765C5C96F27A21D
这两个数据,我使用Robin-Miller素数检测算法经过非常多次的验证,可以认定是素数(Robin-Miller素数检测是概率性检测,但可通过重复次数将概率变得极高)。
选取公钥E =
03