【密码学】一文了解密码学的基本

目录

一、密码学基础概念

[1.1 密码学定义](#1.1 密码学定义)

[1.2 加密算法类型](#1.2 加密算法类型)

[1.3 其他密码技术](#1.3 其他密码技术)

[1.4 隐写术与数字水印](#1.4 隐写术与数字水印)

[1.5 密码与信息安全常识](#1.5 密码与信息安全常识)

二、历史上的密码

[2.1 恺撒密码及加密轮盘](#2.1 恺撒密码及加密轮盘)

[2.2 简单替换密码](#2.2 简单替换密码)

[2.3 维吉尼亚密码](#2.3 维吉尼亚密码)

[2.4 Enigma密码机](#2.4 Enigma密码机)

三、Base64编码

[3.1 Base64编码介绍](#3.1 Base64编码介绍)

[3.2 Base64编码举例](#3.2 Base64编码举例)

四、对称密码

[4.1 对称密码介绍](#4.1 对称密码介绍)

[4.2 DES(Data Encryption Standard)](#4.2 DES(Data Encryption Standard))

[4.2.1 DES的加密与解密](#4.2.1 DES的加密与解密)

[4.2.2 Feistel网络的加密一轮循环](#4.2.2 Feistel网络的加密一轮循环)

[4.2.3 Feistel网络的加密多轮循环](#4.2.3 Feistel网络的加密多轮循环)

[4.2.4 Feistel网络的解密一轮循环](#4.2.4 Feistel网络的解密一轮循环)

[4.2.5 Feistel网络的解密多轮循环](#4.2.5 Feistel网络的解密多轮循环)

[4.2.6 Feistel网络密码算法特点](#4.2.6 Feistel网络密码算法特点)

[4.2.7 DES算法的实现](#4.2.7 DES算法的实现)

[4.2.8 3DES](#4.2.8 3DES)

[4.3 AES(Advanced Encryption Standard)](#4.3 AES(Advanced Encryption Standard))

五、公钥密码

[5.1 公钥密码简介](#5.1 公钥密码简介)

[5.2 公钥密码原理](#5.2 公钥密码原理)

[5.3 RSA密码](#5.3 RSA密码)

[5.4 RSA密码 - 生成密钥对](#5.4 RSA密码 - 生成密钥对)

[5.5 RSA密码 - 实例](#5.5 RSA密码 - 实例)


一、密码学基础概念

1.1 密码学定义

专门研究编制密码和破译密码的技术科学。例如小杨(发送者)为防止小齐(窃听者)知晓,与小芬(接收者)约定暗号(密钥key)对信息加密,只有小芬能解密,其中涉及明文、密文、加密、解密、消息等概念。

1.2 加密算法类型

算法分加密算法和解密算法,最重要的是密钥(key),常见加密解密算法有对称加密和非对称加密。

1.3 其他密码技术

  • 单向散列函数:能针对文件信息算出散列值,这个散列值就如同文件的电子身份证号。只要文件内容被修改,散列值也会跟着改变。

  • 数字签名:给文件加上类似手写在纸上那种物理签名的数字签名,通常借助非对称加密算法来完成。

  • 数字证书:在互联网通讯过程中,用来标志通讯各方身份信息的一串数字,由专门的证书授权(CA)机构负责颁发 。

1.4 隐写术与数字水印

隐写术是在数据中隐藏信息,如将另一句话嵌在一段话中,每句话首字连起来构成隐藏信息。数字水印技术应用隐写术,将版权或签名信息嵌入文件。

1.5 密码与信息安全常识

  • 千万别用自创的加密算法。公开的加密算法都经过数学家论证,相对可靠。那些没公开的算法,早晚会被曝光,到时候安全性就无法保障了。

  • 低强度的密码不仅起不到保护作用,还可能因被轻易破解,给使用者带来严重损失,这种情况下,还不如不设置密码。

  • 随着时间推移,任何密码都可能被破解,只是时间长短的问题。

  • 密码仅仅是信息安全体系的一个环节。黑客常常会通过社会工程学手段骗取密码,从而导致信息泄露。

信息安全至关重要,我们应当选择合适的密码算法对信息进行加密。不同的密码算法适用于不同场景,在信息传递过程中,要时刻警惕,防止信息被窃听,避免密码被盗取 。

二、历史上的密码

2.1 恺撒密码及加密轮盘

相传尤里乌斯·恺撒使用,用于古罗马军事信息通信,原理是平移算法(小写字母明文,大写字母密文,平移3位)。

有加密轮盘(平移3位,key为3),解密通过反向平移,破解可用暴力破解(尝试不同key值)。

2.2 简单替换密码

有一种密码编制方法,是把字母表打乱,让打乱后的字母与原字母表中的字母一一对应,将这种对应关系当作密码。恺撒密码就属于这一类。

在进行加密操作时,需要制作一张加密字母表,然后对照它对明文进行加密。解密的时候,则对照原本的明文字母表来还原信息。

这种密码破解起来相当困难。要是采用暴力破解法,由于加密字母表是26个字母的全排列,可能性极其多,数量大约是4兆的1000兆倍,需要尝试海量组合。除了暴力破解,还能采用频率分析法,也就是统计文本中各个字母出现的频率,以此来推断密码规律。另外,还能运用逆向分析,像福尔摩斯探案集《跳舞的小人》里,就是通过逆向推理破解了密码。

2.3 维吉尼亚密码

掩盖字母使用频率的古老方式。加密时明文对应一串密钥,根据密钥在维吉尼亚密码表中生成密文;解码同理,根据密文和密钥查表找出明文。

维吉尼亚密码的加密原理明文对应的会有一串密钥,根据密钥在维吉尼亚密码表中生成密文
举例:

加密:hacker

密钥:hello

查表生成密钥

在表中找到明文横坐标与密钥纵坐标交叉点为密文

维吉尼亚密码的解码

明文对应的会有一串密钥,根据密钥在维吉尼亚密码表中生成密文
举例:

密文:oenvsy

密钥:hello

查表对照密文和密钥找出明文

2.4 Enigma密码机

在二战时期,纳粹德国使用了一种加密强度很高的密码机,叫Enigma密码机。后来,英国的图灵成功破解了这种密码机。这件事充分说明了,密码安全对于国家安全有着极其关键的作用。

密码的发展历史悠久,从古老的恺撒密码,再到二战时的Enigma密码机,密码的复杂程度在持续提升。发展到现在,密码已经成为一门独立的学科。在现代,对称密码和非对称密码是最为常见的密码类型 。

三、Base64编码

3.1 Base64编码介绍

由64个Ascii码表组成,包括A-Z、a-z、0-9、+、/ 64个字符表示64种状态,64个字符表示6位二进制所有状态(2⁶),3个字节24位用Base64表示需4个字符(3*8 = 4*6)。

3.2 Base64编码举例

  • 正常情况(如文本"Man"):3个字节拆成4个字节,每个字节根据值在Base64表中获取字符。
  • 不足三字节特殊情况(如文本"A"):1个字节取前6位,剩余2位用0补齐6位,不够4字节后面补等号(=);文本"BC"同理。

四、对称密码

4.1 对称密码介绍

咱们可以通过魔术师洗牌和复原扑克牌的例子,来理解对称加密的概念。魔术师把原本整齐的牌(就相当于明文)打乱(这一步等同于加密),得到乱牌(也就是密文)。之后,魔术师又能把乱牌恢复成原本整齐的状态(这就好比解密)。之所以魔术师能在原牌和乱牌之间随意切换,是因为他洗牌(加密)和复原(解密)的过程是相反的。这种加密和解密过程互逆的加密方式,就是对称加密。

对称密码原理及特点

  1. 借助密钥(key)实现数据的加密与解密。

  2. 采用分组xor加密方式,例如对16进制数6555(二进制110010101010101),以密钥011011111011011进行异或运算,得到密文101001010001110。

4.2 DES(Data Encryption Standard)

1977年,DES被列入美国联邦信息处理标准(FIPS 46 - 3),成了一种对称密码算法。当时,美国以及其他国家的政府部门、银行,都大量使用DES来保障信息安全。

但计算机技术发展得越来越快,DES被暴力破解所花费的时间越来越短。以RSA公司举办的DES破译比赛为例,1997年破解DES需要96天,到1999年,就只需要22小时15分钟了。如今,除了用来解密以前用DES加密的旧密文,已经不提倡再使用DES算法了。

4.2.1 DES的加密与解密

DES将64bit的明文加密为64bit的密文,虽密钥长度标称64bit,但每7bit会设置一个用于错误检查的bit,实际密钥长度为56bit。DES每次仅能加密64bit,若明文较长,需对DES加密进行迭代,迭代的具体方式称作模式。

DES基于Feistel网络,这是一种典型的分组密码结构,由Horst Feistel设计。在Feistel网络中,加密步骤称为轮,DES进行16轮循环。

4.2.2 Feistel网络的加密一轮循环

  1. 第一步,将输入的数据一分为二,划成左右两部分。

  2. 把输入数据右侧部分,直接挪到输出数据的右侧位置。

  3. 把刚才输入数据的右侧部分,送到轮函数里。

  4. 轮函数根据送进来的右侧数据,再结合子密钥,计算出一串看起来毫无规律的bit序列。

  5. 拿算出来的这串bit序列,和左侧数据进行XOR运算,运算结果就当作加密后的左侧数据。因为第一轮处理后右侧数据还没加密,所以得用不同子密钥,反复进行这一轮操作。并且,在每两轮操作中间,要把左侧和右侧数据位置对调,保证所有数据都能被加密 。

4.2.3 Feistel网络的加密多轮循环

  1. 第一轮加密左侧。

  2. 第二轮加密右侧。

  3. 第三轮加密左侧。需注意,每轮使用的子密钥不同。

4.2.4 Feistel网络的解密一轮循环

  1. 把输入数据分成左右两部分。

  2. 将输入的右侧数据直接发送到输出的右侧。

  3. 把输入的右侧数据传入轮函数。

  4. 轮函数依据右侧数据和子密钥,算出看似随机的bit序列。

  5. 将上述bit序列与左侧数据进行XOR运算,结果作为解密后的左侧数据。解密和加密过程完全相同,使用相同子密钥即可完成解密。

4.2.5 Feistel网络的解密多轮循环

  1. 第一轮解密左侧,使用子密钥3。

  2. 第二轮解密右侧,使用子密钥2。

  3. 第三轮解密左侧,使用子密钥1。需注意,每轮解密使用的子密钥顺序与加密相反。

4.2.6 Feistel网络密码算法特点

  1. 加密轮数可随意增加。

  2. 加密时,任何函数作为轮函数都能正常解密。

  3. 加密和解密可采用完全相同的结构,同样基于Feistel网络分组算法实现的密码算法还有MARS、RC6、Twofish。

4.2.7 DES算法的实现

  1. 对输入的64bit数据,按置换IP表打乱顺序。

  2. 左侧加密公式:左侧 + 轮函数f(右侧,子密钥)。

  3. 左侧和右侧都经过16轮加密,每次使用的密钥不同。

  4. 获取子密钥。

  5. 对最后输出前的64bit数据,按尾置换IP表2替换位置。

4.2.8 3DES

3DES即三重DES(triple - DES),为增强DES强度,将DES重复3次得到。其有几种类型:

  1. DES密钥1和DES密钥3相同,DES密钥2不同,称作DES-EDE2。

  2. DES密码1、2、3都不同,称作DES-EDE3。

  3. DES密钥都相同,等同于DES。

4.3 AES(Advanced Encryption Standard)

AES已经替代DES,成了新的对称密码算法标准。AES基于2000年评定通过的Rijndael算法,这套算法由比利时密码学家Joan Daemen和Vincent Rijmen设计。Rijndael算法的分组长度固定为128位,密钥长度能在128位到256位之间选择,而且是以32位为一档。在AES标准里,规定的密钥长度就三个:128位、192位和256位。

Rijndael算法加密步骤

  1. **SubBytes处理(置换)**:把数据分组后,每个字节都有一个值,范围在0到255之间。以这个值作为索引,到一张有256个值的替换表(S - Box)里找到对应值,将原本的1字节值换成找到的值。

  2. **ShiftRows处理(乱序)**:完成SubBytes处理后,输出结果按字节打乱顺序。

  3. **MixColumns处理(移位)**:对4字节的数据做位运算,让它变成另外一个4字节值。

  4. **AddRoundKey处理(异或)**:将数据与轮密钥进行XOR运算。整个加密过程中,这一步要重复10到14轮。

Rijndael算法解密步骤

  1. AddRoundKey处理。

  2. InvMixColumns处理,是MixColumns处理的逆向操作。

  3. InvShiftRows处理,是ShiftRows处理的逆向操作。

  4. InvSubBytes处理,是SubBytes处理的逆向操作。

一般来说,使用密钥长度够长,而且算法没漏洞的对称密码,就能保证明文信息不被泄露。长密钥能抵抗暴力破解,没有漏洞的算法可以防止其他类型的攻击。但对称密码在通信时,最大的难题就是密钥配送,也就是怎么安全地把密钥传给接收方。要解决这个问题,通常得靠公钥密码。DES和三重DES的分组长度是64位,而AES的分组长度有128位、192位和256位可选。

五、公钥密码

5.1 公钥密码简介

公钥密码技术的诞生,就是为了解决对称密码技术存在的两个大难题。第一个难题是对称密码在密钥分配方面存在安全隐患,第二个难题是对称密码无法进行数字签名。

1976 年,Diffie和Hellman在《密码学的新方向》这篇文章里,首次提出了公钥密码的概念,这也标志着公钥密码学研究正式开启。到了1977 年,Rviest、Shmair和Adlmena提出了RSA算法,这是第一个比较成熟的公钥密码算法。从那以后,人们基于各种不同的计算问题,又提出了很多公钥密码算法。

在公钥密码体系里,密钥分为加密密钥和解密密钥。发送消息的人用加密密钥对消息加密,接收消息的人用解密密钥对密文解密。也就是说,发送者只需要加密密钥,接收者只需要解密密钥。这里要注意,解密密钥绝对不能被窃听者拿到,不过就算加密密钥被窃听者获取了,也不会造成太大影响。因此,加密密钥可以公开,我们把它叫做公钥;解密密钥不能公开,叫做私钥。公钥和私钥配套使用,组成密钥对。

举个例子,Bob和Alice要进行通信:

  1. Bob生成一对密钥,也就是公钥和私钥。

  2. Bob把公钥发送给Alice。

  3. Alice拿到Bob的公钥后,用它对要发送的消息进行加密。

  4. Alice将加密后的密文发送给Bob。

  5. Bob收到密文后,用自己的私钥进行解密,就能读取消息的原文了 。

5.2 公钥密码原理

公钥密码之所以安全,关键就在于,即便知道了公钥,也很难算出私钥。公钥密码机制的运行有两个前提:一是密文通过明文和公钥计算得到;二是明文能通过密文和私钥计算出来。设计公钥密码时,目标是让从明文到密文的正向计算简单,而从密文反推明文的逆向计算变得困难,这一目标通过特定数学问题来达成。

下面介绍一些相关数学运算概念。日常中,我们熟悉加减乘除运算;模运算,简单来说,就是求余数的运算。质数,是只能被1和它自身整除的数;合数,就是除了能被1和本身整除外,还能被其他数整除的数。一个数的倒数,和它相乘结果为1。约数指的是能整除给定数的数;倍数则是给定数的整数倍。公约数是几个数共有的约数,其中最大的就是最大公约数;公倍数是几个数共有的倍数,其中最小的就是最小公倍数。对数是乘方的逆运算,而在模运算里的对数,叫做离散对数。

离散对数有个特性,正向计算比较容易,逆向计算却很困难。以7²mod 13 = 8为例,如果要找出满足7^? mod 13 = 8中的?,采用从0开始逐个尝试的方法,计算量非常大。要是底数7足够大,且无法化简,逆向计算的难度会更高。RSA算法正是基于这一原理设计的。

5.3 RSA密码

RSA是公钥密码算法,名称由三位开发者Ron Rivest、Adi Shamir、Leonard Adleman的姓氏组成,可用于公钥密码和数字签名。
RSA加密和解密过程

  1. 密钥对:公钥由数E和数N组成,私钥由数D和数N组成。

  2. 加密:密文 = 明文^E mod N,即明文的E次方除以N的余数。

  3. 解密:明文 = 密文^D mod N,即密文的D次方除以N的余数。

5.4 RSA密码 - 生成密钥对

由于E和N是公钥,D和N是私钥,生成密钥对即求E、D、N这三个数。
生成步骤

  1. 求N:N = p × q,p和q是大质数,数太小易被破解,且质数不可分解。

  2. 求L:L仅在生成密钥对过程中使用,是p - 1和q - 1的最小公倍数,公式为L = lcm(p - 1, q - 1)。

  3. 求E:E比1大、比L小,且E和L的最大公约数为1,即gcd(E, L) = 1 (E和L互质)。通过伪随机数生成器生成1 < E < L范围内E的候选数,判断是否满足gcd(E, L) = 1的条件,循环判断直至条件成立,求最大公约数可使用欧几里得辗转相除法。满足gcd(E, L) = 1能保证存在解密的数D。

  4. 求D:数D由数E计算得到,D、E、L需满足1 < D < L,E × D mod L = 1。满足该条件,就能通过D和N对用E和N加密的密文进行解密,确保解密得到原明文。
    总结求值公式

  5. 求N:N = p × q,用伪随机数生成器求p和q,p和q都是质数。

  6. 求L:L = lcm(p - 1, q - 1),L是p - 1和q - 1的最小公倍数。

  7. 求E:1 < E < L,gcd(E, L) = 1,E和L的最大公约数是1(E和L互质)。

  8. 求D:1 < D < L,E × D mod L = 1。

5.5 RSA密码 - 实例

  1. 求N:N = p × q,设p = 17,q = 19(17、19都是质数),则N = 17 × 19 = 323。

  2. 求L:L是p - 1和q - 1的最小公倍数,L = lcm(p - 1, q - 1) = lcm(16, 18) = 144。

  3. 求E:E和L的最大公约数必须是1,即gcd(E, L) = 1,满足条件的有5、7、11、13、17、19、23......,选择E = 5。

  4. 求D:E × D mod L = 1,即5 × D mod 144 = 1,得出D = 29。
    生成密钥对

  5. 公钥:E = 5,N = 323。

  6. 私钥:D = 29,N = 323。
    使用公钥加密明文

设明文 = 123,且明文必须小于N。加密:密文 = 明文^E mod N = 123⁵mod 323 = 28153056843 mod 323 = 225。
使用私钥解密明文

解密:明文 = 密文^D mod N = 225²⁹mod 323 = 123。
破解难度分析

  1. 通过密文获取明文:公式为明文 = 密文^D mod N,求密文^D相当于求对数,求密文^D mod N相当于求离散对数,这是世界难题。

  2. 暴力破解:求出D就能解密,但D足够大时,暴力破解难度极大。

  3. 通过E和N求出D:加密时密文 = 明文^E mod N,若N能分解求出p和q,就能求出D。大整数质因数分解是世界难题,若伪随机数生成器算法差,存在碰撞成功从而破解的可能。

相关推荐
christine-rr16 小时前
密码学基础——密码学相关概念
网络·安全·密码学·加密
AntResearch20 小时前
蚂蚁集团主导的ISO密码学国际标准立项,纳入国产算法
网络·密码学
NWJ_MP3 天前
解决关于原生gmssl无法直接输出sm2私钥明文的问题
密码学·gmssl·sm2·sm2 私钥
屎派克4 天前
密码学——知识问答
安全·密码学
靖靖桑4 天前
深入理解椭圆曲线密码学(ECC)与区块链加密
区块链·密码学
网安秘谈6 天前
椭圆曲线密码学(ECC)深度解析:下一代非对称加密的核心
密码学
秋说6 天前
【区块链安全 | 第一篇】密码学原理
安全·区块链·密码学
筑梦之月6 天前
常用密码学算法分类
算法·密码学
网安秘谈6 天前
密码学国密算法深度解析:SM2椭圆曲线密码与SM3密码杂凑算法
算法·密码学