首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安全登录过程

安全登录过程
EN

Cryptography用户
提问于 2017-08-01 03:09:20
回答 1查看 119关注 0票数 2

我正在考虑两个登录过程,都是通过HTTPS GET API:

程序A:

Reuqest:

https://host/login?id={identity}&time={client_timestamp}&nonce={ramdon_string}&sign={signature}

响应:

{"stat":0,“令牌”:"token_string"}

其中:

  • id:请求客户端的标识,它是公共的(打印在标签上的硬件标识)
  • 时间:客户端的unix时间戳,它必须与服务器时钟保持同步(允许的错误约为+/- 5分钟)。这是增加的,以防止重放攻击。
  • 标志:nonce+time+<shared-secret>的hmac-sha256 .not在服务器端保存一段时间,在这段时间内不允许重复使用相同的not。

程序B:

请求:

https://host/login?id={恒等}

响应:

{"stat":0,“令牌”:“加密和base64 64编码令牌”}

在这一计划中:

  • 服务器将生成一个令牌(如果id是有效的),使用<token><salt>密码用shared-secret加密。
  • 服务器将查找缓存,以防止再次加密相同的令牌.缓存将在一段时间内有效,以节省服务器CPU资源。
  • 客户端将使用shared-secret解密令牌,并使用第一个N字节作为令牌(令牌长度是预先定义的)。

我的问题是,考虑到信道是HTTPS,加密密钥是预先共享的,哪个过程被认为更安全,为什么?谢谢。

EN

回答 1

Cryptography用户

回答已采纳

发布于 2017-08-01 05:46:03

他们同样安全。HTTPS是针对大多数与MITM相关的攻击而设计的,包括重播攻击,因此您唯一需要确保的是您的客户端拥有预共享密钥。

对于第一种方法,它是由HMAC散列保证的。对于第二种方法,由于只有客户端才能解密令牌,所以确保了这一点。

但是,不建议将密钥可逆地存储在服务器上,因为您的服务器可能遭到黑客攻击。这可以通过使用安全密码哈希算法(bcrypt、PBKDF2等)将客户端密钥的哈希存储在服务器上来解决。

票数 2
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/50562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档