【问题标题】:Is it save to store passwords encrypted with sha256_crypt but without additional salt是否可以保存使用 sha256_crypt 加密但没有额外盐的密码
【发布时间】:2016-07-21 04:51:07
【问题描述】:

使用sha256_crypt.encrypt("secretUserPassword") 创建用户密码哈希并将其存储到数据库中而不在哈希中添加 slat 是否可以保存?

如果是这样,是什么保护哈希免受彩虹表攻击?

这就是我在 Web 应用程序中创建新用户并将其存储到数据库中的方式:

admin = User()
admin.name = 'admin'
admin.password = sha256_crypt.encrypt("secretAdminPassword")
db.persist_user(admin)

这就是我检查凭据和登录用户的方式

username = request.form['username']
password = request.form['password']   
user = user_from_db(username)
if sha256_crypt.verify(password, user.password):
   login_user(user)

【问题讨论】:

  • 根据the docs,自动添加盐。所以我想它很好。
  • 顺便说一句,盐不会增加安全性。其目的是防止相同的密码产生相同的散列。很难想象这种保护没有用的情况,但单独来看,它根本不会提高 SHA256 加密的安全性。
  • @tripleee - 这更多是加盐的副作用,而不是主要目的。每个密码的唯一盐防止构建一个彩虹表来一次获取所有密码。相反,必须为每个密码构建一个彩虹表,这使得这种方法不可行。
  • @martinstoeckli 我看不出你写的和我写的有什么不同,更不用说反驳我写的了。
  • @tripleee - 差异确实很微妙,我并不是说你错了。其实有两个好处。首先它的一个优势,相同的密码会导致不同的哈希值,所以人们无法判断两个客户使用了相同的密码,并且破解一个你不知道另一个也被破解了。这就是我理解你的评论的方式。另一件事是,使用盐确实提高了安全性(即使不是唯一的),因为你不能使用已经存在的彩虹表(例如,只是问谷歌),你必须建立彩虹表首先是这种盐。

标签: python security salt sha256 passlib


【解决方案1】:

documentation 声明函数 sha256_crypt.encrypt("password") 不仅计算 SHA-256 哈希,它还...

  1. 自动添加盐
  2. 进行多轮散列

这两点对于获得安全的密码散列函数至关重要。最好在不使用自制盐的情况下使用它,因为在创建加密安全的盐时有几个陷阱,所以最好把它留给图书馆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2023-04-07
    • 2016-10-22
    相关资源
    最近更新 更多