0x01 简介
RSA算法是公钥加密算法,即可用于数据加密也可以用于数字签名。RSA基于一个简单的数论事实,两个大素数相乘十分容易,将其进行因式分解确实困难的。这篇文章不涉及RSA算法的原理,只涉及RSA算法的流程
0x02 算法流程
流程时挺简单的
- 选取两个大素数p和q,为了获得最高安全性,设两数长度一样
- 计算n=pq,n称为模
- 计算欧拉函数: φ \varphi φ(n)=(p-1)(q-1)
- 选取加密密钥e,其与 φ \varphi φ(n)互素。如果选择的e值合适,RSA加解密的速度会加快。e的常用值为3、17、和65537(2^16+1)
- 使用扩展欧几里德算法求出e模 φ \varphi φ(n)的逆元d。ed ≡ \equiv ≡ 1mod φ \varphi φ(n)
- 公钥为e和n,私钥为d,p和q可以丢弃,但是必须保密
- 加密消息m时,将其看成一个大整数,并把它分成比n小的数据分组,按 c i c_i ci = m i e m_i^e mie mod n
- 解密密文c时,取每个加密后的分组 c i c_i ci 并计算, m i m_i mi = c i d c_i^d cid mod n
0x03 RSA算法的攻击
RSA算法攻击主要还是集中在n的分解,当n位数不足时容易被分解出p,q从而算出密钥d。
常见攻击方式参考:https://www.anquanke.com/post/id/84632
0x04 总结
算法本身比较简单。具体实现得看用什么库实现。
参考:
《加密与解密》