当前位置:文档之家› 加密与认证技术的区别

加密与认证技术的区别

加密技术与认证技术有什么区别
加密并不等于认证,那么他们之间是有什么异同之处呢?怎样可以分清楚什么是认证技术,什么又是加密呢?
加密与认证之间有哪些区别?
加密是指对数据进行操作后,没有密码无法打开数据或解密数据。

在简单的对称加密中,同一个密钥被用于加密和解密。

在非对称加密中,可以使用用户的公钥对信息加密,使得只有对应私钥的拥有者才能读取它。

认证是呈现信息,使其抗篡改(通常在某一非常低的概率之内,小于1除以已知宇宙中粒子的数量),同时也证明它起源于预期发送者的过程。

注意:当本文提及真实性时,是专门指的信息真实性,而不是身份真实性。

这是一个PKI和密钥管理问题,我们可能在未来的博客中详细说明。

就CIA triad而言:加密提供机密性,认证提供完整性。

加密不提供完整性;被篡改的信息(通常)还能解密,但结果通常会是垃圾。

单独加密也不抑制恶意第三方发送加密信息。

认证不提供机密性;可以为明文信息提供抗篡改。

加密
我们之前定义了加密,并且详细说明了它是提供机密性,但不提供完整性和真实性的。

你可以篡改加密信息,并将产生的垃圾给予接收者。

而且你甚至可以利用这种垃圾产生机制,来绕过安全控制。

考虑在加密cookie的情况下,有如下代码:
上面的代码提供了在密码段链接模块的AES加密,如果你传入32字节的字符串作为$key,你甚至可以声称,为你的cookie提供了256位的AES加密,然后人们可能被误导相信它是安全的。

如果需要对数据加密,可以使用专业的数据加密软件文件夹加密超级大师,是专门针对个人数据进行加密的,金钻采用的是国际先进的加密算法,加密后,数据只能通过正确密码打开,加密安全性非常高。

如何攻击未经认证的加密
比方说,在登录到这个应用程序之后,你会发现你收到一个会话cookie,看起来就像
kHv9PAlStPZaZJHIYXzyCnuAhWdRRK7H0cNVUCwzCZ4M8fxH79xIIIbznxmiOxGQ7td8LwTzHFgwBm bqWuB+sQ==
让我们改变一个字节的第一块(初始化向量),并反复发送我们的新的cookie,直到出现一些变化。

应该采取共4096次HTTP请求,以尝试变量IV所有可能的单字节变化。

在上面的例子中,经过2405次请求后,我们得到一个看起来像这样的字符串:
kHv9PAlStPZaZZHIYXzyCnuAhWdRRK7H0cNVUCwzCZ4M8fxH79xIIIbznxmiOxGQ7td8LwTzHFgwBm bqWuB+sQ==
相比之下,在base64编码的cookie中只有一个字符不同(kHv9PAlStPZaZ J vs kHv9PAlStPZaZ Z):-
kHv9PAlStPZaZJHIYXzyCnuAhWdRRK7H0cNVUCwzCZ4M8fxH79xIIIbznxmiOxGQ7td8LwTzHFgwBm bqWuB+sQ==
+
kHv9PAlStPZaZZHIYXzyCnuAhWdRRK7H0cNVUCwzCZ4M8fxH79xIIIbznxmiOxGQ7td8LwTzHFgwBm bqWuB+sQ==
我们存储在这个cookie里的原始数据,是看起来像这样的数组:
根据底层应用程序的设置方法,你或许可以翻转一位进而提升成为一名管理员。

即使你的
cookie是加密的。

如果你想再现我们的结果,我们的加密密钥是十六进制下的:000102030405060708090a0b0c0d0e0f
认证
如上所述,认证旨在提供信息的完整性(我们指显著抗篡改能力),而这证明它来自预期的源(真实性)。

这样做的典型方法是,为信息计算一个密钥散列消息认证码(HMAC的简称),并将信息与它连结。

重要的是,这里使用一个适当的哈希工具,如HMAC,而不仅仅是一个简单的散列函数。

我在这两个函数名前面加了unsafe,是因为它们还是易受到一些缺点的危害:
Timing Attacks
Chosen Prefix Attacks on MD5 (PDF)
Non-strict equality operator bugs (largely specific to PHP)
现在,我们有点接近我们强大的对称加密认证的目标。

加密并不是认证,加密提供的是用加密算法加密过后的数据的信息,只是防止数据泄漏,并不能防止对数据的破坏。

认证是提供一个完整性,一定不能把加密和认证技术混为一谈。

当然如果需要加密文件夹或文件,可以试一下文件夹加密超级大师哦。

相关主题