在一个完美的世界上,没有人须要用到密码。每一个人都高度自律,心无邪念;每件快递都能不经拦截准确送达收件人;而每一个寄件者都是值得信赖的。可是咱们并不在这样完美的世界中生存。过去的数十年间,密码学已经发展到不只能够经过加密来保障机密性,还能够确保消息的完整性、身份验证,以及不能否认性——全部的一切都是为了保证消息私密、真实和可靠。html
假如您的系统已经实现了强有效的密码策略,这可能会使您认为再也不须要经过生物特征来验证就是用户本人。为了理解为何验明用户正身在密码学中如此重要,让咱们依次对照来看密码学中几种方法的成功和不足之处。由此,做为诸如银行系统或医疗系统等高端服务的提供者,能够了解为何您可能须要在密码策略的基础上进一步实现基于生物特征的身份验证功能。android
您能够把加密比做一个函数,好比 E,这个函数接收两个参数,消息 m 和密钥 k,并由今生成密文 c。生活中人们经常把这个密文看成加密,但事实上加密指的是可以生成攻击者没法读取的加扰信息的算法,而最终的加扰信息就是密文。算法
c = E(m,k)编程
只要密钥 k 足够长,当您仅知道 m 或 c 部份内容时,几乎不可能得出密钥 k。可是,攻击者无需解密消息便可对其进行篡改,攻击者也许能够编辑密文、删除密文,或者以重放的方式从新发送一条包含密文的消息。api
并非全部的攻击者都想要盗窃您的数据;他们可能只想给您带来不便。试想有一个攻击者,他只是重放了您向电脑城付款 $2,000 购买笔记本的加密交易。假设他是与该电脑城没有任何联系的攻击者,因此他什么也没有偷走。您当然能够经过一些申诉手段向店家要回退款,但既蒙受了时间的损失又没了好心情。更糟糕的是,某些精于此道的攻击者也许会将电脑城的银行帐户替换为其余银行帐户——这一切彻底不须要解密您传输的密文。安全
固然,刚才的这些都只是接触了其中的皮毛。针对纯加密方案的攻击有许多更知名的案例。即便您的加密算法充分防范了已知的攻击手段,但仍可能会有不足。简单说来,您没办法永远保证消息的私密性。甚至是在最佳密码学策略的加持下,当下技术的发展速度只能让您的消息在 30 年内保持私密,或许运气好的话,能有 50 年。所以,仅凭加密是没法与破坏消息完整性的攻击者相抗衡的。您还须要用上身份验证手段,也就是下个小节要探讨的问题。网络
在一些敏感场合中,欺骗性质的消息误传会形成破坏性影响。这个重要的事实启发安全工程师们创造了消息认证码 (Message Authentication Code,简称 MAC 或 HMAC)。若是发信人在发送消息的同时还传输了 MAC,那么攻击者就没法再修改内容并伪装这就是原始消息。同时攻击者也没法重放已经发送过的消息。攻击者能作到的最多就是删除发送的消息形成通信失败。框架
MAC 是什么?MAC a 与经过消息和密钥计算获得的密文类似。本质上,发信人将消息 m 和密钥 k传入函数 h 计算就能生成 MAC 了。随后,发信人同时将消息和 MAC 发送给收信人。函数
m,a = h(m,k)google
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 值,从而使收信人接到假冒的消息。
目前为止,咱们谈到了密码学家如何搭配加密和 MAC 来生成签名且封装的消息。咱们也谈到了攻击者所能作的最多就是删除这些消息;不然消息会成功、私密、完整地送达收信人。听起来这就是咱们所须要的所有了,其实还有更多。在咱们开始讨论 "更多" 以前,不妨先聊聊可扩展性。
目前为止咱们讨论的大多数技术被统称为对称密码学。简言之,它们要求发信人和收信人都是用彻底相同的密钥来加密或者解密消息,以及建立或校验 MAC。这种方法的问题在于,若是整个群组有 10 名成员,那么每名成员都须要分享和存储 9 个不一样的密钥,这样才可以在任意两名成员之间互发加密信息。这样一来,整个群组就有 45 个 key 存在。若是有 20 我的,就有 190 个密钥;通常地, n 我的就有 (n-1)n/2 个密钥。假想一下,若是对联系人列表里的每一个人,您都须要使用一个独立手机号码与其联系会怎样?这样一来,您不能将一个号码发给全部的联系人,而每次结交新朋友,您都须要购买一个新的手机号码!这就是对称加密的问题所在。难以扩展。不过幸亏还有非对称加密可用。
非对称密码学 使用数论中的观点 (尤为是 有限域理论 和 单射函数) 来实现其技术优雅。本质上是每一个人都建立一个公钥和一个私钥。任何想要和您交流的人可使用您的公钥来加密信息,但只有您的私钥能够将其解密。
这里意在讨论非对称加密,而不是深刻探讨数论。要支持不能否认性,您必需要使用到非对称加密,这是咱们接着要讨论的下一个密码学属性。
不能否认性是 "不可食言" 的专业说法。电子商务革命把这个简单的公平交易原则带到密码学领域的前沿和中心。
在使用对称密钥的状况下,收到消息的人 (好比 Bob) 没办法向法官证实发信人 (好比 Alice) 是真正发消息的那我的。这是由于 Alice 和 Bob 用相同的密钥来通信。或许 Alice 真的发送了原始消息,但 Bob 篡改了它,抑或 Alice 在撒谎。裁判没办法判断究竟是哪种状况。
然而在使用非对称密钥时,只有持私钥的那我的才能够对消息签名。全世界任何人均可以读到消息的内容,毕竟公钥是公开的。所以会出现这样的状况: 当 Alice 须要从 Bob 那边买东西时,她会用 Bob 的公钥来加密交易,并使用她本身的私钥来签名。而后当 Bob 收到交易信息后,能够用 Alice 的公钥来肯定是否是真的用 Alice 的私钥签的名,随后用他本身的私钥来解密消息。因而可知,签名就被用来提供不能否认性了。MAC 和签名本质上是同样的,不过前者是对称加密的概念,然后者属于非对称加密。
如今咱们来回顾一下。密码学被应用于加密和认证消息,而且提供不能否认性。当使用了正确的技术,消息的真实性和加密性两方面都难以被破解——它们都依赖较为复杂的数学手段,好比整数分解、离散对数和椭圆曲线算法,这些方法随后被应用于有限域问题中。须要指出的是,经过数学分析来得到加密密钥可能会很困难,可是仍有其余方法能够攻入安全系统,好比社会工程学,也就是人可能被诱导泄密。此外,咱们没有聊到密钥生成和认证的过程,由于咱们已经说得很明确了: 做为一门工程学科,密码学会根据时代的发展而不断演进,并试图保持超前攻击者。
与加密和身份认证不一样,不能否认性会更难对付一点,由于用户身份的验证能够为攻击者再添一层难度。
到目前咱们已经了解到密码学就是在研究安全等级: 对于一个攻击者来讲,扰乱通信的代价 (时间、金钱和体力) 有多么高。尽管如此,仍然存在一个主要问题: 仅凭消息发自我所持有的设备且由个人私钥签名,并不能说明是我本人发送的消息。病毒或是未经受权的用户也有可能发送了该消息。因为这些以及相似的缘由,尽管数字签名已经被归入国际法律体系中,好比 ESIGN,许多跨国商贸机构仍然没有信任它,由于在没法证实用户在场的状况下很难保证不能否认性,而举证责任由商家承担。
为了加强商家对不能否认性的信心,业界引入了 双重要素验证 (2FA)。由于网络罪犯经常会破解那些仅受用户名和密码保护的在线帐号,2FA 引出了让自称是合法用户的代理提供多一种信息的概念。这里所说的多一种信息,一般指的是如下三类中的一种: 某件您知道的事、某样您拥有的事物,或是您是谁。2FA 的目标是要给商家信心去相信,用户本人的确在进行交易。两种常见的 2FA 形式是电子钥匙链和一般由短信发送的验证码。使用电子钥匙链或类似的硬件令牌都有容易丢失或被盗的问题。而当遗失或被窃的设备就是接收短信或者推送通知的设备时,用短信验证码做 2FA 也就毫无抵御能力了。所以,现在 2FA 最早进的形式就只剩您身体的一部分。生物特征身份验证就是这种加强 2FA 的例子。
在您的安全策略实现中用生物识别特征验证是否为用户本人,可让您的应用更安全,而且不能否认性成为了您的商业模式中的一个可靠特性。对于医疗保健或是酒店服务业应用来讲,这可以确保更真实的用户登记或是取消预定状况。对于电子商务和银行应用,这使得您的客户服务团队花费更少的时间来处理顾客的小孩意外产生的购买行为和退款,从而有更多的时间以更多使人满意的方式使顾客开心。
使生物特征认证在您的安全系统中成为阻拦攻击者的额外障碍的根本缘由在于: 虽然生物识别和密码学手段是相互彻底独立的措施,但它们都使得攻击者难以攻破。所以,二者结合就可让攻击者更难以得逞。
举个例子,在 Android 当中,生物特征识别像是一条单行道。用户的生物特征信息永远不会离开设备,并且毫不会与应用共享。当用户决定把本身的生物特征信息录入 Android 设备时,他们必需要经过系统的设置应用。假若用户要使用指纹或是人脸识别,那么他们须要把手指放在传感器上,传感器会直接把指纹图像发送到 Android 设备的受限区域内,这个区域被称为可信执行区域 (TEE)。随后,当您的应用须要经过生物特征验证用户本人在操做时,Android 框架和运行于 TEE 中的生物识别系统会替您的应用处理整个 "用户是否在场" 的验证过程。因为 Android 框架让冒充设备主人的生物特征很是困难,您能够给这个用户本人验证充分的信心。
您能够经过阅读咱们的文章《结合使用 BiometricPrompt 和 CryptoObject》,更深刻了解在 Android 系统上生物特征验证是怎样用不能否认性来加强您应用的安全的。
您在本篇文章中了解到了:
咱们还撰写了许多文章,它们涉及工程最佳实践、设计指南以及将生物特征验证集成到您应用中的技巧:
若是您想要了解怎样在您的应用中实现生物特征验证,请阅读系列文章:
若是您的应用中有使用了 FingerprintManager 的旧逻辑,咱们建议您用 BiometricPrompt 取代它。
祝您编程愉快!