【问题标题】:werkzeug generate_password_hash, is there any point?werkzeug generate_password_hash,有什么意义吗?
【发布时间】:2017-03-26 12:50:01
【问题描述】:

我正在构建一个使用werkzeug's hashing functions 的python 应用程序。一个例子User模型:

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, index=True)
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    password_hash = db.Column(db.String(128))

    # Custom property getter
    @property
    def password(self):
        raise AttributeError('password is not a readable attribute')

    # Custom property setter
    @password.setter
    def password(self, password):
        self.password_hash = generate_password_hash(password)

    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)

    def __repr__(self):
        return '<User %r>' % self.username

我看到现在password 以哈希的形式存储在数据库中,任何看到哈希的攻击者在不解密的情况下都不知道密码是什么。然而,对于很多应用程序来说,werkzeug 的散列函数不是一个相当明显的选择吗?攻击者能否直接使用check_password_hash函数解密密码?

【问题讨论】:

  • 我想你会找到check_password_hash 解密密码;我想它会对提供的密码进行哈希处理并将其与存储的哈希值进行比较(即它大致将是return self.password_hash == generate_password_hash(password))。散列(最好是加盐)的全部意义在于它不可逆;它是散列,而不是加密。
  • 它的工作原理完全相同。这就是为什么你在散列之前加盐,否则有人可以对所有可能的密码运行散列算法并进行反向查找。该算法是单向的,它不能向后运行,就是重点。请阅读基础知识,这将回答您的大部分问题。
  • @KexAri ...你并不愚蠢,但你更像是 UN-HASHABLE :D :D :D
  • 别担心;这并不愚蠢,你只是没有所有的信息。攻击者可以使用该函数针对哈希值测试密码,但这就是为什么我们建议人们使用长而不常见的密码;延长成功攻击所需的时间并劝阻大多数攻击者。

标签: python werkzeug


【解决方案1】:

基本上password_hash 使用单向函数来创建不可逆的哈希。此外,它向散列添加信息,例如散列算法、盐值、迭代计数,当然还有散列值,这是存储的内容。 password_verify 将密码和password_hash 结果中的附加信息再次创建散列并比较散列值。

另外和重要的是password_hash 迭代哈希函数以使过程花费更长的时间,一个好的值是 100 毫秒。因此,攻击者可以做到的最好的方法是尝试密码以找到匹配的密码,并且每次尝试都需要大量时间。当然,更快的计算系统可以减少约 100 毫秒,但它仍然很昂贵。

【讨论】:

  • 为什么这不能在别人的系统上被逆转?散列函数是否使用系统特定的密钥?
  • 加密哈希是不可逆的,这是设计使然。除其他外,数据在此过程中会故意丢失。就像汉堡包一样,不能从汉堡包中重新创造牛。
  • @KexAri 你不能取消哈希土豆!
猜你喜欢
  • 1970-01-01
  • 2016-09-16
  • 2010-09-23
  • 2011-07-01
  • 1970-01-01
  • 2011-05-04
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多