2.3 互联网身份技术概述
注册
当注册一个新的身份锚时,用户的浏览器首先生成一个新的会话密钥对。 一旦用户激活他们的安全设备,它就会生成一个新的密钥对,作为这个身份锚的主密钥对。 然后安全设备签署从主公钥 master_pk
到会话公钥session_pk
的委托,以便浏览器可以使用委托人【principal】 SHA224(master_pk) · 0x02
下的委托签名来签署 session_pk
下的注册入口消息。
请注意,对应于 master_pk
的密钥永远不会离开安全设备,而对应于 session_pk
的密钥保存在浏览器存储中,其中同源策略屏蔽它不被除互联网身份容器之外的其他容器访问。互联网身份容器创建一个新的互联网身份锚并将主体链接到身份锚。 当用户将附加设备添加到锚点时,互联网身份容器将从新设备的主公钥派生的主体【principal】添加到锚点。
此身份锚的所有后续操作都必须在与该锚关联的主体【principal】之一下进行身份验证。 如果互联网身份容器源的浏览器内存包含一个具有有效委托的用户浏览器,则用户的浏览器将使用现有的会话密钥对,或者通过重复前面的过程创建一个新的会话密钥对。 请注意,互联网身份不会使用本地存储互联网身份——这就是为什么用户总是必须使用生物识别/点击 Yubikey。 一旦用户关闭选项卡,委托就消失了。
身份验证
单个页面加载可能涉及多个签名请求和响应。 为避免用户必须为每条单独的消息激活其安全令牌,用户的浏览器将为每个依赖容器生成会话密钥对,并拥有由 II 容器认证的会话公钥。
更具体地说,当用户访问依赖容器并单击以使用互联网身份登录时,用户的浏览器会生成一个新的会话密钥对并将其存储在依赖容器的浏览器存储中; 我们将公钥称为 rel_session_pk
。 然后将浏览器重定向到互联网身份容器,通过将 rel_session_pk
编码为 URL 的一部分来传递它。
浏览器使用上述身份验证过程签署入口消息以登录到互联网身份容器,这意味着,如果存在互联网身份容器的有效会话密钥,则重新使用它,否则创建新的。
当用户单击同意对依赖容器进行身份验证时,浏览器会向互联网身份容器创建第二条入口消息(也使用会话公钥签名),其中包含依赖容器身份和依赖会话公钥 rel_session_pk
互联网身份容器为这个用户锚和这个依赖容器计算一个唯一的自我验证主体【principal】作为
SHA224(|id_provider| · id_provider · seed) · 02
其中seed是根据互联网身份容器持有的秘密盐【secret salt】、用户的身份锚和依赖容器计算的
SHA256(|salt| · salt · |anchor| · anchor · |rel_canister_id| · rel_canister_id)
其中anchor是用户的身份锚点, rel_canister_id
是依赖容器的主体,seed是互联网身份容器持有的秘密种子。
在初始化互联网身份容器时随机选择盐【salt】,并以互联网身份容器状态存储。 这为试图通过链接属于同一身份锚的主体来跟踪用户的容器提供了一些隐私。 但是,隐私保证不适用于知道助记词的敌手,例如参与互联网身份容器子网的节点提供者。 请注意,这只会影响隐私,不会影响安全性:知道助记词不会使敌手冒充任何用户。
在其响应中,互联网身份容器包括随机数以及将依赖容器 ID 链接到 rel_session_pk
和到期时间的认证变量(也称为容器签名)。 然后用户的浏览器被重定向到依赖容器,它在 rel_session_pk
下签署入口消息。
用户体验
互联网身份 不使用密码和用户名登录。互联网身份利用 Web 身份验证 (WebAuthn) API 来提供安全的加密身份验证。 这意味着用户通过“他们拥有的东西”(例如电话、yubikey 等)而不是“他们知道的东西”(例如密码)进行身份验证。
从用户的角度来看,用户将使用以下方法进行身份验证:
- 电脑
- Yubikey 或 Ledger 硬件钱包(带有带 USB 端口的计算机)
- 指纹或面部识别(使用具有 Touch ID 或 Windows Hello 等电子指纹识别功能的计算机)
- 智能手机
- 面容 ID(适用于具有面部识别系统的智能手机)
- 指纹(适用于具有 Touch ID 等电子指纹识别功能的智能手机)
关键概念
锚
锚是附加到用户身份的数字。 这个号码是系统自动生成的,每个身份只有一个。
例如: 193431
设备
用户可以将许多设备添加到同一个身份锚。 一个常见的例子是用户可以将他们的智能手机和台式计算机添加到身份锚点。 建议添加多个设备,以防用户无法访问设备。 设备名称由用户选择,每个身份可以有多个。
例如:
"Macbook Pro Alice"
"iPhone Alice"
恢复机制
除了添加多个设备和使用安全密钥外,用户还可以在提示符下通过单击将恢复机制添加到身份锚来设置帐户恢复。
助记词
用户可以选择此选项来生成可用于恢复身份锚的加密安全助记词。 重要的是,用户确保助记词存储在安全的地方并且只有用户知道,因为任何知道助记词的人都将能够完全控制此身份锚。 请注意,用户助记词中的第一个字符串是身份锚。 这个数字开始恢复过程。
用户必须点击复制按钮然后继续,否则助记词将不会被注册。
安全密钥
如果用户无法访问其授权设备,则可以使用专用安全密钥来恢复身份锚。 此密钥必须不同于用户使用给定身份锚主动用于对互联网身份进行身份验证的密钥。 此密钥应保存在安全的地方,并确保它仅供用户使用。 如上所述,拥有此安全密钥的任何人都可以完全控制用户的身份锚。 用户需要知道身份锚才能开始恢复。
安全
互联网身份是在 NNS 网络上运行的容器,因此开发人员可以验证它是否正在运行它声称运行的代码。 要验证代码,请参阅验证互联网身份代码:演练。
支持
要查看当前对 WebAuthn 的支持,请参阅 WebAuthn 支持。
另请参阅
- 什么是互联网身份快速了解什么是互联网身份。
- Dapp 用户的互联网身份,以了解设置锚点和使用互联网身份的演练。
- 什么是互联网身份
- 互联网身份:用户名和密码的终结