有趣的数学 为什么素数在密码学中很重要?

        这里我们将探讨为什么素数在密码学中很重要。我们将根据特定的密码系统( RSA 算法)来进行深入了解。

一、素数的特殊性

        每个数字都可以分解为它的素数。一般来说,找到一个数的因数是非常困难的。要找到一个自然数的所有素因数,必须尝试将其除以它的可能因数。

        找到一个大数的质因数是非常困难的。但计算具有给定素数的数字非常容易:

        理想情况下,我们使用两个大的素数。然后我们计算这两者的乘积来加密消息。为了解密它,我们需要素数之一,因为没有简单的方法可以单独计算素数 1 和素数 2。但在我们详细讨论如何准确使用这些数字之前,让我们先看一下不同的加密系统。

二、密码系统

        在密码学中,我们有两种重要的方法来加密消息:对称加密和非对称加密。

        在对称情况下,双方共享相同的密钥。我们使用相同的密钥来加密和解密消息。只要只有两个人拥有钥匙,并且他们有办法安全地彼此分享,那就非常安全。

        现在我们可以想象,这种方法实现起来是非常困难的。如果我们想给某人写一封加密的电子邮件,我们不必首先与他亲自会面来交换密钥。

        这就是为什么在非对称加密中,我们有两种不同的密钥,一种用于加密,一种用于解密。一把钥匙是给消息作者的。写完消息后,他可以使用收件人的公钥对其进行加密。顾名思义,该密钥是公开的,并且可以在密钥数据库中进行查找。由于它仅用于加密,因此公开不会造成任何损害。另一方面,还有私钥。该密钥仅对一个人(即消息的接收者)可见。他可以用它来解密他收到的消息:

三、使用质数进行加密

        现在我们已经了解了两种不同的加密系统,让我们看看在非对称加密的情况下如何创建公钥和私钥。首先,应该知道,我们不能直接加密文本,而必须先将其转换为数字。这个过程称为填充,发生在一个为每个符号分配一个数字的列表中。然后我们将每个数字连接起来创建另一个数字,这里我们称之为m,然后对其进行加密。一个非常简单的填充列表只是将每个字母分配到其在字母表中的位置,例如,“A”分配给 1,“B”分配给 2 等。虽然此列表只允许非常简单的单词,但足以理解 RSA 背后的理论。 

1、创建密钥

        我们在以下过程中使用这种机制来创建两个密钥,一个私钥和一个公钥:

        1、选择两个随机的、随机独立的素数,p和q。

        2、计算两者的乘积N = pq。

        3、计算两者的 Phi 函数:\phi (N) = (p-1) (q-1)

        4、选择一个与N互质且小于N的自然数g

        5、计算g模\phi (N)的乘法逆k,即g \phi (N)g \cdot k + d \cdot \phi(N) = 1

        N和g现在构建我们的公钥,我们将使用它们来加密消息。k是我们的私钥,用来解密。为了更清楚地看到这一点,我们来看看加密和解密过程。

2、加密和解密

        现在,我们使用公钥对消息m进行加密:

s \cong m^{g} \textrm{ mod } N

        我们用以下方法解密它:

m \cong s^{k} \textrm{ mod } N

        正如我们所看到的,只有当我们有g \phi (N)的乘法逆k时,我们才能解密。

        由于在可预见的未来不可能计算出较大的素数(N),因此没有私钥就无法解密消息。这使得系统非常安全。

3、一个示例

(1)创建密钥

        我们要加密的字母是“O”,我们将其转换为数字m=15,因为它是字母表中的第十五个数字。现在我们选择随机素数。为了简单起见,我们选择素数p=13q=17

​        然后我们构建素数的 phi 函数\phi (N) = (p-1) (q-1) = 192

        选择一个与\phi (N)互质的自然数g,我们选择29。

        唯一需要计算的是g的逆k。29 \cdot k + 192 \cdot d = 1。在欧几里得算法的帮助下,我们将其计算为53。

#求解二元一次不定方程 
#29x + 192y = 1def ext_euclid(a, b):if b == 0:return 1, 0, aelse:x, y, q = ext_euclid(b, a % b)x, y = y, (x - (a // b) * y)return x, y, qext_euclid(29, 192)# 解为x = 53 y=-8

        这样我们就有了公钥N = p\cdot q = 221。还有我们的私钥k=53

(2)加密和解密

        接下来我们加密我们的数字:

15 \cong s^{29} \textrm{ mod } 221

s = 19

        我们现在就拥有了加密的消息,并且可以安全地将其传输给收件人,而任何人都无法知道它代表字母“O”。

        为了解密消息,我们需要逆数k=53

15 \cong 19^{53} \textrm{ mod }221

         现在我们再次查看字母表,看到第十五个字母是“O”,这意味着我们已经成功加密和解密了我们的消息。

四、小结

        正如上面所描述的,我们可以利用无法将大数分解为素数来生成安全的非对称密码系统。

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

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

相关文章

基于51单片机的激光竖琴设计

一、摘要 激光竖琴是一种将激光技术与音乐相结合的新型乐器,具有独特的音色和视觉效果。本文设计了一种基于51单片机的激光竖琴,通过对激光发射器的控制,实现对激光束的调制,从而产生不同的音高。系统主要包括51单片机控制模块、…

Zookeeper 分布式服务协调治理框架介绍入门

文章目录 为甚么需要Zookeeper一、Zookeeper 介绍1.1 介绍1.2 Zookeeper中的一些概念1.2.1 集群角色1.2.2 会话 session1.2.3 数据节点 Znode1.2.4 版本1.2.5 事件监听器 Watcher1.2.6 ACL 权限控制表(Access Control Lists) 二、 Zookeeper的系统模型2.1.1 ZNode节点2.1.2 ZNo…

C#的Char 结构的方法之IsLetterOrDigit()

目录 一、Char 结构 二、Char.IsLetterOrDigit 方法 1.定义 2.重载 3.示例 4.IsLetterOrDigit(Char) 5.IsLetterOrDigit(String, Int32) 一、Char 结构方法 CompareTo(Char)将此实例与指定的 Char 对象进行比较,并指示此实例在排序顺序中是位于指定的 Char …

基于ssm的班级事务管理系统+vue论文

摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对班级事务信息管理的提升&#x…

【LeetCode:114. 二叉树展开为链表 | 二叉树 + 递归】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

STM32 基础知识(探索者开发板)--135讲 ADC转换

ADC定义: ADC即模拟数字转换器,英文详称 Analog-to-digital converter,可以将外部的模拟信号转换 ADC数模转换中一些常用函数: 1. HAL_ADC_Init 函数 HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc); 初始化ADC 形参&…

洛谷 P1293 班级聚会

题目链接 分析 枚举每一个城市,并计算以他做聚会地点的价钱,取最小,如果相同则取最靠后的,时间复杂度为 Θ ( n 2 ) \Theta(n^2) Θ(n2)。 其实可以发现将城市 i i i 换到城市 i 1 i1 i1,那么 i i i 之前的包括…

数据库中的存储过程和函数

1、定义 存储过程和函数是事先经过编译并存储在数据库中的一段 SQL 语句的集合。 存储过程和函数是在数据库中预先定义并编译好的可复用代码块,可以用于完成特定的任务,如计 算、查询和变换等。 2、好处 提高代码的复用性。 减少数据在数据库和应用…

后端主流框架-SpringMvc-day2

Java中的文件下载 2 文件下载 文件下载:就是将服务器(表现在浏览器中)中的资源下载(复制)到本地磁盘; 2.1 前台代码 前台使用超链接,超链接转到后台控制器,在控制器通过流的方式…

AI:111-基于深度学习的工业设备状态监测

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

Android 车联网——基础简介(一)

传统的车载功能单一,无太多娱乐性,而随着智能化时代的发展,车载系统也被赋予了在系统中预装 Android 应用的能力,基于Android平台的车载信息娱乐系统 —— Android AutoMotive 应运而生。 一、AutoMotive简介 Android Automotive OS 车载操作系统,是一个基本 Android 平台…

zsh配置

install sudo apt update sudo apt install zshsh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"chsh -s $(which zsh)安装 zsh-syntax-highlighting 插件: cd ~/.oh-my-zsh/custom/pluginsgit clone https://git…

技术与艺术的完美结合,AI艺术字生成平台一览

在创作的世界里,文字不仅是沟通的桥梁,更是灵魂的画笔。有时,我们的海报需要一丝文案的点缀,一些充满艺术感的文字,为作品注入更多的情感与深度。除了手写的文字,AI艺术字为我们提供了新的可能。AI生成未来…

WiFi7: MLO之概述

原文:MLO允许non-AP 和AP之间发现,认证,关联,建立1个或者多个Link。每个link独立的信道访问和帧交换。每个link的能力通过关联协商。 AP必须设置dot11MultiLinkActivated为真,必须附属于MLD。MLD和其附属的AP(s)必须受本规则限制。 Non-AP 当dot11MultiLinkActivated为真…

CF1909_C. Heavy Intervals题解

CF1909_C. Heavy Intervals题解 题目传送门(Problem - C - CodeforcesCodeforces. Programming competitions and contests, programming communityhttps://codeforces.com/contest/1909/problem/C)。 题目翻译如下:(图片来源&a…

操作系统期末复习!

引论及进程管理 1.操作系统的主要功能有( )。 A.进程管理、存储器管理、设备管理、处理机管理 B.虚拟存储管理、处理机管理、进程管理、文件管理 C.处理机管理、存储器管理、设备管理、文件管理 D.进程管理、中断管理、设备管理、文件管理 2.操作系统是对( )进行管…

Unity3D 如何实现多玩家语音聊天详解

前言 Unity3D是一款强大的跨平台游戏引擎,可以用于开发各种类型的游戏。在多人游戏中,语音聊天是一个非常重要的功能,可以增强玩家之间的交互和沟通。本文将详细介绍如何使用Unity3D实现多玩家语音聊天,并给出技术详解以及代码实…

助力工业生产“智造”,基于YOLOv8全系列模型【n/s/m/l/x】开发构建纺织生产场景下布匹瑕疵检测识别系统

纯粹的工业制造没有办法有长久的发展过程,转制造为全流程全场景的生产智造才是未来最具竞争力的生产场景,在前面的开发实践中我们已经涉足工业生产场景下进行了很多实地的项目开发,如:PCB电路板缺陷检测、焊接缺陷检测、螺母螺钉缺…

elasticsearch7.17.9两节点集群改为单节点

需求 将数据从node-23-1节点中迁移到node-83-1节点。但是现在node-83-1并没有加入到集群中,因此首先将node-83-1加入到node-23-1的集群 解决方案 使用ES版本为7.17.9,最开始设置集群为一个节点,node-23-1的配置如下 cluster.name: my-app…

系列十、Spring Cloud Gateway

一、Spring Cloud Gateway 1.1、概述 Spring Cloud全家桶中有个很重要的组件就是网关,在1.x版本中采用的是Zuul网关,但是在2.x版本中,由于Zuul的升级一直跳票,Spring Cloud最后自己研发了一个网关替代Zuul,即&#xf…