密码学笔记

1 公钥私钥


2 公钥加密

别人用A的公钥加密传输的信息,只有A的私钥可以解密。保证了传输的信息的安全性。

2 私钥签名

A用A的私钥加密的信息,别人用A的公钥才可以解密。可以证明这个信息一定是A传输而来的。

2 HTTPS的加密过程

共享秘钥(对称加密):速度快,但无法保证客户端与服务器之间传输时秘钥的安全性。

和公开密钥(非对称加密):安全,速度慢。

3 数据传输过程:

一、客户端请求SSL(安全套接层)通信,报文中包含自己支持的SSL版本、加密算法等。

二、服务器应答,附带自己的公钥证书,协商定好的SSL版本、加密组件。

服务器端需要将自己的公钥发送给客户端,以供客户端加密信息。

但客户端无法确定得到的公钥一定是目标服务器的,可能是中间人伪装的。

服务器端公司请求数字证书认证机构(CA)对它的证书进行证明。CA 使用自己的秘钥对服务器公司的公钥进行加密。CA 将服务器公钥相关的信息以明文形式写入证书,并通过指纹算法(一个hash算法)对证书内容进行计算,得到指纹。然后,对指纹算法和指纹用私钥进行加密,得到数字签名。最后,将证书内容附带数字签名一起发布。

这样,只要你的CA公钥是合法的,能够解开数字签名的私钥加密,且计算后指纹吻合,则可以保证服务器公钥的合法性————是由CA认证的,且内容未被篡改过。

若是黑客的合法证书,那内容与我们的目的域名不一致,肯定不行。

三、客户端根据自己本地的收信任的CA公钥,解封服务器公钥证书,得到服务器公钥。客户端生成一个随机码序列,用服务器公钥加密后,发回服务器。

四、服务器用私钥解密后,再加密将字符串传回客户端。

五、客户端确认服务器身份后,生成对称加密算法和共享秘钥,使用服务器公钥加密后,传给服务器。

六、此后,双方使用对称加密算法加密数据,进行传输。

上面过程中,一二用于获得合法的服务器公钥,三四用于确认服务器是否为真正私钥持有者(因为,服务器公钥谁都可以得到)。


1 对称密码


2 一次性密码本

使用与明文比特序列一样长的,真正的随机数序列,进行加密,绝对安全,因为穷举破译后能得到整个秘钥空间,毫无意义。

2 DES Date Encryption Standard

以分组为单位进行处理的密码算法称为 分组密码。

3 加密结构

采用 Feistel网络。

以 64 bit 为一个加密单位,首先分成两部分,各32 bit 。

加密过程持续数轮,每轮中,使用子秘钥与右侧数据经过轮函数生成一个序列,然后与左侧做 XOR 。

每轮结束后,左右两侧交换。

3 特点

加解密结构相同,轮数任意,函数任意。

2 三重DES triple-DES

使用秘钥1、2、3对明文进行加密、解密、加密三个过程,称为三重DES。

解密过程是为了兼容老版DES,如果1、2、3秘钥相同,则成为了普通DES。

1、3秘钥相同,2不同时,称为DES-EDE2 。

1、2、3秘钥不同,称为DES-EDE3 。

2 AES advanced encryption standard

采用的是 Rijndael 算法,SPN结构。

3 加密结构

输入分组为 128bit(16字节),秘钥长度可以以 32bit 为单位,在128~256bit之间选择。

该算法由多轮构成,10~14轮。

一轮中:

SubBytes,按字节,将输入分开,以每个字节为索引,查表找值,替换。

ShiftRows(平移行),按字节,打乱上面的输出。

MixColumns (混合列),按4个字节,比特运算。

与轮秘钥进行 XOR 。

1 模式


分组密码:每次处理,特定长度的一块数据。

流密码:对数据流,连续处理,需要保持内部状态,记录进度。

模式:密文有多个分组时,分组密码的迭代方法。

模式种类

  • ECB模式 :electronic codebook mode

  • CBC模式 :cipher block chaining mode

  • CFB模式 :cipher feedback mode

  • OFB模式 :output feedback mode

  • CTR模式 :counter mode

2 ECB 电子密码本模式

明文分组加密后,直接成为,密文分组。

特点:攻击者无需破译,即可操纵明文。

2 CBC 密文分组链接模式

3 加密结构

明文分组,与前一个密文分组XOR,加密得到自己的密文分组。

第一个分组的前一个密文分组,由 初始化向量(随机比特序列) 代替。

加密时,需要从头开始。因为需要与密文分组做 XOR 。

解密时,对密文分组解密,直接与密文分组 XOR 即可。

3 特点

同样的明文分组,密文值可以不相等。

密文分组可以损坏,影响部分。

密文分组比特缺失,影响全部。

2 CFB 密文反馈模式

3 加密结构

前一个密文分组,通过加密算法得到一个比特序列,称为 密钥流 。

明文分组,与密钥流 XOR,得到自己的密文分组。

解密时,加密算法对密文分组进行加密,得到密钥流,与密文 XOR 可得到明文。

3 攻击方式

重复攻击:假设秘钥相同。发送 4 个分组,攻击者保存了后面3个。转天,你又发送了 4 个分组,攻击者将你后面三个替换,接收方解密后,只有 2 号分组有错。

2 OFB 输出反馈模式

3 加密结构

对于每个分组,初始化向量加密后,得到密钥流。明文与密钥流 XOR 后,得到密文。

3 特点

速度快,密钥流可以提前生成,或者,生成秘钥过程可以和 XOR 运算并行。

2 CTR 计数器模式

3 加密结构

对每个计数器加密得到密钥流。密钥流与明文分组 XOR ,得到密文分组。

计数器生成的数,由一个随机序列 nonce+从1开始的递增数字组成。

对每个分组,计数器递增后,加密,得到密钥流。

3 特点

能够以任意顺序处理分组,因为加密时需要的初始数字序列能够计算出来。

1 公钥密码


2 密钥配送问题解决方法

3 事先共享密钥

为了确保安全,有地理局限,与不同的人通信需要不同密钥,共享繁琐。

3 密钥分配中心

每个员工有自己的密钥,密钥分配中心使用个人密钥,包裹临时会话密钥,分配给各个员工使用。

2 RSA

3 加密原理

密文=明文的E次方 MOD N

E 和 N 是RSA加密用的密钥,也就是说,E 和 N 的组合就是公钥。

3 解密原理

明文=密文的D次方 MOD N

D 和 N 的组合就是私钥。

3 生成密钥对

4 求 N

寻两个很大的质数 p 和 q,相乘得到 N

4 求 L(仅在生成密钥对过程中使用)

L为 p-1 和 q-1 的最小公倍数

4 求 E

随机数生成器,不停地生成数字,直到满足如下条件:

1 < E < L

E 和 L 的最大公约数为 1

4 求 D

根据 E ,计算 D

1 < E < L

E × D MOD L = 1

保证 E 与 L 互质,则 D 一定存在。

3 数学原则

求对数很容易,求 离散对数 很困难

对一个大数字进行质因数分解,人类未找到高效算法

2 其它公钥密码

3 ElGamal方式

利用了 MOD N下,求离散对数的困难度

加密后,密文长度翻倍

3 Rabin方式

利用了 MOD N下,求平方根的困难度

3 椭圆曲线密码 ECC

密码实现通过 对椭圆曲线上的特定点进行特殊乘法。

利用了该种乘法的逆运算非常困难这一特性

1 单向散列函数


单向散列函数 又称为,消息摘要函数、哈希函数、杂凑函数

输入的消息 又称为,原像

散列值 又称为,消息摘要、指纹

完整性 又称为,一致性

2 单向散列函数的性质

根据任意消息,计算出的散列值长度,固定

用时短

消息不同,散列值不同

消息不同,散列值相同的情况,称为碰撞。

弱抗碰撞性:要找到,与该条消息散列值相同的,另外一条消息,非常困难。

强抗碰撞性:要找到,散列值相同的,两条不同消息,非常困难。

密码技术中的 单向散列函数,需要强弱抗碰撞性兼备。

具备单向性

2 具体的单向散列函数

3 MD4、MD5

MD是消息摘要的意思

可以产生 128bit 的散列值,但它们的抗碰撞性已被攻破

3 SHA-1、SHA-256、SHA-384、SHA-512

SHA-1散列值长度为 160bit,强碰撞性已被攻破

其余的统称为 SHA-2,散列值长度为各自后面的数字

3 RIPEMD-160

欧盟版本

3 AHS advanced hash standard 和 SHA-3

第三代 SHA

2 SHA-1

消息上限 2^64 bit。

3 填充

消息长度需要是 512bit 的整数倍。这样的 512比特 称为一个输入分组。

过程:

消息末尾添加 1

然后添加 0,直到最后一个分组的 448比特 的位置

最后 64比特 需要保存原是消息的长度

3 计算W0~W79

对每个分组计算 80 个 32bit 的值。

过程:

将 512bit 分成 32bit × 16组,称为 W0~W15

从15组中按规律取4组,进行 XOR 运算,结果循环左移 1 位,得到另外一组。如此反复,得到总共 80 组。

3 分组处理

ABCDE 五个 32bit 的缓冲区,保存了 160bit 的消息内部状态。

内部状态与每个 512bit 的输入分组混合,一共 80 个步骤。

单个步骤的处理过程异常复杂,每个步骤完成后,五个缓冲区都要循环移位,B缓冲区需要左移30bit,过程中,每个缓冲区都与输入分组进行了运算。

最终得到 160bit 的最终内部状态。

对单向散列函数的攻击

暴力破解:暴力寻找与 1亿元合同 散列值相同的文件

生日攻击:准备两份 散列值相同的 1亿元合同

单向散列函数无法解决的问题

可以辨别 篡改,无法辨别 伪装,因此还需要 认证技术

认证技术包括 消息验证码 和 数字签名

消息验证码:可以向通信对象保证消息不被篡改

数字签名:可以向任何人保证通信对象不被篡改

1 消息认证码


message authentication code,简称 MAC。

相当于使用共享密钥的单向散列函数

2 消息认证码的应用实例

SWIFT:负责银行间的交易,公钥密码使用前,都是人工配送密钥的。

IPsec:对IP协议增加安全性,采用的是消息认证码

SSL/TLS:网上购物等场景中所用协议。

2 HMAC Hash MAC

过程:

密钥填充 至单向散列函数要求的输入分组大小

填充后的密钥 与 ipad(16进制的36不断循环)XOR,得到ipadkey

与 消息 组合,计算散列值

填充后的密钥 与 opad(16进制的5C不断循环)XOR,得到opadkey

与 上面得到的散列值 组合,计算新的散列值,为最终的MAC值

2 消息认证无法解决的问题

对第三方证明

防止否认

因为知晓密钥的只有两个当事人,第三者无法确定能拿到合法的密钥,无法自己计算合法MAC值

1 数字签名


2 数字签名的方法

RSA:利用质因数分解难度的那个

ElGamal:利用求离散对数的困难度的那个,数字签名有漏洞,现仅用于公钥密码

DSA:Schnorr算法与ElGamal方式的变体,只能用于数字签名

Rabin:利用了求MOD N中平方根的困难度,可用于数字签名和公钥密码

1 证书


2 认证机构的 认证业务准则

例如,verisign公司的认证业务分为三个等级,等级越高,越严格

  • Class 1 邮箱认证

  • Class 2 通过第三方数据库来确认本人身份

  • Class 3 通过当面认证和身份证明

2 证书标准规范

ITU 国际电信联盟和 ISO 国际标准化组织制定的 X.509 规范如下

大体包含以下内容:

签名前的证书——签名对象的各种消息

数字签名算法——签名时所用的算法

数字签名——得到的数字签名

2 公钥基础设施 Public-Key Infrastructure

PKI :为了能有效使用公钥而制定的一系列规范和规格

PKI 的组成要素如下

  • 用户 —— 使用 PKI 的人

  • 认证机构 —— 颁发证书的人

  • 仓库 —— 证书目录

2 认证机构的工作

3 生成秘钥对

两种方法:一种是由认证机构生成,一种是由 PKI 用户自行生成

3 注册证书

3 作废证书与CRL

认证机构有一个 CRL(认证作废清单),具有数字签名,记载了已经作废的证书的编号。

2 证书的层级结构

认证时,从上(根证书)往下

1 密钥


对于密钥,关键的是 密钥空间的大小

2 各类密钥

DES 的密钥 实质长度(即,除去校验错误的比特后的长度)7字节

DES-EDE2 的实质长度 14字节,DES-EDE3 的实质长度 21字节

AES 的密钥长度可以从 128、192 和 256bit 当中选

2 不同的密钥

3 会话密钥和主密钥

会话密钥:每次通信中,仅使用一次的密钥

主密钥:一直被重复使用的密钥

3 加密内容的密钥和加密密钥的密钥

CEK:Contents Encrypting Key

KEK: Key Encrypting Key

2 密钥的管理

各个步骤中的密钥管理方法

3 生成密钥

两种方法:

用随机数生成密钥:使用具备不可预测性的伪随机数生成器生成随机数

用口令生成密钥:一般使用,口令 + 一串称为 salt 的随机数,得到他们的散列值作为密钥(这种方法称为:基于口令的密码)

3 配送密钥

事先共享

秘钥分配中心

使用公钥密钥

Diffie-Hellman 密钥交换

3 更新密钥

密钥更新:一种提高通信机密性的技术

原理:

使用 共享密钥 进行通信时,定期改变密钥。

双方使用同样的方法,对当前密钥求 散列值,并作为下一个密钥

优点:

后向安全:防止破译过去的内容

如果密钥被窃听者得到,他只能得到之后的消息,无法得到上一个密钥,无法得到此前的消息

3 保存密钥

对密钥进行加密,然后保存

意义:

同时对多个密钥进行加密,可以减少保存密钥的数量

2 Diffie-Hellman密钥交换

步骤:

3 双方首先确定两个质数 P 和 G

P 为非常大的质数,G 为 P 的生成元

3 甲方生成一个随机数 A,乙方生成一个随机数 B ,各自保密

3 甲方将 G^A MOD P 发给 B

目的为,将 随机数 A 的信息 含蓄地发给了 B

3 乙方将 G^B MOD P 发给 A

目的为,将 随机数 B 的信息 含蓄地发给了 A

3 甲方进行计算,得到密钥

计算方法:密钥 = (G ^ B MOD P) ^ A MOD P = G^(A × B) MOD P

3 乙方进行计算,得到密钥

计算方法:密钥 = (G ^ A MOD P) ^ B MOD P = G^(A × B) MOD P

2 生成元 G 的意义

对于一个质数 P ,只有它的生成元在进行 G ^ x MOD P 时,结果能够覆盖 0 ~ P-1 的所有数字

2 基于口令的密码 (PBE 基于口令的加密)

用途:用于安全的保存密钥

由来:

一 生成会话密钥 CEK ,加密消息

二 需要保密 会话密钥CEK,使用 密钥加密密钥KEK 对会话密钥进行保密

三 现在需要保密 KEK 这个密钥,选择使用口令生成这个 KEK

对 口令 + salt 求散列值,作为 KEK ,之后只用保存 salt 和 使用 KEK 加密后的会话密钥 就好了,KEK也可以丢掉了

3 过程重点

保密的问题最终都归结为了 安全保存密钥,然而我们记不住密钥。

于是,选择单向散列函数对口令生成散列值,作为密钥。

这个密钥无需保存,我们可以通过口令随时求得,口令也无法被反向推出,且口令方便记忆。

顺带,为了防止字典攻击,生成口令散列值时,需要使用 口令 + salt(随机数序列)

3 字典攻击

事先 已准备好 候选列表 的攻击方法

1 随机数


2 随机数的性质

随机性

不可预测性

不可重见性

这三个性质,越往下越严格。分别称为:

弱伪随机数(不可用于密码学)

强伪随机数

真随机数

3 伪随机数生成器的种子

伪随机数生成器是公开的,种子是保密的。

确保种子的不可预测性,更加容易些。

种子是用来对伪随机数生成器的内部状态进行初始化

2 具体的伪随机数生成器

3 线性同余法

R1 = (A × R0 + C) MOD M

数据有限,不能用于密码学

3 单向散列函数法

单向散列函数的单向性是支撑伪随机数序列不可预测性的基础

3 密码法

利用 AES 等对称密钥对内部状态进行加密

3 ANSI X9.17

从当前时间开始,利用加密算法求得加密后的时间的掩码(因为密钥未知,别人无法推测出掩码信息)

与内部状态 XOR,加密后输出,得到伪随机数序列

对伪随机数序列加密后,作为下一个内部状态

1 PGP Pretty Good Privacy


针对极端情况的密码软件,具有全部功能。

PGP 通过信任网来判断密钥的合法性和可信度

1 SSL/TLS


2 TLS 传输层安全协议

TLS 由 TLS 记录协议 和 TLS 握手协议 叠加而成。

3 TLS 记录协议 负责底层加密

负责消息的 加密、压缩 和 认证

3 TLS 握手协议 负责加密外的其他操作

握手协议

商定 客户端和服务器 所用的加密算法和密钥

密码规格变更协议

负责 传递 变更密码的信号

警告协议

发生错误时 通知对方

应用数据协议

传输数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 前言 《图解密码技术》一书介绍了很多关于密码的知识,通读一遍需要不少时间。为了方便学习,我对书中关键的部分进行了总...
    咖枯阅读 7,096评论 1 25
  • 在深入学习区块链时,不可避免的需要了解密码学。区块链算是对密码学的一次整合运用,虽然并无太多创新的密码算法,但也值...
    Kerwong阅读 44,233评论 4 25
  • 1、加密方法分为两大类。一类是单钥加密(private key cryptography),还有一类是双钥加密(p...
    chengzhx76阅读 724评论 0 49
  • 1. 加密方法可以分为两大类。一类是单钥加密(private key cryptography),还有一类叫做双钥...
    麦田里的野望阅读 483评论 0 1
  • 对称加密: DES DES是1977年美国联邦信息处理标准中使用的一种对称密码技术,曾今被美国和其他国家政府银行使...
    十三亿少女梦丶阅读 1,103评论 0 10