我正在考虑两个登录过程,都是通过HTTPS GET API:
程序A:
Reuqest:
https://host/login?id={identity}&time={client_timestamp}&nonce={ramdon_string}&sign={signature}
响应:
{"stat":0,“令牌”:"token_string"}
其中:
nonce+time+<shared-secret>的hmac-sha256 .not在服务器端保存一段时间,在这段时间内不允许重复使用相同的not。程序B:
请求:
响应:
{"stat":0,“令牌”:“加密和base64 64编码令牌”}
在这一计划中:
<token><salt>密码用shared-secret加密。shared-secret解密令牌,并使用第一个N字节作为令牌(令牌长度是预先定义的)。我的问题是,考虑到信道是HTTPS,加密密钥是预先共享的,哪个过程被认为更安全,为什么?谢谢。
发布于 2017-08-01 05:46:03
他们同样安全。HTTPS是针对大多数与MITM相关的攻击而设计的,包括重播攻击,因此您唯一需要确保的是您的客户端拥有预共享密钥。
对于第一种方法,它是由HMAC散列保证的。对于第二种方法,由于只有客户端才能解密令牌,所以确保了这一点。
但是,不建议将密钥可逆地存储在服务器上,因为您的服务器可能遭到黑客攻击。这可以通过使用安全密码哈希算法(bcrypt、PBKDF2等)将客户端密钥的哈希存储在服务器上来解决。
https://crypto.stackexchange.com/questions/50562
复制相似问题