奇妙的安全旅行之RSA算法

本文介绍了RSA非对称加密算法,包括其原理、优缺点和应用场景。RSA基于大数因数分解的难度,提供了一种安全的加密方式。虽然加密速度较慢,但因其公钥私钥的特性,适用于数据加密、数字签名和密钥交换等领域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hi,大家好,我是开发者FTD。今天我们开始介绍非对称加密算法。非对称加密算法区别于对称加密算法的主要特点是,非对称加密算法有两个密钥:公钥 (public key) 和私钥 (private key)。公钥和私钥是一对密钥,如果用公钥对数据加密,那么只能用对应的私钥解密;相同的,如果用私钥对数据加密,只能用对应的公钥进行解密。因为加密和解密用的是不同的密钥,所以将这种加密算法称为非对称加密。

非对称加密算法的安全性好,由于有两个密钥,所以它不需要交换比较重要的私钥,只需要交换对外公开的公钥即可,它消除了用户最终交换密钥的需要。不过非对称加密算法的加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比对称加密慢上1000倍。

RSA 算法简介

RSA 算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。RSA 算法既能用于加密,也能用于做数字签名。

RSA 算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。

算法原理:

RSA 是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。

RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:

公钥 KU n:两素数 p 和 q 的乘积(p 和 q 必须保密)
e:与(p - 1)(q - 1)互质
私钥 KR d:e^-1 (mod(p-1)(q-1))
n: p 和 q 的乘积
加密 C ≡ m^e mod n
解密 m ≡ c^d mod n

大家看了这些公式估计有些懵,没关系,我们一个一个解释一下。首先我们先复习一下数学中的一些基础概念:

什么是“素数”?

素数也称为“质数”,是指除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积的数字。

例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。又例如,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。

什么是“互质数”(或“互素数”)?

小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。” 这里所说的“两个数”是指自然数。

判别方法主要有以下几种(不限于此):

  • 两个质数一定是互质数。例如,2与7、13与19。
  • 一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与 26。
  • 1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。
  • 相邻的两个自然数是互质数。如 15与 16。
  • 相邻的两个奇数是互质数。如 49与 51。
  • 大数是质数的两个数是互质数。如97与88。
  • 小数是质数,大数不是小数的倍数的两个数是互质数。如 7和 16。
  • 两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。
什么是模指数运算?

我们先说下指数运算,指数是位于一个未知数的右上方,表示这个未知数相乘几次,例如:2 ^ 4 = 16;

模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3 = 1;26 mod 6 = 2;28 mod 2 = 0 等。

而模指数运算就是先做指数运算,取其结果后再做模运算。如
5 3 m o d 7 = 125 m o d 7 = 6 5 ^ 3 \quad mod \quad 7 \quad = \quad 125 \quad mod \quad 7 \quad = \quad 6 53mod7=125mod7=6
好,下面我们开始正式介绍RSA加密算法。

RSA 算法描述:
  1. 选择一对不同的、足够大的素数p,q。

  2. 计算 n = pq。

  3. 计算 f(n) = (p-1)(q-1) ,同时对p, q严加保密,不能让其他任何人知道。

  4. 找一个与 f(n) 互质的数 e,且 1<e<f(n) 。

  5. 计算 d,使得 de ≡ 1 mod f(n)。这个公式也可以表达为d ≡ e^-1 mod f(n)

    这里要解释一下, 是数论中表示同余的符号。公式中,≡ 符号的左边必须和符号右边同余,也就是两边模运算结果相同。显而易见,不管f(n)取什么值,符号右边1 mod f(n)的结果都等于1;符号的左边d与e的乘积做模运算后的结果也必须等于1。这就需要计算出d的值,让这个同余等式能够成立。

  6. 公钥 KU=(e,n),私钥 KR=(d,n)。

  7. 加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程为:

C ≡ M e m o d n C ≡ M^e \quad mod\quad n CMemodn

​ 解密过程为:
M ≡ C d m o n d n M ≡ C^d\quad mond \quad n M

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值