赞
踩
加密与安全_常见的分组密码 ECB、CBC、CFB、OFB模式介绍
密钥体系的三个主要目标
机密性:确保第三者无法通过密文猜测出明文。
完整性:确保第三者无法篡改原文内容。
不可否认性:确保第三者不能冒充其他人发送消息。
接下来我们将围绕以下几点展开:
对称密码:使用相同的密钥进行加密和解密。主要的实现方式包括AES、DES等。
非对称密码:使用一对密钥进行加密和解密,公钥加密,私钥解密。主要的实现方式包括RSA、ECC等。
对称密码和非对称密码解决的是机密性,也就是确保 Eve 即便截获到密文,也无法猜测出 Alice 和 Bob 传递的是啥内容。
有的时候,Eve 并非需要破解消息。 比如 Alice 辛辛苦苦写了一个程序,Eve 晚上偷偷在程序后面追加了一些代码。 第二天 Alice 将被替换的程序发给了 Bob。 虽然 Eve 没有截获任何密钥,但事实上也破坏了 Alice 和 Bob 之间的信任关系。
所以密钥体系仍然需要解决完整性,即第三者无法篡改原文内容.
为了确保消息的完整性,即防止消息在传输过程中被篡改,我们可以使用以下技术手段:
哈希函数将任意长度的数据映射为固定长度的散列值(哈希值)。 散列函数是一个单向计算函数,只有一个输入和对应的输出。f(x)=y . 其中x称为消息, 而y则称为散列值。 f(x)=y可以跟进消息内容计算出对应的散列值,而我们就可以通过散列值来检查信息的完整性
一个合格工业级散列函数,必须具备以下特征:
固定长度的散列值
无论x是多长的消息,单向散列函数必须能够生成固定长度的y(散列值)。比如SHA-256它所计算出来的散列值永远是 256 比特
计算速度非常快
当然快是相对的,尽管随着x的变大,计算时间势必会加长。但如果不能在现实的时间内计算出来,那么就丧失实际应用的价值了
散列值的唯一性
散列值的唯一性称之为抗碰撞性。也就是只要x不同那么计算出来的y一定不能相同。抗碰撞性分为两类: 强抗碰撞性和弱抗碰撞性
弱抗碰撞性指的是x确定,那么y也就确定。 此时找到一个散列值等于y的x是非常困难的.
和弱抗碰撞性对应的是强抗碰撞性。强抗碰撞性指的是在茫茫数据集中,指定任意一个y,找到 x 和 x’ 是非常困难的
一个合格的散列函数,必须同时具备强抗碰撞性和弱抗碰撞性。
单向性: 根据x可以计算出y,但无法根据y反推出x。
哈希函数具有不可逆性和抗碰撞性,即难以通过哈希值反推出原始数据,也难以找到两个不同的输入具有相同的哈希值。
在一些场合中,单向散列函数也称之为"消息摘要函数"、“哈希函数"和"杂凑函数”. 计算出的散列值也称之为"消息摘要"或者"指纹"
散列函数只能确保信息内容不被篡改,而无法保证消息一定是从合法渠道发来的。 例如 Eve 可以伪装成 Alice 向 Bob 发送消息和对应的散列值。 Bob 接受到消息和散列值后,如果校验一致,那么也只能证明消息没有经过篡改,而无法证明消息是 Alice 发来的。
而为了解决这个问题,就需要同时使用散列值和数字签名了
散列函数中,我们提到过通过散列函数我们确保消息原文并没有被篡改过。但无法保证消息是双方真实意思的表现。
比如说 Bob 收到一条借款消息,上面写着请 Bob 给 Alice 的银行账户 xxxxx 转 1000. Bob 通过计算消息内容的散列函数,证实消息没有被篡改过。 那么此时此刻,Bob 应该给这个账户转账吗?
不能!
因为 Bob 并不能证实这条消息是来自于 Alice 的。 有可能这条消息来自于 Eve。 所有仅通过散列函数只能解决是否篡改,而不能解决是否真实。
这是 Bob 以为的
而实际上却是这样的:
而消息认证码则可以解决这个问题.
消息认证码是基于哈希函数或对称加密算法生成的一段固定长度的代码,用于验证消息的完整性和真实性。消息认证码是一种确认信息完整性并可以进行认证的技术,简称 MAC(Message Authentication Code)。 MAC 由两部分组成: 消息 + 共享密钥
和散列函数类似, MAC 可以将任意长度的消息计算出固定长度的输出值。但和散列函数不同的是,如果没有共享密钥,则无法计算出最终的 MAC 值。 所以通过这一个性质来确保安全性.
MAC = 单向散列 + 共享密钥
HMAC (基于哈希函数的消息认证码), CMAC (基于块密码的消息认证码)等。
HMAC 的 H 指的是 Hash 的意思,是一种利用 Hash 来构造消息认证码的算法。 我们说过MAC = 散列函数 + 共享密钥 。 HMAC 使用的散列函数有:SHA-1、SHA-224、SHA-256、SHA-384、SHA-512 几种函数。
因此相对应的 HMAC 也称为:HMAC-SHA-1、HMAC-SHA-224、HMAC-SHA-256、HMAC-SHA-384、HMAC-SHA-512.
HMAC 用数学公式来表示是:
hash(opadKey || hash(ipadKey || message ))
其中:
ipadKey 是 key(密钥) ⊕ ipad(内部 16 进制的 36 比特流) opadKey 是 key(密钥) ⊕ opad(外部 16 进制的 5C 比特流)
所以 HMAC 是两层 HASH 的结果值。
步骤分解:
密钥填充:如果密钥不足预设长度(散列函数的分组长度),则填充’0’。如果长呢?那就用散列函数计算固定长度的散列值作为密钥值
以 Bob 和 Alice 之间借钱的例子开始说。 假设这俩人之间通过 MAC 确保安全性,那么双方处理流程应该大致是这个样子
在 MAC 算法里面既然提到了共享密钥,那么就无法逃离对称密钥体系的宿命:“密钥配送问题”。 而解决这个问题,目前来说只能依靠公钥密钥、Diffie-Hellman 密钥交换,密钥中心等解决方案.
使用 HMAC 可以解决消息合法性和完整性的问题,但却无法抵御重放攻击。 比如 Eve 截获到 Alice 和 Bob 之间的 Hmac 报文后,无限制的重复这段报文。 那么 Bob 就会无限制的进行转账。所以使用 HMAC 进行消息认证时,也会配合序号、时间戳等辅助信息,来判断报文是否需要处理。
同时 HMAC 也无法解决否认的问题,比如 Alice 完全可以事后否认找 Bob 借过钱,因为 Bob 完全有能力伪造出这段报文。即便 Bob 拿出了 MAC 值,也无法证明是 Alice 生成的。
那又该如何证明钱是由 Alice 借的呢?
这就需要数字签名技术了
不可否认性确保消息的发送者不能否认曾经发送过消息,这通常通过数字签名实现。
定义:数字签名是一种基于非对称密码技术的认证机制,用于验证消息的发送者身份和消息的完整性。
工作原理:
优点:
应用场景:
确保信息的机密性、完整性和不可否认性是密钥体系的重要目标。对称密码和非对称密码主要解决机密性问题。哈希函数、消息认证码(MAC)和数字签名是实现消息完整性和不可否认性的主要技术手段。
应用建议:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。