金融安全算法介绍系列6——RSA

前言:

为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。

在这里插入图片描述


前期调试 RSA 算法相关的操作,一直想写个扫盲文章,记录一下相关的概念和操作流程。本文大多参考网上的内容,仅以了解的思路整理成文,对 RSA 算法有一个初步的认识。


1. 概述

RSA 加密算法是一种非对称加密算法,RSA 非对称加密存在大量的取模运算,加密速度慢,在实际应用中结合对称加密算法一起使用,RSA 对对称加密的私钥进行加密。RSA 算法的可靠性由对极大整数做因数分解的难度决定。

2. 算法参数

参数 解释 备注
M 明文
C 密文
N 模数,两个很大的质数的乘积
E 公钥指数
D 私钥指数 D 是 E 对于 φ(n) 的模反元素
p,q 两个比较大的质数
(E,N) 公钥
(D,N) 私钥
(E,D,N) 密钥对
p q dp dq qinv CRT模式的私钥 p、q 为两个大素数。RSA1024 算法,二者长度均为 1024/2 = 512bit = 64byte,dp、dq 两个参数长度也和P、Q长度相等。n =p * q长度为 1024 bit(128byte),d 为私钥参数;e 为公钥指数(一般使用 65537 - 0x010001)

3. 加密

在这里插入图片描述

RSA 加密是对明文的 E 次方后除以 N 后求余数的过程,有了 E和 N 就可以完成 RSA 加密,E、N 是 RSA 加密的密钥,即 E 和 N 的组合为公钥。

4. 解密

在这里插入图片描述
对密文进行 D 次方后除以 N 的余数就是明文,即 RSA 解密过程。D和 N 就能进行解密,D 和 N 的组合为私钥。

5. 欧拉函数与模反元素

5.1 欧拉函数

任意给定正整数 n,计算在小于等于 n 的正整数之中,有多少个与 n 构成互质关系?计算这个值的方法就叫做欧拉函数,以 φ(n) 表示。

若一个数 n 可以分解为两个质数 p 和 q 的乘积,则有:
在这里插入图片描述eg:在1~8 中,与 8 构成互质数的有:1、3、5、7,即 φ(8) = 4。

5.2 模反元素

在这里插入图片描述

6. 计算过程

6.1 N 值

假设 p =61,q = 53; n = ‭3233‬。

在这里插入图片描述

两个比较大质数 p,q 的乘积为 N。

6.2 φ(n) 值

根据 φ(n) = (p-1) * (q-1) 代入计算n的欧拉函数值。

φ(3233) = (61-1) × (53-1) = 60 × 52 = 3120

6.3 e 值

在 1 < e < φ(n) 之间,随机选择一个整数 e,且 e 与 φ(n) 互质,选择 e = 17。

6.4 e 对于 φ(n) 的模反元素 d

因为 e 与 φ(n) 互质,根据求模反元素的公式计算 e,对于 e 的模反元素 d 有:

ed ≡ 1 (mod φ(n)) 等价于 (ed - 1) / φ(n) = k(k为任意正整数)

ed - kφ(n) = 1

代入数据得:

17d - 3120k = 1 对这个不定方程求解(扩展欧几里得算法)得:

其中一组解为:(d, k)=(2753, 15)

至此,我们就得到了 RSA 的三个参量,即 n = ‭3233‬,e = 17,d = 2753。所以公钥为(‭3233‬,17);私钥为(‭3233‬,2753)。而我们所说的 RSA1024,2048 就是指密钥对的长度(n的长度)。本例,长度就是 ‭3233‬ = ‭1100 1010 0001‬,即为 12 位。

6.5 加解密过程

(1)明文 m = 65;

(2)公钥 (n, e) = (3233, 17)

(3)加密 c = (m^e mod n) = ( (65 ^17) mod 3233) = 2790

(4)私钥 (n, d) = (3233, 2753)

(5)解密 m = (c^d mod n) = ((2790 ^2753) mod 3233) = 65

由上述过程可知,只要私钥不泄露,密文正常渠道是无法破解的,秘钥长度越长,破解的难度越大。

参考:

  1. 什么是RSA非对称算法以及原理
  2. RSA加密
  3. 带你彻底理解RSA算法原理
  4. RSA算法原理(一)
  5. RSA算法原理(二)
  6. RSA算法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章