代码编织梦想

声明

这是关于密码学笔记的第五篇博客。该部分中我们首先探讨一下密钥配送问题,然后讲解公钥密码是如何解决密钥配送问题的。最后,我们还将重点介绍一种最常用的公钥密码——RSA。

跟诸位大牛相比,笔者阅历尚浅、经验不足,笔记中若有错误,还需继续修正与增删。欢迎大家的批评与指正。

查看上一篇请点击以下链接:【密码学笔记】第4部分 分组密码的模式



1. 密钥配送问题

问题:对于对称密码,密钥必须要发送,但又不能发送(可能被窃听)。

解决方法

a. 通过事先共享密钥来解决。 密钥配送问题最简单的一种解决方法,就是事先用安全的方式将密钥交给对方,这称为密钥的事先共享

局限性:有时候难以找到一种安全的方式将密钥交给对方,此外,在人数很多的情况下,通信所需要的密钥数量也会增大,这是不现实的。

b. 通过密钥分配中心(KDC)来解决。 当需要进行加密通信时,密钥分配中心会生成一个通信密钥,每个人只要和密钥分配中心事先共享密钥即可。密钥分配中心拥有所有人的密钥,而每个人则拥有自己的密钥。

步骤:(以Alice向Bob发送加密邮件为例)
Step 1: Alice向密钥分配中心发出希望与Bob进行通信的请求。
Step 2: 密钥分配中心通过伪随机数生成器生成一个会话密钥,这个密钥是供Alice与Bob在本次通信中使用的临时密钥。
Step 3: 密钥分配中心从数据库中取出Alice的密钥和Bob的密钥。
Step 4: 密钥分配中心分别用Alice和Bob的密钥对会话密钥进行加密,并分别发送给Alice和Bob。
Step 5: Alice对来自密钥分配中心的会话密钥(已使用Alice的密钥加密)进行解密,得到会话密钥。
Step 6: Alice用会话密钥对邮件进行加密,并将邮件发送给Bob。
Step 7: Bob对来自密钥分配中心的会话密钥(已使用Bob的密钥加密)进行解密,得到会话密钥。
Step 8: Bob用会话密钥对来自Alice的密文进行解密。
Step 9: Alice和Bob删除会话密钥。

局限性:首先,每当有人进行加密通信时,密钥分配中心计算机都需要进行上述处理。随着人数的增加,密钥分配中心的负荷也会增加。如果密钥分配中心计算机发生故障,全公司的加密通信就会瘫痪。此外,主动攻击者也可能会入侵密钥分配中心计算机,盗取密钥数据库,则全公司所有加密通信都会被破译,会造成严重的后果。

c. 通过Diffie-Hellman密钥交换来解决。 在Diffie-Hellman密钥交换中,进行加密通信的双方需要交换一些信息。根据所交换的信息,双方可以各自生成相同的密钥。而窃听者虽然能够窃听到双方交换的信息,但却无法根据这些信息生成和双方相同的密钥。

d. 通过公钥密码来解决。 在公钥密码中,加密秘钥和解密密钥是不同的。只要拥有加密密钥,任何人都可以进行加密,但只有拥有解密密钥的人才能进行解密。接收者事先将加密密钥发送给发送者,发送者使用加密密钥对通信内容进行加密并发送给接收者,只有拥有解密密钥的接收者才能够进行解密(加密密钥被窃听者获取也没有问题)。


2. 公钥密码的基本概念

2.1 定义

公钥密码中,密钥分为加密密钥和解密密钥两种。发送者用加密密钥对消息进行加密,接收者用解密密钥对密文进行解密。

a. 发送者只需要加密密钥。
b. 接收者只需要解密密钥。
c. 解密密钥不可以被窃听者获取。
d. 加密密钥被窃听者获取是没问题的。

公钥密码中,加密密钥一般是公开的,因此被称为公钥(public key)。相对地,解密密钥是绝对不能公开的,不可以将它发送给别人(通信对象也不可以),只能由自己使用,因此被称为私钥(private key)。公钥和私钥是一一对应的,一对公钥和私钥统称为密钥对(key pair)。密钥对中的两个密钥之间具有非常密切的数学关系,因此公钥和私钥是不能分别单独生成的。

2.2 通信流程

假设Alice要给Bob发送一条消息。在公钥密码通信中,通信过程是由接收者Bob启动的。

Step 1: Bob生成一个包含公钥和私钥的密钥对。私钥由Bob自行妥善保管。
Step 2: Bob将自己的公钥发送给Alice,表示Bob请Alice用这个公钥对消息进行加密并发送给他。
Step 3: Alice用Bob的公钥对消息进行加密。
Step 4: Alice将密文发送给Bob。
Step 5: Bob用自己的私钥对密文进行解密。

在这里插入图片描述
Alice和Bob之间传输的信息只有两个:Bob的公钥以及用Bob的公钥加密的密文。由于Bob的私钥没有出现在通信内容中,因此窃听者无法对密文进行解密。

2.3 无法解决的问题

公钥密码解决了密钥配送问题,但也存在一些无法解决的问题。

a. 我们需要判断所得到的公钥是否正确合法,这个问题被称为公钥认证问题。

b. 公钥密码的处理速度只有对称密码的几百分之一。


3. mod运算

mod运算,又称为模运算,即除法求余数的运算。


4. 公钥密码算法——RSA

RSA是一种公钥密码算法,它的名字是由它的三位开发者的姓氏的首字母组成的。RSA可以被用于公钥密码和数字签名。

加密与解密过程
在这里插入图片描述

生成密钥对
在这里插入图片描述
攻击

(1) 通过密文来求得明文。由于密码破译者已知密文、E和N,求明文即求离散对数的问题,这是非常困难的,因为人类还没有发现求离散对数的高效算法。

(2) 通过暴力破解来找出D。密码破译者可以逐一尝试有可能作为D的数字来破译RSA。然而,暴力破解的难度会随着D的长度增加而变大,当D足够长时,就不可能在现实的时间内通过暴力破解找出数D。

(3) 通过E和N求出D。由E计算D需要使用p和q,但是密码破译者并不知道p和q,因此不可能通过和生成密钥对时相同的计算方法来求出D。

对于RSA来说,有一点非常重要,即质数p和q不能被密码破译者知道。把p和q交给密码破译者与把私钥交给密码破译者是等价的。
a. 对N进行质因数分解攻击。由于N是公开的,那么由N求p和q只能通过将N进行质因数分解来完成。可以这样说:一旦发现了对大整数进行质因数分解的高效算法,RSA就能够被破译。
b. 通过推测p和q进行攻击。由于p和q是通过伪随机数生成器产生的,如果伪随机数生成器的算法很差,密码破译者就有可能推测出来p和q,因此使用能够被推测出来的随机数是非常危险的。

(4) 中间人攻击。即主动攻击者混入发送者和接收者的中间,对发送者伪装成接收者,对接收者伪装成发送者的攻击方式。
在这里插入图片描述
这种攻击不仅针对RSA,而是可以针对任何公钥密码。在这个过程中,公钥密码并没有被破译,所有的密码算法也都正常工作并确保了机密性。然而,所谓的机密性并非在Alice和Bob之间,而是在Alice和Mallory之间,以及Mallory和Bob之间成立的。仅靠公钥密码本身,是无法防御中间人攻击的。

要防御中间人攻击,还需要一种手段来确认所收到的公钥是否真的属于Bob,这种手段称为认证

(5) 选择密文攻击。假设攻击者可以使用这样一种服务,即“发送任意数据,服务器都会将其当作密文来解密并返回解密的结果”,这种服务被称为解密提示。能够利用解密提示,对于攻击者来说是一个非常有利的条件。因为他可以生成各种不同的数据,并让解密提示来尝试解密,从而获得与生成想要攻击的密文时使用的密钥以及明文有关的部分信息。反过来说,如果一种密码算法能够抵御选择密文攻击,则可以认为这种算法的强度很高。

通过选择密文攻击并不能破译RSA,但是攻击者能够获得关于密文所对应的明文的少量信息。

只要我们在解密时能够判断“密文是否是由知道明文的人通过合法的方式生成的”(即对密文进行“认证”)就可以抵御选择密文攻击。RSA-OAEP正是基于上述思路设计的一种RSA改良算法。RSA-OAEP在加密时会在明文前面填充一些认证信息,包括明文的散列值以及一定数量的0,然后再对填充后的明文用RSA进行加密。在RSA-OAEP的解密过程中,如果在RSA解密后的数据的开头没有找到正确的认证信息,则可以断定“这段密文不是由知道明文的人生成的”,并返回一条固定的错误消息“decryption error”(不能将具体的错误内容告知发送者)。这样,攻击者就无法通过RSA-OAEP的解密提示获得有用的信息,因此这一算法能够抵御选择密文攻击。


5. 其他公钥密码算法

5.1 ElGamal方式

RSA利用了质因数分解的困难度,而ElGamal方式则利用了mod N下求离散对数的困难度。
ElGamal方式的缺点经过加密的密文长度会变为明文的两倍

5.2 Rabin方式

Rabin方式利用了mod N下求平方根的困难度。

5.3 椭圆曲线密码(ECC)

椭圆曲线密码是通过将椭圆曲线上的特定点进行特殊的乘法运算来实现的,它利用了这种乘法运算的逆运算非常困难这一特性。椭圆曲线密码的特点是所需的密钥长度比RSA短


6. 关于公钥密码的Q&A

公钥密码比对称密码的机密性更高吗?

公钥密码并不一定比对称密码的机密性更高。因为机密性的高低是根据密钥长度而变化的

密钥长度为256比特的对称密码AES,与密钥长度为1024比特的公钥密码RSA相比,RSA的安全性更高吗?

公钥密码的密钥长度不能直接与对称密码的密钥长度进行比较。如下表所示,密钥长度为256比特的AES,与密钥长度为15360比特的RSA具备均衡的强度。
在这里插入图片描述

因为已经有了公钥密码,今后对称密码会消失吗?

公钥密码并不会导致对称密码消失。一般来说,在采用具备同等机密性的密钥长度的情况下,公钥密码的处理速度只有对称密码的几百分之一。因此,公钥密码并不适合用来对很长的消息内容进行加密。根据目的的不同,还可能会配合使用对称密码和公钥密码(例如混合密码系统)。

随着越来越多的人在不断地生成RSA的密钥对,质数会不会被用光呢?

随着越来越多的人在不断地生成RSA的密钥对,质数并不会被用光。512比特能够容纳的质数的数量大约为10的150次方,这个数量比整个宇宙中原子的数量还要多。因此,别人生成的质数组合和自己生成的质数组合偶然撞车的可能性,事实上也可以认为是没有的。

RSA加密的过程中,需要对大整数进行质因数分解吗?

在RSA加密、解密、密钥对生成的过程中,都不需要对大整数进行质因数分解。只有在需要由N求p和q的密码破译过程中才需要对大整数进行质因数分解,因此,RSA的设计是将质因数分解这种困难的问题留给了密码破译者。

RSA的破译(即求RSA的私钥)与对大整数(N)进行质因数分解是等价的。

要抵御质因数分解,N的长度需要达到多少比特呢?​

N无论有多长,总有一天都能够被质因数分解,因此目前的问题是,在现实的时间内N是否能够被质因数分解。随着计算机性能的提高,对一定长度的整数进行质因数分解所需要的时间会逐步缩短。在投入非常大量的计算资源的情况下,现在可能已经能够分解长度为1024比特的整数了,但是长度为2048比特的整数目前看来还是安全的。

密码劣化:随着计算机技术的进步等,以前被认为是安全的密码会被破译,这一现象称为密码劣化。


7. 对称密码和公钥密码的对比

(1) 对称密码和公钥密码源于两种根本不同的思路。对称密码通过将明文转换为复杂的形式来保证其机密性;公钥密码则是基于数学上困难的问题来保证机密性的。

(2) 公钥密码的运行速度远远低于对称密码,因此在一般的通信过程中,往往会配合使用这两种密码,即用对称密码提高处理速度,用公钥密码解决密钥配送问题。这样的方式称为混合密码系统


参考书目

[1] 《图解密码技术》(第3版),[日]结城浩著,周自恒译,人民邮电出版社,2014年。


衷心感谢您的阅读。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43967840/article/details/124708241

密码学笔记---公钥,私钥_笙南的博客-爱代码爱编程

转载 原网址: http://www.ruanyifeng.com/blog/2006/12/notes_on_cryptography.html 1. 加密方法可以分为两大类。一类是单钥加密(private key cryptography),还有一类叫做双钥加密(public key cryptography)。前者的加密和解密过程都用同一套密码,后者

密码学读书笔记小结_潭溪zerg的博客-爱代码爱编程

密码学是保证消息的私密性和完整性以及消息认证的基础。加密算法的选择和密钥的管理是安全机制的效率、性能和可用性的关键。 公钥加密算法: 分发密钥比较容易,但是对大数据量的加密性能较差密钥加密算法: 更适合大批的加密任务混合型

应用密码学第二章笔记:密码学基础-爱代码爱编程

为什么在登陆账号的时候总是需要我们填“验证码”? 您曾经是不是总是在想为什么在登陆账号的时候服务器总是会自动生成“验证码”?总觉得填写验证码好麻烦呀!然后为什么大佬们总是说要定期更换密码? 1.验证码基于其随机性和即时性,可阻止黑客基于软件工具的反复试探性攻击。 2.定期更换密钥也有助于阻止蛮力攻击。 3.两种做法都提升了安全性。 一,密码学相关概念

软考信息安全工程师笔记(第二章--密码学基础与应用)-爱代码爱编程

目录 1. 密码学基本概念 1.1 密码学的基本安全目标 1.2 密码体制 1.3 古典密码 2. 分组密码 2.1 分组密码的概念 2.2 DES 2.3 AES 2.4 SM4 2.5 分组密码工作模式 3. 序列密码 3.1 序列密码的概念 3.2 线性移位寄存器序列 3.3 RC4序列密码 3.4 ZUC 4. Ha

【学习笔记】密码学入门(1)-爱代码爱编程

【学习笔记】密码学入门(1) 学习笔记 1 --密码学入门 密码学是研究编制密码和破译密码的技术科学。最初的目的是用于对信息加密,计算机领域的密码技术种类繁多。但随着密码学的运用,密码还被用于身份认证、防止否认等功能上。 密码算法是用于加密和解密的数学函数,密码算法是密码协议的基础。现行的密码算法主要包括序列密码、分组密码、公钥密码、散列函数等,用于保

密码学学习笔记【1】——计算机与网络安全概念-爱代码爱编程

密码学学习笔记【1】——计算机与网络安全概念 密码与算法协议计算机安全的概念CIA三元组真实性可追溯性OSI安全架构安全攻击被动攻击主动攻击安全服务认证访问控制数据保密性数据完整性不可否认性安全机制特定安全机制普遍的安全机制安全服务与机制间的联系 在进入了研究生生活之后,突然发现学校的导师的研究方向都是偏向密码学和网络安全的方向,作为密码学方面的

第二讲 BTC-密码学原理(笔记)-爱代码爱编程

北大肖臻《区块链技术与应用》公开课第二讲 BTC-密码学原理的笔记,第一讲是课程简介,没有笔记BTC被称为crypto currency(加密货币) 但实际上区块链上的内容(地址、转账金额等)都是公开的 BTC主要用到了密码学中的两个功能:哈希函数(cryptographic hash function)、签名一、哈希函数的三个重要性质 1、collis

密码学复习笔记-爱代码爱编程

文章目录 第二章 流密码1.完善保密性的基本概念2.熵的定义和基本性质(未更)3.一次一密本加密4.什么是流密码5.常见流密码算法有哪些第三章 分组密码1.分组密码体制的基本概念、基本方法2.Feistel 密码结构的特点1.Feistel 加密结构2.Feistel网络的实现与以下参数和特性有关3.Feistel解密结构3.常见分组密码算法1.D

【笔记】密码学笔记-爱代码爱编程

密码学上课笔记。 文章目录 绪论信息安全面临的威胁安全威胁安全业务密码学基本概念保密通信系统密码体制分类密码攻击古典密码算法单表代换密码凯撒密码移位变换仿射变换多表代换密码维吉尼亚密码多字母代换密码Hill 密码多字母仿射变换密码置换密码栅栏密码流密码概念同步流密码有限状态自动机密钥流产生器线性反馈移位寄存器反馈移位寄存器LFSRLFSR 的一元

一文解读,网络安全行业人才需求情况《网络安全产业人才发展报告》-爱代码爱编程

随着近几天国家网络安全宣传周在全国各地开展活动,网络安全再一次成为热门话题。网络安全不再缩在小小的安全圈子里,惠及面越来越广。不少对网络安全颇有兴趣的朋友非常关心行业前景如何?该怎么提升自我能力,更快地加入网安行列。 今天雨笋君就10月13日在网络安全宣传周上发布的《2021网络安全人才报告》进行一个简单的行业前景分析。   一、网络安全行业

应用密码学笔记第五章-第六章-爱代码爱编程

第五章 1.其他SHA算法:SHA-256、SHA-384、SHA-512 2.对散列函数的攻击,遵循柯克霍夫斯(Kerckhoffs)原则。 攻击方法分为两类: (1)穷举攻击(暴力攻击)。例:生日攻击。 (2)密码分析法。 3.实现消息鉴别的手段可以分为两类: (1)基于加密技术的消息鉴别。 ①利用对称加密体制实现消息鉴别。 特点:1.能提供机密性。2

密码学与网络安全—知识点总结-爱代码爱编程

前言 本文为期末考试后结合一些资料整理完成的,涵盖山东大学软件学院信息安全导论的课程主要内容,参考书为《密码编码学与网络安全》。我列居了81个名词概念,31道经典问答题。 先附上所有知识点的word版与pdf版,并添加了目录,方便复习。 电子版下载地址 文章目录 前言一、概念(名词解释)1、对称加密2、会话密钥3、混合密码体制:4、非对称加密

期末公钥密码复习笔记--个人杂记-爱代码爱编程

这篇是密码学考试复习的个人笔记,我写的目的也是想记录一下学习生活,如果有什么错误也请大家指正 问题一 公钥密码的思想:密钥协商协议的提出的背景,单向可交换函数,DH密钥交换协议及中间人攻击,有限域上的离散对数问题;公钥密码提出的背景,单向陷门函数,利用单向陷门函数设计公钥密码的方法,安全性要求。 密钥协商协议的提出的背景 关于研

【密码学笔记】第3部分 对称密码_对称加密 随机数-爱代码爱编程

声明 这是关于密码学笔记的第三篇博客。在本部分中,我们首先介绍的是XOR运算,该运算在密码学中有着极大的用处。其次,我们将介绍一次性密码本,该密码系统已被证明是绝对无法被破译的。之后,我们将重点介绍几种对称密码算法,