我正在使用 keybase.io API - 试图从 javascript 驱动它。登录是一个两步过程。第二步在 https://keybase.io/docs/api/1.0/call/login中有详细说明。
我被困在以下问题上;
服务器和客户端共享这个秘密,为了让客户端成功登录用户,它必须向服务器证明知道这个秘密。为了防止重放攻击,它本身不发送秘密。相反,它将 pwh 视为 MAC 密钥,并对上一步中检索到的临时 login_session 进行 MAC 处理:
hmac_pwh = HMAC-SHA512(pwh, base64decode(login_session))
两个输入都是二进制格式;pwh 密钥是从上面的 scrypt 以二进制格式输出的,login_session 经过 base64 解码,然后以二进制形式输入 HMAC。
我正在使用 CryptoJS 库,它提供了以下实现示例
var hash = CryptoJS.HmacSHA256('Message','Secret Passphrase');
我有几个问题;
作为术语,“MAC 密钥”是否等于“秘密密码”,因此 CryptoJS 函数参数的顺序与 Keybase 上给出的代码示例相反?
CryptoJS 示例具有纯 ascii 输入,而 Keybase 上的指令是提供二进制输入。当我尝试为它提供一个 uint8array 参数(这是我在使用 keybase API 的上一步中得到的)时,它如下所示;
TypeError: g.clamp is not a function
e,m=4*h; g.sigBytes>m&&(g=f.finalize(g)); g.clamp(); for(var r=this._oKey=g.clone()