标签: rainbowtable

密码盐如何帮助抵御彩虹表攻击?

我在理解盐密封的目的时遇到了一些麻烦.据我所知,主要用途是阻碍彩虹表攻击.但是,我看到实现这一点的方法似乎并没有真正解决问题.

我见过许多教程,建议将盐用作以下内容:

$hash =  md5($salt.$password)
Run Code Online (Sandbox Code Playgroud)

原因是哈希现在不映射到原始密码,而是密码和盐的组合.但是说$salt=foo$password=bar$hash=3858f62230ac3c915f300c664312c63f.现在有人用彩虹表可以反转哈希并提出输入"foobar".然后他们可以尝试所有密码组合(f,fo,foo,... oobar,obar,bar,ar,ar).获取密码可能需要几毫秒,但其他情况并不多.

我见过的其他用途是在我的linux系统上.在/ etc/shadow中,散列密码实际上 salt一起存储.例如,"foo"的盐和"bar"的密码将散列到此:$1$foo$te5SBM.7C25fFDu6bIRbX1.如果一个黑客以某种方式能够得到这个文件,我不知道盐服务的目的是什么,因为te5SBM.7C25fFDu6bIRbX已知反向哈希包含"foo".

感谢任何人都可以解决这个问题.

编辑:谢谢你的帮助.为了总结我的理解,salt使得散列密码更加复杂,从而使得它更不可能存在于预先计算的彩虹表中.我之前误解的是,我假设所有哈希都存在彩虹表.

hash cryptography salt rainbowtable

217
推荐指数
7
解决办法
6万
查看次数

Salt Generation和开源软件

据我了解,生成盐的最佳做法是使用源代码中存储的一些神秘公式(甚至魔术常量).

我正在研究一个我们打算作为开源发布的项目,但问题是源代码是生成盐的秘密公式,因此能够在我们的网站上运行彩虹表攻击.

我认为很多人在我面前都考虑过这个问题,我想知道最佳做法是什么.在我看来,如果代码是开源的话,根本就没有盐,因为盐可以很容易地进行逆向工程.

思考?

security encryption open-source salt rainbowtable

70
推荐指数
3
解决办法
2万
查看次数

彩虹表作为大素数因子的解决方案

在我已经阅读过关于公钥加密的解释中,据说通过将2个极大的素数相乘来得出一些大数.由于对大质量产品进行分解几乎不可能耗费时间,因此您具有安全性.

这似乎是一个可以通过彩虹表轻易解决的问题.如果您知道所使用的素数的大致大小并且知道其中有2个,您可以快速构建彩虹表.它是一个强大的表,但它可以完成,任务可以跨硬件并行化.

为什么彩虹表不是基于乘以大素数而击败公钥加密的有效方法?

免责声明:显然,数以万计的疯狂智能安全意识的人不会错过几十年我在下午想到的事情.我认为我误解了这一点,因为我正在阅读简化的外行解释(例如:如果使用超过2个数字),但我还不知道我的知识差距在哪里.

编辑:我知道"彩虹表"涉及在查找表中使用预先计算的哈希,但上面的声音听起来像彩虹表攻击所以我在这里使用这个术语.


编辑2:如答案中所述,没有办法存储所有素数,更不用说它们的所有产品.

  • 这个网站说有这么多512位素数:((2 ^ 511)*1)/(512 log(2))= 4.35×10 151
  • 太阳质量为2×10 30 kg或2×10 33 g
  • 这是每克太阳2.17×10 124素数.
  • 数量.512位数可以适合千字节:1 kb = 1024字节= 8192位/ 512 = 16
  • 这可以适合太字节:16*1024*1024*1024 = 1.72×10 10
  • Petabyte:16*1024*1024*1024*1024 = 1.72×10 13
  • Exabyte:16*1024*1024*1024*1024*1024 = 1.72×10 16

即使1 exabyte重1克,我们也无法达到2.17×10 124所需的能够将所有这些数字装入带有太阳质量的硬盘中

cryptography rainbowtable public-key-encryption prime-factoring

35
推荐指数
2
解决办法
6196
查看次数

强迫复杂的密码比盐腌"更重要"?

我花了两个小时阅读盐渍密码,确保我理解了这个想法.我希望你们中的一些人可以分享你对我的结论的了解.


如果我是攻击者,并且我可以访问用户数据库,那么我可以使用表中存在的所有用户盐并使用它们来创建我的彩虹表.对于大桌子,这可能需要很长时间.如果我可以将列表切换到感兴趣的用户(管理员,模组),我可以使用更大的字典列表来创建彩虹表,提高我的命中百分比......

如果这是真的那么盐腌似乎真的没有那么多帮助.它只会轻微地减慢攻击者的速度.

我知道理想情况下你会想要强制使用复杂的密码并用独特的随机字符串加密它们,但强制使用复杂的密码会让用户烦恼(我知道这让我感到烦恼),所以很多网站都不这样做.看起来网站对他们的用户不利,并且强制复杂的密码比一个好的腌制方法更重要.

我想这不是一个问题,而是要求其他人了解情况.

passwords hash cryptography salt rainbowtable

11
推荐指数
3
解决办法
653
查看次数

彩虹表使用的缩减功能如何工作?

我仔细阅读过有关彩虹表的内容并且无法得到一件事.为了构建哈希链,使用缩减函数.这是一个以某种方式将哈希映射到密码的函数.这篇文章说减少函数不是哈希的反转,它只是一些映射.

我不明白 - 有什么地方的映射甚至不是哈希函数的反转?这种映射如何实际工作并有助于推断密码?

security passwords hash rainbowtable

11
推荐指数
2
解决办法
5316
查看次数

什么是字典攻击?

当我们说字典攻击时,我们并不是真正的字典,是吗?我猜我们是指一个黑客的字典,即彩虹表,对吗?

我的观点是,我们不是在谈论别人的密钥不同的密码进入登录框,我们在谈论谁的人有完全访问你的数据库(已哈希密码,而不是普通的密码)和这个人扭转哈希,右?

security rainbowtable

6
推荐指数
1
解决办法
1056
查看次数

彩虹桌?

有谁知道它为什么叫彩虹表?记得我们已经知道有一种叫做"字典攻击"的攻击.为什么不是字典?

security rainbowtable rainbowattack

6
推荐指数
2
解决办法
3356
查看次数

Rainbow Tables攻击甚至是威胁吗?

让我们假设一个简单的非盐渍哈希函数,只是一个普通的旧函数$hash = md5($pass).

物业:

  1. 密码哈希全部发生在服务器端,哈希值存储在数据库中.客户无法看到这些.
  2. 彩虹表攻击必须具有哈希知识才能检索密码.

鉴于前提2,这意味着黑客已经控制了数据库,在这一点上你手上有一个更大的问题.

因此,试图阻止彩虹表攻击只是为了保护从已经受损的数据库/系统中检索密码.它是那么简单还是我还缺少其他东西.

我已经熟悉密码散列技术,但我只是想知道为什么有关于彩虹表的炒作很多.谢谢!

security rainbowtable rainbowattack

6
推荐指数
2
解决办法
393
查看次数

有没有办法在没有彩虹表的情况下反转哈希?

可能重复:
md5解码.他们是怎么做到的?

这个页面表明,由于我们现在拥有巨大的处理能力,可以颠倒像md5()和sha1()这样的哈希算法.在这一点上,我认为只有彩虹表才有可能.我错了吗?

如果Rainbow Tables是唯一的方法,有人可以如何反转用盐制作的哈希?

php security hash rainbowtable password-hash

6
推荐指数
1
解决办法
3903
查看次数

彩虹表:无法获得最后一次减少

在这个密码学的帖子中

链条可以随意移动,直到它达到原始输入.当它到达那一点时,它将重复自己,它将是无用的.

所以我的出发点是,12345但我不能得到终点并且无限循环,因为12345不重复.我正在使用(lib版本:4.7.3)来实现这一目标.这是我的代码

rainbowTable::rainbowTable(QWidget *parent) :
QWidget(parent),
ui(new Ui::rainbowTable)
{
    ui->setupUi(this);
    passwordLength = 5;
    qDebug() << getLastReduction("12345",false);
}

QString rainbowTable::hashString(QString value)
{
    QString dataToReturn =  QString(QCryptographicHash::hash((value.toAscii()),QCryptographicHash::Md5).toHex());
    return dataToReturn;
}

QString rainbowTable::reductionOfString(QString hash)
{
    QString dataToReturn = "";
    int iterator = 0;

    while ( iterator < hash.count() )
    {
        if ( hash.at(iterator) == '0' ||
             hash.at(iterator) == '1' ||
             hash.at(iterator) == '2' ||
             hash.at(iterator) == '3' || 
             hash.at(iterator) == '4' || …
Run Code Online (Sandbox Code Playgroud)

c++ qt cryptography qt4 rainbowtable

6
推荐指数
1
解决办法
1151
查看次数