常用的密码算法有哪些?
我们将密码算法分为两大类。
- 对称密码(密钥密码)——算法只有一个密钥。如果多个参与者都知道该密钥,该密钥 也称为共享密钥。
- 非对称密码(公钥密码)——参与者对密钥的可见性是非对称的。例如,一些参与者仅 知道公钥,而另一些参与者同时知道公钥和私钥。
虽然对称密码和非对称密码并不是密码学中仅有的两类原语,但是由于我们很难对密码学的 其他的子类进行划分,所以本书的大部分篇幅都是关于对称和非对称密码原语的。当今广泛应用 的密码算法都包含在这两类原语中。另一种划分密码学原语的方式如下。
- 基于数学理论构造——这种密码算法的构造都建立在诸如因子分解之类的数学困难问题 上。基于 RSA 算法的数字签名和非对称加密就属于这种构造。
- 基于启发式构造——这种算法的构造依赖于密码分析者的观察和统计分析。AES 算法就 是这种构造的典型案例。
这种分类方式还考虑到算法效率因素,基于数学理论构造通常比基于启发式构造的密码算法 要慢得多。我们可以得出这样的结论:对称密码大多数都是基于启发式构造的,而非对称密码主 要是基于数学理论构造的。
我们很难严格地对密码学涉及的所有算法进行准确分类。事实上,每本书或每门课程对密码 学定义和分类都有所不同。其实,这些定义和分类对我们来说并不重要, 因为我们只会将这些密码学原语看作独特且具有各自的安全声明的工具。反过来,我们可以把这些工具当作构造安全协 议的基础原语。对于实现协议安全,了解这些工具的工作原理以及提供的安全声明才是重中之重。 出于这种考虑,本书的第一部分主要介绍常用的密码原语及其安全属性。
本书中的许多概念在初次使用时可能比较难懂。但与学习和理解其他知识一样,对这些概念 了解得越多,在具体语境中见到的次数越多,我们就越能把它们抽象出来,理解起来也就愈加自 然。本书的作用就是帮助读者建立起密码算法构造的抽象思维模型,理解把各类密码算法组合在 一起形成安全协议的方法。本书会反复提到各类密码原语构造的接口,给出它们在现实世界的实 际使用示例。
密码学以前的定义很简单,其原理类似于 Alice 和 Bob 想要交换秘密信息。当然,现在密码学 的定义已经有了变化。当今,密码学围绕着新的发现、突破和实际需求演变成一门非常复杂的学科。 归根结底,密码学的真正目的在于增强协议安全性,使协议在敌手存在的情况下仍能安全运行。
为了准确地理解密码学使协议变得安全的原理,厘清协议所要达到的一系列安全目标至关重 要。本书涉及的密码原语至少满足下面性质中的一条。
- 机密性——掩藏和保护一些不想让别人看到的消息。例如,加密就可以掩盖传输中的消息。
- 认证性——确定通信另一方的身份。例如,认证技术可以让我们确信接收到的消息确实 是由 Alice 发送来的。
当然,这里只是对密码学所能提供的算法功能进行了简化。在大多数情况下,每个密码原语 的安全定义中都包含对算法功能的详细说明。密码原语的使用方式不同,协议产生的安全属性也 会不同。
在本书中,我们将会学习一些新的密码原语,同时还会学习将它们组合起来实现满足机密性或认证性等安全属性的方法。请认识到这样一个事实:密码学是一门在敌手存在的环境下为协议提供安全保护的技术。虽然本书对“敌手”还没给出明确的定义,但是我们可以把企图破坏协议 的参与者、观察者、中间人都当作敌手。这些角色反映了现实生活中敌手可能的身份。毕竟,密 码学是一个实用的领域,它最终对抗的坏人是有血有肉的。
对称密码:对称加密概述
对称加密(Symmetric Encryption)是密码学的重要概念之一。对称密码在密码学中有着举足 轻重的地位,本书中的大多数密码算法或协议都用到对称密码。现在,我们借助将要介绍的第一 个协议引入对称加密这个新概念。想象这样一个情景:Alice 需要给住在城堡外的 Bob 寄送一封 信件。如图 1.1 所示,Alice 要求她忠实的信使(Messenger)骑上他的骏马,穿越前方危险的土 地,向 Bob 传递重要消息。然而,Alice 对信使很是怀疑;尽管这位忠实的信使为她效劳多年, 但她仍希望此次传递的消息对包括信使在内的所有被动观察者均保密。试想一下,这封信可能包 含一些关于王国的流言蜚语。
Alice 需要的是一个协议,它能模拟 Alice 亲自将消息传递给 Bob 的过程。这是一个在现实 中不可能解决的问题,除非我们采用密码学(或隐形传输)技术。这就要用到密码学家多年前发 明的一种新型加密算法,常称为对称加密算法(Symmetric Encryption Algorithm)。
注意:
顺便说一下, 密码学算法通常也被称为密码学原语。我们可以将密码学原语视为密码学中一种 最小的算法构造,它通常与其他原语一起用于构造新的协议。“密码学原语”一词经常出现在相关 文献中,了解它有利于阅读文献,但它本身确实没有特别的意义,仅仅是一个新的术语而已。
接下来,让我们看看如何使用这个对称加密算法向信使隐藏 Alice 的真实消息。现在,假设 这个密码学原语是一个提供了以下两个函数的黑盒子(我们无法看到它的内部构造)。
- ENCRYPT;
- DECRYPT 。
第一个函数 ENCRYPT 以密钥(Secret Key) 和消息(Message)为输入,它输出一系列看起 来像是随机选择的数字,如果我们愿意的话,它也可以输出像噪声一样的数据。我们把这个函数 的输出称为加密消息。函数 ENCRYPT 的原理如图 1.2 所示。
第二个函数 DECRYPT 是第一个函数 ENCRYPT 的逆函数,它以 ENCRYPT 输入的密钥和输 出的加密消息为输入,输出原始消息。函数 DECRYPT 的原理如图 1.3 所示。
为了使用这个新的密码学原语,Alice 和 Bob 不得不在现实世界中先会面一次,商定他们将 要使用的密钥。之后,Alice 可以使用商定的密钥和函数 ENCRYPT 去保护她的消息。接着,她 将加密的消息交给信使,并由信使转交给 Bob 。Bob 收到加密的消息后,使用与 Alice 相同的密钥和函数 DECRYPT 恢复出原始消息。具体过程如图 1.4 所示。
在该消息传递过程中,信使拥有的都是看起来随机的消息,这不会对他获得隐藏的消息提供 任何有意义的帮助。借助密码学技术,我们有效地将不安全的协议转变为安全协议。新协议使得 Alice 可以在没有任何人(除 Bob 外)知道消息内容的情况下向 Bob 传递一封机密信件。
在密码学中,使一个协议变得安全的常见做法就是:使用密钥将消息转变成噪声,使经过变 换后的消息与随机数字序列无法区分开来。在接下来的章节中,我们将通过学习更多的密码算法 来了解这个过程。
顺便说一句,对称加密是对称密码(Symmetric Cryptography)或密钥密码(Secret Key Cryptography)的一部分。此类密码学原语的不同函数往往使用相同的密钥。在后面的章节中, 我们还会看到密钥有时不止一个。
非对称加密:两个密钥优于一个密钥
在前面关于对称加密的讨论中,我们曾提到:Alice 和 Bob 在安全传递信件前需要见面,以 确定他们将要使用的对称加密密钥。这是一个合理的要求,许多协议实际上都有这样的前提要求。 然而,这样的要求在有许多参与者的协议中很快变得不那么实用:在安全连接到谷歌、Facebook 、 亚马逊和其他数十亿网站之前, 网络浏览器是否也要满足这样的要求(即在连接前,浏览器之间要相互确定使用的对称加密密钥)?
这也称为密钥分发问题,在相当长的一段时间内该问题都未被解决,直到 20 世纪 70 年代末 密码学家发现了另一类称为非对称密码(Asymmetric Cryptography)或公钥密码(Public Key Cryptography)的算法,密钥分发问题才得以解决。在非对称密码中,不同的函数(ENCRYPT 和 DECRYPT )使用不同的密钥(对称密码仅使用单个密钥)。为了说明公钥密码如何帮助人们 建立信任,我将在本节介绍一些非对称密码原语。注意,这些原语只是本书内容的概览,在后续 章节中我们会更详细地讨论这些密码原语。
以上内容来自《深入浅出密码学》
密码学大咖DavidWong编写,专业团队翻译,通过插图和简明的描述,深入浅出讲解密码学,书中附有配套彩图、章节习题及答案,帮你巩固知识点。
全书分为两个部分,第一部分介绍密码原语,涉及密码学基础概念、哈希函数、消息认证码、认证加密、密钥交换、非对称加密和混合加密、数字签名与零知识证明、随机性和秘密性等内容;第二部分涉及安全传输、端到端加密、用户认证、“加密货币”、硬件密码学、后量子密码、新一代密码技术等内容。
本书形式新颖、深入浅出,非常适合密码学领域的师生及信息安全从业人员阅读,也适合对密码学及其应用感兴趣的读者阅读。
相关文章:
常用的密码算法有哪些?
我们将密码算法分为两大类。 对称密码(密钥密码)——算法只有一个密钥。如果多个参与者都知道该密钥,该密钥 也称为共享密钥。非对称密码(公钥密码)——参与者对密钥的可见性是非对称的。例如,一些参与者仅…...
SNS (Simple Notification Service)简介
SNS (Simple Notification Service) 是一种完全托管的发布/订阅消息收发和移动通知服务,用于协调向订阅终端节点和客户端的消息分发。 和SQS (Simple Queue Service)一样,SNS也可以轻松分离和扩展微服务,分布式系统和无服务应用程序…...
JVM初步理解浅析
一、JVM的位置 JVM的位置 JVM在操作系统的上一层,是运行在操作系统上的。JRE是运行环境,而JVM是包含在JRE中 二、JVM体系结构 垃圾回收主要在方法区和堆,所以”JVM调优“大部分也是发生在方法区和堆中 可以说调优就是发生在堆中…...
【巨人的肩膀】MySQL面试总结(一)
💪 目录💪1、什么是ER图2、数据库范式了解吗3、超键、候选键、主键、外键分别是什么?4、为什么不推荐使用外键与级联5、什么是存储过程6、drop、delete与truncate区别7、数据库设计通常分为那几步8、什么是关系型数据库9、什么是SQL10、MySQL…...
【数据结构之树】——什么是树,树的特点,树的相关概念和表示方法以及在实际的应用。
文章目录一、1.树是什么?2.树的特点二、树的相关概念三、树的表示方法1.常规方法表示树2.使用左孩子右兄弟表示法3. 使用顺序表来存储父亲节点的下标三、树在实际的应用总结一、1.树是什么? 树是一种非线性的数据结构,它是由n(n&…...
JavaScript语法
文章目录一、JavaScript是什么?JavaScript引入方式二、基础语法书写语法输出语句变量数据类型运算符流程控制语句数组函数JS变量作用域对象一、JavaScript是什么? JavaScript:是一门跨平台的脚本语言,用来控制网页行为࿰…...
【BIOS/UEFI】HII 基本框架及概述
HII(Human Interface Infrastructure )定义了一套管理用户输入的基础框架。HII数据库主要提供用户安装、卸载以及使用各种字符串、字体和图片等资源的接口。 HID Devices 是用户输入设备,如键盘、串口和网络;Display Devices 是输…...
sprintf(...)溢出边界导致程序崩溃的问题
文章目录小结问题及解决参考小结 使用sprintf(...)进行格式化是一种标准的做法,但是这样做是有一个极大的风险,由于sprintf(...)不进行边界检查,这样会有写操作溢出边界的风险,并导致程序崩溃。本文进行了简单写操作溢出边界的测…...
公式推导+dfs简版
写在前面的话:心可以冷,但手不能停 第一题:C. Flexible String 题目大意:给一个aaa字符串和bbb字符串和数字kkk,首先设置一个计数器cntcntcnt,其中可以对aaa字符串做以下操作:替换aaa中的一个字母xxx&#…...
论文笔记 | 标准误聚类问题
关于标准误的选择,如是否选择稳健性标准误、是否采取聚类标准误。之前一直是困惑的,惯用的做法是类似主题的文献做法。所以这一次,借计量经济学课程之故,较深入学习了标准误的选择问题。 在开始之前推荐一个知乎博主。他阅读了很…...
银行管理系统--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)
实例1:银行管理系统 从早期的钱庄到现如今的银行,金融行业在不断地变革;随着科技的发展、计算机的普及,计算机技术在金融行业得到了广泛的应用。银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列的功…...
【18】组合逻辑 - VL18 实现3-8译码器①
VL18 实现3-8译码器① 1 题目 【这题我的思路非常绝境】奈斯 !! 看真值表的思路:Yi所在列【0仅一个其余全1】,故【以0为对象求解】 观察发现:E3 E2_n E1_n = 100 时 是 译码的使能信号 ; 并且E3 E2_n E1_n为其他值时,都不使能译码 然后就很简单,没有仿真就成功了 2 代…...
2020蓝桥杯真题最长递增 C语言/C++
题目描述 在数列a_1 ,a_2,⋯,a_n 中,如果a_i <a_i1 <a_i2<⋯<a_j,则称 a_i至 a_j为一段递增序列,长度为 j−i1。 定一个数列,请问数列中最长的递增序列有多长。 输入描述 输入的第一行包含一个整数 n。 第二行包含…...
华为OD机试题 - 寻找连续区间(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:寻找连续区间题目输入输出示例一输入输出说明示例二输入输出Cod…...
一次疲惫的调试--累了及时透气
原创 射频清茶 深山小老虎 2023-03-11 14:32发表于广东 收录于合集 #射频调试3个 #网分4个 #Wi-Fi 2个 进来透透气 道不尽红尘舍恋 诉不完人间恩怨 世世代代都是缘 喝着相同的水 留着相同的血 这条路漫漫又长远 红花当然配绿叶 这一辈子谁来陪 渺渺茫茫来又回 往日情景再…...
综合练习7 摄氏度转华氏温度(“\t“的使用,循环语句)
综合练习7 摄氏度转华氏温度 使用do…while循环,在控制台输入摄氏温度与华氏温度的对照表。 对照表从摄氏温度-30℃到50℃,每行间隔10℃,运行如下: 摄氏温度:-30℃ 华氏温度:-22.0℉ 摄氏温度:…...
AWS数据库总结
RDS – 联机事务处理OLTP(Online Transaction Processing),包括: SQL ServerOracleMySQL ServerPostgreSQLAuroraMariaDB非关系数据库DynamoDB数据仓库RedShift – 联机分析处理OLAP(Online Analytics Processing&…...
2个步骤就能批量给视频添加滚动字幕
现在很多小伙伴在剪辑视频的时候都会给自己的视频添加适配的字幕,但是有很多的视频想要添加一样的滚动字幕时,有一个能批量添加剪辑的工具非常重要,今天小编就给大家分享一个可以批量剪辑大量视频的工具,下面一起看看具体的操作步…...
PHP 的运行方式有哪些?
PHP本质上的运行方式可以分为两种: 基于命令行的基于PHP-FPM的 但实际上,PHP能做的事很多,很多场景下,不同的运行方式能让开发更方便,减轻各种工作。 测试开发 PHP内置了一个HTTP 的server。这意味着,很…...
Web学习3_JavaScript
1.1 JS的调用方式与执行顺序 使用方式 HTML页面中的任意位置加上<script type"module"></script>标签即可。 常见使用方式有以下几种: 直接在<script type"module"></script>标签内写JS代码。script type"modu…...
「MySQL基础」不可重复读和幻读的区别
「MySQL基础」不可重复读和幻读的区别 文章参考: 在数据库中不可重复读和幻读到底应该怎么分? 作者:暖猫Suki、普通熊猫 文章目录「MySQL基础」不可重复读和幻读的区别一、概述二、小结一、概述 正好在琢磨这个问题,也被搞得头昏…...
CorelDRAW2023最新版新增功能200多个新模板
CorelDRAW是一款平面矢量绘图排版软件,CorelDRAW运用涵盖企业VI设计,广告设计,包装设计,画册设计,海报、招贴设计,UI界面设计,网页设计,书籍装帧设计,插画设计࿰…...
springboot自定义日志以及行号正确展示
在开发springboot项目时,我们可能需要自定义日志实现。需要对slf4j的日志实现进行一次外层包装 这个很简单,按照org.slf4j.Logger方式定义一个类Logger类MyLogger。 让后实现MyLoggerImpl: public class MyLoggerImpl implements CoreLogge…...
【GAOPS055】verilog 乘法、除法和取余
乘法硬件原理 结论 可以将乘法A x B转为A的移位相加。 利用乘2n就是左移n位的特性乘2^n就是左移n位的特性乘2n就是左移n位的特性,将数拆分为2n2^n2n表示 思路1 原始列竖式计算方法ref例2.9 思路2 B总是可以拆分为:B(an2nan−12n−1...a121a020)B(…...
TCP UPD详解
文章目录TCP UDP协议1. 概述2. 端口号 复用 分用3. TCP3.1 TCP首部格式3.2 建立连接-三次握手3.3 释放连接-四次挥手3.4 TCP流量控制3.5 TCP拥塞控制3.6 TCP可靠传输的实现3.7 TCP超时重传4. UDP5.TCP与UDP的区别TCP UDP协议 1. 概述 TCP、UDP协议是TCP/IP体系结构传输层中的…...
金三银四、金九银十 面试宝典 MySQL面试题 超级无敌全的面试题汇总(超万字的面试题,让你的MySQL无可挑剔)
MySQL数据库 - 面试宝典 又到了 金三银四、金九银十 的时候了,是时候收藏一波面试题了,面试题可以不学,但不能没有!🥁🥁🥁 一个合格的 计算机打工人 ,收藏夹里必须有一份 MySQL 八…...
【Java】初识Java
Java和C语言有许多类似之处,这里就只挑不一样的点来说,所以会比较杂乱哈~ 目录 1.数据类型 2.输入与输出 2.1三种输出 2.2输入 2.3循环输入输出 //猜数字小游戏 //打印乘法口诀表 3.方法 //交换两个数(数组的应用) //模…...
JVM相关知识
JVM类加载过程类什么时候被加载什么情况下会发生栈内存溢出JVM内存模型常量池回收方法区垃圾回收流程圾收集算法分代收集理论标记-清除算法标记-复制算法标记-整理算法类加载过程 加载–验证–准备–解析–初始化–使用–卸载 加载:通过全类名获取类的二进制流…...
【LeetCode】剑指 Offer(21)
目录 题目:剑指 Offer 39. 数组中出现次数超过一半的数字 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 40. 最小的k个数 -…...
线性求解器Ax=b的验证
文章目录前言Matrix MarketMatlab IORead dataWrite data测试C IORead and write dataDownload MatrixIO 代码下载参考网址前言 一般情况集成了一个线性求解器(Axb),我们需要验证其性能和精度,这时需要大量数据来做验证ÿ…...
备案备公司名跟网站名/百度关键词优化推广
2019独角兽企业重金招聘Python工程师标准>>> /** * 随机指定范围内N个不重复的数 * 最简单最基本的方法 * param min 指定范围最小值 * param max 指定范围最大值 * param n 随机数个数 */ public static int[] randomCommon(int min, int max, int n){ if (n &g…...
东莞大朗网站建设/新手做外贸怎么入门
(跃迁之路)专栏 叨叨两句 技术的精进不能只是简单的刷题,而应该是不断的“刻意”练习该系列改版后正式纳入【跃迁之路】专栏,持续更新一、SQL 【跃迁之路】SQL语句刻意练习(最后更新:2018.05.04) 二、JAVA基础 IO流 【…...
公司做网站的步骤/抖音搜索seo软件
1.git init 初始化一个空的git仓库2.git clone +SSH地址 clone新的项目到本地 3.git add git add file 4.git commit git commit -m "提交一次修改" 5.git push git push push到远程分支 6.git log 查看更新日志 7.git pull git pull…...
flash网站需要改变/刷外链工具
题目描述 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c ,使得 a b c 0 ?请找出所有和为 0 且 不重复 的三元组。 来源:力扣(LeetCode) 链接&#x…...
昆明网站开发培训/一个网站如何推广
2019独角兽企业重金招聘Python工程师标准>>> 推荐书目 1. KarimYaghmour,《Building Embedded Linux Systems》, OReilly 2003 2. Qing Li and Carolyn Yao,Real-Time Concepts for Embedded Systems,CMP Books ©…...
做警员编号网站/2024小学生时事新闻十条
IVT 问题的来源打开 IVT 文件的麻烦International Volleyball 2006 消失尝试打开 IVT 时,你会遇到一条错误消息,例如 “%%os%% 无法打开 IVT 文件”。 如果是这种情况,通常是因为 你的计算机上没有安装 International Volleyball 2006 for %%…...