首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Salt生成和开源软件

Salt生成和开源软件
EN

Stack Overflow用户
提问于 2009-10-30 01:00:59
回答 4查看 25.5K关注 0票数 76

据我所知,生成盐的最佳实践是使用一些存储在源代码中的神秘公式(甚至是魔法常量)。

我正在做一个项目,我们计划将其作为开源发布,但问题是,随着源代码的出现,生成盐的秘密公式也随之而来,因此可以在我们的网站上运行彩虹表攻击。

我想很多人在我之前已经考虑过这个问题,我想知道最好的实践是什么。在我看来,如果代码是开源的,那么使用salt就没有任何意义,因为salt可以很容易地进行逆向工程。

有什么想法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-30 01:03:56

实际上,盐只需要对每个条目都是唯一的。即使攻击者可以计算出盐是什么,这也使得创建彩虹表变得极其困难。这是因为盐是在密码散列之前添加到密码中的,因此它有效地增加了彩虹表必须包含的条目总数,以便拥有密码字段的所有可能值的列表。

票数 22
EN

Stack Overflow用户

发布于 2009-10-30 23:34:30

自从Unix变得流行以来,存储密码的正确方法是附加一个随机值(盐)并对其进行散列。把盐放在你以后能拿到的地方,但是你希望坏人不会拿到它的地方。

这有一些好的效果。首先,坏人不能只列出预期的密码列表,比如"Password1",将它们散列到一个彩虹表中,然后在密码文件中查找匹配的密码。如果你有一个很好的两字节盐,他们必须为每个期望的密码生成65,536个值,这使得彩虹表变得不太实用。其次,如果你能防止坏人查看你的密码文件,你就很难计算出可能的值。第三,您让坏人无法确定一个给定的人是否在不同的站点上使用相同的密码。

为了做到这一点,你生成一个随机的盐。这应该会以均匀的概率生成所需范围内的每个数字。这并不困难;一个简单的线性同余随机数生成器就可以做得很好。

如果你有复杂的计算来制作盐,那么你就做错了。如果你根据密码来计算它,那你就大错特错了。在这种情况下,您所做的只是使散列复杂化,而不是在功能上添加任何盐。

任何擅长安全的人都不会依赖于隐藏算法。现代密码学基于经过广泛测试的算法,为了进行广泛测试,这些算法必须众所周知。一般来说,人们发现使用标准算法比使用自己的算法并希望它是好的更安全。不管代码是不是开源的,坏人仍然有可能分析程序的功能。

票数 8
EN

Stack Overflow用户

发布于 2009-10-30 01:13:36

使用随机函数生成器生成盐,并将其存储在数据库中,使盐每行一个,并将其存储在数据库中。

我喜欢在django注册中生成salt的方式。参考:http://bitbucket.org/ubernostrum/django-registration/src/tip/registration/models.py#cl-85

代码语言:javascript
运行
复制
salt = sha_constructor(str(random.random())).hexdigest()[:5]
activation_key = sha_constructor(salt+user.username).hexdigest()
return self.create(user=user,
           activation_key=activation_key)

他使用由随机数生成的sha和用户名的组合来生成散列。

Sha本身以强大和牢不可破而闻名。添加多个维度来生成盐本身,与随机数,sha和用户特定的组件,你有牢不可破的安全性!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1645161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档