由于破解密码哈希已成为scriptkiddies的新传递时间,我想到了这个问题,并提出了一个新颖的(?)想法。
根据定义,每个散列都是唯一的,并且每个密码可以根据偏移量以多种不同的方式进行散列。打破一个哈希意味着你必须考虑数字(这是很难的),然后找到一个对应于更大的主要数字的数字(这是微不足道的)。
要生成使用函数f()将密码转换为密码 - 数字(不重要),请生成两个大于2 ^ 4096的随机素数或者足够多。取较大的素数并计算prime-passwordnumber = offset。将素数乘以得到“数字”。商店号码和抵消。
要检查。使用函数f()将密码转换为密码 - 数字,添加偏移量以查找质数。将数字除以素数以得到另一个素数。检查第一个素数是两者中较大的一个。如果是这样,密码是正确的。
f()可能是例如将密码理解为大二进制整数的utf-8编码。
答案 0 :(得分:2)
使用哈希函数,您的程序并没有真正获得任何好处。反转你的函数很困难,是的,因为它需要分解大数,但是反转常规散列函数也很困难。攻击者仍然可以使用与常规哈希算法相同的过程:通过测试每个可能的密码来进行暴力攻击。
当然,任何存储足够数据以验证密码的方案都是不可避免的。唯一的解决方案是让攻击者通过计算昂贵的哈希函数来计算成本,并通过添加盐来确保它们不能预先计算。
答案 1 :(得分:0)
通常,尝试创建自己的加密系统非常很难正确执行。你必须考虑许多小事情,很容易错过攻击可以利用的东西。如果您使用已建立的加密或散列库,您仍然会变得更好,更安全。用于散列的Bcrypt可能比您发布的解决方案更安全。
答案 2 :(得分:0)
正式确定您的计划:
创建哈希:
验证哈希:
这是一个安全散列要求给定n和o,推导pw是不可行的,即没有算法比猜测和检查更有优势。我相信。
正如我所看到的,您的方案的主要好处是通过选择随机数注入散列过程的随机性。他们是素数和因子应该是困难的更多是一个实现细节(这是你的单向函数)。据推测,它也应该减慢检查速度,但我真的不知道分数对于那么大的数字有多缓慢。
有趣的是,哈希创建和密码验证过程是如此不同。正如您所指出的,这使得彩虹表哈希链的技术不适用。这可能是一个优势,但每用户盐析可以获得与彩虹表类似的保护。