这两天在探索 bitwarden api,自己实现客户端的时候遇到了一个奇怪的问题
服务端用的是 vaultwarden (也就是以前的 bitwarden_rs ),用了 aes-256-cbc-hmac-sha-256 做字段加密,登录的时候要在本地根据用户名和密码以及服务器给的参数生成 prelogin key ( aes ),用这个 prelogin key 登录之后会给到一个 encryption key ( aes ) 用于字段解密,这个 encryption key 可以通过 hkdf 衍生出对加密字段签名时候用的 hmac key 。
用衍生出来的 hmac key 对原来包含 encryption key 的消息进行验证是可以通过的,用 encryption key 解出来的数据也是对的,但是用这个衍生出来的 hmac key 怎么都没办法验证通过消息的 mac:
https://github.com/arhat-dev/credentialfs/blob/97e36b446340e4907d2750361272a63c7b44ed81/pkg/pm/bitwarden/crypto.go#L56有没有了解 bitwarden 数据解密过程的帮忙指点一下我哪里出问题了,一直找不到什么头绪(甚至已经开始怀疑在 node/rust 中 hmac 对 cbc padding 部分签名的处理和 golang 不对应了)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/780988
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.