说起密码 ,苹果你会想起什么 ?微软
密码太多,记不住?终于
图省事所有网站用同一个密码,一个泄露了,决定手忙脚乱地去改密码?干掉
网站被脱库 ,数据库信息泄露 ,密码密码丢失?苹果
这一切都的根本原因就是 :服务器保存了我们的密码(不管是明文的还是Hash过的) 。
我们需要把自己记忆的微软密码发给服务器做验证,这就给了攻击者可乘之机。源码库终于

那能不能别保存密码了,决定换个方式,干掉让服务器保存我们的密码指纹、虹膜等信息,苹果行不行?微软
万万不可,这样虽然不用记忆各种密码了,终于但攻击者一旦获得这些生物信息 ,那就可以假冒我们,真是可以为所欲为了。
并且本质上它和保存密码是一样的,都是“和服务器共享了一个秘密”。源码下载
那就别和服务器共享秘密了吧 !可是如果不共享 ,服务器怎么知道“你就是你”呢?服务器无法做身份验证(Authentication)了 !
这个问题早在几十年前就被迪菲和赫尔曼考虑过了 ,他们提出了非对称的密钥算法。
这种算法中每个人可以持有一对密钥:public key (公钥)和 private key (私钥) 。


只不过,迪菲和赫尔曼并没有找到一个合适的算法来生成公钥和私钥 , 一年后 ,麻省理工学院的三个教授基于大数的因数分解提出了RSA算法 ,高防服务器才解决了这个问题 。
利用非对称这种漂亮的性质,我们为自己的账号生成一对儿公钥和私钥 。
私钥自己保存,公钥发给服务器保存 ,这样就不用和它共享秘密了。

登录的时候 ,服务器给我们发一段随机消息,我们对它做签名(即对消息做Hash ,然后用本地保存的私钥加密),把签名发给服务器,服务器用对应的模板下载公钥来验证签名,如果签名没问题 ,就证明了这的确是一次合法的登录。
私钥非常重要,不能让任何人知道,不能发给任何系统,最好是保存在本地的一个硬件中 ,通过指纹 、面部识别 、声音、PIN等方式来访问。建站模板

这里引入了一个新的抽象层 ,认证器 ,让它和服务器打交道,我们只是用指纹等手段授权对私钥的访问。
计算机的任何问题都可以引入一个抽象层来解决 ,真是至理名言。
用这种方式 ,登录将会变成这样 :

1.输入用户名
2.点击登录
3.生物识别(指纹等)
4.登录成功
即使网站被脱库,攻击者拿到了公钥 ,也没法冒充你干坏事,因为公钥本来就是免费模板公开的 。
他想获得私钥的途径就是拿到认证器(比如保存在手机中),但是想使用认证器还需要你的指纹等生物信息,这对于茫茫互联网上两个未曾谋面的人来说太难了 。
说到这里,不由地再感慨一下,提出和实现非对称密钥的前辈们实在是太伟大了。
这种认证方式不是我想出来的,是一个叫做FIDO(Fast IDentity Online)联盟提出想法,并且制定了一系列FIDO协议 。
FIDO概念简单 ,想真正实现是很难的 。
我们用浏览器登录网站的时候 ,网站系统得改造,支持FIDO协议。
浏览器也得支持FIDO协议,可以提示用户用FIDO的方式注册或者登录。
浏览器还需要和认证器进行交互,用户提供生物信息授权访问认证器,这就得需要硬件和操作系统出马了。
如果笔记本和台式机没有指纹识别等设备,还得考虑和手机的联动(例如让手机扫个二维码,然后使用手机端认证器。)
这涉及到多方利益 ,是个生态系统,不是一家公司能搞定的,所以FIDO是个联盟,包含了全世界的IT大佬。

在这些IT大佬中,有三位举足轻重:
Google : Android + Chrome浏览器Apple