主页 > imtoken钱包app官方下载 > # RSA公钥加密算法

# RSA公钥加密算法

imtoken钱包app官方下载 2023-04-22 05:25:37

保障终端间信息传输的安全一直是业务的刚性需求。 针对不同业务需求的不同加密算法,

因为公司是金融公司,不是传统的金融公司(PS:涉及数字货币,比如比特币),所以对加密算法是有部分了解的。

这里要说的内容如题

电子签名

质数

在密码学中,有必要找到最大的随机素数。 大素数很多,通常会适当地测试随机整数,直到找到素数的过程可行为止。

素数分布函数π(n):描述小于等于n的素数个数

素数定理给出了 π(n) 的有用近似值:

$$ \lim_{n \to +\infty} \frac{π(n)}{n/(\ln n)} \quad = 1 $$

透明加密 算法_btc加密算法_aes算法加密 举例

例如:

当n = 10^9时,误差不超过6%。 它:π(n)=508,475,34,而n/ln * n≈482,549,42

伯努利实验

RSA基于素数原理:找到一个大的素数很容易,但是把一个数分解成两个最大素数的乘积就相当困难了

公钥加密

公钥加密,顾名思义,有公钥和私钥

在 RSA 加密算法中,每个密钥由一对整数组成。 在密码学中,爱丽丝和鲍勃经常被用作例子。 这也是有人在普及比特币相关技术时出现频率比较高的一个词。

透明加密 算法_aes算法加密 举例_btc加密算法

如图:用$P_A$代表Alice的公钥,用$S_A$代表Alice的私钥

同理:

aes算法加密 举例_透明加密 算法_btc加密算法

如图:用$P_B$表示Bob的公钥,$S_B$表示Bob的私钥

秘钥需要保密,公钥可以公开给任何人,这和比特币地址一样。

公钥和私钥指定可用于任何信息的函数。 让 $\mathfrak{D}$ 表示允许的信息集。 它可能是所有有限长度的比特序列的集合。

在最原始的公钥加密思想中,要求公钥和秘钥指定一个从$\mathfrak{D}$到自身的一一对应函数。 Alice的公钥$P_A$对应的函数用$P_A()$表示,而他的私钥$S_A$的函数用$S_A()$表示,所以$P_A()$和$S_A的函数()$ 都是 $\mathfrak{D}$ 的排列。 设置已知秘钥$P_A$或$S_A$,可以有效计算函数$P_A()$和$S_A()$

aes算法加密 举例_btc加密算法_透明加密 算法

系统中任何一个参与者的公钥和秘钥都是一对“匹配对”,它们指定的函数互为反函数,即对于任意消息$M\in\mathfrak{D}$有:

$$ M = S_A(P_A(M)) \ M = P_A(S_A(M)) $$

aes算法加密 举例_透明加密 算法_btc加密算法

由此可见,在使用两个秘钥$P_A$和$S_A$依次对$M$进行变换后,最终还是得到了消息$M$

因此,在应用程序中:要求除了Alice之外,没有人能在更实际的时间内计算出函数$S_A()$。 发送给 Alice 的加密邮件的机密性和 Alice 数字签名的有效性。

因为$P_A$是公开的,就像数字货币的地址一样,可以计算出$P_A()$,也就是$S_A()$的反函数。 这时候需要保证只有Alice可以计算$S_A()$。

模拟发送环境:

透明加密 算法_aes算法加密 举例_btc加密算法

如上图:Bob向Alice发送了一条加密消息,他窃取的是一串乱码。

Bob 得到 Alice 的公钥 $P_A$

Bob计算出M对应的密文$C=P_A(M)$btc加密算法,将C发送给Alice

爱丽丝得到密文C后btc加密算法,用她的秘钥$S_A$还原出原来的信息:$S_A(C)=S_A(P_A(M))=M$。

由于$S_A()$和$P_A()$互为反函数,Alice可以根据C计算出M。因为只有Alice可以计算出$S_A()$,所以也只有Alice可以根据C计算出M。因为Bob用 $P_A$ 加密 M,只有 Alice 可以理解收到的消息。

数字签名可以用类似公钥系统的思想轻松实现,现在Alice希望发送一个数字签名的回复M^'给Bob

aes算法加密 举例_btc加密算法_透明加密 算法

在公钥数字签名中,Alice 通过将她的数字签名 $\sigma = S_A(M')$ 附加到消息 M' 来签署消息 M'。 她将消息/签名对 $(M', \sigma)$ 发送给 Bob,Bob 通过检查等式 $M' = P_A(\sigma)$ 来验证它。如果等式成立,他接受 $(M',\ sigma)$ 和爱丽丝一样

签名消息

Alice 使用她的密钥 $S_A$ 和等式 $\sigma = S_A(M')$ 来计算消息 M' 的数字签名 $\sigma$。

Alice 将消息/签名对 $(M', \sigma)$ 发送给 Bob。

当 Bob 收到 $(M', \sigma)$ 时,他可以使用 Alice 的公钥通过验证等式 $M' = P_A(\sigma)$ 来验证消息确实来自 Alice。

如果 M' 包含爱丽丝的名字,那么鲍勃就知道要使用谁的公钥。

从上图中的验证可以看出,如果遇到了Bob,则可以断定消息M'确实是Alice的签名。 如果不是,那么 Bob 可以得出一个结果:要么信息 M' 或数字签名 $\sigma$ 因传输错误而损坏,要么信息对 $(M',\sigma)$ 是故意伪造的。

因为数字签名证明了签名者的身份和签名的消息内容,所以它类似于文档末尾的手写签名。

数字签名必须能够被能够获得签名者公钥的人验证,并且签名的消息能够被确认然后发送给能够验证签名的其他方。

比如我给你的一个比特币,其实就是一个签名过程,但是比特币使用了多重签名加密技术,比这个复杂的多(做区块链开发的人可能会笑),原理是什么? 羊毛布? 密码学中的一个流行示例:

爱丽丝给鲍勃一张电子支票。 Bob 确认 Alice 在支票上的签名后,就可以将支票交给银行,银行也可以验证签名,然后转账相应的资金。

上面我说的是签名信息没有加密,信息公开透明。 例如,比特币的交易过程是公开透明的。 该行为会向全网广播,同时,每个节点都可以同步到交易事件。

我们这里要说的恰恰相反。 我们需要加密信息。 如何加密? 它是将加密和签名两种方案结合起来,创建一个同时被签名和加密的消息。 签名者首先将他的数字签名附加到消息中,然后使用他预期的接收者的公钥加密最终的消息/签名对。 接收方用自己的密钥对收到的消息进行解密,得到原始消息和数字签名。 收件人然后可以使用签名者的公钥验证签名。 有趣的!

RSA加密系统

公钥私钥创建过程

1.随机选择最大的素数$\mathcal{P}$和$\mathcal{q}$,使得$\mathcal{P}\not=\mathcal{q}$ eg:素数$\mathcal{P }$ 和 $\mathcal{q}$ 可能各有 1024 位。

2. 计算$n=\mathcal{P} \mathcal{q}$

3. 选择一个与 $\phi(n)$ 互质的最小奇数 e,其中等式 $\phi(n)$ 等于 ($\mathcal{P}-1$)($\mathcal{ q}- 1$)

4. 对于模 $\phi(n)$,计算 e 的乘法逆元 d 的值。

5. 公开 $P=(e,n)$ 并将其用作参与者的 RSA 公钥

6. 对 $S=(d,n)$ 保密并将其用作参与者的 RSA 密钥

设 $D$ 为集合 $Z_n$。 要转换与公钥 $P=(e,n)$ 关联的消息 $M$,请计算 $$P(M) = M^e\mod n$$

此时对秘钥$S =(d,n)$相关的密文C进行变换,计算$$S(C)=C^d \mod n$$

上面看到的等式对于加密和签名都是通用的。 要创建签名,签名者将他的密钥应用于要签名的消息,而不是密文。 为了验证签名,签名者的公钥应用于签名,而不是加密的消息。

利用模数的求幂过程对公钥和私钥进行一些运算。

我们假设公钥(e,n)和秘钥(d,n)满足$\lg e = O(1)$, $\lg d \leq \beta$, $\lg n \leq \beta $。

然后应用公钥需要 $O(1)$ 模乘运算和 $O(\beta^2)$ 按位运算。 应用密钥需要执行 $O(\beta)$ 次模乘运算 $O(\beta^3)$ 次运算。

RSA 安全保证

RSA加密的安全性主要来自于分解最大整数的难度。 如果对方分解公钥中的模数n,则可以从公钥中推导出秘钥,主要是因为对方和公钥的创建者利用了$\mathcal{P}$和$\mathcal这两个因子{q}$。 因此,如果可以分解一个大整数,就可以轻松破解RSA加密算法。

这样:破解RSA加密系统的难度就取决于分解最大整数的难度。

在计算机发展史上,没有比分解模 n 更容易破解 RSA 加密的方法了。

通过随机选取两个 1024 位素数并取其乘积,可以创建一个公钥,并且可以在现有技术可行的时间内破解。 也就是说,在算法发展史上还没有新的突破的时候,RSA加密算法是一种安全保障。

基于以上讨论的原则,实际实现过程中选择的位元素个数通常在768~2048位范围内。 因此,需要能够高效地找到最大的素数。

在实际应用中,为了提高效率,使用时间最长的是RSA这种密钥管理方式,实现快速的免公钥加密系统。 在这样的系统中,加密密钥与解密密钥相同。

例如:

Alice向Bob发送一条长消息M,她从快速公钥无钥加密系统中随机选择一个秘钥K,然后用K加密M得到密文C,此时C的长度与M一样长, 但 K 很短。 在第一步中,Alice 使用 Bob 的公共 RSA 密钥加密 K。 由于 K 很短,$P_B(K)$ 的计算也很快。 $t_1 = P_B(K)计算时间$,$t_2 = P_B(M)计算时间$,有:$t_1 > t_2$。

最后Alice将$(C,P_B(K))$发送给Bob,Bob解密$P_B(K)$得到K,再用K解密C得到M。

通过上面的例子,我们了解到采用混合方式来提高数字签名的执行效率。

将 RSA 与公共抗碰撞哈希算法 h 相结合。 使用这个函数的目的是找到两条消息M和M',h(M)=h(M')。

h(M)的值是消息M的一个短“指纹”的想法。

如果 Alice 对消息 M 签名,她的第一步是将函数 h 应用于 M 获得的指纹 h(M),然后用她的密钥加密 h(M)。 Alice 将 $(M,S_A(h( M)))$ 作为她签名的 M 版本发送给 Bob。Bob 可以验证它是否等于 h( M) 以验证签名的真实性。

原理:任何人都不能同时创建两条具有相同指纹的消息,因此无法在计算机上更改已签名的消息并保持签名的有效性。

因此可以使用证书轻松分发公钥。

例如:

公共网络中有一个T,每个人都知道它的公钥。 Alice 从 T 那里得到一个签名证书,表明“Alice”的公钥是 $P_A$。 由于每个人都知道 $P_T$,因此该证书是“自我证明”的。 Alice 可以在签名消息中包含她自己的证书,这样接收方就可以立即得到 Alice 的公钥来验证她的签名。 因为 Alice 的密钥是由 T 签名的,所以接收方知道 Alice 的密钥确实是 Alice 自己的密钥。