Cryptography 保护散列密码的想法
由于破解密码散列已经成为ScriptKiddy的一个新的通行时间,我想到了这个问题并提出了一个新的想法Cryptography 保护散列密码的想法,cryptography,passwords,Cryptography,Passwords,由于破解密码散列已经成为ScriptKiddy的一个新的通行时间,我想到了这个问题并提出了一个新的想法 将过程存储为偏移量+数字,而不是散列 这个数是两个大素数的乘积 密码被转换成一个数字,然后加上偏移量,然后用该素数除以该数字。如果它被除数,除数是两个素数中较大的一个,则密码是正确的 根据定义,每个散列都是唯一的,每个密码可以根据偏移量以多种不同的方式散列。打破一个散列意味着您必须对数字进行因子运算(这很难),然后找到一个对应于较大素数偏移量(这很小)的数字的单词 要生成密码,请使用函数f()
例如,f()可能是密码的utf-8编码,可以理解为一个大的二进制整数 一般来说,试图发明自己的密码系统是非常困难的。有很多小事情你必须考虑,很容易错过一个攻击可以利用的东西。如果您使用一个已建立的加密或哈希库,您的情况会更好、更安全。Bcrypt for Hash可能比您发布的解决方案更安全。要正式确定您的方案: 要创建哈希,请执行以下操作:
有趣的是,散列创建和密码验证过程如此不同。正如您所指出的,这使得rainbow表哈希链接技术不适用。这可能是一个优势,但每个用户的satting可以从rainbow表中获得类似的保护。与使用散列函数相比,您的过程并没有真正获得任何好处。是的,反转函数是困难的,因为它需要分解大量的数字,但是反转常规哈希函数也是困难的。攻击者仍然可以使用与常规哈希算法相同的过程:通过测试每个可能的密码来实施暴力攻击
当然,对于任何存储足够数据以验证密码的方案来说,这是不可避免的。唯一的解决方案是使攻击者这样做的计算代价高昂,方法是使哈希函数的计算代价高昂,并添加一个salt以确保它们无法预计算。您将得到更好的答案。如果我在这里什么都没有得到,我会把这篇文章贴在这里。这篇文章遗漏了很多细节。你能编写生成和验证散列的伪代码吗?@MarkusMikkolainen一个建议:不要像论坛帖子那样使用评论。与问题相关的信息应放在问题本身中编辑它。Stackoverflow的工作原理与论坛不同。我真的不明白它应该如何工作。我同意,这应该发布在crypto上,如果可能的话,使用协议的数学描述。伪代码在stackoverflow上更有用。是的,我知道这一点,并且我使用了已知的哈希技术。今天早上在火车站等火车时,我突然想到了这一点,我不明白为什么它不起作用。这一切都很好,但请把它视为一种学习经验。这可能不是最好的方案——如果它真的有效的话(没有更好的定义就说不出来)。一个优点是密码没有上限。在普通散列中,一旦为128位散列收集了128位的熵,就会出现冲突。在这种情况下,您可以使用更长的密码,并在需要时增加素数的位大小。另一个优点(我认为)是,这不能用rainbow表来表示,所以蛮力就是蛮力。我认为它对rainbow表的恢复力并不比使用等效(4096位)salt的SHA256强。唯一的区别是熵是内置在您的设计中的,因此不是可选的。彩虹表的想法是您可以链接哈希。你怎么把这些链起来的?是的,很有趣。我需要进一步考虑并更新我的答案。是的,对于简单的密码来说,这就像哈希一样容易被破解,但我认为你实际上无法破解这个密码。此外,它基本上支持密码中的任何长度,不会发生冲突。本质上,您可以通过在密码中添加一个随机前缀而不存储它来增加难度,然后自己进行试除法。这将添加一个常数做功因子。不,不能使用彩虹表,因为这相当于盐渍哈希,也不能使用彩虹表。和