《图解密码技术》小结

前言

最近学信息安全课程的时候,感觉自己会被各种公钥,签名,证书等一系列名词搞得腾腾转~据老师推荐《图解密码技术》讲解的比较清晰,当我用了一两天仔细看完,确实发觉信息安全方面也有一定的套路的,特在此记录下自己的小小见解。


密码学家的工具箱

这里写图片描述

如上图所示,针对不同的场景需要设计不同的应对措施。
各密码技术其实看成是压缩技术。


对称密码

定义

用相同的密钥进行加密和解密的技术。

实现

DES【基于Feistel网络】(已放弃)

密钥长度为64bit,7bit作校验
加密时:
输入为64bit明文
经过各种比特变换,根据的是固定的变换表
输出为64bit密文

对DES有兴趣的可以自己去研究研究:
DES加密算法原理简析

三重DES

用三个不同密钥,分别对明文进行 加密→解密→加密 的处理
输入明文还是64bit,但是密钥的长度是DES的三倍

AES【基于Rijndael】

输入为128bit明文(也可为192bit,256bit)
加密流程:
逐字节替换→平移行→混合列→与轮密钥进行XOR运算

分组密码

以上三种密码算法都属于分组密码
1.定义
分组密码:每次只处理特定长度的一块数据的一类密码算法。
流密码:对数据流进行连续处理的一类密码算法。

2.模式
ECB:(电子密码本模式)
密文分组N =(明文分组N)*加密

CBC:(密文分组链接模式)【推荐】
密文分组1 =(初始化向量 XOR 明文分组1)*加密
密文分组N+1 =(密文分组N XOR 明文分组N+1)*加密

CFB:(密文反馈模式)
密文分组1 = 明文分组1 XOR (初始化向量 * 加密)
密文分组N+1 = 明文分组N+1 XOR (密文分组N * 加密)

OFB:(输出反馈模式)
密文分组N = [初始化向量 * (加密^N)]XOR 明文分组N

CTR:(计数器模式)【推荐】
密文分组N = (计数器CTR+N)*加密 XOR 明文分组N

各模式的区别:
Block cipher mode

缺陷

1.密钥配送问题
对称密码的密钥双方必须持有,不能让第三方截获。

应用

1.加密信息
一般来说信息时比较长的,采用对称加密算法能够很高效率计算出密文,从而保证信息的机密性。


公钥密码(非对称密码)

定义

用不同的密钥进行加密和解密的技术。加密用公钥,解密用密钥。

实现

RSA

密文 = 明文 E mod N (明文的E次方除以N的余数)
明文 = 密文 D mod N  (密文的D次方除以N的余数)
公钥:(E,N)
私钥:(D,N)
密钥对:E,D和N

利用了质因数分解的困难度。
密钥对生成流程:
1)N = p * q (p 与 q 为大质数)
2) L = lcm(p-1,q-1);L是q-1和p-1的最小公倍数
3) 求E (1

ElGamal方式

利用了mod N 求离散对数的困难度。

Rabin方式

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

椭圆曲线密码(ECC)

密钥长度较RSA短,通过将椭圆曲线上的定点进行特殊的乘法运算来实现的,利用了乘法运算的逆运算的困难度。

缺陷

1.易遭受中间人攻击
公钥密码只能确保两者间通信是机密的,但是出现第三方劫持消息时,第三方可以伪装成通信对方,从而获取消息的内容。

2.运行速度慢
分组长度太大,N至少是600bit以上,不建议直接加密消息内容本身。

应用

1.保护对称密码的密钥,解决密钥配送问题。
2.与对称密码组成混合密码系统,保护消息的机密性以及对称密钥的机密性,流程图如下:


单向散列函数

定义

将长消息转换为短散列的技术。
具有单向性以及抗碰撞性的性质。

实现

MD4,MD5

Message Digest 消息摘要的缩写
均能产生128比特的散列值

SHA-1,SHA-256,SHA-384,SHA-512

SHA-1产生160比特散列值 【已经被攻破】
剩下称为SHA-2

对Sha-1算法感兴趣的可以看:
Redis源码中探秘SHA-1算法原理及其编程实现

PIPEMD-160

产生160比特散列值

缺陷

1.无法识别出伪装的内容
攻击者可以劫持发送者的消息,然后发送恶意信息到接收方,接收方无法认证发送者的身份。

应用

1.保证内容是完整的,不被篡改


消息认证码

定义

能够识别通信对象发送的消息是否被篡改的认证技术。

实现

单向散列函数

HAMC方式
原理:
hash(opadkey||hash(ipadkey||message)
其中:
ipadkey = key XOR ipad
opadkey = key XOR opad

分组密码

CBC模式下最后一个分组密文消息作为MAC值

缺陷

1.易受重放攻击
内容不变,虽然认证了发送方和保证了内容完整,但是没有消息的序号,时间戳or随机数作消息区分。
2.发送方否认
A发送给B,但A可以否认自己发送过消息,因为共享密钥双方均持有,而且第三方介入也无法解决此问题。

应用

1.SWIFT
2.IPsec
3.SSL/TLS


数字签名

定义

能对第三方进行消息认证。

实现

对消息本身进行签名

对消息的散列值进行签名

PS:
原理是把公钥密码里公钥密钥反过来用,用密钥进行签名,公钥进行验证,此时不具备机密性,因为公钥是每个接收方所具有的。

缺陷

1.中间人攻击
中间人劫持通信,发送假的公钥给通信方,伪装成通信方。因为通信双方无法确认公钥是对方的。
2.被利用来攻击公钥密码
将用公钥加密的信息发送给有私钥的一方,从而获取解密后的信息。

应用

1.安全的信息公告
2.软件,邮件信息核实验证
3.公钥证书
对公钥进行数字签名。
4.SSL/TLS


证书(公钥证书)

定义

可靠的认证机构(CA)对公钥进行的数字签名。
CA是层次认证的,下级的公钥由上级CA进行签名认证,根CA是自签名。

实现

公钥基础设施(Public-Key Infrastructure)
组成:
用户:
1)生成密钥对,并将公钥信息交给认证机构去认证。(注册者)
2)从仓库获取注册者的公钥以及认证机构的数字签名,通过认证机构的公钥对签名进行认证。(使用者)

认证机构:
负责注册者的信息,并为注册者颁发证书。同时也能够作废证书。

仓库:
负责存储证书。

缺陷

1.公钥注册前受到截取
注册方向认证机构传送公钥信息的时候,被第三方截取偷换公钥。
解决方案:注册方使用认证机构的公钥对自己的公钥进行加密,同时,注册方也可以通过公钥的指纹确认认证机构。
2.利用CRL(证书作废清单)发布的时间差进行攻击
注册方私钥被窃取后,需要向认证机构申请作废证书,而使用者还没来得及更新自己的公钥信息,则会造成漏洞。另外一方面,注册方如果有恶意的倾向,也可以伪造成被窃取的迹象。


伪随机生成器

定义

可以生成伪随机数的软件。
随机数 = 种子 * 某种处理
随机数的性质:
1)随机性:数列完全杂乱无章
2)不可预测性:不能从过去的数列推测下一个出现的数
3)不可重现性:相同的数列不能重现

具备性质1称为弱伪随机数【不可用于密码技术】
具备性质1和2称为强伪随机数
具备性质1,2和3称为真随机数

实现

线性同余法

Rn = (A * Rn-1 + C) mod M 其中A和C需要小于M
该方法生成的数列有周期性,不具备不可预测性,不可用于密码技术
C语言的rand,Java的Random都是采用线性同余法的

单向散列函数法

Rn = (种子+n) * 单向散列处理
通过单向散列函数的单向性来支撑伪随机生成器的不可预测性。

密码法

Rn = (种子+n) * 加密处理
通过密码的机密性来支撑伪随机生成器的不可预测性。

ANSI X9.17

伪随机种子由内部状态值和加密密钥构成,其生成伪代码如下

    while(true){
        掩码 = 当前时间加密
        伪随机数 = (内部状态 XOR 掩码)* 加密
        输出伪随机数
        内部状态 = (伪随机数 XOR 掩码)* 加密
    }

应用

1.生成密钥
用于对称密码和消息认证码
2.生成密钥对
用于公钥密码和数字签名
3.生成初始向量
用于分组密码的CBC,CFB和OFB模式
4.生成nonce
用于防御重放攻击以及分组密码的CTR模式
5.生成盐
用于基于口令的密码(PBE)


密码技术的区别与联系

各个密码技术可谓是相辅相成的,他们都是为了解决相关问题而产生的。整个密码技术栈其实可以归纳如下:

对称密码的诞生其实是想解决消息的机密性,然而密钥的配送问题却是十分头痛。

公钥密码的诞生就是为对称密码的密钥配送护航,然而公钥密码却面临无法识别发送方的问题,也无法对传送的消息进行完整性验证。

单向散列函数的诞生能够确保消息的完整性,然而却无法认证消息发送方的身份。

消息认证码使用了单向散列函数和密钥,能够验证消息的完整性以及对消息进行认证,因为密钥是双方持有,但是不能对第三方进行认证,同时也不能防止否认。

数字签名巧妙逆用公钥密码,用密钥签名,用公钥认证,这样就能确定发送方的身份,也能保证消息完整性(因为签名也是用到了单向散列函数的)。但问题是无法保证公钥是可信任的。

证书的出现就是为了保护数字签名里的公钥是合法的,通过认证机构来对相关的公钥进行签名,以此来表明公钥是可信任的。

以上密码技术均需要生成相应的密钥或者密钥对,此时就需要伪随机数生成器,保证密钥不被攻击者看穿。

他们的联系其实可以通过下面这张图来解释:
这里写图片描述

密码技术本质其实是压缩,如下图:
这里写图片描述


附录

图解密码技术_结城浩

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值