我想到了一个没有SSL的认证系统,看起来相当安全。我是否忽略了重要的事情?没有SSL的安全认证
- 用户点击登录页面
- 服务器产生用于传输(叔盐)并将其存储在所述会话的盐
- 服务器发送的叔盐以用户为登录页面的一部分,该载荷他们的用户名
- 用户类型和密码,并点击提交
- 浏览器MD5用t-盐一起加密密码
- 浏览器发送的用户名和MD5(密码+叔盐)到服务器
- 服务器从数据库中使用用户名(*)注意下面
- 服务器MD5加密从步骤7与已存储在会话在步骤叔盐一起获取到的密码2
- 服务器两者MD5s的从比较检索密码步骤6和步骤8
- 如果它们相同,则登录的认证成功
- 服务器删除从会话中叔盐(在步骤2中添加),以防止潜在重放攻击
*注密码取回我步骤7不能被单向加密(如惯例)以使步骤8工作。但是双向加密系统仍然可以用于在数据库级别保护密码。 (嘿,这带来了允许更加用户友好的密码恢复过程的副作用。)
除了上面我刚才的说明,这个方案的优点和缺点是什么?
刚刚使用SSL有什么问题? – ceejayoz
从我看来,没有优势和很多弱点。这似乎是一个可怕的想法。以纯文本存储密码将比这更安全。您最好使用正常的身份验证方案:发送纯文本密码,salt并在服务器端对其进行哈希处理,然后与存储的密码哈希值进行比较,或使用SSL或两者兼而有之。 – netcoder
ceejayoz:使用SSL有什么问题是它是添加到系统的另一个组件。可以放到项目中的PHP库会更简单。 netcoder:以纯文本存储密码并不比以纯文本存储密码的替代方式更安全,并且可以用数学方法证明。 :)我对这里的行业教条不感兴趣,因为我正在努力学习和探索新的想法。我知道学术上正确的人没有发现这种有价值的东西,但我坚信,可能有一个聪明的解决方案,可能比我想象的更多。 – OCDev