嵌入式基础知识-RSA非对称加密基本原理

news2024/9/27 21:20:49

之前的文章嵌入式基础知识-信息安全与加密,介绍过数据加密的一些基本概念,对称加密的原理比较简单,加密和解密的密钥相同,而非对称加密,两个密钥不同,本篇就来具体介绍RSA这种非对称加密的密钥计算原理。

1 RSA算法基本原理

RSA加密算法是由罗纳德·李维斯特(Ronald Linn Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德尔曼(Leonard Adleman)于1977年共同发明的。它的密钥计算规则可由下图所示。

公钥和私钥的基本特点为:

  • 公钥和私钥中都有两个数字构成,并且其中一个数字是相同的,即图中所示的N,示例为33
  • 公钥有自己特有的数字,即图中所示的E,示例为3
  • 私钥有自己特有的数字,即图中所示的D,示例为7

公钥加密的过程为(对明文中的每个字符分别解密,示例为加密其中一个字符):

  • 先对明文求E次幂
  • 再将结果对N取余

私钥解密的过程与加密过程类似:

  • 先对密文求D次幂
  • 再将结果对N取余

2 RSA密钥计算规则

上面介绍了RSA加密解密的基本过程,那RSA的密钥(公钥和私钥),怎么计算得到呢?

RSA的密钥计算,需要用到质数和欧拉函数的知识。

质数的概念如果忘了,后面会再介绍。

欧拉函数暂不展开讲解,记住公式即可。

下面就来看下RSA密钥的计算步骤。

2.1 计算步骤

RSA密钥(公钥和私钥)的计算步骤可分为如下五步:

  • 第一步:取两个质数,如p=3,q=11

  • 第二步:质数相乘,N=pxq=3x11=33

  • 第三步:欧拉函数,T=(p-1)x(q-1)=2x10=20

  • 第四步:选公钥E,需满足以下条件:

    • 是一个质数
    • 1<公钥<T
    • 不是T的因子

    可以从小开始选,选E=3,因此公钥为(3, 33)

  • 第五步,计算私钥D,公式为**(DxE)%T=1**,解得D=7,因此私钥为(7,33)

RSA密钥的计算规则是公开的,那破译的难点在哪里呢?

其实,在实际使用时,两个质数尽量取大,转换成二进制后1024个二进制位或者更多,位数越多越难破解。

对于RSA的破解难度分析:

  • 公钥(E,N)是公开的,要想破解密钥,就是求出D
  • 根据公式(DxE)%T=1,E是已知的,下一步就是要获取到T,而T=(p-1)x(q-1),与两个质数有关
  • 虽然N=pxq,N也是已知的,但如果这两个质数设置的非常大,N和T也就会很大
  • 而对于大数的质数分解,是很难计算的,这就是RSA算法难破解的原理了

2.2 质数简介

上面说到,RSA密钥的计算,需要用的质数,那质数的概念,是否还熟悉呢?

质数是小学数学中就学过的知识点,不过平时用的不多,这里再简单回顾以下。

质数(也叫素数),指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

质数的一些性质:

  • 质数p的约数只有两个:1和p
  • 算术基本定理:任一大于1的自然数,要么本身是质数,要么可以分解为几个质数之积,且这种分解是唯一的
  • 质数的个数是无限的
  • 若n为正整数,在n2到(n+1)2之间至少有一个质数
  • 若n为大于等于2的正整数,在n到n!之间至少有一个质数

可以写一段代码,求取一定范围的质数,感受一下质数有哪些。

代码怎么写呢?还是可以看下小学课本:

用Python编写的打印5000以内质数的代码如下:

#判断是否是质数:大于1,不等于2,是否为奇数,是否有约数'''
def isPrime(num):
    if num > 1:
        if num>2:
            if num%2==1:
                for i in range(2, int((num-1)/2)): 
                    if num%i == 0:
                        return False #有约数
                return True #无约数
            return False #3以上的偶数
        return True #等于2
    return False #小于2

if __name__ == '__main__':
    prime_list = []
    for i in range(5000):
        if isPrime(i):
            prime_list.append(i)
    print(prime_list)

这里列举5000以内的质数:

3 RSA密钥计算实例

题目:RSA算法中,选择两个质数,p=11,q=17,加密密钥为e=23,且求解密密钥。

分析:按照RSA算法的基本原理,N=pxq=11x17=187,T=(p-1)x(q-1)=10x16=160,而E=23,

根据(DxE)%T=1,即(Dx23)%160=1,解得D=7

4 总结

本篇介绍了RSA这种非对称加密算法的加密解密基本过程,以及公钥和私钥的计算基本步骤,并补充介绍了质数的相关概念,最后通过一个实例来简单体会下RSA密钥的计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1151285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PyQt学习篇 · ⑧】:QWidget - 窗口特定操作

文章目录 图标标题不透明度窗口状态最大化和最小化窗口标志案例 图标 setWindowIcon(QIcon("resource/header_icon.png"))&#xff1a;该函数用于设置QWidget的窗口图标。可以为窗口设置一个图标&#xff0c;以显示在窗口标题栏、任务栏或窗口管理器中。 windowIcon…

全面解析:oa系统是什么?有哪些好用的oa系统

oa系统是什么&#xff1f;有哪些好用的oa系统 一、什么是OA系统 OA系统全称为Office Automation&#xff0c;即办公自动化系统。它是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台&#xff0c;具有信息管理、流程管理、知识管理&#xff08;档案和业务管理&am…

视频剪辑软件Corel VideoStudio Ultimate 会声会影2024中文旗舰版免费下载安装步骤

我喜欢视频剪辑软件Corel VideoStudio Ultimate 会声会影2024中文旗舰版&#xff0c;因为它使用起来很有趣。它很容易使用&#xff0c;但仍然给你很多功能和力量。VideoStudio让我与世界分享我的想法&#xff01;“这个产品的功能非常多&#xff0c;我几乎没有触及它的表面&…

分布式系统之CAP理论

1. CAP 概念 CAP 概念指的是分布式系统中的三个核心属性&#xff1a;一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;、分区容错性&#xff08;Partition Tolerance&#xff09;。CAP 定理由计算机科学家 Eric Brewer 在 2000 年提出&…

keealived安装配置启动

1.keepalived作用和原理图 keepalived作用:解决单点故障简单原理图1: 2.keepalived安装配置启动 地址: https://www.keepalived.org/download.html# 1)解压 tar -zxvf keepalived-2.0.18.tar.gz # 2)进入keepalived目录 cd keepalived-2.0.18/ # 3)安装libnl/libnl-3依赖…

系统架构设计之云原生架构

云原生架构 一. 云原生技术介绍二. 传统架构模式 VS 云原生架构模式三. 云原生架构反模式四. 云原生架构设计原则 其它相关推荐&#xff1a; 软考系统架构之案例篇(架构设计相关概念) 系统架构之微服务架构 系统架构设计之微内核架构 鸿蒙操作系统架构 所属专栏&#xff1a;系统…

Tomcat简介 安装 站点部署 多实例配置 反向代理

一、Tomcat简介二 、Tomcat帮手 --- JDK安装jdk检查jdk是否安装成功 三.安装TomcatTomcat配置管理页面 四、web站点部署五、部署开源站点&#xff08;jspgou商城&#xff09;安装数据库 六、 jspgou商城上线配置数据库连接 七、Tomcat多实例配置复制程序文件浏览器访问 八、Tom…

3D LUT 滤镜 shader 源码分析

最近在做滤镜相关的渲染学习&#xff0c;目前大部分 LUT 滤镜代码实现都是参考由 GPUImage 提供的 LookupFilter 的逻辑&#xff0c;整个代码实现不多。参考网上的博文也有各种解释&#xff0c;参考了大量博文之后终于理解了&#xff0c;所以自己重新整理了一份&#xff0c;方便…

RT-Smart 开发笔记:int 类型数值溢出造成的奇怪问题的分析与排查记录

前言 最近在调试 RT-Smart 上的用户态 mq&#xff08;消息队列&#xff09;时&#xff0c;遇到一个奇怪的问题&#xff0c;这个例程打印了一下获取的时间&#xff0c;就可以正常的工作&#xff08;超时退出&#xff09;&#xff0c;否则&#xff0c;就一直卡住&#xff08;无法…

10.27~10.29数电第三次实验分析与问题

实验要求 分析 寄存器 D触发器有两个输出口&#xff0c;一个输入口&#xff0c;一个时钟信号&#xff0c;一个复位信号 同步异步就是说复位信号在不在always里 给它加一个load就成了一位寄存器&#xff0c; 寄存器堆 8个8位的寄存器堆&#xff0c;每个寄存器都有两读一写…

Zynq-Linux移植学习笔记之64- 国产ZYNQ在linux下配置国产5396芯片

1、背景介绍 复旦微ZYNQ通过SPI配置国产JEM5396&#xff0c;框图如下&#xff1a; 现在需要在linux下的应用程序内配置JEM5396的寄存器。其中FMQL和进口的XILINX ZYNQ类似&#xff0c;JEM5396和进口的BCM5396兼容。因此可以参考进口ZYNQ在linux下配置BCM5396过程。Zynq-Linux移…

【Java 进阶篇】Java HTTP响应消息详解

在Web开发中&#xff0c;HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于传输数据的协议&#xff0c;它用于浏览器和Web服务器之间的通信。当你在浏览器中访问一个网页时&#xff0c;浏览器向Web服务器发送HTTP请求&#xff0c;然后Web服务器返回HTTP响应。…

YOLOv8如何添加注意力模块?

分为两种&#xff1a;有参注意力和无参注意力。 eg: 有参&#xff1a; import torch from torch import nnclass EMA(nn.Module):def __init__(self, channels, factor8):super(EMA, self).__init__()self.groups factorassert channels // self.groups > 0self.softmax …

CondaError_ Downloaded bytes did not match Content-Length

问题 使用anaconda下载包文件时&#xff0c;出现了CondaError: Downloaded bytes did not match Content-Length的错误 CondaError: Downloaded bytes did not match Content-Lengthurl: https://conda.anaconda.org/pytorch/win-64/pytorch-2.1.0-py3.11_cuda11.8_cudnn8_0.…

二维码智慧门牌管理系统升级,打造高效事件处理流程

文章目录 前言一、二维码智慧门牌管理系统的升级目标二、事件处理流程优化三、升级带来的好处 前言 随着城市化的不断推进&#xff0c;城市管理面临越来越多的挑战。为了更好地解决这些问题&#xff0c;许多城市已经开始采用二维码智慧门牌管理系统。这个系统不仅可以提高城市…

操作系统第一章-第三章大题_期末考试_详细易考

1.ABC三道作业如下表所示: 作业输入CPU输出A1505050B10060100C806050 (1) 计算在单道环境下运行时CPU的利用率;(2分) (2) 假设计算机系统中具有一个CPU、三个通道,画出ABC三道作业并发执行的情况图&#xff0c;并计算CPU利用率。(12分) 问题分析: c p u 利用率 c p u 有效…

Python对象(Object)与类型(Type)的关系

Object与Type 1、Object与Type概述2、Object与Type的关系 1、Object与Type概述 对象&#xff08;Object&#xff09;和类型&#xff08;Type&#xff09;是Python中两个最最基本的概念&#xff0c;它们是构筑Python语言大厦的基石 所有的数据类型&#xff0c;值&#xff0c;变…

[BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn

再补完这个就基本上完了. crypto RSA Variation II Schmidt-Samoa密码系统看上去很像RSA,其中Npqq, 给的eN给了d from secret import flag from Crypto.Util.number import *p getPrime(1024) q getPrime(1024)N p*p*qd inverse(N, (p-1)*(q-1)//GCD(p-1, q-1))m bytes…

cause: java.lang.numberformatexception: for input string

一个十分粗心的错误 我本来想要写的是name不为空&#xff0c;并且不为空字符串&#xff0c;结果不小心写成了空格&#xff01; 解决方案&#xff1a;将空格改为空字符串即可

JMeter的使用——傻瓜式学习【中】

目录 前言 1、JMeter参数化 1.1、什么是参数化 1.2、用户定义的变量 1.2.1、什么时候使用用户定义的变量 1.2.2、使用“用户定义的变量”进行参数化的步骤&#xff1a; 1.2.3、案例 1.3、用户参数 1.3.1、什么时候使用用户参数&#xff1f; 1.3.2、使用“用户参数”进…