学习笔记 2 – 混合密码系统
在密码学入门(1)中提到了基本的密码形式,对称密码和公钥密码以及混合密码系统.
这一部分将学习到数字签名,证书,消息认证码,随机数生成器等.
单向散列函数(one-way hash function),或哈希函数有一个输入和输出,输入称作消息(message),输出称作散列值(hash value).单向散列函数可以根据消息内容计算出散列值,散列值可以被用来检查消息完整性.具体哈希函数原理可看比特币的简单原理
散列值的长度和消息长度无关,例如SHA-256单向散列函数计算出的散列值永远是256bit.单向散列函数的性质有:
散列函数的应用:
1995年NIST(美国国家标准技术研究所)发布的FIPS PUB 180-1称作SHA-1,可产生160bit散列值.SHA-256,SHA-384,SHA-512都是NIST设计的单向散列函数,统称SHA-2.SHA-1的强碰撞性于2005年攻破.
SHA-3单向散列函数2012年确定由Keccak算法作为SHA-3标准.SHA-3相比于SHA-2有完全不同的结构,适用于各种设备,包括嵌入式应用,硬件实现性能高,且相比于SHA-2 输入信息长度上限 2 128 − 1 2^{128} -1 2128−1,SHA-3没有长度限制.
Keccak算法采用海绵结构,下图中内部状态初始值为0,总共 b = r + c b=r+c b=r+c bit. f f f函数是将输入的数据进行复杂的搅拌并输出结果,将输入消息进行分组 分成rbit的分组,先将内部状态的前r个bit和输入分组进行异或,再将内部状态的后c bit和异或后的r bit进行搅拌.r称为比特率,c称为容量,c bit不受输入分组的直接影响,输出仍然是b bit数据,容量c的意义在于防止将输入消息中的一些特征泄露出去.
其中f函数包括:
θ \theta θ:将每两列的各自5bit进行XOR,再置换原目标bit
ρ \rho ρ:lane方向bit平移
π \pi π:对slice进行bit平移
χ \chi χ:对相邻row进行取反求和
l l l:对整个state进行异或
对单向散列函数的攻击:
暴力破解:利用文件冗余性,修改文件不断尝试得到相同的散列值,针对弱抗碰撞性
生日攻击:找到任意两条具有相同散列值的消息,针对强抗碰撞性
但是单项散列函数能辨别篡改,不能辨别出伪装.
消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术,间成MAC值.
消息认证码的输入是任意长度的消息加上一个和接收者共享的密钥,输出为固定长度的数据,即MAC值.可以通过对比传输的MAC值和接收方通过密钥计算得到的MAC值对比证明认证成功.
输出固定长度,这点和单向散列函数相似;但是消息认证码需要输入共享的密钥.所以可以认为消息认证码(MAC)是一种与密钥相关联的单向散列函数.
IPsec:IPsec对互联网基本通信协议–IP协议增加安全性的一种方式,对通信内容的认证和完整性校验都是采用消息认证码完成.
SSL/TLS:SSL/TLS中对通信内容的完整性校验也使用了消息认证码.
HMAC:HMAC是一种使用哈希函数构造消息认证码的方法,把密钥和消息通过HASH函数生成MAC值.
H M A C = h a s h ( o p a d k e y ∥ h a s h ( i p a d k e y ∥ m e s a g e ) ) HMAC=hash(opadkey\parallel hash(ipadkey \parallel mesage)) HMAC=hash(opadkey∥hash(ipadkey∥mesage))
消息认证码可以解决篡改和伪装的问题,但是五分解决第三方证明和防止否认的问题.,可通过数字签名解决.
第三方证明:向第三方证明消息的准确性和完整性,因为MAC值是通过通信双方的密钥计算,对第三方无法证明消息的准确性.
防止否认:接收方可以通过MAC值确认消息来自发送方,但是如果发送方和接收方吵架了,发送方否认该消息正确性,接收方无法证明消息准确性,无法防止否认.
使用消息认证码可以识别篡改伪装行为,无法保证消息机密性和防止否认以及第三方证明.
通过消息验证码发送者Alice和接收者Bob共享一个密钥,但是通过数字签名可以使用不同的密钥.Alice通过一个私钥生成签名,Bob可以使用公钥对Alice的签名进行验证,类似于签名提到的公钥密码反过来,私钥加密相当于生成密钥,公钥解密相当于验证签名.
后者它通过对消息的散列值进行加密,相比于对消息直接加密提高效率,有点类似混合密钥系统.把消息和特定的签名绑定在一起,就不用担心直接复制文件.
同时如果把签名部分提取出来,添加到其他消息后面,但是这个时候验证签名会失效.同时,因为该密文只有通过发送者加密产生,所以可以防否认.
RSA实现数字签名就是RSA加密的逆运算.
公钥证书:由认证机构认定该公钥属于某个人的认定证书.
认证机构Trent会用自己的私钥加密发送者Bob的公钥施加数字签名并生成证书.发送者Alice会先通过Trent给的验证公钥验证数字签名,验证成功后便可得到Trent加密的发送方Bob的公钥,再通过公钥加密消息传输给接收者Bob.
公钥基础设施(Public-Key Infrastructure) 是有效运用公钥的一系列规范规格的统称,简称KPI.
组成要素
公钥使用者Alice:
认证机构(CA):
仓库(respository):
*保存证书
[1] 图解密码技术(第三版)