常用的密码算法有哪些?

news2024/12/23 12:38:59

我们将密码算法分为两大类。

  • 对称密码(密钥密码)——算法只有一个密钥。如果多个参与者都知道该密钥,该密钥 也称为共享密钥。
  • 非对称密码(公钥密码)——参与者对密钥的可见性是非对称的。例如,一些参与者仅 知道公钥,而另一些参与者同时知道公钥和私钥。

虽然对称密码和非对称密码并不是密码学中仅有的两类原语,但是由于我们很难对密码学的 其他的子类进行划分,所以本书的大部分篇幅都是关于对称和非对称密码原语的。当今广泛应用 的密码算法都包含在这两类原语中。另一种划分密码学原语的方式如下。

  • 基于数学理论构造——这种密码算法的构造都建立在诸如因子分解之类的数学困难问题 上。基于 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编写,专业团队翻译,通过插图和简明的描述,深入浅出讲解密码学,书中附有配套彩图、章节习题及答案,帮你巩固知识点。

全书分为两个部分,第一部分介绍密码原语,涉及密码学基础概念、哈希函数、消息认证码、认证加密、密钥交换、非对称加密和混合加密、数字签名与零知识证明、随机性和秘密性等内容;第二部分涉及安全传输、端到端加密、用户认证、“加密货币”、硬件密码学、后量子密码、新一代密码技术等内容。

本书形式新颖、深入浅出,非常适合密码学领域的师生及信息安全从业人员阅读,也适合对密码学及其应用感兴趣的读者阅读。

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

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

相关文章

[牛客]链表中倒数第k个结点

使用快慢指针法:两种思路:1.fast先向后走k-1次,slow再向后走1次,然后fast和slow同时向后走,当fast走到最后一个结点时,slow刚好在倒数第k个位置上;2.fast先向后走k次,slow再向后走1次,然后fast和slow同时向后走,当fast走到最后一个结点的后面时(此时为NULL),slow刚好在倒数第k个…

AfxMessageBox 自定义封装

一般情况下AfxMessageBox是系统提供的一个对话框,若要做这种效果的,必须重写。 实例1: void test_SgxMemDialog_AutoSize() { //使用给定大小的对话框 CSgxMemDialog dlg(180, 60); dlg.SetWindowTitle(_T(" SegeX - CT&qu…

如何正确努力?7 分钟重新认识冰山模型。

我明明很努力,但好像没什么卵用?”这是很多职场人士或者即将进入职场的人容易产生的困惑。美国著名社会心理学家麦克利兰在 1973 年所提出的素质冰山模型大概能解释这种情况。不过,让我们先从【冰山一角】这个词开始。当你听到它,…

Linux基础命令-sed流编辑器

Linux三剑客-grep命令 Sed 一. 命令介绍 先到帮助文档中查看命令的描述信息 NAME sed - stream editor for filtering and transforming text sed命令是操作、过滤和转换文本内容的强大工具,常用功能包括结合正则表达式对文件实现快速增删改查,其中查询…

ChIP-seq 分析:GO 功能测试与 Motifs 分析(12)

动动发财的小手,点个赞吧! 1. 包加载 我们可以使用 rGREAT 包中提供的 GREAT Bioconductor 接口。 library(rGREAT) 2. GO和功能测试 要提交作业,我们可以使用 Myc 峰的 GRanges 并使用 submitGreatJob 函数指定基因组。 此函数返回一个 Grea…

王道计算机组成原理课代表 - 考研计算机 第三章 存储系统 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 计算机组成 知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!! 关于对 存储系统 章节知识点总结的十分全面,涵括了《计算机组成原理》课程里…

云时代数据科学平台--Sengee

随着数字经济的步步落地,我们将迎来“数据风暴”的冲击,传统的数据处理方式已经显得跟不上脚步,传统的开发方式已经不足矣应对“数据风暴”带来的需求革命,因此,需要考虑开放、多元、可变、集成、易用等数据处理的属性…

【C 语言 笔记】解决控制台闪烁/鬼畜/光标乱跑问题

问题 如果你要在控制台里“画”一些频繁更新的东西,比如做个小游戏,常见的思路是: while(1) {//先清空system("clear");//再画printf("....."); }然后控制台的就闪个不停,很瞎眼。 解决 0 降低刷新频率&a…

分布式相关知识(分布式锁,事务实现方案,CAP)

一 CAP理论 1.1 CAP理论 CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)这3个基本需求&#xff0…

【3维视觉】网格细分Mesh Subdivision算法介绍(Loop, Catmull-Clark, Doo-Sabin)

引言 介绍了Loop, Catmull-Clark, Doo-Sabin细分。 算法介绍 1. Loop细分 Loop细分是Charles Loop在1987年在硕士论文中提出的一种对三角网格的细分算法。 Loop细分是递归定义的,每一个三角形一分为四,对于新生成的点和旧点以不同的规则更新。 点的…

医院信息管理云平台源码 云HIS系统源码 4级电子病历系统

基层医院云HIS系统源码 高端商业his源码 有演示,可直接项目运营。 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务,提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一系列常规…

leetcode 55. 跳跃游戏

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 输入:nums [2,3,1,1,4] 输出:true 解释:可以先跳 1 …

刷题记录(2023.3.6 - 2023.3.11)

我很喜欢这周的感觉,前两道题对着 wp 简略复现了一下,由于以前都是自己学习,对一些稍微多、稍微难的题都会马上避开,笨小孩逃避太久了,有些事逃不掉,总得面对,开始往往很难,多花点时…

大数据下的协调者Zookeeper详解

Zookeeper框架 为什么要学习Zookeeper框架 1、Zookeeper是作为大数据生态圈框架中非常重要的一员 2、Zookeeper单独使用没有意义,主要是用来管理其他框架,被称为动物管理员 3、后期Hadoop的高可用框架、Kafka都需要依赖ZookeeperZookeeper的概述 1、Z…

C++回顾(二十四)—— set / multiset容器

24.1 set概述 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。set采用红黑树变体的数据结构实现,红黑树属于平衡二叉树。在插入操作和删除操作…

Spring——AOP核心概念和AOP入门案例

AOP:面向切面编程,一种编程范式,指导开发者如何组织程序结构 作用:在不惊动原始设计的基础上进行功能增强 Spring理念:无侵入式编程 比如测试一个方法的万次执行时间,原本没有Aop需要这样写 public void save() {Long stSystem.currentTim…

Java开发 - 消息队列之Kafka初体验

目录 前言 Kafka 什么是Kafka Kafka软件结构 Kafka的特点 怎么启动Kafka 下载Kafka 配置Kafka Zookeeper 启动Kafka Kafka案例 添加依赖 添加配置 配置启动类 创建生产者 创建消费者 测试 结语 前言 前几日总结了消息队列的一些知识,相信看完的同…

【博客631】监控网卡与进程网络IO使用情况

监控进程的网络IO使用情况 1、vnstat 由于 vnstat 依赖于内核提供的信息,因此执行以下命令来验证内核是否提供了 vnStat 所期望的所有信息: # vnstat --testkernel This test will take about 60 seconds. Everything is ok.不带任何参数的 vnstat 将…

设计模式(十九)----行为型模式之命令模式

1、概述 日常生活中,我们出去吃饭都会遇到下面的场景。 定义: 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。命…

UE官方教程笔记03-功能、术语、操作简介

对官方教程视频[官方培训]03-UE功能、术语、操作简介 | 徐良安 Epic的笔记这一部分基本都是走马观花的简单介绍功能世界创建建模Mesh editingtool是一个全新的建模工具,具备大多数的主流建模软件的核心功能HOUDINI ENGINE FOR UNREALHoudini编辑器,可以用…