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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

听GPT 讲Rust源代码--library/std(7)

题图来自 Programming languages: How Google is using Rust to reduce memory safety vulnerabilities in Android[1] File: rust/library/std/src/sys/unix/kernel_copy.rs 在Rust的标准库中&#xff0c;kernel_copy.rs文件位于sys/unix目录下&#xff0c;其主要作用是实现特…

VMware下载安装

文章目录 VM16.0下载VM最新版Resource下载历史版本搜索 VMware workstation选择版本 VM安装产品激活密钥百度找一下就好 VM16.0 本人使用的是VM16 提取码1152 下载VM最新版 打开VMware官网 Resource下载历史版本 搜索 VMware workstation 选择版本 VM安装 产品激活密钥百…

dracut添加指定固件

文章目录 linux-firmware1、固件介绍2、Microcode updates for CPUs3、如何添加固件 linux-firmware 1、固件介绍 存放在 /lib/firmware&#xff0c;固件来自kernel 仓库更多的固件可以参考git仓库&#xff0c;https://git.kernel.org/pub/scm/linux/kernel/git/firmware/lin…

配音软件怎么选?推荐三款自用好评的

会刷短视频的小伙伴肯定知道&#xff0c;很多创作者想让自己的视频更加丰富&#xff0c;呈现更加完美的视频效果&#xff0c;往往会在视频里的空境部分加入一些旁白解说&#xff0c;你们难道就不好奇吗&#xff1f;这些声音为什么这么想真人说的话&#xff0c;而且还可以这么自…

vite vue3 ts 使用sass 设置样式变量 和重置默认样式

1.安装scss 样式支持依赖 yarn add -D sass 2.使用sass <div><!-- 测试使用sass --><h1>测试使用sass</h1> </div><style scope lang"scss"> div {h1 {color: red;} } </style> 效果&#xff1a; 3.通过npm下载并复制…

当生成式AI遇到业务流程管理,大语言模型正在变革BPM

生成式AI对各领域有很大影响&#xff0c;一个方面在于它改变了很多固有业务的工作流。 工作流&#xff08;Workflow&#xff09;是业务流程的一种实现方式&#xff0c;一个业务流程往往包含多个工作流范式以及相关的数据、组织和系统。 因此&#xff0c;提及工作流必然离不开业…

网络基础-2

IEEE制定了一个名为GARP的协议框架&#xff0c;该框架协议包含了两个具体协议&#xff0c;GMRP和GVRP。GVRP可以大大降低VLAN配置过程中的手工的工作量。 IP本身是一个协议文件的名称&#xff0c;该协议主要定义阐释了IP报文的格式。 类型网络号位数网络号个数主机号位数每个…

C++之string

C之string #include <iostream>using namespace std;/*string();//创建一个空的字符串string(const char* s);//使用字符串s初始化string(const string& str);//使用一个string对象初始化另外一个string对象string(int n,char c);//使用n个字符c初始化*/void test1()…

selenium (自动化概念 测试环境配置)

什么是自动化测试 自动化测试介绍 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统. 预设条件包括正常和异常&#xff0c;最后评估运行结果。   自动化测试&#xff0c;就是将人为驱动的测试行为转化为机器执行的过程。 【机器 代替 人工】 自动化…

前端 :用HTML , CSS ,JS 做一个秒表

1.HTML&#xff1a; <body><div id "content"><div id "top"><div id"time">00:00:000</div></div><div id "bottom"><div id "btn_start">开始</div><div …

大模型在百度智能问答、搜索中的应用

本文主要介绍了智能问答技术在百度搜索中的应用。包括机器问答的发展历程、生成式问答、百度搜索智能问答应用。欢迎大家加入百度搜索团队&#xff0c;共同探索智能问答技术的发展方向&#xff0c;文末有简历投递方式。 01 什么是机器问答 机器问答&#xff0c;就是让计算机…

ASP.NET WebApi 极简依赖注入

文章目录 环境服务类启动项注入使用依赖注入的优点 环境 .NET Core 7.0ASP.NET CoreVisual Studio 2022 服务类 public class T_TempService {public T_TempService(){}public void Test(){}}启动项注入 #region 依赖注入 builder.Services.AddTransient<T_TempService&g…

从瀑布模式到水母模式:ChatGPT如何赋能软件研发全流程

目录 1 内容简介2 作者简介3 专家推荐4 读者对象5 直播预告6 参与方式 计算机技术的发展和互联网的普及&#xff0c;使信息处理和传输变得更加高效&#xff0c;极大地改变了金融、商业、教育、娱乐等领域的运作方式。数据分析、人工智能和云计算等新兴技术&#xff0c;也在不断…

redis实现分布式延时队列

文章目录 延时队列简介应用场景案例&#xff1a;考虑&#xff1a;实现&#xff1a;整体思路&#xff1a;具体实现生产者消费者 运行结果 redis分布式延时队列优势redis分布式延时队列劣势 延时队列简介 延时队列是一种特殊的消息队列&#xff0c;它允许将消息在一定的延迟时间…

②CPU - 运算器、控制器 【软考-软件设计师考点】

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ②CPU - 运算器、控制器 【软考-软件设计师考点…

网络工程综合试题(三)

1. BGPMLS的作用是什么&#xff1f; BGPMLS&#xff08;BGP Monitoring Protocol and Label Switching&#xff09;是一种用于监控和管理BGP&#xff08;Border Gateway Protocol&#xff09;网络的协议和技术。它结合了BGP和MPLS&#xff08;Multiprotocol Label Switching&am…

RabbitMQ初入门

1、RabbitMQ是什么 RabbitMQ是“实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息代理软件&#xff08;亦称面向消息的中间件&#xff09;。RabbitMQ服务器是用Erlang语言编写的&#xff0c;而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均…

LeetCode热题100 48.旋转图像

题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9…

vue 内置指令-v-pre/v-memo

一、v-pre 使用了该指令的元素和子元素会被编译忽略&#xff0c;也就是不进行编译&#xff0c;其中包含的所有vue模版语法都会原样显示&#xff0c;作用加快vue的编译 例子&#xff1a; <p v-pre>{{不会被编译}}<span v-text"msg"></span></p&…

部署K8S

防火强的初始化&#xff1a; [rootk8s-node-12 ~]# systemctl stop firewalld NetworkManager [rootk8s-node-12 ~]# systemctl disable firewalld NetworkManager Removed symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service. Removed symlink /et…