RSA算法

1. 前言

学习视频:【RSA加密算法】| RSA加密过程详解 | 公钥加密| 密码学| 信息安全|_哔哩哔哩_bilibili

2. 基本概要

2.1 欧拉函数

具体知识点学习《信息安全数学基础》

  • 欧拉函数是小于 n n n的正整数中与 n n n互质的数的数目
  • 互质是公约数只有1的两个整数,叫做互质整数
  • 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数

计算欧拉函数:

n = p q n=pq n=pq,且 p , q p,q p,q互质,则 φ ( n ) = φ ( p ∗ q ) = φ ( p ) ∗ φ ( q ) \varphi(n)=\varphi(p*q)=\varphi(p)*\varphi(q) φ(n)=φ(pq)=φ(p)φ(q)

2.2 模反元素

如果两个正整数 e e e φ ( n ) \varphi(n) φ(n)互质,那么一定可以找到一个整数 d d d,使得 e d − 1 ed-1 ed1 φ ( n ) \varphi(n) φ(n)整除,或者说 e d ed ed除以 φ ( n ) \varphi(n) φ(n)所得余数为1,此时, d d d就叫做 e e e的模反元素

2.3 RSA

RSA密码被誉为是一种风格幽雅的公开密钥密码,即可用于加密,又可用于数字签名,安全、易懂

3. 加密过程

3.1 参数选择

  1. p和q

    1. p和q要足够大
      一般应用:p和q应512b,使n达到1024b
      重要应用:p和q应1024b,使n达到2048b
    2. p和q应为强素数
    3. p和q的差要大
    4. (p-1)和(q-1)的最大公因子要小
  2. e的选择

  3. d的选择

3.2 流程

  1. 随机地选择两个大素数 p p p q q q,而且保密
  2. 计算 n = p q n=pq n=pq,将 n n n公开
  3. 计算 φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi (n)=(p-1)(q-1) φ(n)=(p1)(q1),对 φ ( n ) \varphi (n) φ(n)保密
  4. 随机地选取一个正整数 e e e 1 < e < φ ( n ) 1<e<\varphi(n) 1<e<φ(n) ( e , φ ( n ) ) = 1 (e, \varphi (n))=1 (e,φ(n))=1,将 e e e公开
  5. 根据 e d = 1   m o d   φ ( n ) ed=1\bmod \varphi(n) ed=1modφ(n),求出 d d d,并对 d d d保密
  6. 公钥: K e = < e , n > K_{e}=<e,n> Ke=<e,n>;私钥: K d = < d , p , q , φ ( n ) > K_{d}=<d,p,q,\varphi(n)> Kd=<d,p,q,φ(n)>
  7. 加密运算: C = M e   m o d   n C=M^e\bmod n C=Memodn
  8. 解密运算: M = C d   m o d   n M=C^d\bmod n M=Cdmodn

3.3 习题

4. 数字签名

对于RSA密码由于 D ( E ( M ) ) = ( M e ) d = M e d = ( M d ) e = E ( D ( M ) )   m o d   n D(E(M))=(M^e)^d=M^{ed}=(M^d)^e=E(D(M))\bmod n D(E(M))=(Me)d=Med=(Md)e=E(D(M))modn,因此RSA可同时确保数据的秘密性和真实性

4.1 签名算法

M M M为明文, K e A = < e , n > K_{eA}=<e,n> KeA=<e,n> A A A的公开加密钥, K d A = < d , p , q , φ ( n ) > K_{dA}=<d,p,q,\varphi(n)> KdA=<d,p,q,φ(n)> A A A的保密的解密钥

😄则 A A A M M M签名过程是: S A = D ( M , K d A ) = ( M d )   m o d   n S_A=D(M,K_{dA})=(M^d)\bmod n SA=D(M,KdA)=(Md)modn S A S_A SA便是 A A A M M M的签名

😄验证签名的过程: E ( S A , K e A ) = ( M d ) e   m o d   n = M E(S_A,K_{eA})=(M^d)^e \bmod n=M E(SA,KeA)=(Md)emodn=M

4.2 攻击

4.2.1 一般攻击

因为e和n是用户A的公开密钥,所以任何人都可以获得并使用e和n。攻击者可随意选择一个数据Y,并用A的公钥计算: X = ( Y ) e   m o d   n X=(Y)^e \bmod n X=(Y)emodn

因为 X = ( Y ) e   m o d   n X=(Y)^e \bmod n X=(Y)emodn,于是可以用Y伪造A的签名,因为Y是A对X的一个有效签名,这样的X往往无正确语义

4.2.2 利用已有的签名进行攻击

攻击者选择随机数据 M 3 M_3 M3,且 M 3 = M 1 M 2   m o d   n M_3=M_1M_2\bmod n M3=M1M2modn

攻击者设法让A对 M 1 M_1 M1 M 2 M_2 M2签名: S 1 = M 1 d   m o d   n , S 2 = ( M 2 ) d   m o d   n S_1={M_1}^d \bmod n ,S_2=(M_2)^d \bmod n S1=M1dmodn,S2=(M2)dmodn

于是可以由 S 1 S_1 S1 S 2 S_2 S2计算出A对 M 3 M_3 M3的签名,因为 S 1 S 2 = ( M 1 ) d ( M 2 ) d   m o d   n = ( M 3 ) d   m o d   n = S 3 S_1S_2=(M_1)^d(M_2)^d \bmod n=(M_3)^d \bmod n=S_3 S1S2=(M1)d(M2)dmodn=(M3)dmodn=S3

对策:A不对数据M签名,而是对HASH(M)签名

4.2.3 攻击签名获得明文

攻击者截获C, C = ( M ) e   m o d   n C=(M)^e \bmod n C=(M)emodn

攻击者选择小的随机数r,计算 x = r e   m o d   , y = x C   m o d   n , t = r − 1   m o d   n x=r^e \bmod ,y=xC \bmod n,t=r^{-1}\bmod n x=remod,y=xCmodn,t=r1modn

攻击者让A对y签名,于是攻击者又获得: S = y d   m o d   n S=y^d \bmod n S=ydmodn

攻击者计算: t S = r − 1 y d = r − 1 x d C d = C d = M   m o d   n tS=r^{-1}y^d=r^{-1}x^dC^d=C^d=M\bmod n tS=r1yd=r1xdCd=Cd=Mmodn

对策:A不对数据M签名,而是对 H A S H ( M ) HASH(M) HASH(M)签名

4.3 应用

PGP

爬虫Python学习是指学习如何使用Python编程语言来进行网络爬取和数据提取的过程。Python是一种简单易学且功能强大的编程语言,因此被广泛用于爬虫开发。爬虫是指通过编写程序自动抓取网页上的信息,可以用于数据采集、数据分析、网站监测等多个领域。 对于想要学习爬虫的新手来说,Python是一个很好的入门语言。Python的语法简洁易懂,而且有丰富的第三方库和工具,如BeautifulSoup、Scrapy等,可以帮助开发者更轻松地进行网页解析和数据提取。此外,Python还有很多优秀的教程和学习资源可供选择,可以帮助新手快速入门并掌握爬虫技能。 如果你对Python编程有一定的基础,那么学习爬虫并不难。你可以通过观看教学视频、阅读教程、参与在线课程等方式来学习。网络上有很多免费和付费的学习资源可供选择,你可以根据自己的需求和学习风格选择适合自己的学习材料。 总之,学习爬虫Python需要一定的编程基础,但并不难。通过选择合适的学习资源和不断实践,你可以逐步掌握爬虫的技能,并在实际项目中应用它们。 #### 引用[.reference_title] - *1* *3* [如何自学Python爬虫? 零基础入门教程](https://blog.youkuaiyun.com/zihong523/article/details/122001612)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [新手小白必看 Python爬虫学习路线全面指导](https://blog.youkuaiyun.com/weixin_67991858/article/details/128370135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值