萌新不懂就问,rsa公钥+hash,hash做什么的。

发布于 2022-09-11 16:16:12 字数 338 浏览 9 评论 0

最近学习一下密码学,

发现B站登录的时候,滑动验证码会返回一个rsa的公钥+hash,
而且rsa公钥一直不变,估计是定期更新,

下面有图:
萌新不懂就问:
1:这个hash是做什么用的
2:假如用户输入账号密码的时候, 正好更新了公钥, 用户体验岂不是太差了。
3:用rsa前端密码公钥加密, 后端私钥解密拿到明文在做其他加密处理存库, 岂不是违背了密码只有上帝和自己知道的原则?不应该是前端不可逆加密后传给后端,后端在做处理嘛,(这里不探讨https)

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

£噩梦荏苒 2022-09-18 16:16:12

1.公钥定期更新?你看到它定期变了?不要想当然,你不要猜测它是定期更新就把他当事实来提问,你确实看到它定期变了再来问这一点
2.你去看google的登陆,直接是协议内传明文,难道违背了密码只有上帝和自己知道的原则?服务器拿了不代表服务器要存啊

漫漫岁月 2022-09-18 16:16:12
  1. hash 的用处要结合具体代码才知道到底拿来干嘛的,一般常见的是作为某个数据的摘要来校验数据完整性;
  2. 公钥为什么要更新?在密钥没泄露的情况下公钥就是用来公开的,谁都可以持有;
  3. 不可逆 那不叫加密,MD5 之类的摘要(hash)算法就是不可逆的,但是既然不可逆那怎么解密?

另外题主的 岂不是违背了密码只有上帝和自己知道的原则 这句话里面的 密码 指的是什么?


如果是说登录密码,那么:
注册时:

  1. 为用户分配一个盐值 salt
  2. 对明文密码进行处理 md5(pwd + salt) (举例,具体做法自由定义)
  3. salt 值和处理后的密码存入数据库

登录时:

  1. 用拿到的明文密码与数据库中该用户的盐值进行处理 md5(pwd + salt)
  2. 比对处理结果与数据库的密码(非明文)

对于你说的 CSDN 事件,经过上述流程后,脱裤得到的密码都是处理后的值而且因为是摘要算法所以很难通过 (pwd_md5 + salt) 逆推得到密码原文,同时 服务器不需要知道你明文密码是什么就可以知道你密码是否正确了

至于登录过程中明文密码的安全工作,不考虑 HTTPS 的话,可以裸奔、可以手动套一层 RSA 之类的东西,也可以改进上面的流程:
注册时:

  1. 为用户分配一个盐值 salt
  2. 页面提交表单时先将密码替换为 sha1(pwd) 对明文密码先计算一次 SHA1 摘要
  3. 服务端对密码进行处理 md5(pwd + salt) 网络传输过来的就已经不是明文密码了,但是服务器不需要关心这些
  4. salt 值和处理后的密码存入数据库

登录时:

  1. 页面提交表单时先将密码替换为 sha1(pwd) 对明文密码先计算一次 SHA1 摘要
  2. 用拿到的密码与数据库中该用户的盐值进行处理 md5(pwd + salt) 与注册时同理
  3. 比对处理结果与数据库的密码(非明文)

注册的第二步和登录的第一步可以顺延一步再做,因为突然想起来需要对密码是否符合要求(长度、大小写、数字那些)进行检查,只在前端做这些规则检查的话可以被构造请求来绕过。
考虑到这一点的话,那么不考虑 HTTPS 的情况下直接传输明文或者是加密后的密码都是可以接受的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文