请教下 yubikey 原理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Chenhe
V2EX    YubiKey

请教下 yubikey 原理

  •  
  •   Chenhe 2022-06-20 11:45:25 +08:00 4611 次点击
    这是一个创建于 1273 天前的主题,其中的信息可能已经有所发展或是发生改变。

    yubikey 是一个硬件密钥。这里只讨论它的 PGP 智能卡功能。

    目前来看,yubikey 是 write-only 的,即:私钥一旦导入,就无法导出。那么问题来了,它怎么实现加密(签名)的?

    1. 如果用了某种协议读取了里面的密钥。那是不是可以用这种协议导出密钥?
    2. 如果主机压根无法取得密钥,那谁执行的加密?难道是 yubikey 自己算的?
    3. 还是可以协商出一个临时密钥性质的东西,而这个临时密钥加密后,公钥也可以解密?(在的 RSA 认知中,好像不能这样吧)
    12 条回复    2022-06-21 14:25:54 +08:00
    tavimori
        1
    tavimori  
       2022-06-20 11:51:24 +08:00   2
    的确是 yubikey 自己算的。
    实际上现代的大部分包括银行卡、公交卡在内的智能卡都是自己计算加密的。
    likelylee
        2
    likelylee  
       2022-06-20 11:59:26 +08:00   3
    这玩意不用 yubikey ,所有的 U 盾、智能卡都是这么干的啊。PC 端对数据做 hash ,把 hash 结果送给 yubikey ,然后 yubikey 内部的主控芯片调用私钥对 hash 结果做签名,然后吐出来签名结果就完了。有些 key 甚至 hash 都是自己内部执行,外部只需要把数据原样过去就好了。当然在 PC 端和 key 端通信前会有建联和认证的过程,可以查看 iso7816 ,也可以看各家的 cos 指令,但是大概其都没太大的差别。
    ysc3839
        3
    ysc3839  
       2022-06-20 12:01:42 +08:00 via Android   2
    卡自己算的,“智能卡”都是这样的,包括但不限于 SIM 、银行卡,卡本身就有个 CPU ,运算都在卡上的 CPU 进行。
    xiri
        4
    xiri  
       2022-06-20 12:10:26 +08:00 via Android   1
    就是你说的第 2 种,yubikey 自己算的,应用从 yubikey 拿到的直接是算完的结果
    Chenhe
        5
    Chenhe  
    OP
       2022-06-20 12:13:47 +08:00
    @tavimori 那如果加密一个大文件,岂不是很慢
    des
        6
    des  
       2022-06-20 12:18:28 +08:00 via iPhone
    @Chenhe 大文件加密的话,yubikey 只需要生成一个“密码”就好了
    xiri
        7
    xiri  
       2022-06-20 12:48:06 +08:00 via Android
    @Chenhe 大文件加密不会完全用非对称密钥去处理的,效率太低了,即使是在 PC 上完成计算也是一样。

    参考 PGP/GPG 的做法,每次加密时随机生成一个对称加密密钥(具体的对称加密算法由客户端决定)用于实际的文件加密,再用固定的非对称密钥去加密该临时生成的对称密钥,最后将对称加密后的文件数据和非对称加密后的对称密钥数据以及使用的对称加密算法等打包在一起作为加密的结果输出。
    解密时先用非对称密钥解密得到一个对称加密的密钥,再用该密钥去解密实际的文件数据。

    另外包括 HTTPS 等其实也是这么做的,非对称密钥只用来加密协商一个对称密钥,而不是用于实际的通信数据加密
    imn1
        8
    imn1  
       2022-06-20 13:03:15 +08:00   2
    智能卡、TOTP 、或者其他方式,下称为 key ,实际上就是传入一个值+“参数”,通过自己的算法,传出一个值,网站或者权限校验方,用相同算法和参数,计算并校验这个返回值就行,原理就这么简单
    一般不会传入大文件的,可以 hash 后再传入啊

    而上述参数就是这个 key 本身,每个硬件也好,TOTP 也好,只要区别每个 key 本身不同,就能做到人人不同,就是用户 A 和用户 B 即使买到同一款同一批次 yubikey ,参数也是不同的
    所以即使同款 yubikey 算法相同,用户 B 也必须拿到用户 A 的 yubikey 实体,才能用 A 的参数算出用户 A 的密码

    例如某批次的 yubikey 算法为 相加,用户 A 买到的出厂参数是 1 ,用户 B 是 2
    那么网站发出 123 这个输入值,用户 A 的 yubikey 输出 124 ,用户 B 输出 125
    Chenhe
        9
    Chenhe  
    OP
       2022-06-20 14:58:50 +08:00
    @xiri 理解了感谢!我也觉得非对称算法只用来加密对称密钥比较好,还想着自己实现一边。看来 GPG 挺智能的~
    vfs
        10
    vfs  
       2022-06-20 16:00:23 +08:00
    test
    vfs
        11
    vfs  
       2022-06-20 16:03:54 +08:00
    1. 这里常用的协议是 pkcs#11. 这套规范中提供了如何操作密钥的 api ,然后和 pkcs#11 兼容的硬件需要实现这样的类库。但是这里的密钥是无法导出的,如果支持导出,那么如果保证安全性呢。
    2. yubikey 自身实现了加密解密,签名,验证签名的功能。 通过于 pkcs#11 兼容的类库暴露出来。(购买 yubikey 的时候应该会附带这个类库)
    3. 不太明白你这个问题什么意思
    julyclyde
        12
    julyclyde  
       2022-06-21 14:25:54 +08:00
    签名是对 hash 签的,不是对完整文件签的
    外面程序把 hash 算好送进卡里签名就行了
    关于     帮助文档   nbsp; 自助推广系统     博客     API     FAQ     Solana     2545 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:43 PVG 19:43 LAX 03:43 JFK 06:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86