密码学基本概念

  • 1. 课程概要
  • 2. 密码学基本概念
    • 2.1 密码学发展
    • 2.2 密码系统
    • 2.3 被动攻击和主动攻击
    • 2.4 加密体制
    • 2.5 小结

  密码学(Cryptography)是数学的一个分支,是研究编制密码和破译密码的技术科学,其中应用于编制密码以保守通信秘密的,称为密码编码学,而应用于破译密码以获取通信情报的,称为密码分析学。密码编码学基于信息论、数学和计算机科学设计密码算法和密码协议以保证通信保密和安全,是信息安全和网络安全的重要组成部分,因此密码学的学习具有非常重要的价值和意义。

更新历史:

  • 2021年07月11日完成初稿
  • 2021年07月17日修改

1. 课程概要

  「密码学基础」系列文章将介绍密码学的基本概念和研究内容,文章将从以下几部分进行介绍:

  • 数学基础:包括数论和有限域
  • 对称密码:以DES、AES为代表的对称加密体制
  • 非对称密码:以RSA为代表的公钥密码体制
  • 密码算法和协议:常见的密码算法和协议

  文章中的算法具体实现主要用python3.9进行实现,少数部分用伪代码实现。课程的主要参考文献为:

[1]William Stallings. 密码编码学与网络安全.第8版[M]. 电子工业出版社, 2021.

  为方便读者阅读,下面给出文章中可能出现的符号表,当然在文章中出现时还会另外说明,这里这是作一个汇总:

符号 符号说明
ZZZ 整数,Z={0,±1,±2,±3,...}Z=\{0, \pm 1, \pm 2, \pm 3, ...\}Z={0,±1,±2,±3,...}
Z+Z^ +Z+ 正整数,Z+={1,2,3,...}Z^+=\{1, 2, 3, ...\}Z+={1,2,3,...}
NNN 自然数,N={0,1,2,3,...}N=\{0, 1, 2, 3, ...\}N={0,1,2,3,...}
ZnZ_nZn​ 剩余类集Zn={0,1,2,...,n−1}Z_n=\{0, 1, 2,..., n-1\}Zn​={0,1,2,...,n−1}
ϕ(n)\phi(n)ϕ(n) 欧拉函数,小于等于nnn且与nnn互素的正整数个数
∑i=1nf(i)\sum_{i=1}^{n}f(i)∑i=1n​f(i) 求和函数,计算f(1)+f(2)+...+f(n)f(1)+f(2)+...+f(n)f(1)+f(2)+...+f(n)
∏i=1npi\prod_{i=1}^{n}p_i∏i=1n​pi​ 累乘函数,计算p1×p2×...×pnp_1\times p_2\times...\times p_np1​×p2​×...×pn​
gcd(a,b)gcd(a,b)gcd(a,b) 求aaa和bbb最大公因数
GF(p)GF(p)GF(p) 阶为ppp的有限域,ppp为素数,定义在ZpZ_pZp​及其上的模ppp运算
GF(2n)GF(2^n)GF(2n) 阶为2n2^n2n的有限域
⊗n\otimes_n⊗n​ 模nnn乘法,a⊗nb=(a×b)modna\otimes_nb=(a\times b)\;mod\;na⊗n​b=(a×b)modn
⊕n\oplus_n⊕n​ 模nnn加法,a⊕nb=(a+b)modna\oplus_n b=(a+ b)\;mod\;na⊕n​b=(a+b)modn
m,Mm,Mm,M MMM是明文空间(plaintext space),也称为消息(Message),m∈Mm\in Mm∈M
c,Cc,Cc,C CCC是密文空间(Ciphertext space),c∈Cc\in Cc∈C
k,Kk,Kk,K KKK是密钥空间(Key space),k∈Kk\in Kk∈K
kU,kRk_U,k_RkU​,kR​ kUk_UkU​是公钥(public key),kRk_RkR​是私钥(private key)
Ek(m)E_k(m)Ek​(m) 用密钥kkk对明文mmm进行加密(Encryption)
Dk(c)D_k(c)Dk​(c) 用密钥kkk对密文ccc进行解密(Decryption)

2. 密码学基本概念

2.1 密码学发展

  从战争年代的军事情报,到现代社会的电子设备上的各种密码,再到如今以及未来的云计算、区块链隐私保护,无处不体现着密码学的深刻影响。在历史上,密码学的发展大致可以分为两个阶段:

  • 古典密码学(1949年以前)
  • 现代密码学(1949年至今)

  古典密码学像一门艺术,这个时期虽然出现了一些密码算法和加密设备,但密码算法设计的基本手段都很简单,以现在的眼光是极容易被破译的。古典密码学主要包含以下几个方面:

  • 单表替换加密
  • 多表替换加密
  • 隐写术等密码

  而现代密码学更像是一门科学,其起源于20世纪诸多科学理论。1949年,Shannon发表了《The Communication Theory of Secrecy Systems》,定义理论安全性,提出扩散和混淆原则,这也直接奠定了密码学的理论基础,密码学走进了科学的殿堂,近现代密码学正式建立。现代密码学主要包含以下几个方面:

  • 对称加密:以 DES,AES为代表
  • 非对称加密:以 RSA,椭圆曲线加密为代表
  • 哈希函数:以 MD5,SHA-1,SHA-512 等为代表
  • 数字签名:以 RSA 签名,ElGamal 签名为代表

  在未来,随着量子计算机的形成和发展,大多数密码算法都受到很大的威胁(包括RSA算法),因此后量子密码也称成为密码学领域研究的热点,美国国家标准和技术协会也正在征集后量子密码方案以抵御之后可能出现的密码学危机。

2.2 密码系统

  密码学的历史告诉人们现有的密码算法总是不安全的,在未来新的技术出现后总是会受到安全方面的威胁,先简单看一下在密码算法中存在哪些安全问题,不过这还得从通信模型谈起。

  在通信理论中,通信系统的模型往往抽象为下图,其中信源产生信息,信息经过编码后在信道上传播,然后解码后传输到接受信息的信宿,在信道传播过程中有噪声等干扰源会影响信息在信道的传播。

  以打电话为例,上述的模型就对应于通信双方打电话,信源即为说话的人,信宿即为听电话的人,而信道则可能为电缆、光缆等有线信道、卫星通信等无线信道。在信道上,声音需要被编码为电磁波通过信道传输,再被解码为声音给接收方,这就是一个典型的例子。

  而在密码学中,最经典的一个场景就是双方进行通信(比如双方发短信、打电话),出于隐私的考虑,总是希望自己的重要信息(如手机密码、银行卡密码等)不被其他人获取,因此总是要求信道是安全可靠的。不过,如果对于每个通信双方都要求信道是安全的,则需要对信道进行保护从而使得通信效率降低,现代通信中往往认为信道是不安全的,攻击者可以进行窃听、伪装等攻击,因此有一个结论:通信系统模型是不安全的。

  而密码学正是保证即使信息在不安全的信道上传输都不会泄露原始信息,下面给出了一个十分常见的场景。考虑这样一个场景:Alice想发一段消息给Bob,但不想其他人看到,因此她可以采用下面的方式:Alice准备好一段消息(message),也称为明文(plaintext),在发送前利用密钥(key),使用加密函数(encryption function)将明文加密成密文(ciphertext),密文传送到Bob后,Bob利用密钥,通过解密函数(decryption function)将密文转换为明文,然后获得该消息。但是由于信道不安全,因此很有可能会被窃听者(eavesdropper)窃听信道。上面的过程用下图进行表示:


  上图就是一个典型的保密通信系统模型,通过加密信息,即使窃听者获得信息,也会发现这些信息是加密的,无法从中获得任何有效的信息,因此这个通信系统可以达到一定的安全目标。不过一些优秀的密码分析者总是能够发现其中的漏洞,并能破译信息,这也是密码算法和协议不断发展的一大动力。

  至此,利用加密消息可以使得通信系统具有一定的安全性,但这还不够,因此还需要设计更加安全的密码算法和协议。任何密码算法和协议都是基于一定场景的,比如上面的场景就是允许有窃听者的存在,只有通信双方两者进行通信等。为了从中抽象出最需要关注的部分,常常考虑下面的要素,这些要素构成了密码系统:

  • 明文:plaintext,通常用MMM表示明文空间,m∈Mm\in Mm∈M表示明文空间中的一条明文
  • 加密函数:encryption function,通常用EEE表示,明文和加密密钥是加密函数的输入,而密文是加密函数的输出
  • 密钥:key,通常用KKK表示密钥空间,k∈Kk\in Kk∈K表示密钥空间的一个密钥
  • 密文:ciphertext,通常用CCC表示密文空间,用c∈Cc\in Cc∈C表示由明文mmm经加密函数产生的密文
  • 解密函数:decryption function,通常用DDD表示,密文和解密密钥是解密函数的输入,而明文是加密函数的输出

  因此密码系统就可以由五元组<M,C,E,K,D><M, C, E, K, D><M,C,E,K,D>表示,因此加密过程就可以表示为Ek(m)=cE_k(m)=cEk​(m)=c,而解密过程就可以表示为Dk(c)=mD_k(c)=mDk​(c)=m。对于上述密码系统而言,一般会满足以下的要求:

  • 系统是计算安全的:即系统可能在理论上可以破解,达不到理论安全,但实际破解是不可行的,比如需要100年才能破解密码
  • 系统的保密性依赖于密钥:总是假设密码体制和算法是公开的,而使用者仅仅通过密钥保证安全,这就是著名的Kerckhoff原则
  • 系统便于实现和使用

  密码系统的安全性是和攻击者的存在有很大关系的,在理想的密码系统中,没有上图中的窃听者存在,但实际的密码系统中,往往有一些攻击者对密码系统进行各种各样的攻击,密码算法和协议设计人员不同的场景作出关于攻击者的合理假设,下面就阐述了需要考虑的一些攻击形式。

2.3 被动攻击和主动攻击

  上述的窃听者(eavesdropper)是一个被动攻击者(passive attacker),因为该攻击者只是窃听信道中的信息,对于主动攻击者(active attacker),他们的危害更大。下面就介绍一下主动攻击和被动攻击:

  • 被动攻击:对传输进行窃听和监测,但不涉及对信道中信息的更改,最常见的方式就是窃听信道和流量分析
  • 主动攻击:对信道中数据流进行篡改和伪造,具体分为伪装、重放、篡改和拒绝服务等

  被动攻击一般难以检测到,因为大多数信道都是不安全的,无法防止第三方窃听信道,不过可以预防,通过对数据进行加密,窃听到的数据都是密文,而没有实际意义,这样就可以窃听者的攻击,不过这种方式不能抵御流量分析。

  而主动攻击的重点在于检测,即一旦检测到攻击者对于密码系统进行攻击,就采取相应恢复措施,以主动攻击者的进一步攻击。

2.4 加密体制

  现代密码学的加密体制,根据使用加密密钥的数量主要可以分为三类:

  • 无密钥加密体制:在加密和解密中不使用密钥
  • 单密钥加密体制:在加密和解密中使用同一密钥(私钥,private key)
  • 双密钥加密体制:在加密和解密中使用不同密钥(公钥、私钥)

  无密钥加密体制中,往往使用确定性函数,其中最重要的就是加密哈希函数(Hash function),其可以将变长的信息文本转化为定长的哈希值,常用于消息认证码和数字签名。

  单密钥加密体制,也称对称加密,其加密和解密中使用同一密钥,而该密钥是不公开的,通信双方通过该密钥来对信息进行加密和解密,在这里加密算法和解密算法往往是互逆的,即有Dk(Ek(m))=mD_k(E_k(m))=mDk​(Ek​(m))=m。

  双密钥加密体制,也称为公钥加密,加密和解密中使用一对不同的密钥,称为公钥(public key,用kUk_UkU​表示)和私钥(private key,用kRk_RkR​表示),其中公钥公开,而私钥不公开。公钥加密有两种形式:

  • 使用私钥加密,而利用公钥解密,即DkU(EkR(m))=mD_{k_U}(E_{k_R}(m))=mDkU​​(EkR​​(m))=m,此时任何人都可以对消息进行解密,通常在数字签名中使用
  • 使用公钥加密,而利用私钥解密,即DkR(EkU(m))=mD_{k_R}(E_{k_U}(m))=mDkR​​(EkU​​(m))=m,此时只有私钥的持有者才能对消息进行解密

密码算法和协议
  尽管在此之前都没有区分过密码算法和密码协议,但了解它们之间的关系是有必要的,前述介绍了许多密码算法,包括古典密码算法、现代加密算法等。而密码协议主要由密码算法设计而成,在网络环境中提供各种安全服务。可以简单地认为密码算法解决了数据保密的问题,而密码协议则要利用密码算法设计协议解决通信过程中的其他问题,比如密钥怎么发送给通信双方(密钥分发),怎么确保通信的一方是预期的一方(身份认证)等等。

2.5 小结

  在这里列出的概念没有也很难涉及密码学的所有领域,不过可以对密码学作出一些思路上的梳理和总结:

  出于效率的考虑,通信系统很多时候是不安全的,因此才需要密码算法和协议来构建保密通信系统,从而如何构造足够安全的密码算法以及设计合理的密码协议成为了密码编码学的重要内容,从典型的通信系统模型上可以抽象出组成密码系统的五个部分,一个好的密码算法往往是利用信息论、数学理论来设计一个计算上安全的密码算法来保证密码系统的五大部分正常运行。现代密码学家对此作了许多的工作,发展出对称加密算法、公钥加密算法等经典算法,基于此,密码协议通过利用这些加密算法体制为通信提供安全服务来保证双方或多方参与网络通信时能够正常有序地进行下去。

  之后的学习中,将在掌握基本的数学背景知识后,学习对称加密和非对称加密的思想和具体实现,最后基于经典加密算法学习常见的加密算法和协议,如密码学哈希函数、消息认证码、数字签名等。除此之外,后量子密码也会进行一些关于概念上的阐述。

【密码学基础】01 密码学基本概念相关推荐

  1. 密码学基础篇----密码学的加解密

    认识密码学 什么是密码 密码简单来说就是用不是我们所熟悉的,不能马上识别的符号来代替的信息. 大概过程就是这样 密码学的发展史 古典密码学(1949年之前) 主要特点:数据的安全基于算法的保密. 密码 ...

  2. 密码学复习(密码学及其信息安全基础)(陈小松)

    密码学复习(密码学及其信息安全基础)(陈小松) 整除与同余 1 2 经典密码 概念 凯撒密码 仿射密码 维吉尼亚密码 费尔南密码 普莱费尔密码 希尔密码 现代密码 1 2 整除与同余 1 2 经典密码 ...

  3. 计算机 密码学 实验一,计算机网络安全技术-实验一-密码学基础

    计算机网络安全技术-实验一-密码学基础 计算机科学与技术系实 验 报 告专业名称 网络工程 课程名称 计算机网络安全技术 项目名称 密码学 班 级 13 网工(1)班 学 号 1304031030 姓 ...

  4. 第二章密码学基础与应用备考要点及真题分布

    第二章密码学基础与应用 1.密码学基本概念 2.分组密码 3.序列密码 4.Hash函数 5.公钥密码体制 6.数字签名 7.认证 8.密钥管理

  5. 软考信息安全工程师备考笔记2:第二章密码学基础与应用备考要点

    第2章:密码学基础与应用 密码学基础与应用备考要点 https://www.moondream.cn/?p=1319 扫一扫加入信息安全工程师备考群 欢迎加入最棒的信息安全工程师社群,分享信息安全工程 ...

  6. 计算机基础(07)密码学基础

    今天的我们只要接触密码学相关的信息,那一定是经常会听说各种密钥啊,之类的,但这个东西到底是怎么发展来的呢?这里我们从密码学的发展.古典密码学和现代密码学等角度搞清楚密码学到底是怎么发展的,以及为什么后 ...

  7. HTTPS安全通讯 1. 密码学基础

    文章目录 一. 密码学发展 1. 古代保密之术 2. 近代密码学发展 二.数论 三. 群论与有限域 1. 抽象加法与群论 2. 有限域 四.加密基元与加密工具包 五.随机数 1. 随机数分类 2. 命 ...

  8. 密码学的100个基本概念

    密码学的100个基本概念 一.密码学历史 二.密码学基础 三.分组密码 四.序列密码 五.哈希函数 六.公钥密码 七.数字签名 八.密码协议 九.密钥管理 十.量子密码 2022年主要完成了密码学专栏 ...

  9. 《信息安全工程师教程》学习笔记02(第二章 密码学基础与应用—DES算法)

    第二章 密码学基础与应用 2.1 密码学的基本概念 1949年香农发表了<保密系统的通信理论> 1976年W.Diffie和M.Hellman提出公开密钥密码 1977年美国联邦政府颁布数 ...

  10. 密码学系列(三):区块链+密码学基础知识

    密码学系列(三):区块链+密码学基础知识 一.区块链的概念 区块链概述 区块链的特点 区块链变化 市场现状 二.区块链政策与标准 区块链的特点与发展 三.区块链的定义 区块链的价值 四.区块链开发语言 ...

最新文章

  1. Java的Json解析包FastJson使用
  2. Xamarin.Android 使用Timer 并更改UI
  3. 【Spring注解系列04】@Condition条件注解
  4. 工业用微型计算机(29)-dos和BIOS调用(3)和半导体存储器构造
  5. 腾讯云低延时直播系统架构设计与弱网优化实践
  6. Android 第七课 4种基本布局之FrameLayout和百分比布局
  7. php prepare 批量,PreparedStatement批处理
  8. 语言程序推箱子课设报告_“延期不延学”第13期 | C++篇 | c++课设建议
  9. linux 更换窗口管理器,linux Gnome .KDE.xfce4窗口管理器切换
  10. 华为201万年薪招的是什么人才?答:人工智能!
  11. 【Elasticsearch】Failed to process cluster event (put-mapping) within 30s
  12. wls12C启用Gzip
  13. android开发之嵌入广告
  14. julia的安装以及三个报错解决(包安装、dot函数无定义、定义变量无法在循环中使用)
  15. 电脑桌面计算机图标在哪,电脑计算机图标在哪
  16. 猿如意|初识CSDN的开发者工具合集
  17. html5网页特效-水墨动画
  18. ipad 浏览器对于onscroll的延迟
  19. 基于ORB-SLAM2实时构建稠密点云
  20. [树形DP | Uva 1218]Perfect Service

热门文章

  1. 三极管与场效应管之导通与截止说明
  2. 北京市中小学信息学竞赛汇总 徐于铃
  3. EhCache初体验
  4. lte网络测试用什么软件,LTE_测试软件使用教程.doc
  5. HI3559A,Hi3519A,Hi3556A芯片产品参数介绍资料
  6. matlab 元胞数组
  7. java nio 捕获异常_java nio channel抛出ClosedByInterruptException的情况
  8. 编译原理实验:miniC语言编译器
  9. PMP学习笔记 第10章 项目沟通管理
  10. 阿里电话面试面试题总结,附答案!