Tag: 蛮力

多长时间蛮力腌SHA-512哈希? (提供盐)

这里是Java中的一个algorithm: public String getHash(String password, String salt) throws Exception { String input = password + salt; MessageDigest md = MessageDigest.getInstance(SHA-512); byte[] out = md.digest(input.getBytes()); return HexEncoder.toHex(out); } 假定盐是已知的。 我想知道当密码是一个字典单词的时候,还有当它不是一个字典单词。

什么是最好的分布式蛮力对策?

首先,有一点背景:我为CodeIgniter实现一个auth + auth系统并不是什么秘密,到目前为止,我赢了(可以这么说)。 但是我遇到了一个非常不平凡的挑战(大多数auth库完全错过了,但我坚持正确处理它):如何智能地处理大规模,分布式,可变用户名的暴力攻击 。 我知道所有常用的技巧: 限制每个IP /主机失败的尝试次数,并拒绝违法者访问(例如Fail2Ban) – 自从僵尸networking变得更加智能以来, 将上述内容与一个已知'坏'IP /主机 (例如DenyHosts) 黑名单 – 依靠僵尸networking#1, 他们越来越不 将IP /主机白名单与传统身份validation相结合(对于dynamicIP用户而言,可悲的是无用,大多数网站的stream量都很高) 在N分钟/小时的时间内设置一次站点范围内的失败尝试次数限制,并在此之后限制(暂停)所有login尝试,持续几分钟/小时(DoS攻击您的问题将成为僵尸networking玩家) 所有使用NOlogin/密码选项的用户的强制性数字签名 (公钥证书)或RSA硬件令牌(无疑是一个坚如磐石的解决scheme,但仅适用于封闭的专用服务) 强制使用超强密码scheme (例如> 25个带符号的无意义字符 – 对于临时用户来说又不切实际) 最后, CAPTCHA (可以在大多数情况下工作,但是对于用户来说很烦,对于一个坚定的,资源丰富的攻击者来说 实际上是无用的 ) 现在,这些只是理论上可行的想法。 有很多垃圾的想法,打开网站(例如,微不足道的DoS攻击)。 我想要的是更好的东西。 我的意思是说: 它必须是安全的(+)反对DoS和powershell攻击,而不是引入任何新的漏洞,可能会让稍微偷偷摸摸的机器人继续在雷达下工作 它必须是自动的。 如果它需要人工操作员来validation每个login或监视可疑活动,它不会在真实世界的情况下工作 主stream网站的使用必须是可行的(即stream量大,stream量大,可以由非程序员进行开放注册) 它不能阻止用户体验到偶然用户会感到烦恼或沮丧(并可能放弃网站) 它不能涉及到小猫,除非它们真的很安全的小猫 (+) 以“安全”来说,我的意思是至less和偏执狂用户保密密码的能力一样安全 所以 – 让我们听听吧! 你会怎么做 ? 你知道我没有提到的最佳做法吗(噢,请说你这样做)? 我承认自己有自己的想法(把3和4的想法结合起来),但是我会让真正的专家在尴尬自己之前先说话;-)

防止蛮力login网站

作为对最近的Twitter劫持和杰夫的字典攻击的post的回应,什么是保护您的网站免受蛮力login攻击的最佳方式? 杰夫的postbuild议,对每个尝试login的延迟时间会有所增加,并且评论中的build议是在第二次失败尝试后添加validation码。 这两个看起来都是好主意,但你怎么知道它是什么“尝试数字”? 您不能依靠会话ID(因为攻击者每次都可以更改)或IP地址(更好,但易受僵尸networking攻击)。 简单地logging用户名可以使用延迟方法locking一个合法用户(或者至less使他们的login过程非常缓慢)。 思考? build议?

为了散列而隐藏盐的必要性

在工作中,我们有两个相互竞争的盐理论。 我所使用的产品使用类似于用户名或电话号码的forms来encryption散列。 本质上,每个用户都有所不同,但是我们随时可用。 另一个产品为每个用户随机生成一个盐,每当用户更改密码时都会更改。 盐在数据库中被encryption。 我的问题是如果第二种方法真的有必要? 我从纯粹的理论angular度可以理解,它比第一种方法更安全,但从实践的angular度来看呢。 现在要validation用户,salt必须是未encryption的并应用于login信息。 思考一下之后,我从这个方法看不到真正的安全收益。 即使攻击者知道如何快速确定每个帐户的内容,但是将帐户之间的差异更改为帐户,仍然使得有人尝试强制哈希algorithm变得极其困难。 这是假设密码足够强。 (很明显,find一组密码的正确哈希,它们都是两位数字比find8位密码的正确哈希要容易得多。 我在逻辑上是不正确的,还是有我失踪的东西? 编辑:好吧,这就是为什么我认为这是真的没有什么encryption盐。 (让我知道我是否在正确的轨道上)。 对于下面的解释,我们假定密码总是8个字符,salt是5,所有的密码都是由小写字母组成(这只是使math更容易)。 对于每一个入口,盐的含量不同意味着我不能使用同一个彩虹桌(实际上,如果我有足够的尺寸,我可以做到这一点,但是暂时忽略这一点)。 根据我的理解,这是真正的盐的关键,因为要破解每一个帐户,我必须重新发明轮子,为每一个说话。 现在,如果我知道如何将正确的salt应用于密码来生成散列,我会这样做,因为salt实际上只是扩展了散列短语的长度/复杂度。 所以我会减less我需要产生的可能组合的数量,以“知道”我有13 ^ 26到8 ^ 26的密码+盐,因为我知道盐是什么。 现在,这使得它更容易,但仍然很难。 所以encryption盐。 如果我知道盐是encryption的,我不会尝试解密(假设我知道它有足够的encryption级别)。 我会忽略它。 回到前面的例子,我只想生成一个包含13 ^ 26所有键的更大的彩虹表,而不是试图找出解密的方法。 不知道盐会一定减慢我的速度,但我不认为这会增加尝试破解盐encryption的巨大任务。 这就是为什么我不认为这是值得的。 思考? 这里是一个链接,描述了在一个暴力攻击下密码将持续多长时间: http : //www.lockdown.co.uk/? pg=combi