在一个完美的世界里,没有人需要使用密码。每个人都高度自律,心无邪念;每一个快递都可以在不拦截的情况下准确送达收件人;每一个寄件人都是值得信赖的。但我们并没有在如此完美的世界里生存。在过去的几十年里,密码学不仅可以通过加密来保证机密性,还可以保证新闻的完整性、身份验证和不可否认性——一切都是为了保证新闻的私密性、真实性和可靠性。
如果您的系统已经实现了强有效的密码策略,它可能会让您认为用户本身不再需要通过生物特征来验证。为了理解为什么用户在密码学中如此重要,让我们依次比较密码学中几种方法的成功和不足。因此,作为银行系统或医疗系统等高端服务的提供商,您可以了解为什么您可能需要在密码策略的基础上进一步实现基于生物特征的身份验证功能。
您可以将加密比作函数,例如 E,该函数接收两个参数 m 和密钥 k,由此产生密文 c。生活中人们常常把这个密文当作加密,但事实上加密指的是能够生成攻击者无法读取的加扰信息的算法,而最终的加扰信息就是密文。
c = E(m,k)
只要密钥 k 当你只知道的时候,足够长 m 或 c 密钥几乎不可能得到一些内容 k。然而,攻击者可以篡改它,而无需解密信息。攻击者可以编辑和删除密文,也可以重新发送包含密文的新闻。
并非所有的攻击者都想窃取你的数据;他们可能只是想给你带来不便。想象一下,有一个攻击者,他只是重放你向电脑城付款 $2,000 购买笔记本加密交易。假设他是一个与计算机城无关的攻击者,他什么也没偷。当然,你可以通过一些投诉手段向商店要求退款,但你遭受了时间的损失,心情不好。更糟糕的是,一些擅长这一点的攻击者可能会用其他银行账户替换电脑城的银行账户——所有这些都不需要解密你传输的密文。
当然,这些只是刚才接触到的皮毛。对纯加密方案的攻击有很多。即使你的加密算法完全防止了已知的攻击,也可能存在缺陷。简单地说,你不能总是保证新闻的隐私。即使在最佳密码学策略的支持下,当前技术的发展速度也只能让你的消息出现 30 年内保持私密,也许运气好的话,可以有 50 年。因此,仅仅加密是无法与破坏消息完整性的攻击者竞争的。您还需要使用上述身份验证手段,即下一节要讨论的问题。
在某些敏感场合,欺骗性消息的误传会造成破坏性影响。这一重要事实激励了安全工程师创建新闻认证码 (Message Authentication Code,简称 MAC 或 HMAC)。如果发信人同时发送消息并传输消息 MAC,然后攻击者无法修改内容并假装这是原始消息。同时,攻击者无法重放已发送的消息。攻击者能做到的最多就是删除发送的消息造成通讯失败。
MAC 是什么?MAC a 类似于通过消息和密钥计算获得的密文。本质上,发信人会给消息 m 和密钥 k 传入函数 h 可以生成计算 MAC 然后,发信人同时将消息和 MAC 发送给收件人。
m,a = h(m,k)
MAC 这并不是唯一对应于消息相对应的消息。这是由鸽笼的原理引起的。一般来说,如果你的鸽子比鸽笼多,在一些鸽笼中会有不止一只鸽子。MAC 的长度是预先就决定了的,因此消息的数量会比对应 MAC 数量要多。然而,由于搜索域太大,攻击者很难猜到修改后的消息对应,而不知道密钥。 MAC。因此,MAC 只有发件人和目标收件人知道密钥,才能有效防止新闻被修改。如果攻击者想修改发送的信息,他必须更换 MAC 匹配变化。但几乎不可能不知道密钥。由于连续两次计算 m,a = h(m,k) 会产生两种不同 MAC,新闻重放攻击也会失效。这是因为在实践中通常有第三个严格增加的参数 t: 所以公式写作 m,a = h(m,k,t)。由此,MAC 函数可以帮助合法的收件人轻松验证他们是否遭受了新闻重放攻击。
MAC 本质上,攻击者必须破解密钥。 MAC 模仿原始消息不再可行。消息的完整性得到了根本的保证。 MAC 该机制非常实用,但在机密性方面仍有局限性,这也是后一章要解释的问题。
值得注意的是,MAC 只是签名消息而不包装——也就是说,没有机密性。攻击者仍然可以阅读新闻;但他们不能轻易篡改内容。但同时签名和包装并不难。不再使用 m,a = h(m,k?),取而代之的是代数替换 c,a = h(c,k?) ,其中 c 是由 c= E(m,k????) 计算得出。
好的密码算法就像好房子。它们可以站在暴风雨中 30 年以上,而不仅仅是一天倒塌。尤其是密码学家,这意味着他们需要预见未来 10 年或是 30 几年后,攻击者将破解加密算法,而不仅仅是考虑明天或下个月是否会发生攻击。因此,MAC 加密不能牢不可破。它只会增加攻击者破解的难度。30 年后的攻击者可能会用生日攻击和中途相遇攻击来猜测被篡改的消息 MAC 值,让收信人收到假消息。
生日攻击
https://en.wikipedia.org/wiki/Birthday_attack#:~:text=A birthday attack is a,between two or more parties.
中途相遇攻击
https://en.wikipedia.org/wiki/Meet-in-the-middle_attack
到目前为止,我们已经讨论了密码学家如何匹配加密和 MAC 生成签名和包装的消息。我们还谈到了攻击者最能做的就是删除这些消息;否则,消息将成功、私密、完整地交付给收件人。听起来这就是我们所需要的。事实上,还有更多。让我们开始讨论 "更多" 先说说可扩展性。
到目前为止,我们讨论的大多数技术都被统称为对称密码学。简而言之,它们要求发信人和收信人用相同的密钥加密或解密信息,并创建或验证 MAC。这种方法的问题是,如果整个组都有, 10 所以每个成员都需要分享和存储 9 不同的密钥可以在任何两个成员之间发送加密信息。这样,整个群体就有了 45 个 key 存在。如果有 20 个人,就有 190 一般来说, n 个人就有 (n-1)n/2 个密钥。想象一下,如果你需要使用一个独立的手机号码来联系联系联系人列表中的每个人呢?这样,你就不能给所有的联系人发一个号码,每次你结交新朋友,你都需要买一个新的手机号码!这就是对称加密的问题。难以扩展。幸运的是,有不对称加密。
非对称密码学使用数论中的观点 (特别是有限域理论和单射函数) 实现其技术优雅。本质上,每个人都创建了一个公钥和一个私钥。任何想和你交流的人都可以使用你的公钥来加密信息,但只有你的私钥才能解密。
有限域理论
https://mathworld.wolfram.com/FiniteField.html
单射函数
https://mathworld.wolfram.com/One-WayFunction.html
这里旨在讨论非对称加密,而不是深入讨论数字讨论。为了支持不可否认性,您必须使用非对称加密,这是我们接下来要讨论的下一个密码属性。
不可否认的是 "不可食言" 的专业说。电子商务革命把这个简单的公平交易原则带到密码学领域的前沿和中心。
在使用对称密钥的情况下,收到消息的人 (比如 Bob) 没办法向法官证明发信人 (比如 Alice) 是真正发消息的那个人。这是因为 Alice 和 Bob 用相同的密钥来通讯。或许 Alice 真的发送了原始消息,但 Bob 篡改了它,抑或 Alice 在撒谎。裁判没办法判断到底是哪一种情况。
然而在使用非对称密钥时,只有持私钥的那个人才可以对消息签名。全世界任何人都可以读到消息的内容,毕竟公钥是公开的。因此会出现这样的情况: 当 Alice 需要从 Bob 那边买东西时,她会用 Bob 的公钥来加密交易,并使用她自己的私钥来签名。然后当 Bob 收到交易信息后,可以用 Alice 的公钥来确定是不是真的用 Alice 的私钥签的名,随后用他自己的私钥来解密消息。由此可见,签名就被用来提供不可否认性了。MAC 和签名本质上是一样的,不过前者是对称加密的概念,而后者属于非对称加密。
现在我们来回顾一下。密码学被应用于加密和认证消息,并且提供不可否认性。当使用了正确的技术,消息的真实性和加密性两方面都难以被破解——它们都依赖较为复杂的数学手段,比如整数分解、离散对数和椭圆曲线算法,这些方法随后被应用于有限域问题中。需要指出的是,通过数学分析来获得加密密钥可能会很困难,但是仍有其他方法可以攻入安全系统,比如社会工程学,也就是人可能被诱导泄密。此外,我们没有聊到密钥生成和认证的过程,因为我们已经说得很明确了: 作为一门工程学科,密码学会根据时代的发展而不断演进,并试图保持超前攻击者。
与加密和身份认证不同,不可否认性会更难对付一点,因为用户身份的验证可以为攻击者再添一层难度。
到目前我们已经了解到密码学就是在研究安全等级: 对于一个攻击者来说,扰乱通讯的代价 (时间、金钱和体力) 有多么高。尽管如此,仍然存在一个主要问题: 仅凭消息发自我所持有的设备且由我的私钥签名,并不能说明是我本人发送的消息。病毒或是未经授权的用户也有可能发送了该消息。由于这些以及类似的原因,尽管数字签名已经被纳入国际法律体系中,比如 ESIGN,许多跨国商贸机构仍然没有信任它,因为在无法证明用户在场的情况下很难保证不可否认性,而举证责任由商家承担。
ESIGN
https://en.wikipedia.org/wiki/Electronic_Signatures_in_Global_and_National_Commerce_Act
为了增强商家对不可否认性的信心,业界引入了双重要素验证 (2FA)。因为网络罪犯常常会破解那些仅受用户名和密码保护的在线账号,2FA 引出了让自称是合法用户的代理提供多一种信息的概念。这里所说的多一种信息,通常指的是以下三类中的一种: 某件您知道的事、某样您拥有的事物,或是您是谁。2FA 的目标是要给商家信心去相信,用户本人的确在进行交易。两种常见的 2FA 形式是电子钥匙链和通常由短信发送的验证码。使用电子钥匙链或相似的硬件令牌都有容易丢失或被盗的问题。而当遗失或被窃的设备就是接收短信或者推送通知的设备时,用短信验证码作 2FA 也就毫无抵御能力了。因此,如今 2FA 最先进的形式就只剩您身体的一部分。生物特征身份验证就是这种增强 2FA 的例子。
双重要素验证 (2FA)
https://en.wikipedia.org/wiki/Multi-factor_authentication
在您的安全策略实现中用生物识别特征验证是否为用户本人,可以让您的应用更安全,并且不可否认性成为了您的商业模式中的一个可靠特性。对于医疗保健或是酒店服务业应用来说,这能够确保更真实的用户登记或是取消预约情况。对于电子商务和银行应用,这使得您的客户服务团队花费更少的时间来处理顾客的小孩意外产生的购买行为和退款,从而有更多的时间以更多令人满意的方式使顾客开心。
使生物特征认证在您的安全系统中成为阻拦攻击者的额外障碍的根本原因在于: 虽然生物识别和密码学手段是相互完全独立的措施,但它们都使得攻击者难以攻破。因此,两者结合就可以让攻击者更难以得逞。
举个例子,在 Android 当中,生物特征识别像是一条单行道。用户的生物特征信息永远不会离开设备,而且绝不会与应用共享。当用户决定把自己的生物特征信息录入 Android 设备时,他们必须要通过系统的设置应用。倘若用户要使用指纹或是人脸识别,那么他们需要把手指放在传感器上,传感器会直接把指纹图像发送到 Android 设备的受限区域内,这个区域被称为可信执行区域 (TEE)。随后,当您的应用需要通过生物特征验证用户本人在操作时,Android 框架和运行于 TEE 中的生物识别系统会替您的应用处理整个 "用户是否在场" 的验证过程。由于 Android 框架让冒充设备主人的生物特征非常困难,您可以给这个用户本人验证充分的信心。
您可以通过阅读我们的文章《结合使用 BiometricPrompt 和 CryptoObject》,更深入了解在 Android 系统上生物特征验证是怎样用不可否认性来增强您应用的安全的。
结合使用 BiometricPrompt 和 CryptoObject
https://medium.com/androiddevelopers/using-biometricprompt-with-cryptoobject-how-and-why-aace500ccdb7
您在本篇文章中了解到了:
为什么良好的密码策略实现需要强调私密性、真实性和不可否认性。
为什么只使用加密不足以保护消息免受攻击。
为什么 MAC 或 HMAC 能够有效避免消息被篡改。
为什么非对称加密比对称加密更容易扩大规模。
为什么现实生活中,不采用生物特征验证就难以实现不可否认性。
为什么生物特征验证可以通过用户存在性验证来增强加密实现。
在哪里可以了解到如何在您的应用中实现生物特征验证。
我们还撰写了许多文章,它们涉及工程最佳实践、设计指南以及将生物特征验证集成到您应用中的技巧:
如果您想要了解怎样在您的应用中实现生物特征验证,请阅读系列文章:
-
在 Android 中使用生物识别
实战 | 将 Android 生物识别身份验证整合至应用中
如果您的应用中有使用了 FingerprintManager 的旧逻辑,我们建议您用 BiometricPrompt 取代它。
-
全面了解 BiometricPrompt,请阅读: 在所有 Android 设备中使用统一的生物识别身份验证 API
https://android-developers.googleblog.com/2019/10/one-biometric-api-over-all-android.html
了解怎样完成迁移工作,请阅读: 从 FingerprintManager 迁移到 BiometricPrompt
https://medium.com/androiddevelopers/migrating-from-fingerprintmanager-to-biometricprompt-4bc5f570dccd
祝您编程愉快!
点击屏末
如页面未加载,请刷新重试