自制遥控机械臂
自适应iframe高度
Passkey开发指南
一文搞懂Passkey
教育年金险
快返年金险
养老年金险
增额终身寿险
终身寿险
定期寿险
Web3全栈开发指南
期权交易
套利原理
永续合约
混合保证金
反向合约原理
期货交易
算法稳定币
Uniswap入门
做市指南
ETF指南
流动性概述
现货交易
元宇宙落地指南
用FPGA写Hello World
兵马俑
骊山游记
JDK11新特性解读
挑战2016北京马拉松
秋游红叶岭
纯CSS气泡效果
Python yield使用浅析
快速排序算法
JSON入门指南
J2ME概念解析

一文搞懂Passkey

廖雪峰
资深软件开发工程师,业余马拉松选手。

苹果在2022年的WWDC大会上宣布了在iOS设备上可以使用一种名叫Passkey的无密码登录,苹果把它翻译成“通行密钥”,并随后又在macOS上支持它。谷歌和微软随后也宣布在Android和Windows系统上支持通行密钥。

那么,什么是通行密钥?它和传统的登录方式有何区别?

我们先回顾最原始的登录方式——密码登录:

┌──── Sign in ─────────────┐
│                          │
│    ┌────────────────┐    │
│    │bob@example.com │    │
│    └────────────────┘    │
│    ┌────────────────┐    │
│    │********        │    │
│    └────────────────┘    │
└──────────────────────────┘

密码登录,要求用户设置一个高强度的密码,因为强度低,容易被破解,但强度高,又记不住。很多网站要求注册时密码必须包含大小写字母、数字和特殊符号,纯属给用户添堵。

而用Passkey登录,则无需输入密码,只需要点一下“一键登录”,就可以直接完成登录。

这种无密码登录到底是什么原理,为什么这么神奇?

其实Passkey的核心技术非常简单粗暴,就是用非对称密钥通过签名完成认证:

┌─────────────────────┐           ┌──────────────────────┐
│       Client        │           │        Server        │
│  ┌───┬───────────┐  │ signature │  ┌─────┬──────────┐  │
│  │bob│private key│──┼───────────┼─▶│bob  │public key│  │
│  └───┴───────────┘  │           │  ├─────┼──────────┤  │
└─────────────────────┘           │  │alice│public key│  │
                                  │  └─────┴──────────┘  │
                                  └──────────────────────┘

使用Passkey登录时,网站存储了用户的公钥,而用户的私钥存放在本地设备(电脑或手机)中,通过给服务器发送私钥签名,服务器验证签名无误,即登录成功。

由于非对称加密是目前加密强度最高的加密技术,所以用Passkey登录,以目前计算机的算力,任何人都无法破解,可以说安全性是100%。

接下来我们看看如何使用Passkey登录网站。以下演示使用macOS系统和Safari浏览器。

使用Passkey分为两步:登记公钥和一键登录。

登记公钥就是在服务器上登记用户对应的公钥,这个步骤只需要做一次。然而服务器如何知道当前用户的身份呢?所以,登记公钥前,还是需要以传统方式登录网站。比如,我们用OAuth登录网站www.liaoxuefeng.com,然后在右上角选择用户 - 通行密钥 - 注册新的通行密钥,浏览器会弹出提示框询问是否存储Passkey到iCloud:

save-passkey

选择Continue,浏览器先在本地保存了私钥,然后把公钥发送给服务器,我们就可以看到当前用户绑定的公钥:

registered-passkey

至此,Passkey就可以使用了。

我们退出登录后,再准备重新登录,选择Passkey登录:

signin-with-passkey

点击Sign in with Passkey,浏览器弹出对话框,询问是否用已保存的Passkey登录网站:

ask-passkey

选择Continue,登录成功!

如果在iPhone和Mac上使用的是同一用户,由于iCloud会在多个设备中自动同步,所以我们在iPhone上使用系统浏览器时,也可以直接用Passkey登录:

iphone-passkey-signin

使用Passkey登录,就是这么简单!

优点

使用Passkey非常安全,不存在破解的可能。此外,本地存储Passkey时,还会同时关联网站域名,可以从根本上防止钓鱼攻击,因为一个Passkey对应一个网站,无法跨多个网站使用。

使用限制

Passkey就是用非对称密钥签名登录,那么私钥存储在哪呢?

私钥存储在操作系统内置的密钥管理器中,浏览器通过与操作系统的API交互完成签名,所以,操作系统和浏览器都要支持Passkey才行。Mac的系统浏览器Safari本身是苹果自己开发的,当然能直接集成macOS的Passkey功能。如果换成Chrome浏览器,当前版本还无法直接与macOS的Passkey交互,所以它会弹出一个二维码,可以用iPhone相机扫码登录,属于曲线救国路线,稍微麻烦点。但可以肯定,各浏览器迟早都会打通直接与操作系统的Passkey交互。

如何删除Passkey

可以从服务器上删除Passkey(实际是删除公钥),也可以从本地设备删除Passkey(实际是删除私钥),都可以让该Passkey失效。

从服务器上删除Passkey需要登录网站后,找到相关页面删除。从本地删除Passkey,可以打开Mac的系统设置 - 口令,在列出的网站上点击右键,选择删除。




Comments

Loading comments...