当前位置:首页 >资讯 > 加密与认证技术的区别?


加密不等于认证,那么它们之间有什么区别呢?如何区分什么是认证技术,什么是加密?

加密和认证有什么区别?

加密是指在操作数据后,无密码无法打开数据或解密数据。在简单的对称加密中,使用相同的密钥进行加密和解密。在非对称加密中,用户的公钥可以用来加密信息,这样只有相应的私钥所有者才能读取它。 认证是为了显示信息以防止篡改(通常在一个非常低的概率内,小于1除以已知宇宙中粒子的数量),但也证明它起源于预期发送者的过程。

注:当本文提到真实性时,它指的是信息的真实性,而不是身份的真实性。这是一个PKI和密钥管理问题,我们可以在未来的博客中详细解释。

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

加密不提供完整性;被篡改的信息(通常)可以解密,但结果通常是垃圾。单独加密不会抑制恶意第三方发送加密信息。

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

加密

我们以前定义过加密,并详细说明它提供机密性,但不提供完整性和真实性。您可以篡改加密信息,并将产生的垃圾交给接收者。你甚至可以利用这种垃圾生产机制来绕过安全控制。

考虑到加密cookie的情况,有以下代码:

上面的代码在密码段链接模块中提供了AES加密。如果您将32字节的字符串作为$key,您甚至可以声称它为您的cookie提供了256个AES加密,然后人们可能会被误导并相信它是安全的。

加密和认证技术有什么区别?

如何攻击未经认证的加密。

比如登录到这个应用程序后,你会发现你收到了一个会话cookie,看起来就像。

kHv9palstpzazzhiyxzyCnuahwdrk7H0cnvUCwz4M8fx79xiibznxmiOxg7td8Lwtzhwbmbub+sq==。

让我们改变一个字节的第一块(初始化向量),反复发送我们的新cookie,直到有一些变化。应该采取4096个HTTP请求,尝试变量IV所有可能的单字节变化。在上面的例子中,经过2405个请求,我们得到了一个看起来像这样的字符串:

kHv9PalstPZZZHIYXzyCnuahWDRK7H0CNVUCWZ4M8fxH79xiibznxmiOxg7td8LwtzhFgwbmwub+sq==

相比之下,base64编码的cookie中只有一个不同的字符(khv9palstpzazjskhv9palstpzazzz):

-kHv9PalstpzazzhiyxzyCnuahwdrk7H0cnvUCWZ4M8fxH79xibznxmiOxg7td8Lwtzhwbmbub+sq==

+kHv9PalstpzazzhiyxzyCnuahwdrk7H0cnvUCWZ4M8fx79xibznxmiOxg7td8Lwtzhwbmbub+sq==

这个cookie中存储的原始数据是一个看起来像这样的数组:

根据底层应用程序的设置方法,您可以翻转一个,然后将其提升为管理员。即使你的cookie是加密的。如果你想再现我们的结果,我们的加密钥是在16进制下的:0010203040506070808080b0c0d0e0f。 认证

如上所述,认证旨在提供信息的完整性(我们指的是明显的防篡改能力),这证明它来自预期的来源(真实性)。这样做的典型方法是计算一个密钥散列信息认证码(HMAC的简称),并将信息与之连接。 重要的是,在这里使用合适的哈希工具,如HMAC,而不仅仅是一个简单的散列函数。

我在这两个函数名前加了unsafe,因为它们仍然容易受到一些缺点的伤害:

TimingAttacks。

PDF。

non-strictequalityoperatorbugs(largelyspecifictopHP)

现在,我们有点接近我们强大的对称加密认证目标。

加密不是认证。加密提供加密算法加密后的数据信息,只是为了防止数据泄漏,而不是为了防止对数据的破坏。认证是为了提供一个完整性,混合加密和认证技术。