聊聊 RSA 算法

简介: 1977年,三位数学家 Rivest、Shamir和 Adleman 设计了一种算法,可以实现非对称加密。这种非对称加密算法(公钥密码算法)用他们三个人的名字命名,叫做 RSA 算法。

RSA简介


  1977年,三位数学家 RivestShamir Adleman 设计了一种算法,可以实现非对称加密。这种非对称加密算法(公钥密码算法)用他们三个人的名字命名,叫做 RSA 算法。


非对称加密


非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(公钥)和私有密钥(私钥)


  • 公钥:可以被任何人知道,用于加密消息或者验证签名
  • 私钥:只有接收者本人知道,用于解密消息或者签名
  • 不对称性:用于加密消息的密钥不能用来解密消息。


RSA 原理


  根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。


RSA 算法描述


RSA 密钥


  RSA 加密算法的密钥涉及到三个数,分别是 n,e,d。其中(e,n) 构成公钥(d,n)构成私钥。


1.生成大质数 p q


  p q 是两个很大的素数,通常p q 的大小为 1024 比特,太小的话容易被破译,太大的话会影响计算速度。
  
首先通过伪随机数生成器生成两个大数,由于伪随机数生成器不能直接生成素数,所以需要通过不断的重试得到 p q


2.计算公共模数 n


生成 n 的公式如下:


3.计算欧拉函数 φ(n) = (p-1)(q-1)



4.计算公钥 e


随机选取整数 e 就是用来加密的公钥,e 需要满足以下条件:

  • 1 < e < φ(n),通过伪随机数生成器生成。
  • gcd(e, φ(n)) = 1(gcd 为欧几里得算法)即两个数的最大公约数为 1(注意:e 的选取是很容易的,例如,所有大于pq的素数都可用)

5.计算私钥d


生成 d 的公式如下:

  
解密的钥私 d 满足d*e mod φ(n) = 1,即d*e = kφ(n) + 1 (其中 k 是大于等于1 的整数)。所以,只要知道 e φ(n),则很容易计算出 d


RSA 加密


  成功生成密钥后,对外公开公钥(e, n),然后即可通过如下公式进行 RSA 加密(其中c 表示加密后的密文,m 表示待加密的明文)

RSA 解密


  成功生成密钥后,只有接收者本人拥有私钥(d, n),然后即可通过如下公式进行 RSA 解密(其中m 表示解密后的明文,c 表示待解密的密文,)


RSA 安全性


  1. n = p * q
  2. φ(n) = (p-1)(q-1)
  3. d*e mod φ(n) = 1

  如果破解者尝试破解 RSA 加密后的密文则需要破解密钥d,由公式 3 可知如果知道 φ(n) 那么就可以轻易的求出 d。而φ(n) 是通过公式 2 计算出来的,所以问题转化为求 p q,公式 1 n 又是已知的,所以问题最终转化为对大整数 n 进行质因素分解。(p q 泄露等同于密码泄露)
  
目前来说,还没有有效的对大整数进行质因素分解的高效算法,所以目前来说RSA算法还是很安全的,但是一旦有这样的算法出现,那么RSA将会很容易被攻破。
  RSA
的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解 140 多个十进制位的大素数。因此,模数 n 必须选大些,视具体适用情况而定。
  
官方推荐:1024bits RSA 算法不应该被用于新的用途。2048bits RSA 算法可以用到2030 年,4096bits的算法可以用到2031年。


RSA 运算速度


  RSA 算法的保密强度随其密钥的长度增加而增强。但是,密钥越长,其加解密所耗用的时间也越长。因此,要根据所保护信息的敏感程度与攻击者破解所要花费的代价值不值得以及系统所要求的反应时间来综合考虑。
  
由于进行的都是大数计算,使得 RSA 最快的情况也比DES 慢上好几倍,无论是软件还是硬件实现,速度一直是 RSA 的缺陷,一般来说只用于少量数据加密,RSA 的速度比对应同样安全级别的对称加密算法要慢 1000 倍左右。所以常使用RSA 算法传输对称加密的密钥,然后双方使用同

相关文章
|
17天前
|
算法 安全 网络安全
非对称加密算法RSA
RSA是一种基于数论的非对称加密算法,依赖大整数质因数分解的困难性保证安全性。它生成公钥和私钥,公钥加密,私钥解密,适用于数据加密、数字签名和互联网安全等领域。尽管计算效率低、适合小量数据处理,但由于其兼容性、安全性和广泛应用于SSL/TLS、数字签名等,RSA仍是主流加密算法之一。
17 2
|
3月前
|
算法 安全 Java
Java 实现 RSA 非对称加密算法-加解密和签名验签
Java 实现 RSA 非对称加密算法-加解密和签名验签
100 0
|
4月前
|
算法 安全 数据安全/隐私保护
C/C++学习 -- RSA算法
C/C++学习 -- RSA算法
48 0
|
3月前
|
机器学习/深度学习 算法 安全
【加密算法】RSA非对称加密算法简介
【加密算法】RSA非对称加密算法简介
|
4月前
|
算法 安全 数据安全/隐私保护
DSA与RSA的区别、ECC(椭圆曲线数字签名算法(ECDSA))
DSA与RSA的区别、ECC(椭圆曲线数字签名算法(ECDSA))
189 0
|
23天前
|
存储 算法 安全
加密解密(RSA)非对称加密算法
加密解密(RSA)非对称加密算法
|
3月前
|
算法 数据安全/隐私保护
火山中文编程 -- RSA算法
火山中文编程 -- RSA算法
80 0
|
4月前
|
算法 JavaScript 前端开发
JavaScript学习 -- RSA算法应用实例及公钥私钥的生成方法
JavaScript学习 -- RSA算法应用实例及公钥私钥的生成方法
55 0
|
5月前
|
XML 算法 安全
C# | 上位机开发新手指南(九)加密算法——RSA
RSA的特性 非对称性 RSA算法使用公钥和私钥两个不同的密钥,公钥用于加密数据,私钥用于解密数据。公钥可以公开,任何人都可以使用,而私钥只有密钥持有人可以访问。 安全性 RSA算法基于大数分解难题,即将一个大的合数分解成其质数因子的乘积。由于目前没有有效的算法可以在合理的时间内对大质数进行分解,因此RSA算法被认为是一种安全的加密算法。 可逆性 RSA算法既可以用于加密,也可以用于解密。加密和解密都是可逆的过程,只要使用正确的密钥,就可以还原原始数据。 签名 RSA算法可以用于数字签名,用于验证数据的完整性和真实性。签名过程是将数据使用私钥进行加密,验证过程是将签名使用公钥进行解密。
110 0
C# | 上位机开发新手指南(九)加密算法——RSA
|
5月前
|
算法 Java 数据安全/隐私保护
RSA - 非对称加密算法简要介绍与JAVA实现
RSA - 非对称加密算法简要介绍与JAVA实现
26 0