V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rv54ntjwfm3ug8
V2EX  ›  信息安全

Windows 凭据管理器是如何做到利用 FIDO / U2F 来加密数据的?

  •  
  •   rv54ntjwfm3ug8 · 2022-03-29 04:34:23 +08:00 · 2072 次点击
    这是一个创建于 978 天前的主题,其中的信息可能已经有所发展或是发生改变。
    手上的 YubiKey Bio FIDO (只有 FIDO / U2F 功能,只能用于鉴权,不能加解密)竟然可以作为智能卡通过 Windows Hello 解密 Windows 凭据管理器。而如果在 Ubuntu 中使用 `pam_u2f.so` 登录,打开浏览器则提示必须使用密码解锁 keyring 。这是不是说明 Windows 的凭据管理器根本没有加密存储数据?

    (半夜睡不着,半梦半醒发的帖,可能表达的不是很清楚)
    9 条回复    2022-03-29 15:59:08 +08:00
    dingwen07
        1
    dingwen07  
       2022-03-29 04:49:25 +08:00 via iPhone
    你确定是作为“智能卡”? Bio FIDO 没有这个功能啊
    如果你说的是 Azure AD 的 FIDO 登录,考虑到在云端更改密码之后只要本地联网就可以正常登录并且解锁凭据,应该是用于解密凭据存储的密钥是由 AD 域管理的。
    baobao1270
        2
    baobao1270  
       2022-03-29 05:12:53 +08:00
    Windows 凭据管理器可以脱离 YubiKey 运行。其本身是否加密,与 Windows Hello 、YubiKey 无关。如果我没记错,在没有其他保护的情况下是使用 Windows 账户进行加密的——意味着只要你登录了 Windows 且 Windows 密码被人知道,那么凭据管理器就不安全了。

    FIDO/U2F 本质是非对称加密,私钥始终保存在 YubiKey 里。私钥的安全性并不靠 YubiKey PIN 保证。是否需要输入密码,只是一个逻辑判断,取决于请求认证的一方的代码实现。

    在 WebAuthn 协议中,将 publicKey.userVerification 设置为 "discouraged" 即可禁止在进行 FIDO/U2F 验证时输入密码;设置为 "required" 即可强制在进行 FIDO/U2F 验证时输入密码。也就是说,网站可以通过 JavaScript 控制验证时是否需要输入 PIN 。Cloudflare 、Microsoft 官网使用的是前者,而 Namecheap 、Google 使用的是后者。这意味着是否输入 PIN 与私钥是否安全无关。
    gollwang
        3
    gollwang  
       2022-03-29 09:30:21 +08:00
    @baobao1270 UV 和 UP ,哈哈
    rv54ntjwfm3ug8
        4
    rv54ntjwfm3ug8  
    OP
       2022-03-29 09:54:01 +08:00
    @dingwen07 #1 是安全密钥( Security Key ),我打成智能卡了
    @baobao1270 #2 仅支持 FIDO 的 YubiKey 也可以通过 Windows Hello 来登录 Windows ,是否说明了 Windows 凭据管理器没有加密?
    baobao1270
        5
    baobao1270  
       2022-03-29 11:50:56 +08:00
    @theklf4 我已经说了“Windows 凭据管理器是否加密与 YubiKey 无关。
    Windows 凭据管理器的加密是依靠 Windows 账户完成的。不管是输入 Windows 密码,还是使用 YubiKey ,本质上都是解密账户、然后用 Windows 账户本身的证书去解密凭据管理器。这个与 FIDO/U2F 无关。
    qbqbqbqb
        6
    qbqbqbqb  
       2022-03-29 14:58:40 +08:00   ❤️ 1
    @theklf4 Windows 凭据管理器是否加密的情况是比较复杂的。
    1 ) 如果 Windows 账户是纯密码登录的话那就是有正常的加密,是安全的。
    2 ) Win8 的“图片密码”是不安全的,加密 key 明文保存在注册表里。
    3 ) 如果启用了 Windows hello (包括 PIN ,指纹,人脸等),加密会由一个叫 Next Generation Cryptography (简称 NGC 或者 CNG )的组件负责,这个安全性要看电脑是否有 TPM ,有 TPM 时会用 TPM 生成和保护相应的加密 key ,没 TPM 就是明文保存了。

    参考资料: https://www.insecurity.be/blog/2020/12/24/dpapi-in-depth-with-tooling-standalone-dpapi/
    qbqbqbqb
        7
    qbqbqbqb  
       2022-03-29 15:09:12 +08:00
    另外 FIDO2 也不是完全不能用来加解密。最简单的方法就是可以用 FIDO2 设备签名一段特定的明文数据来派生出一个加密密钥(这样如果你不持有相应的 FIDO2 设备就不能签出同样的签名,从而就不能得到密钥)。其实就是 HMAC 的方案。

    用这种方法的话,只要 FIDO2 设备的芯片是安全的不会泄露内部签名私钥,同时加密软件也不把派生出来的密钥写入硬盘,就和普通的纯软件纯密码对称加密一样安全了。
    qbqbqbqb
        8
    qbqbqbqb  
       2022-03-29 15:32:37 +08:00
    @qbqbqbqb 更正一下,“就是 HMAC 的方案”不准确,HMAC 和非对称签名是两种不同的技术。
    我这里想说的是,这种方案类似于基于 HMAC 的密钥派生方案。
    qbqbqbqb
        9
    qbqbqbqb  
       2022-03-29 15:59:08 +08:00
    @qbqbqbqb 大意了,刚才查了一下 FIDO 资料,看上去好像 FIDO 为了防止可能的重放攻击强制签名里加计数器,每次签名都是不一样的。那就确实不能用来加密。请无视#7 和#8 的内容吧...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2287 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:46 · PVG 09:46 · LAX 17:46 · JFK 20:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.