记忆密码总是一件痛苦的事情|通行密钥是如何取代密码的?( 二 )


非对称加密的这种唯一对应性 , 显然是非常适合用于登录认证的 。
记忆密码总是一件痛苦的事情|通行密钥是如何取代密码的?
文章图片
记忆密码总是一件痛苦的事情|通行密钥是如何取代密码的?】实现通行密钥最基本的原理
以WWDC中的例子进一步展开说明 , 在用户完成第一次登录以后 , 服务端和用户终端分别持有由用户终端生成的公钥和私钥 。 如果这时用户再需要登录 , 用户将用户名发送给服务器以后 , 服务器用用户名对应的公钥创建一个「口令(challenge)」发送给用户终端 , 放到上面的例子里就是邮件投递到了用户的传统信箱里;用户这时可以使用私钥解答该「口令」并将对应的「答案(solution)」再发送给服务端 , 放到上面的例子里就是用户取出了这份邮件并根据这份邮件给发信人返回了一个正确的信件 。 如此 , 服务端便能通过比对答案是否正确从而验证终端是否为公钥的主人了 。 当然 , 上述的通讯过程都是通过HTTPS加密的 。
所以这也是为什么通行密钥可以替代各种形式的验证码进行身份验证 。
关联阅读:浏览器上那把「小锁」是什么?随处可见的HTTPS怎样保护你的网络安全02服务端如何获得用户的公钥?
细心的同学可能会疑惑 , 上述过程中的假设是如何成立的?换句话说 , 服务端最初是如何获得公钥并与我们手里的私钥产生对应关系的?
目前 , 从WWDC的视频和Google开发者文档中的信息来看 , 我们需要先行通过传统的密码方式注册一个账号 , 然后再绑定通行密钥到该账号中 。
记忆密码总是一件痛苦的事情|通行密钥是如何取代密码的?
文章图片
使用密码初次登陆
在完成用密码的登录过程后 , 账户设置里面会有选项添加通行密钥 , 且通行密钥完全由用户终端生成、需要经过终端的生物认证 , 然后公钥上传到服务端 , 私钥保存在钥匙串里 。 这样就完成了用户名和通行密钥信息的绑定 。
这里打个不完全正确的比喻 , 和前面所说的一样公钥是传统邮箱的话 , 我们要向邮政公司提前登记「这个邮箱属于你」 , 提前登记的过程就是使用传统密码注册账户的过程 。
▍通行密钥还有什么优点?
作为一种用于用户身份认证的替代方案 , 通行密钥最直接的应用场景显然就是跨设备登录了 。
记忆密码总是一件痛苦的事情|通行密钥是如何取代密码的?
文章图片
微信桌面版
上图就是很贴近生活的一个例子 , 在这类场景中 , 我们以往一般需要通过短信验证码或两步认证来确认登录者身份 , 国内比较常见的例子就是:微信登录电脑端时 , 需要通过已登录的手机进行扫码来完成身份验证 。
记忆密码总是一件痛苦的事情|通行密钥是如何取代密码的?
文章图片
通过手机扫码验证
而在通行密钥的应用场景中 , 当用户打算在一个陌生电脑上临时登录自己的账号的时候 , 也是可以通过手机扫码来安全地授权完成认证登录的 。
同样是扫码行为 , 通行密钥不同的地方在于它可以脱离对具体服务端、客户端的依赖 , 变成一种纯粹的身份认证工具 。 因为它本质上是FIDO对通行密钥的扩展——客户端到认证器协议规范(ClienttoAuthenticatorProtocol , CTAP) , 也就是外部认证器通过中继网络(RelayNetwork)向用户的互联网接入设备局部传递认证证书——我们需要做的 , 就是通过设备上的生物信息验证机制将通行密钥认证结果传递给其他设备 。
记忆密码总是一件痛苦的事情|通行密钥是如何取代密码的?