公钥密码与RSA
公钥密码体制的基本原理
-
引言:
- 误解:
- 公钥加密算法更加安全:所有加密算法的安全强度都是依赖于密钥长度
- 公钥密码是一种通用密码,对称密码已经过时
- 公钥密码实现密钥分配很简单。不简单,需要构建特定的安全协议。
- 误解:
-
解决的问题:
- 加密数据:公钥加密,私钥解密
- 数字签名:私钥签名,公钥验证
- 密钥协商:通信双方交换会话密钥
-
公钥密码的具体条件
-
构造公钥加密算法的关键
- 单向陷门函数
- 每个函数值都存在唯一的逆
- 计算函数值是容易的
- 在缺少部分信息时,计算逆却不可行
- 单向陷门函数
-
公钥密码分析:密钥穷举攻击、消息穷举攻击、利用公钥来破解私钥
RSA算法
-
算法步骤:
-
随机选择两个不相等的大素数p、q
-
计算p和q的乘积n
-
计算n的欧拉函数f(n)= f§*f(q)
-
随机选择一个满足gcd(e,f(n)) == 1(互质)的整数e,一般取65537
-
计算e对于f(n)的模的反元素d(逆、扩展欧几里得算法)
-
将n和e封装成公钥,n和d封装成私钥
-
证明可行性:
-
加解密流程
-
-
-
计算方面的问题
-
模算数里的求幂运算
-
公钥中e一般选择65537
-
-
选择密文攻击(CCA):攻击者可选择一些密文,并获得相应的明文
-
性质
E ( P U , M 1 ) ∗ E ( P U , M 2 ) = E ( P U , [ M 1 ∗ M 2 ] ) E(PU,M_1)*E(PU,M_2)~=~E(PU,[M_1*M_2]) E(PU,M1)∗E(PU,M2) = E(PU,[M1∗M2]) -
目标解密:
C = M e m o d n C~=~M^e~mod~n C = Me mod n- 计算 Y = (C*2^e)mod n = (2M)^e mod n
- 将Y作为选择密文提交,收到解密后的数据:X = Y^d mod n
- 得到明文 X = (2M) mod n,可以得到M
-
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee