FIDO 密匙登录

  • [1]介绍了一些基础密码知识,科普性较好,在此摘抄一下:

说起密码,你会想起什么?

密码太多,记不住?

图省事所有网站用同一个密码,一个泄露了,手忙脚乱地去改密码?

网站被脱库,数据库信息泄露,密码丢失?

这一切都的根本原因就是:服务器保存了我们的密码(不管是明文的还是Hash过的)。

我们需要把自己记忆的密码发给服务器做验证,这就给了攻击者可乘之机。

那能不能别保存密码了,换个方式,让服务器保存我们的指纹、虹膜等信息,行不行?

万万不可,这样虽然不用记忆各种密码了,但攻击者一旦获得这些生物信息,那就可以假冒我们,真是可以为所欲为了。

并且本质上它和保存密码是一样的,都是“和服务器共享了一个密钥”。

那就别和服务器共享秘密了吧!可是如果不共享,服务器怎么知道“你就是你”呢?服务器无法做身份验证(Authentication)了!

这个问题早在几十年前就被迪菲和赫尔曼(DH)考虑过了,他们提出了非对称的密钥算法

这种算法中每个人可以持有一对密钥:public key (公钥)和 private key (私钥)


作者画的漫画还是很有趣的~

只不过,迪菲和赫尔曼并没有找到一个合适的算法来生成公钥和私钥, 一年后,麻省理工学院的三个教授(Revist、Shamir、Adleman)基于大数的因数分解难题提出了RSA算法,才解决了这个问题。

利用非对称这种漂亮的性质,我们为自己的账号生成一对公钥和私钥。

私钥自己保存,公钥发给服务器保存,这样就不用和它共享秘密了。

登录的时候,服务器给我们发一段随机消息,我们对它做签名(即对消息做Hash ,然后用本地保存的私钥加密),把签名发给服务器,服务器用对应的公钥来验证签名,如果签名没问题,就证明了这的确是一次合法的登录。

私钥非常重要,不能让任何人知道,不能发给任何系统,最好是保存在本地的一个硬件中,通过指纹、面部识别、声音、PIN等方式来访问。

这里引入了一个新的抽象层—认证器(记录私钥等信息),让它和服务器打交道,我们只是用指纹等手段授权对私钥的访问。

计算机的任何问题都可以引入一个抽象层来解决,真是至理名言。

用这种方式,登录将会变成这样:

1.输入用户名

2.点击登录

3.生物识别(指纹等)

4.登录成功

FIDO概念简单,想真正实现是很难的。

1.我们用浏览器登录网站的时候,网站系统得改造,支持FIDO协议。

2.浏览器也得支持FIDO协议,可以提示用户用FIDO的方式注册或者登录。

3.浏览器还需要和认证器进行交互,用户提供生物信息授权访问认证器,这就得需要硬件和操作系统出马了。

4.如果笔记本和台式机没有指纹识别等设备,还得考虑和手机的联动(例如让手机扫个二维码,然后使用手机端认证器。)

这涉及到多方利益,是个生态系统,不是一家公司能搞定的,所以FIDO是个联盟,包含了全世界的IT大佬。

在这些IT大佬中,有三位举足轻重:

Google : Android + Chrome浏览器

Apple :iOS + Safari浏览器

微软: Windows + Edge浏览器

这三位几乎统治了操作系统和浏览器市场,没有它们的参与,FIDO是玩不起来的。

今年5月,Google和Apple和微软宣布加大力度,推进对FIDO通用无密码登录标准的支持,努力实现无缝、安全的无密码登录

1.允许用户在多个设备(甚至新设备)上自动访问FIDO登录凭证(私钥),而不需要重新注册户

2.在任何操作系统和浏览器上,当用户想用FIDO登录网站的时候,手机都可以用来做验证。例如,苹果手机可以帮助验证Edge浏览器上的FIDO登录。

如果能做到这两点,密码就真的被干掉了。

  • [2]给出了Google在这方面的工作:

Google 已为 Android 和 Chrome 提供密钥支持,密钥是密码和其他第二重身份验证的更加安全的替代方法,密钥不能重复使用,也不会在服务器遭入侵时泄露,还能保护用户免受网络钓鱼的攻击。

密钥遵循常见的用户体验模式并沿用现有的密码自动填充界面。对终端用户而言,密钥的使用方法类似于如今已保存的密码的使用方法,用户只需使用现有设备屏幕解锁方式 (例如指纹) 进行确认即可(授权)。用户手机和电脑上的密钥可通过云端备份和同步,以防止设备丢失时无法解锁。此外,用户还可以使用存储在手机中的密钥来登录附近其他设备上的应用和网站

例如:使用密钥在 Android 设备上登录网站

终端用户创建密钥只需要两个步骤: (1) 确认密钥帐号信息;(2) 出现提示时使用指纹、人脸识别或屏幕锁进行创建(创建认证器)。

登录也同样简单: (1) 用户选择他们想要登录的帐号;(2) 出现提示时使用指纹、人脸识别或屏幕锁完成登陆(授权访问认证器)。

例如:在 Android 设备上使用密钥登录附近电脑上的网站

手机上的密钥也可用于在附近的设备上进行登录,例如,Android 用户现在可以在 Mac 上使用 Safari 登录启用密钥的网站【相当于手机通过扫码授权认证】。同样地,Chrome 中的密钥支持意味着 Chrome 用户 (例如在 Windows 上) 可以使用存储在其 iOS 设备上的密钥执行相同的操作。

由于密钥是基于业界标准而构建的,因此它适用于不同的平台和浏览器 (包括 Windows、macOS 和 iOS 以及 ChromeOS) 且具有统一的用户体验。

使用:开发者可以注册 Google Play Services Beta 版并使用 Chrome Canary 版,立即体验密钥。

[3]中提到:2022年10月12日,谷歌宣布在 Android 和 Chrome 中正式推行密钥登录 “PassKey”,以逐步替代长期使用的密码登录 “PassWord”。

推出的密钥登录可以认为是 “生物密码” 和 “授权登录” 的结合。用户可以在 Android 手机上创建一个基于公钥(私钥吧?)加密的密钥凭据,创建密钥的时候需要对本人进行生物特征识别,比如 “指纹” 或者 “面部识别” 等

创建完毕后,这个密钥凭据可用于解锁(登录)所有在线帐户 —— 既可以解锁 Android 手机上的帐户,也可以解锁附近所有设备的帐户。是的,这个 FIDO 密匙登录功能由微软 / 苹果 / 谷歌联合出品,属于行业标准。因此它是跨平台的,包括 Windows、macOS 和 iOS 以及 ChromeOS。换而言之,你可以用 Android 手机的密钥凭据解锁上述所有系统的帐户和网站。

不过,现在这个密钥登录功能还不完善,只是一个重要的里程碑,实现了两个关键功能:

1.用户可以在 Android 设备上创建和使用密钥,密钥通过 Google 密码管理器 进行同步。

2.开发人员可以通过 WebAuthn API、Android 和其他支持的平台,使用 Chrome 在网站上为用户构建密钥支持。

密钥登录功能的下一个里程碑是原生的 Android 应用 API,原生 API 将为应用程序提供多种登录方式,用户可以选择密钥登录,或是使用已保存的密码登录。

期待下一个里程碑出现!

参考

1、苹果,微软,Google终于决定要干掉密码了!

2、即刻探索 | Android 和 Chrome 现已支持密钥

3、谷歌正式推出 “密钥登录”,逐步取代传统密码登录9

FIDO 密钥登录的更多相关文章

  1. 无密钥登录的自动脚本实现(ssh-copy-id、expect免交互输入脚本)

    感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正! 如有转载,请保留源作者博客信息. Better Me的博客:blog.csdn.net/tantexian 如需 ...

  2. 增强VPS SSH账号安全:改端口,禁用Root,密钥登录,Denyhosts防暴力攻击

    VPS SSH账号是我们日常管理VPS的主要登入方式,尤其是Root账号,对Linux系统安全至关重要.以前好多站长喜欢用Putty中文版,这实际是别人修改官方Putty汉化而来,这些软件被植入了后门 ...

  3. linux系统使用密钥登录设置

    使用密钥登录linux的操作步骤(使用putty): 1.用putty远程登录linux服务器,然后使用puttygen生成密钥,将生成的密钥保存,保存私钥将公钥复制保存到linux服务器的autho ...

  4. 多台计算机之间的ssh无密钥登录

    在很多分布式系统中,我们最常遇到的一个问题是,需要在服务器集群上保证多台机器之间的SSH无密钥登录.以Hadoop为例,为了方便,我们需要在master和slaves之间配置密钥登录,这样我们启动Ha ...

  5. ssh密钥登录及远程执行命令

    以192.168.1.104作为客户机 以192.168.1.103作为服务器 使用密钥登录 创建密钥对 在SSH客户机创建用户秘钥对 ssh-keygen -t rsa 之后全回车即可 将会在~/. ...

  6. ssh别名登录密钥登录

    在centos上使用别名和是用密钥登录: vim /root/.ssh/config  #输入下列内容 Host * User root   #以root登录 ServerAliveInterval ...

  7. windows下使用密钥登录Linux及xshell代理转发

    1.密钥登录原理 一般我们使用xshell访问远程主机(Linux主机)时,都是先请管理员给我们开一个账户,即为我们设置一个一个用户名和对应的密码,然后我们就可以使用下面的方式登录到远程主机了: 在这 ...

  8. ssh密钥登录

    一.生成密钥对(两种方式)并配置 方式1:使用ssh-keygen(1)生成并配置 (1)生成密钥对 [root@iZwz9catu2mrq92b07d1d0Z ~]# ssh-keygen -t r ...

  9. [CentOS] SSH 免密钥登录

    一.环境说明: 操作系统:CentOS-7-x86_64-Minimal-1611 虚拟机:VMware® Workstation 12 Pro:12.5.5 build-5234757 服务器:no ...

  10. linux系统ssh免密钥登录配置

    linux主机配置ssh免密钥登录,具体配置如下: 1.执行命令ssh-keygen -t rsa,生成公钥和私钥(具体步骤详见下图) 2.会在当前用户的家目录的.ssh/生成公钥和私钥, 3.执行s ...

随机推荐

  1. xtrabackup进行mysql数据库备份、还原

    xtrabackup简介 前面介绍mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的数据库而言,这个速度还是能接受的,但如果数据库非常大,那再使用mys ...

  2. Nginx 配置 浏览器显示真实接口地址

    server { listen 9780; server_name localhost; #charset koi8-r; access_log /var/log/nginx/host.access. ...

  3. 案例分享-导致MySQL崩溃的SQL语句

    背景 周一刚上班一个开发小哥火急火燎的过来找我,黑龙江某客户私有化环境的服务过一阵就报数据库连接失败,不知道是什么原因导致的,我以为是客户调整了网络,但是客户说并没有做任何调整,我使用ping测试也看 ...

  4. 使用NTP,该如何同步时间?一文详解!

    ​ 一.NTP通信概述 很多场景中,由于业务需要,模块需要保持正确的系统时钟,才能正常工作.但是模块上电后的初试时间戳是946713600(即2000/01/01,16:00:00),所以同步时钟成为 ...

  5. CommonsCollections7(基于ysoserial)

    环境准备 JDK1.8(8u421)我以本地的JDK8版本为准.commons-collections(3.x 4.x均可这里使用3.2版本) cc3.2: <dependency> &l ...

  6. Docker镜像管理之Harbor

    github: https://github.com/goharbor/harbor 官网:https://goharbor.io/docs/2.5.0/ [安装] 1. 查看是否达到安装条件 2.根 ...

  7. ThreeJs-04详解材质与纹理

    一.matcap材质 这个材质不会受到光照影响,但是如果图片本身有光就可以一直渲染这个图片本来的样子,用来将一个图片纹理渲染到物体上的材质 代码实现 加载模型后,开启纹理渲染,并把它的材质变为这个材质 ...

  8. 在window 使用 docker 安装redis 踩坑记

    1. 安装REDIS 在安装的时候,使用 docker pull redis 就可以了. 但是 实际上 发现镜像居然拉不下来. 修改了一下 docker 镜像. 配置如下: "registr ...

  9. 使用Tailwind CSS的几个小Tips

    前情 Tailwind CSS 是一个原子类 CSS 框架,它将基础的 CSS 全部拆分为原子级别.它的工作原理是扫描所有 HTML 文件.JavaScript 文件以及任何模板中的 CSS 类名,然 ...

  10. .NET 单文件执行程序拆解器 SingleFileExtractor

    .NET 单文件执行程序拆解器 SingleFileExtractor .NET 现在支持将程序打包为单文件格式,这方便了部署,问题是,我们不能直接看到程序中使用了哪些 DLL,更不能简单地通过查看文 ...