这节课讲数字签名,数字证书,哈希值等等。

回忆之前我们讲了非对称加密,只有公钥是公开的,密钥是接收方才有的,这样就提供了保密性。但是除了保密性以外,信息的完整,验证,不可否认如何实现呢?那么就是这节课的主要内容:

首先来说HMAC,即Hash Based Message Authentication Code,HMAC使用SHA256算法来计算一个安全的数字签名,然后通过这个来实现信息的完整和验证,确保可以知道谁发送了该信息,不扣否认。

具体一点就是HMAC一般使用secret key和哈希的功能来实现信息的完整和验证。secret key分为inner和outer两个key,然后 Inner key + message = inner hash,随后Inner hash + outer key = HMAC。HMAC的size和hash size相等。这个过程并没有加密信息,只是多了一个值而已,而接收方做同样的过程,然后比较验证。整个过程都是后台进行的,我们并不会察觉到。

该过程需要完整的信息,以及共享secret key(两个),key如果是字符串则转为bytes,如果key比block短一些,则用0来补齐,如果key比block长呢,就用哈希功能把key哈希掉,然后用结果来当key。

如果最后接收方验证的结果和接受到的结果一致,那么就证明信息完整并且验证成功

在回忆一下保密性,public key 是可以公开的,但是privacy key只有接收人才知道,因此可以确保保密性。所以通过未对成加密的办法使用两组key也可以达成保密 验证和不可否认的目的,例如下图
EM for A to B = M(A pr) then M( B pu
DM is then M( B pr ) then M( A pu

接下来一部分是说数字证书 Digital Certificates
很多常见的常见或者应用都是依赖数字证书,

比如
SSL/TLS:一般是服务器和客户端建立连接使用,交换key,和验证
Secure electronic mail:一般是邮件,也可以交换key,加密解密信息 Privacy Enhanced Mail (PEM) or Secure/Multipurpose Internet Mail Extensions (S/MIME)
Virtual Private Networks (VPNs):在不安全的沟通环境比如公共wifi,建立加密通道
Secure Electronic Transaction:一般信用卡支付会使用

数字证书的验证其实不够准,因为依赖的是电子设备,但是并不能保证电子设备前是本人还是其他人。

客户端验证Client authentication:
An option in SSL that requires a server to authenticate a client’s digital certificate prior to login
Server requests and authenticates client’s digital certificate during the SSL handshake
The identification of a client by a server, or the identification of the person assumed to be using the client
服务器验证:Server authentication:The identification of a server by a client, or the identification of the organization assumed to be responsible for the server at a network address

然后是数字签字部分Digital Signatures
数字签字同样可以提供验证,完整性,不可否认性,同样是通过公钥密钥机制,一般是用证书授权(PKI)。密钥可以对信息执行计算然后输出一个值作为签名,而公钥可以解密该签名然后对比接收到的信息的值。
注意这里:数字签名不是电子签名electronic signature,电子签名是扫描手写签名或者鼠标画一个签名,这是两码事。

数字签名一般包括公钥,起始日期,组织或者个人名字等等

流程如下

数字签名标准又是NIST和FIPS制定的National Institute of Standards and Technology,FIPS Federal Information Processing Standards.

而已批准的数字签名算法包括:DSA (from 1994),RSA (from 2009),ECDSA (from 2009)

下图是一个标准的例子

数字签名的要求:相对容易生成,相对容易辨认和验证,包含特殊信息防止篡改以及必须是数位模式。通过计算来伪造信息是不可行的,不论是通过现有证书来重构一个新的信息或者通过伪造证书来重构给定的信息。在储存中必须可以保留数字签名副本。

针对数字签名的攻击
已知信息Known message:攻击者得到了若干信息和数字签名,然后通过这个去篡改,事实上这是个问题,假如信息完全一样的话,似乎数字签名也一样的。这样没啥区别。
选定信息Chosen message:攻击者知道了发送者的公钥,然后把信息换掉,再欺骗该用户签名
钥匙攻击Key only attack:攻击者知道公钥,然后尝试重建发送者的数字签名,如果成功了,发送者不能拒绝发送假的信息

最后就是hash function

哈希有时候被认为是一种加密算法,这个是不对的,是误解,哈希值最大的作用是确保信息的完整性,因为理论上讲没有两个文件可以算出相同的哈希值,哪怕只有一个bit的0变成1,整个哈希值都会大不同。而且通过一个哈希值不给给出原信息的任何线索比如大小或者类型

加密哈希,可以把任意大小的size改成固定size,并且是单向的,可以简单的把一个文件计算出一个哈希值,但是反过来是不太可能的。相同的文件一直得到一样的哈希值,计算哈希值非常迅速,而反向计算是不可能的。

哈希算法有很多种,一般最简单的就是Message Digest 5 (MD5),一共128 bit hash value,因此32位十六进制。不过MD5已经不够安全了,有已知的漏洞了,已经出现过两个文件或者用软件来伪造出相同的哈希值。

Birthday paradox attack 生日悖论攻击

具体细节没搞懂,但是看下图可以理解为,有多少个人的时候会出现相同生日的人,实际上23个人就有50%概率,70个人就有99%的概率。

利用该逻辑呢,攻击者可以利用家用电脑来寻找冲突或者重复的哈希值,而且使用GPU可以更加快速的破解MD5,每秒可以破解16000000次甚至更多。因此MD5已经不安全了,后面被SHA-1(40bytes)所替代了。

然后随着硬件的提升,SHA-1也被攻破了,所以又有了后面的SHA-2(224 bits-512bits) 和SHA-256 SHA-512。

很多算法都有弱点,但是有弱点并不能代表这个算法不能用,比如DES 3DES WPA WPA2 MD5 SHA 1
因为理论上任何算法都可以被暴力破解。

常见的密码攻击,
Known Ciphertext
Chosen Ciphertext
Known Plaintext
Chosen Plaintext
Brute Force
Hash Function
MAC Attack
Birthday attack
Man in the Middle
Meet in the Middle


Chao

一个三天打鱼两天晒网的博主 拖延症严重患者 干啥啥不行,学啥啥不会