密码学基础 -- 走进RSA(2)(放弃数学原理版)

server/2024/12/23 0:42:53/

目录

1.概述

RSA%E6%B5%8B%E8%AF%95-toc" style="margin-left:0px;">2. RSA测试

 2.1 加解密实验

 2.2 签名验签测试

RSA%E5%8E%9F%E7%90%86%E7%AE%80%E4%BB%8B%C2%A0-toc" style="margin-left:0px;">3. RSA原理简介 

4.小结


1.概述

从上面密码学基础 -- 走进RSA(1)(放弃数学原理版)-CSDN博客我们知道了非对称算法的密钥对使用时机,那么接下里我们继续讲解RSA,我们分别从RSA加解密、签名验签以及其原理概述入手

RSA%E6%B5%8B%E8%AF%95">2. RSA测试

我们从一个具体的RSA签名试验开始认识其原理。 在之前文章,我们已经生成了基于RSA的密钥对,格式如下:

但是这一堆乱码简直没办法分析,所以我们通过openssl将密钥对hex数据打印出来,如下:

公钥Hex数据 

 私钥Hex数据

公钥里包含了模数(Modulus)、指数(Exponent);

私钥包含了模数(Modulus)、私钥指数(privateExponent)、公钥指数(publicExponent)、prime(质数)1\2、exponent(指数)1\2、系数(coefficient).

 根据RFC8017定义,并结合示例,可以总结公私钥的构成如下:

 2.1 加解密实验

首先使用openssl对demo.txt进行加密,生成密文文件demo.en,如下:

然后使用私钥进行解密,得到demo_enc.txt,如下:

 2.2 签名验签测试

 首先使用openssl对文档signDemo.txt进行签名,得到签名hex,如下:

然后进行验签,得到验签结果,如下:

RSA%E5%8E%9F%E7%90%86%E7%AE%80%E4%BB%8B%C2%A0">3. RSA原理简介 

有了上述测试,我们对RSA有了感性认识,接下来就讲点纯理论的东西。

RSA是由麻省理工的Rivest、Shamir和Adleman在1978年提出,其数学基础用到了欧拉定理,安全性由大因子分解十分困难保证,利用了单向陷门函数的原理,具体如下:

其中{e,n}表示公钥,{d,n}表示私钥。

该算法安全在哪里呢?在于私钥难以被破解。 

该算法生成密钥的过程如下:

  1. 选择两个大素数p和q(通常要求每个素数均大于10的100次方)
  2. 计算一个 n = p * q ,φ(n) = (p-1)*(q-1)
  3. 在(1,φ(n))之间找到一个整数e,该数与φ(n)互质;e作为公钥
  4. 根据e和φ(n)计算出私钥d,必须满足 e*d mod φ(n) = 1;密钥对 {{e,n} , {d,n}}
  5. 将明文划分成块,记为m,保证每个明文的长度 len(m) < n
  6. 加密过程:c = m^e mod n  (加密需要公钥e 和 n)
  7. 解密过程:m = c^d mod n   (解密需要私钥d 和 n)

以上述为例:攻击者可以容易获取到的数据有密文c、模数n和公钥e,几乎不能获取私钥d; 解密需要私钥d,d是根据e和φ(n)计算得来,n有p和q计算得出 因此需要对n进行因子分解,找出两个素数p和q 例如 21,很容易得出两个素数3 和7,但如果n为2048bit的整数,目前从数学角度难解决。

4.小结

上面文章,我们讲述了非对称算法的加解密、签名验签的原理,并做了相关测试工作;从数学角度讲述了RSA密钥生成原理,并且详细阐述了RSA中每个字母的含义。

这对基于硬件密码加速引擎实现非对称算法具有非常强的参考意义。

一般来讲,HSM所能提供的非对称算法的硬件加速功能通常只包含数学运算,例如加减乘除、模数运算等等,我们要实现RSAES、RSASSA、ECDSA等算法,是需要利用这些运算加速来实现公式的,举个例子,假设要实现RSA签名工作,首先需要调用Hash加速器来生成摘要,然后通过调用模幂运算来对摘要进行加密,这就需要我们理解模数、指数应该分别放到指定的寄存器里以供非对称引擎调用。


http://www.ppmy.cn/server/3107.html

相关文章

数字化社交的引擎:解析Facebook的影响力

Facebook&#xff0c;作为全球最大的社交媒体平台&#xff0c;已经深深地融入了我们的日常生活和文化中。它不仅仅是一个简单的社交工具&#xff0c;更是一个复杂的数字生态系统&#xff0c;影响着我们的社交模式、文化认同以及信息获取方式。在这篇文章中&#xff0c;我们将深…

线性代数 | 分开写 |第二章 矩阵及其运算 | 3. 逆矩阵_back

​​​​​​## .思维导图 3.1 定义 定义:设 A , B \mathbf{A},\mathbf{B} A,B 是n阶方阵, E \mathbf{E} E 是n阶单位阵,若 A B = B A = E \mathbf{AB}=\mathbf{BA}=\mathbf{E} AB=BA=E,则称 A 为 可逆矩阵,并称 B \mathbf{B} B 是 A 的 逆矩阵,并称 B \mathbf{B} B…

Pytorch实用教程:pytorch使用模型时并没有调用forward函数,那么前向运算是如何执行的呢?

在 PyTorch 中&#xff0c;尽管我们定义了 forward 方法来指定模型的前向传播逻辑&#xff0c;实际上我们通常不直接调用这个方法。相反&#xff0c;我们通过调用模型对象本身来触发前向传播&#xff0c;这背后的机制涉及到了 Python 的 __call__ 方法。 __call__ 方法的作用 …

Ubuntu的终端中启用鼠标左键即为选中复制,右键粘贴的功能

在Ubuntu终端中启用鼠标复制和粘贴的功能需要进行一些设置。 首先&#xff0c;打开终端窗口&#xff0c;在菜单栏中找到“Edit”选项&#xff0c;点击“Profile Preferences”。然后&#xff0c;在“General”选项卡中&#xff0c;勾选“Use custom font”选项&#xff0c;可以…

【LeetCode热题100】【图论】岛屿数量

题目链接&#xff1a;200. 岛屿数量 - 力扣&#xff08;LeetCode&#xff09; 考察图的遍历&#xff0c;从岛上上下左右能到达的地方都是这个岛 首先需要判断图的边界&#xff0c;然后再上下左右继续深度遍历&#xff0c;并把遍历到的标记为已访问&#xff0c;可以原地修改图…

外包干了3个多月,技术退步明显。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

详解Qt中的JSON操作

JSON&#xff08;JavaScript Object Notation&#xff09;作为一种轻量级的数据交换格式&#xff0c;因其简洁的结构、易读性以及与多种编程语言的良好兼容性&#xff0c;在现代Web服务、API交互以及数据持久化场景中得到了广泛应用。Qt作为一款功能强大的跨平台应用开发框架&a…

Edge的使用心得与深度探索

Microsoft Edge 是微软推出的一款网页浏览器&#xff0c;基于 Chromium 开源项目开发。从 2020 年开始&#xff0c;Edge 浏览器经历了一次重大更新&#xff0c;采用了与 Google Chrome 相同的浏览器引擎&#xff0c;这使得它在性能、兼容性和扩展支持方面都得到了显著改善。以下…