每日一得--RSA加密算法原理

RSA算法原理 (m^e%n)^d%n=m^ed%n m^ed%n=m mφ(n)%n=1 阅读详情


图为 RSA公开密钥算法的发明人,从左到右Ron Rivest, Adi Shamir, Leonard Adleman. 照片摄于1978年

   RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。我们经过整理和改写特别推荐给大家阅读,希望能够对时间紧张但是又想了解它的同事有所帮助。
RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。
RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。 
RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:


可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到:

一、 什么是“素数”?
素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。

二、什么是“互质数”(或“互素数”)?
小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。
判别方法主要有以下几种(不限于此):
(1)两个质数一定是互质数。例如,2与7、13与19。
(2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与 26。
(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。
(4)相邻的两个自然数是互质数。如 15与 16。
(5)相邻的两个奇数是互质数。如 49与 51。
(6)大数是质数的两个数是互质数。如97与88。
(7)小数是质数,大数不是小数的倍数的两个数是互质数。如 7和 16。
(8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。

三、什么是模指数运算? 
指数运算谁都懂,不必说了,先说说模运算。模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。 
模指数运算就是先做指数运算,取其结果再做模运算。如
好,现在开始正式讲解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,则加密过程为:。
(8)解密过程为:。 

实例描述:
在这篇科普小文章里,不可能对RSA算法的正确性作严格的数学证明,但我们可以通过一个简单的例子来理解RSA的工作原理。为了便于计算。在以下实例中只选取小数值的素数p,q,以及e,假设用户A需要将明文“key”通过RSA加密后传递给用户B,过程如下:
(1)设计公私密钥(e,n)和(d,n)。
令p=3,q=11,得出n=p×q=3×11=33;f(n)=(p-1)(q-1)=2×10=20;取e=3,(3与20互质)则e×d≡1 mod f(n),即3×d≡1 mod 20。
d怎样取值呢?可以用试算的办法来寻找。试算结果见下表:

通过试算我们找到,当d=7时,e×d≡1 mod f(n)同余等式成立。因此,可令d=7。从而我们可以设计出一对公私密钥,加密密钥(公钥)为:KU =(e,n)=(3,33),解密密钥(私钥)为:KR =(d,n)=(7,33)。
(2)英文数字化。
  将明文信息数字化,并将每块两个数字分组。假定明文英文字母编码表为按字母顺序排列数值,即:

则得到分组后的key的明文信息为:11,05,25。
(3)明文加密 
用户加密密钥(3,33) 将数字化明文分组信息加密成密文。由C≡Me(mod n)得:

因此,得到相应的密文信息为:11,31,16。
(4)密文解密。
用户B收到密文,若将其解密,只需要计算,即:

用户B得到明文信息为:11,05,25。根据上面的编码表将其转换为英文,我们又得到了恢复后的原文“key”。 
你看,它的原理就可以这么简单地解释!
当然,实际运用要比这复杂得多,由于RSA算法的公钥私钥的长度(模长度)要到1024位甚至2048位才能保证安全,因此,p、q、e的选取、公钥私钥的生成,加密解密模指数运算都有一定的计算程序,需要仰仗计算机高速完成。

最后简单谈谈RSA的安全性

首先,我们来探讨为什么RSA密码难于破解?
 
在RSA密码应用中,公钥KU是被公开的,即e和n的数值可以被第三方窃听者得到。破解RSA密码的问题就是从已知的e和n的数值(n等于pq),想法求出d的数值,这样就可以得到私钥来破解密文。从上文中的公式:d ≡e-1 (mod((p-1)(q-1)))或de≡1 (mod((p-1)(q-1))) 我们可以看出。密码破解的实质问题是:从Pq的数值,去求出(p-1)和(q-1)。换句话说,只要求出p和q的值,我们就能求出d的值而得到私钥。
当p和q是一个大素数的时候,从它们的积pq去分解因子p和q,这是一个公认的数学难题。比如当pq大到1024位时,迄今为止还没有人能够利用任何计算工具去完成分解因子的任务。因此,RSA从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
然而,虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何。
此外,RSA的缺点还有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。因此,使用RSA只能加密少量数据,大量的数据加密还要靠对称密码算法。

RSA加密与解密原理 一、什么是RSA加密 二、RSA加密原理 三、RSA加解密过程与算法代码 阅读详情

相关推荐

RSA算法深度解析:从非对称加密原理到Python实现与安全实践

非对称加密是现代网络安全的核心技术之一,它通过公钥和私钥的配对解决了对称加密中密钥分发的根本难题。其数学原理基于大数分解等计算复杂性理论,确保了即使公钥公开,也无法在合理时间内推导出私钥。这项技术的核心价值在于为数字身份认证、安全通信和数据完整性验证提供了基础。在实际应用中,非对称加密广泛用于SSL/TLS握手、SSH登录、API签名和软件授权等场景。本文聚焦于RSA这一经典的非对称加密算法,通过Python代码演示其密钥生成、加密解密和数字签名的完整流程,并深入探讨了其在SSL/TLS密钥交换中可能引发的

corg81763的博客 450

用实例给新手讲解RSA加密算法

http://www.cfca.com.cn/zhishi/wz-012.htm     用实例给新手讲解RSA加密算法     图为 RSA公开密钥算法的发明人,从左到右Ron Rivest, Adi Shamir, Leonard Adleman. 照片摄于1978年    RSA加密算法是最常用

4549

数据结构与算法——2022每日一练(1月)

本文整理了一系列技术相关的选择题及答案解析,涵盖Dubbo负载均衡、二叉排序树、RSA加密算法、Java基础、密码学基础等多个领域。主要内容包括:1)Dubbo的ConsistentHash负载均衡策略特点;2)不同序列构造二叉排序树的层次遍历差异;3)RSA算法加解密过程及密钥计算,包括欧拉函数、互质关系等数学基础;4)Java类加载、String对象创建等基础知识;5)密码学发展历史及RSA算法的安全性与破解方法。这些题目涉及计算机科学的核心概念,对理解分布式系统、数据结构和密码学有重要参考价值。

yangwei2048的博客 1587

RSA 加密算法原理简述

概述 本文旨在说明RSA加密算法的原理及实现,而其相关的数学部分的证明则不是本文内容。 版权说明 著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:Q-WHai 发表日期: 2016年2月29日 本文链接:http://blog.youkuaiyun.com/lemon_tree12138/article/details/50696926 来源:优快云 ...

FKNIGHT 的博客 5万+

RSA算法详解:万字文章详解RSA的加密与解密

为了彻彻底底的研究明白RSA算法,真的是。。煞(lei)费(si)苦(wo)心(le),首先我希望自己前前后后、彻彻底底的琢磨明白,其次我也希望我把他分享出来以后,大家都能读得懂,这篇文章真的是我迄今为止写的又臭又长的一篇文章了,但是我能保证的是,你读完了以后,绝对不会再问RSA是啥玩意儿了。。

布啦啦 7668

【学习路线】 游戏客户端开发入门到进阶

游戏开发是一个交叉性极强的技术领域,对开发者提出了高维度的要求。作为初学者,不要急于求成,打牢基础、注重原理、勤于实践,你的成长将会非常快速而稳健。希望这份学习路线与书单能为你指明方向,迈出职业开发者的第一步。

hhw_hhw的博客 2128

【每日一个知识点】-【Python】AES128、AES256、RSA加密算法介绍

本文对比分析了AES和RSA两种主流加密算法。AES是对称加密算法(128/256位密钥),加密速度快,适合文件加密,但密钥传递存在安全隐患;RSA是非对称加密算法(2048/4096位密钥),通过公钥/私钥机制解决密钥传递问题,但速度较慢。实际应用中通常组合使用:RSA加密AES密钥进行安全传递,AES加密实际数据确保效率。文中提供了Python实现代码,展示了如何生成密钥、加密解密数据,以及两种算法的组合应用。

一名游荡在Python和MBD的初学者 2137

从爱好者到工程师:如何低成本体验RFSoC ZU47DR?性能实测与避坑指南

本文详细介绍了如何低成本体验赛灵思RFSoC ZU47DR芯片,包括二手开发板选购、租赁服务、精简开发环境搭建等实用方案。通过性能实测与避坑指南,帮助爱好者和工程师在有限预算下充分利用这款集成了ARM处理器和FPGA的高性能芯片,降低开发门槛。

weixin_42525005的博客 221

每日一练RSA (20 分)

每日一练RSA (20 分)

S_JYYDS的博客 1420

告别信号毛刺!手把手教你用ADS和IBIS-AMI模型搞定PCIe Gen3眼图仿真

本文详细介绍了如何使用Keysight ADS和IBIS-AMI模型进行PCIe Gen3眼图仿真,解决高速信号传输中的信号质量问题。从仿真环境搭建、S参数预处理到眼图优化与故障排除,提供了一套完整的工程实践指南,帮助工程师提升PCIe Gen3接口的信号完整性。

weixin_28366053的博客 370

从0到1:用Claude 3.7十日拿下教育部课题申报书(附可修改LaTeX模板)

🟣"作为教育部人文社科项目评审专家,请根据近三年立项数据分析,为[您的学科方向]领域推荐5个具有创新性且符合'十四五'规划的重点选题,要求选题体现交叉学科特征,并标注潜在理论突破点"🟣"根据前期研究基础,创建包含4个研究模块、12个关键节点的三维技术路线图,要求体现实验仿真-实证研究-理论建模的螺旋递进关系,并标注每个节点的预期成果形态"🟣"现在切换至教育部学科评审组组长模式,从选题价值、创新程度、研究可行性三个维度对本申报书进行盲审,生成包含9个扣分风险点的诊断报告及修改优先级排序"

智能AI让学术科研更容易 545

CTF 每日一题 Day43 RSA5

题目名称:[BJDCTF2020]这是base?? 题目类型:Crypto 题目来源:BUUCTF 题目描述:注意:得到的 flag 请包上 flag{} 提交

ChaoYue_miku的博客 737

黑猫带你学UFS协议第1篇:全网最全UFS协议中文详讲,这份学习框架图,你值得拥有!!!(持续更新中...)

本文由黑猫学长撰写,深入解析UFS协议,覆盖从基础概念到高级特性的全方位教程。适合存储芯片行业从业者和嵌入式开发者,旨在帮助读者快速掌握UFS协议,适用于高端智能手机、平板等智能设备。预计15万字,涵盖UFS 3.1协议,讲解UFS协议栈、物理层、链路层、传输层等内容。

黑猫奥利奥的博客 3696

「每日一问」加密算法分为哪几种类型?

不积跬步,无以至千里;不积小流,无以成江海。

万猫学社 1522

【06】C#入门到精通——C# 多个 .cs文件项目 同一项目下添加多个 .cs文件

本文介绍了如何将C#游戏开发中的代码从单个.cs文件拆分到多个.cs文件中,以提升代码的可维护性和可读性。文章演示了在Visual Studio中创建Hero类和ShowInfo类的具体步骤:通过右键项目名添加新建类,将原有代码分别剪切到对应的类文件中,并自动生成命名空间。拆分后需要在Program.cs中通过"using"指令引用这些类,最后通过运行测试验证功能正常。这种模块化代码组织方式能有效解决单一文件代码过长、结构混乱的问题。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1137

设备接入与APP(应用程序)接入华为云iotDA平台的详细操作步骤及获取方式

设备及APP(应用程序) 登录 IoTDA 平台所需的 入场与操作清单内容,提供逐项详细操作步骤和获取方式,并穿插贴士便于理解与实际操作落地。内容基于 华为云 IoTDA 控制台 和 IAM 控制台 的实际使用路径整理。

hy行者勇哥的博客 3059

【RSA算法】

RSA算法RSA算法介绍:RSA非对称加密系统:RSA加密算法过程:Python Console示范过程:有趣编程:代码如下:运行结果如下:上一章链接:[欧几里得算法](https://blog.youkuaiyun.com/m0_66318554/article/details/125065200)每日一言:持续更新中... # -*- coding = utf-8 -*- # @Time : 2022/6/12 11:11 # @Author : lxw_pro # @File : py-32.py # @Sof

m0_66318554的博客 383

Sigrity Power DC Package Multi-Resistor Compact ET Model Extraction模式提取封装基板电热阻模型

DIE(定义DIE的参数):material设置为silicon(硅),Attach material(贴片的材料,设置为Die Attach),Attach thickness(贴片的材料的厚度,厚度设置为0.001mm,点击ok。Cap为覆盖材料,Material定义材料类型,thickness定义厚度,length和width定义长宽,Adhesive Material为胶的材料,Adhesive Material为胶的厚度,本例不定义,跳过即可。

weixin_54787054的博客 439

倪文迪陪你学蓝桥杯2021寒假每日一题:1.27日(2019省赛A组第5题)

大数和快速幂

罗勇军的博客 6581

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

聊一聊平时常用的加密算法

点击上方IT牧场,选择置顶或者星标技术干货每日送达!加密算法我们整体可以分为:可逆加密和不可逆加密,可逆加密又可以分为:对称加密和非对称加密。一、不可逆加密常见的不可逆加密算法有M...

ITMuch的专栏 854

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

BUUCTF 每日打卡 2021-5-8

引言 together 附件有两个 公钥,pem 和 flag(base64编码) 文件 联想题目,容易猜想是 RSA 共模攻击 编写代码验证: from Crypto.PublicKey import RSA with open("pubkey1.pem", "r") as f: key = RSA.import_key(f.read()) print(key.n) print(key.e) with open("pubkey2.pem", "r") as f: key

weixin_52446095的博客 7530

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

CTF 每日一题 Day36 [HDCTF2019]basic rsa

题目名称:[HDCTF2019]basic rsa 题目类型:Crypto 题目来源:BUUCTF 题目描述:注意:得到的 flag 请包上 flag{} 提交, flag{小写字母}

ChaoYue_miku的博客 870

从CTF实战解析RSA加密:大数分解原理与Python工具链应用

RSA加密算法作为非对称加密的基石,其安全性建立在大数分解难题之上。该算法通过公钥与私钥的配对,实现了信息的安全传输与数字签名。在工程实践中,密钥长度不足、参数选择不当等都会导致安全漏洞。CTF竞赛中常通过分解模数n来破解RSA,这直观展示了算法原理与安全实践的紧密关联。本文结合openssl、Python Crypto库等工具链,详解从公钥提取、模数分解到私钥计算的全流程,并针对RSA在HTTPS、软件签名等场景的应用,探讨了其技术价值与常见攻击向量。通过分析RSA加密的数学基础与实战案例,帮助读者深入理

weixin_29741447的博客 222

每日MISC-攻防世界CoolCat:从加密图片到RSA参数恢复的实战解析

本文详细解析了攻防世界CTF题目CoolCat的解题过程。该题巧妙结合了MISC图像处理与Crypto密码学知识,通过分析Arnold's Cat Map加密算法,逆向推导丢失的RSA相关参数p、q、m,并利用算法的周期性,最终恢复被加密的图片,获取隐藏的Flag。文章提供了完整的逆向思路、实战代码和优化技巧。

o4p5q6r7s的博客 212

BUUCTF 每日打卡 2021-4-2

引言 啊,假期就要开始了,好耶! 明天还有虎符CTF要打(TTK,一直摸TTK) 信息化时代的步伐 打开附件,只见一串数字:”606046152623600817831216121621196386“ 我直接“???” 再看题目描述: 还是摸不着头脑 只好搜题解 说是中文电码,又是没见过的密码[捂脸] “也许中国可以早早进入信息化时代,但是被清政府拒绝了”: 自摩尔斯电码在1835年发明后,一直只能用来传送英语或以拉丁字母拼写的文字。1873年,法国驻华人员威基杰(S·A·Viguer)参照《康熙字典》的

weixin_52446095的博客 889

前端的加密和解密,crypto-js的应用,AES / RSA / md5

记住2组单词 AES/RSA. 和 md5 / shaAES/RSA 用来加密/解密md5 / sha 用来做信息摘要。

有一棵树的博客 3727
上一篇: 每日一得--各种排序算法的分析及java实现
下一篇: 每日一得--数字证书
一根筋i
博客等级 码龄16年 7粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值