一个想法 用非对称加密算法登录

2017-05-09 16:00:30 +08:00
 pwn
登录依旧是用账号密码
客户端用账号密码生成私钥
服务器端储存账号及其对应的公钥

登录过程:
1. 客户端发送登录请求
2. 服务器端返回任意字符串( nonce )
3. 客户端利用私钥生成函数和用户输入的账号密码生成私钥
4. 客户端用私钥对 nonce 签名,并把账号和签名发送给服务器端
5. 服务器端接收账号,找到对应的公钥,并用公钥验证签名

之所以有这个想法是因为现在的密码是用 HASH 函数加密后储存的,可以被爆破,所以才有撞库这种攻击方法。但是如果只是存公钥的话,就比较难被爆破了(虽然也存在可能性,但不高)。而且可以选择的算法有 RSA,还有 ECDSA 等其他的算法,都挺安全的。

只是不知道 非对称加密算法 和 散列算法 那个性能高一点,不过如果真的很安全的话,牺牲一点性能应该没什么问题吧。
5669 次点击
所在节点    奇思妙想
26 条回复
vainly
2017-05-10 12:26:03 +08:00
@geelaw 盐是有过期时间的,加密后的 hash 在盐过期后是校验失败的。
geelaw
2017-05-10 12:52:41 +08:00
@vainly 你可以在每次改变密码的时候换盐,但是好像没听说盐需要过期……
tlday
2017-05-13 12:44:08 +08:00
目前非对称加密的私钥不能"依靠"帐户密码生成,是筛选出来的大质数。其次,加盐是为了避免彩虹表"爆破 /碰撞",盐没有过期这一说。而且能够使用彩虹表的前提是你已经被拖库了。第三,MD5(大约)十几年前就被我国山东大学的王小云教授带领的团队提出的密码云碰撞算法破解了,所以现在大家都用作签名而非加密。SHA1 则是位数不足导致以现在的计算机可以在可接受的时间内算出来所以被抛弃使用了。希望说"不知道具体用什么方法"之前可以先去查一下。
勘误结束,来谈谈用户密码的加密,这里存在一个问题,我们需要保留用户密码的所有信息么?如楼上某人所说,我们其实不需要保留用户密码的所有信息,熵减也是可接受的,只要熵减后的取值空间仍然足够大且分散,保证不同密码生成的 hash 值碰撞的几率足够小,不会出现我们密码不一样但是 hash 过后的值是一样的就可以了。也就是说密钥 /加 /解密算法的具体应用其实包含两方面,还原或验证,而用户用密码登录这个过程,我们需要从 hash 值"还原"出用户的原始密码吗?不,我们事实上只需要"验证"就可以了,验证的成本比还原要低的多,而对于窃取了你数据库的黑客来说,他必须还原或近似还原(记得熵减么?)出原始密码才行,那么他破解的成本要比我们验证高的多。
这里有另外一个问题,计算时间的问题,hash 算法往往是位运算级别的运算,非对称加密算法则往往涉及大数运算,这个中间的差别可是数量级级别的。你要考虑这中间的计算成本计算时间,黑客不能接受,但是你系统的用户就可以接受了吗?基于同样的理由,你的算法里面的客户端产生私钥这一条,所需的时间可能也是用户不可接受的(假设你需要的是一对足够健壮的 key-pair,比如 2048 位)。
那么最后说结论,综合起来,平衡破解难度与计算成本,目前广泛采用的方式仍然是 hash 算法,辅以每个用户独立的盐,以及 N 次迭代 hash,来放大彩虹表制作所需的成本以及难度,来避免被破解。建议参考,PBKDF2,bcrypt,scrypt。
回到问题的起点,我们目前所讨论的一切都是数据库被拖库以后的"补偿"安全措施,那么你为什么不避免数据库被拖库呢?安全问题的每一个链条都要做好。补丁要及时打,漏洞要及时补。碰到 0day,才是这个补偿安全措施该发挥威力的时候。
谈谈现实情况,现实情况是,绝大多数的用户密码泄漏事件都是因为用户在不同网站采用了相同的密码导致黑客拿别的网站泄漏的密码,轻松撞库撞出用户的密码。诚然这个是用户的安全意识问题,但是整体提高从业者的能力与安全意识,才是杜绝我前面这句话里的"别的网站"出现的一大措施。这也是我在这里普及这些安全知识的初衷。
以下则是对楼主的建议,尝试对业界现有方案进行质疑和挑战的精神值得鼓励和赞扬,但是前期功课一定要做好,这是对你自己负责也是对看你帖子的网友们负责。了解现在的方案是怎么提出和演化成现在这个样子的也很重要,以上几点做不好,很容易滑入民科的深渊,只谈挑战权威,不讲实验结果与事实,缺乏基本的理论知识和学术素养。
以上所有内容限于个人立场和眼界所限可能有谬误,还请楼下朋友斧正。
tlday
2017-05-13 12:51:21 +08:00
哦,对了,上面说的这些都是针对大规模信息盗窃的防范。假如是针对特定用户,其实社会工程学的可行性要高得多。做技术很容易陷入一切问题都想通过技术解决的怪圈,但人的问题才是核心问题。
q397064399
2017-05-14 08:37:18 +08:00
@tlday 王小云,那个根本没有任何实用性,撞出来的东西,长度 特征 有可能完全不一样
ychongsaytc
2017-05-29 09:13:47 +08:00
盐过期只适用于会话 token。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/360150

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX