问题标签 [fido-u2f]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
fido-u2f - 为什么 U2F 登录是一个两步协议?
理论上,使用注册令牌登录可以在一个步骤中完成......
- 服务器使用登录表单发送挑战
- 用户使用用户名、密码和签名的质询进行响应。
然而,FIDO 协议增加了一个额外的步骤......
- 用户提交用户名/密码
- 服务器向用户发送挑战
- 客户提交签名挑战
附加步骤的安全原理是什么?
authentication - U2F FIDO - 应用和挑战参数
当用户想要注册他的设备时,依赖方会提供一些参数,这些参数是:
- 一个挑战,
- 应用程序ID,
- 协议版本
然后,用户通过触摸发送这些信息的设备上的按钮来执行“用户存在测试”:
dictionary RegisterResponse {
DOMString registrationData;
DOMString clientData;
};
依赖方对这些信息做他必须做的事情,这个过程就完成了!
但我不明白以下部分。基于 U2F 协议规范:
注册请求消息 - U2F_REGISTER 此消息用于启动 U2F 令牌注册。FIDO Client首先联系依赖方获取challenge,然后构造注册请求消息。注册请求消息有两部分: 挑战参数是客户端数据的 SHA-256 哈希,FIDO 客户端准备的字符串化 JSON 数据结构。除其他外,客户端数据包含来自依赖方的质询(因此是参数的名称)。应用程序参数 [32 字节]。application 参数是请求注册的应用程序的应用程序标识的 SHA-256 哈希。(有关详细信息,请参阅参考书目中的 [FIDOAppIDAndFacets]。)
这部分在哪一步运行?
先感谢您 !
challenge-response - FIDO U2F 密钥:Chrome 中的签名身份验证质询返回错误代码 4(适用于 FF)
我们正在尝试通过 Yubico FIDO U2F 安全密钥将身份验证添加到我们的管理网站。这在安装了 U2F 附加组件的 FireFox 中有效,但签署挑战(使用 javascript)登录时不断返回 {errorCode: 4}。
有谁知道为什么会发生这种情况或我如何调试出了什么问题?
提前致谢。
细节
我们的网站是用 Java 和 ZK 框架制作的。在服务器端,我们使用 java-u2flib-server 库。我们使用高级 api 函数 u2f.register 和 u2f.sign 使用 zul 文件中的 javascript 在客户端对请求进行签名。
登记
要注册密钥,用户首先输入名称和密码并提交。服务器创建 RegistrationData 并转到第二个页面。在那里,我们使用 javascript 函数 u2f.register。在回调中,我们将带有 DeviceRegistration 的响应发送到服务器。
这适用于 FireFox 和 Chrome。
认证/登录
登录方式类似。提交第一页时,服务器向第二页提供 DeviceRegistration json 和质询。该页面使用 u2f.sign 并在回调中将 DeviceResponse 发送到服务器。
这在 Firefox 中有效,但在 Chrome 中,u2f.sign 不断返回 {errorCode: 4}。
根据文档,这意味着设备不知道接收到的 DeviceRegistration 但这似乎不太可能,因为相同的代码在 Firefox 中工作,我检查了它们是否从服务器接收到相同的 json。
错误代码 4 - DEVICE_INELIGIBLE -
呈现的设备不符合此请求的条件。对于注册请求,这可能意味着令牌已经注册,对于签名请求,这可能意味着令牌不知道所提供的密钥句柄。
wso2 - Wso2 身份服务器 5.3.0 和 fido 令牌
我正在使用 WSO2 IS 5.3。
我将它与 U2F 集成。
当我在身份验证中使用它时,它给了我一个空白页面(https://localhost:9443/authenticationendpoint/fido-auth.jsp)但是当我将它与以前的版本一起使用时它工作得很好!
上一个版本和 Fido 代币有什么问题?
为什么 fido 令牌只适用于 (google-chrome) 而不是 (Firefox) ?
cryptography - Erlang :crypto, oid 到 NamedCurve
当我解码证书时,我得到以下数据:
通过快速搜索,我知道 namedCurve 对应于:secp256r1
. 但是,我正在寻找可以为我进行翻译的现有功能。例如,我们可以使用函数找到有关 PublicKeyAlgorithm 的信息pkix_sign_types
。命名曲线是否有相应的功能?
digital-signature - U2F注册签名验证失败
使用我的 U2F 令牌之一,NIST P-256 ECDSA 签名验证在 U2F_REGISTER 响应上失败。
我正在根据此协议描述工作:https ://fidoalliance.org/specs/fido-u2f-v1.0-nfc-bt-amendment-20150514/fido-u2f-raw-message-formats.html
我计算00 (1 byte) + application (32 bytes) + challenge (32 bytes) + keyhandle (64 bytes this time) + user_public_key (1 + 32 + 32 bytes)
.
然后我打电话ecdsa.Verify(user_public_key, hash, r, s)
。
对于我拥有的其中一个 U2F 令牌,ecdsa.Verify 返回 true(好),但对于另一个令牌(参见上面的字节),它返回 false。在上面的例子中我做错了什么?
electron - Electron 中的 U2F 错误
file:///path/to/index.html
通过 Electron加载时,出现以下两个错误:
chrome-extension://kmendfapggjehodndflmmgagdbamhnfd/u2f-comms.html Failed to load resource: net::ERR_NOT_IMPLEMENTED
Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('chrome-extension://kmendfapggjehodndflmmgagdbamhnfd') does not match the recipient window's origin ('null').
我没有使用 U2F(可能是一些 npm 依赖项?),并且想知道如何禁用/删除它。无论如何,它不会影响我的应用程序。
android - 获取与 com.google.android.gms.fido.u2f.api 一起使用的 Android 应用程序的有效 facetID
我有两个关于 Android FIDO U2F API 中的 appID 的问题。
是否可以使用 facetID 直接识别我的应用程序,或者它是否需要是指向包含有效 facetID 的 JSON 的 HTTPS URL?我怀疑可能无法直接使用 facetID 作为 appID(尽管官方 FIDO 规范应该允许这样做)。
我的另一个问题是关于识别我的应用程序的 facetID。官方 FIDO 规范为 Android 应用定义了 facetID ,如下所示:
在 Android [ANDROID] 案例中,FacetID 必须是从 APK 签名证书 [APK-Signing] 的 Base64 编码 SHA-1 哈希派生的 URI:
当我查看 Google Samples 中的一个工作示例时,使用的 facetID 似乎包含其他内容。
有问题的 facetID(绝对不是 base64):
这是包含相关 facetID的JSON 。
如果 API 不期望 base64 编码的哈希,它期望什么格式(以及如何生成它)?
fido-u2f - 如何与现有的注册/登录功能保持 FIDO 兼容
我有具有注册和登录功能的现有网站。我想让这个过程 FIDO 符合 UAF / U2F 和后来的 FIDO2 的实现。不幸的是找不到一步一步的系列教程。我想用 PHP 来实现这个。
offline - 离线环境下的FIDO U2F
我想将 U2F 协议用于离线应用程序。这个应用程序没有连接到互联网,我想知道它是否可以在离线环境中使用 U2F,因为它需要一些来源。请注意 localhost 是允许的,并且可能可以用作来源,但我不确定这是否安全或不安全,以及它是否可能导致人们能够复制密钥。