密码算法概论

基本概念

什么是密码学?

简单来说,密码学就是研究编制密码破译密码的技术科学

例题:
image.png
密码学的三个阶段

  1. 古代到1949年:具有艺术性的科学
  2. 1949到1975年:IBM制定了加密标准DES
  3. 1976至今:1976年开创了公钥密码学,1978年公布了RSA密码体制,1991年发布了邮件加密软件PGP,2000年AES取代DES

密码学的分类

  • 古典密码算法:替代加密、置换加密
  • 对称加密算法:DES、AES
  • 非对称加密算法:RSA、背包算法、Rabin、椭圆曲线等

目前在数据通讯中使用最普遍的是DES和RSA等

什么是密码系统?

密码系统又叫做密码体制,用数学符号表示为S={M,C,K,E,D}

  • M表示:明文空间,即需要隐藏的信息
  • C表示:密文空间,即明文加密后的信息
  • K表示:密钥或密钥空间,通常指加解密算法的关键信息,可分为加密密钥和解密密钥
  • E表示:加密算法
  • D表示:解密算法

密码体制的基本类型

  1. 错乱
  2. 代替
  3. 密本
  4. 加乱

破译或攻击密码的方法

穷举攻击法,统计分析法,数学分析法

什么是隐写术?

隐写术就是将秘密的消息通过一种无伤大雅的消息发送出去。隐写术分为两种,语言隐写术技术隐写术

什么是符号码?
image.png
什么是公开代码?
image.png

对称密码

image.png
对称加密算法所需解决的问题:密钥的安全传递问题

如果加密和解密过程都使用相同的密钥或密钥算法,那么这种加密技术可以被归类为对称加密。


古典密码

古典密码是密码学中的其中一个类型,其大部分加密方式都是利用替换式密码或移项式密码,有时则是两者的混合。

其中替换密码可以概括为单表替换密码多表替换密码多字符替换密码

单表替换密码

什么是单表替换密码?

单表替换密码就是使用一个密文字母表,并且用密文字母表中的一个字母来代换明文字母表中的一个字母

image.png
破解单表置换密码算法

使用穷举法:次数26!= 4e26
使用统计法:

image.png

凯撒密码

凯撒密码(英语:Caesar cipher),或称凯撒加密凯撒变换变换加密,是一种最简单且最广为人知的加密技术。凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期凯撒的名字命名的,据称当年凯撒曾用此方法与其将军们进行联系。

应用

凯撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。凯撒密码还在现代的ROT13系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,凯撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。

image.png
凯撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,…,Z=25。此时偏移量为n的加密方法即为:

在这里插入图片描述

阿特巴西密码

阿特巴希密码将字母表整个扭转:第一个字母(aleph)与最后一个(taw)相替换,第二个(beth)与倒数第二个(shin)相替换,如此类推。密码学上的示沙克之谜出现在《耶利米书》中,ששך-示沙克(25:26;51:41)其实是加密后的בבל-巴别(即巴比伦)。[1][2]

现代希伯来文配合阿特巴希密码:

明文:  אבגדהוזחטיכלמנסעפצקרשת
密文:  תשרקצפעסנמלכיטחזוהדגבא

而罗马字母使用阿特巴希密码则是:

明文:  ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文:  ZYXWVUTSRQPONMLKJIHGFEDCBA

多表替换密码

维吉尼亚密码

什么是多表替换加密?

在一个多表替换密码中,会使用多个字母作为密码。为了加快加密或解密速度,所有的字母通常写在一张表格上,密码学上称作tableau。这种表格通常是26×26,因为这样才能放下全部26个英文字母。填充表格及选择下次使用的字母的方法,就是不同多字母替换密码之间的定义。多字母替换密码比单字母更难打破,因为其替换可能性多,密文要较长才可。

在这里插入图片描述

用来加密和解密的维吉尼亚表格
维吉尼亚密码中,表格的第一行只需直接填上26个字母,然后以下每一行的字母都是向左偏移一格。(这叫作表格横移,数学上每一列同余26。)要用这种密码需要使用一个关键字来作为密钥。关键字每次用完就再次重复。假设关键字是“CAT”,明文的第一个字由“C”加密,第二个字由“A”加密,第三个则由“T”加密,然后再回到C加密,一直重复。然后按照右边的密码表加密,例如BALL用CAT作关键字时会加密至DAEN,可见即使是同一个“L”亦会加密至另一个字母。现实中,维吉尼亚密码的关键字非常长。
例如,假设明文为:

ATTACKATDAWN

选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为:

LEMONLEMONLE

对于明文的第一个字母A,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母L。类似地,明文第二个字母为T,在表格中使用对应的E行进行加密,得到密文第二个字母X。以此类推,可以得到:

明文:ATTACKATDAWN
密钥:LEMONLEMONLE
密文:LXFOPVEFRNHR

置换密码

image.png

分组密码

在密码学中,分组加密(英语:Block cipher),又称分块加密块密码,是一种对称密钥算法。它将明文分成多个等长的模块(block),使用确定的算法和对称密钥对每组分别加密解密。分组加密是极其重要的加密协议组成,其中典型的如AES和3DES作为美国政府核定的标准加密算法,应用领域从电子邮件加密到银行交易转帐,非常广泛。

image.png
什么是好的分组密码?

  • 分组长度足够大
  • 密钥量足够大
  • 密码变换足够复杂
  • 加密和解密运算简单

什么是扩散?

扩散是指要将算法设计成明文每一比特的变化尽可能多地影响到输出密文序列的变化,以便隐蔽明文的统计特性

什么是混乱?

指在加解密变换过程中明文、密钥以及密文之间的关系尽可能地复杂化,以防密码破译者采用解析法(即通过建立并求解一些方程)进行破译攻击。

DES算法

什么是DES,DES(英语:Data Encryption Standard,缩写为 DES)其实是美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。

image.png
https://juejin.cn/post/7213743217337499709

AES算法

AES加密算法在维基百科上也叫做高级加密标准(英语:Advanced Encryption Standard,缩写:AES),又称Rijndael加密法(荷兰语发音:[ˈrɛindaːl],音似英文的“Rhine doll”),是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。

序列密码(流密码)

序列密码的主要原理是通过伪随机序列发生器产生性能优良的随机序列(或滚动密钥生成器),使用该序列与明文序列叠加(或加密)来输出密文序列。

image.png
序列密码和分组密码的不同之处是什么?

  1. 加密方式:序列密码一次处理一个或几个比特,分组密码一次处理固定大小的数据块,通常是64比特或128比特
  2. 运算方式:序列密码通常以流模式(Stream Mode)运行,即它们生成一个连续的密钥流,然后将该密钥流与明文进行逐比特异或运算以产生密文。分组密码通常使用分组模式(Block Mode),其中输入数据被划分为固定大小的块,并且每个块在加密之前都是相互独立的。

非对称密码(公钥密码)

为什么使用公钥密码体系(也称为非对称密码体系)?

  1. 密钥管理:公钥密码体系允许通信双方使用不同的密钥(公钥和私钥)。发送方使用接收方的公钥进行加密,接收方使用自己的私钥进行解密。这种方式避免了传统的对称密码体系中需要在通信双方之间共享密钥的问题,简化了密钥管理。
  2. 数字签名:公钥密码体系还支持数字签名,发送方可以使用自己的私钥对消息进行签名,接收方可以使用发送方的公钥来验证签名的真实性。这种机制可以确保消息的完整性和认证性,防止信息被篡改或伪造。
  3. 安全性:在公钥密码体系中,私钥通常保存在安全的环境中,只有其拥有者可以访问。因此,即使公钥泄露,也不会危及通信的安全性。而在对称密码体系中,一旦密钥泄露,通信的安全性将受到严重威胁。
  4. 密钥交换:公钥密码体系可以用于安全地进行密钥交换。通信双方可以使用对方的公钥加密一个临时的对称密钥,然后使用这个对称密钥进行后续的通信。这种方式称为密钥交换协议,例如Diffie-Hellman密钥交换。

image.png

非对称密码机制下的密钥协商

Diffie-Hellman密钥交换:
image.png
image.png
image.png

Diffie-Hellman密钥交换机制中的中间人攻击

image.png

RSA算法

RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。[1]

公钥和私钥的产生

在这里插入图片描述

(N,e)是公钥,(N,d)是私钥,Alice将她的公钥(N,e)传给Bob,将她的私钥(N,d)藏起来。
加解密消息以及证明,详见:RSA加解密算法
image.png

杂凑函数和消息认证码

密码散列算法

密码散列算法也称为单向散列函数、杂凑函数、哈希算法、HASH算法或消息摘要算法。它通过一个单向数学函数,将任意长度的一块数据转换为一个定长不可逆转的数据,这段数据通常叫做消息摘要。典型的散列函数有:MD5 (Message-Digest Algorithm 5) ,SHA-1等。

摘要算法的特性

  • 不可逆
  • 对任何长度的信息进行哈希后,结果都是一个固定长度的数据摘要,摘要的长度通常为128 bits或160 bits
  • 原始信息中一个字节的改变会导致摘要后的结果发生变化

image.png
什么是好的散列函数?
好的散列函数应该具备以下几个特点:

  1. 均匀性:散列函数应该尽可能地均匀地将输入空间映射到输出空间,即不同的输入应该尽可能地分布在输出空间的各个位置上。这样可以降低碰撞(两个不同的输入映射到同一个输出)的概率,提高散列算法的性能和安全性。
  2. 无法逆向推导:好的散列函数应该是单向的,即很难从散列值反推出原始输入。这样可以保护原始数据的机密性,防止被逆向破解。
  3. 抗碰撞性:好的散列函数应该具有较低的碰撞概率,即不同的输入在经过散列函数计算后产生相同的输出的可能性应该尽可能地小。这样可以提高数据的完整性和可靠性。
  4. 高效性:散列函数的计算速度应该尽可能地快,尤其是在处理大量数据时。高效的散列函数可以降低系统的计算开销,提高系统的性能。
  5. 抗碰撞性:好的散列函数应该对输入数据的细微变化具有很高的敏感性,即如果输入数据发生了微小的改变,其散列值应该发生显著的变化。这样可以保证散列函数在应用于数据完整性校验等场景时的有效性。

数字签名

数字签名(Digital Signature)又称公钥数字签名或电子签章,是以电子形式存储于信息中或以附件或逻辑上与之有联系的数据,用于辨识数据签署人的身份,并表明签署人对数据中所包信息的认可。在网络环境中,数字签名完全可以代替现实中的“亲笔签字”。数字签名是公钥加密技术与数字摘要技术的应用。

数字签名的作用

  • 保证传输信息的完整性
  • 发送者的身份认证
  • 防止交易过程抵赖行为的发生

数字签名的基本原理

发送者用自己的私有密钥加密数据后传给接收者,接收者用发送者的公钥解开数据后,就可确定消息来自于谁,同时也是对发送者发送的信息的真实性的一个证明,发送者对所发信息不能抵赖。

image.png
image.png

密码学新方向

image.png
image.png
image.png

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

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

相关文章

Golang | Leetcode Golang题解之第4题寻找两个正序数组的中位数

题目&#xff1a; 题解&#xff1a; func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {if len(nums1) > len(nums2) {return findMedianSortedArrays(nums2, nums1)}m, n : len(nums1), len(nums2)left, right : 0, mmedian1, median2 : 0, 0for left <…

app自动化-Appium学习笔记

使用Appium&#xff0c;优点&#xff1a; 1、支持语言比较多&#xff0c;例如&#xff1a;Java、Python、Javascript、PHP、C#等语言 2、支持跨应用&#xff08;windows、mac、linux&#xff09; 3、适用平台Android、iOS 4、支持Native App(原生app)、Web App、Hybird App…

算法系列--递归,回溯,剪枝的综合应用(1)

&#x1f495;"对相爱的人来说&#xff0c;对方的心意&#xff0c;才是最好的房子。"&#x1f495; 作者&#xff1a;Lvzi 文章主要内容&#xff1a;算法系列–递归,回溯,剪枝的综合应用(1) 大家好,今天为大家带来的是算法系列--递归,回溯,剪枝的综合应用(1) 1.全排…

使用Redis集合List实现消息队列

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型…

高阶DS---AVL树详解(每步配图)

目录 前言&#xff1a; AVL树的概念: AVL树节点的定义&#xff1a; AVL树的插入&#xff08;重点&#xff09; AVL树的旋转&#xff1a; &#xff08;1&#xff09;新节点插入较高左子树的左侧---右单旋 &#xff08;2&#xff09;新节点插入较高右子树的右侧---左单旋 …

unity双层滑动实现

实现功能&#xff1a; 当滑动列表中内容处于顶端的时候&#xff0c;向上滑动优先滑动整个滑动列表&#xff0c;当滑动列表移动到设置位置&#xff0c;即设定的最高处时&#xff0c;继续移动列表内内容。向下移动亦然&#xff0c;当内容处于滑动列表顶端时&#xff0c;移动整个滑…

深入解析Hadoop生态核心组件:HDFS、MapReduce和YARN

这里写目录标题 01HDFS02Yarn03Hive04HBase1&#xff0e;特点2&#xff0e;存储 05Spark及Spark Streaming关于作者&#xff1a;推荐理由&#xff1a;作者直播推荐&#xff1a; 一篇讲明白 Hadoop 生态的三大部件 进入大数据阶段就意味着进入NoSQL阶段&#xff0c;更多的是面向…

[游戏开发][UE5.3]代码生成蓝图文件并在代码中保存文件。

我看网上有人的做法比我更好&#xff0c;我这个更简单 UE5-GAS:读取Excel数据在蓝图创建并更新GE类 - 知乎 数据配表 测试编辑器API 创建编辑器蓝图文件&#xff0c;继承AssetActionUtility.h 创建在编辑器中显示的函数&#xff0c;可以用中文命名方便其他人使用。 右键任意…

从零开始学Python数据分析:菜鸟也能成高手(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【数据结构与算法初阶(c语言)】插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序-全梳理(万字详解,干货满满,建议三连收藏)

目录 1.排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3常见的排序算法 2.插入排序 2.1 原理演示&#xff1a;​编辑 2.2 算法实现 2.3 算法的时间复杂度和空间复杂度分析 3.希尔排序 3.1算法思想 3.2原理演示 3.3代码实现 3.4希尔算法的时间复杂度 4.冒泡排序 4.1冒泡排…

test01

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

Java的IDEA的工程管理

模块和包的图标&#xff1a; 举个例子&#xff1a; IDEA中创建包&#xff1a; 如图所示&#xff0c;com.LBJ的意思是在com包中创建子包LBJ 参见&#xff1a; IDEA中项目、模块和包的关系_idea中模块和项目-CSDN博客

网站秒收录的6个方法

网站怎么做到秒收录 网站的收录速度对于网站的曝光和流量至关重要。如果能够实现网站的秒收录&#xff0c;将大大提高网站的可见性和访问量。下面介绍几种方法&#xff0c;帮助您实现网站秒收录的目标。 1. 提交sitemap.xml文件 创建并提交sitemap.xml文件是实现网站快速收录…

Netty学习——源码篇9 Netty的Handler其他处理 备份

1 ChannelHandlerContext 每个ChannelHandler被添加到ChannelPipeline后&#xff0c;都会创建一个ChannelHandlerContext&#xff0c;并与ChannelHandler关联绑定。ChannelHandlerContext允许ChannelHandler与其他的ChannelHandler进行交互。ChannelHandlerContext不会改变添加…

U8二次开发-钉钉集成

钉钉开放平台作为企业沟通和协作的重要工具,其技术的每一次迭代都为企业带来了新的机遇和挑战。随着企业对于高效沟通和智能化管理的需求日益增长,钉钉平台的SDK更新显得尤为重要。把传统的U8与钉钉平台集成,可以有效的将业务功能和角色进行前移,打破应用系统二八原则,即8…

dailyneaty、希亦、鲸立婴儿洗衣机怎么样?三款卷王测评PK对决

曾经我还是一直选择手洗婴儿衣物&#xff0c;最终还是加入了买婴儿洗衣机的大军&#xff0c;一方面因为我懒&#xff0c;不想再继续手洗&#xff0c;另一方面是因为我看了科普才知道&#xff0c;当我们清洗衣物时&#xff0c;除了要洗掉衣物表面的污渍&#xff0c;更需要消除掉…

MATLAB——知识点备忘

最近在攻略ADC建模相关方面&#xff0c;由好多零碎的知识点&#xff0c;这里写个备忘录。 Matlab 判断一个数是否为整数 1. isinteger 函数 MATLAB中&#xff0c;可以使用 isinteger 函数来判断一个数是否为整数&#xff0c;例如&#xff1a;要判断x是否为整数可以采用以下代…

科研学习|论文解读——情感对感知偶然信息遭遇的影响研究(JASIST,2022)

原文题目 Investigating the impact of emotions on perceiving serendipitous information encountering 一、引言 serendipity一词最初是由霍勒斯沃波尔创造的&#xff0c;他将其定义为“通过意外和睿智发现你并不追求的事物”。信息研究中大多数现有的偶然性定义从几个角度看…

劳动力规划:对企业加速运营的未来展望

近年来&#xff0c;企业面临着过山车般的经济形势&#xff0c;面对消费水平的上涨、市场波动带来的担忧以及数字化的加速转型&#xff0c;许多企业虽然对未来仍秉持着谨慎乐观的态度&#xff0c;但也同时认为自身缺乏持续增长和成功转型的能力。为了让企业能够实现战略目标、应…

算法笔记之蓝桥杯pat系统备考(3)

算法笔记之蓝桥杯&pat系统备考&#xff08;2&#xff09; 多训练、多思考、多总结٩(๑•̀ω•́๑)۶ 八、深搜和广搜 8.1DFS dfs是一种枚举完所有完整路径以遍历所有情况的搜索方法&#xff0c;可以理解为每次都是一条路走到黑的犟种。 以老朋友斐波那契额数列为例&a…