问题标签 [brute-force]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
security - 保护私钥免受移动设备上的暴力攻击
我有一个移动应用程序,我想在其中安全地存储私钥。安全要求意味着即使攻击者可以无限制地访问移动设备,他们也很难获得私钥。为了实现这一级别的安全性,应用程序采用对称加密技术,其密钥源自用户指定的密码短语和特定于设备的盐。
理想情况下,这应该足以抵御暴力攻击;但是有两个限制因素:
由于私钥必须符合一定的格式,所以解密过程可以测试该过程的结果,看它是否有效。例如,如果私钥是 RSA 私钥,攻击者会尝试各种密码组合并测试他是否可以将生成的明文用作有效的 RSA 私钥。由于 RSA 私钥必须以某种方式对某些信息进行编码,如果解密失败,RSA 引擎会发出密钥无效的信号。这为攻击者提供了一种完全离线的方式来验证他的攻击。优选地,攻击者不应该能够在不与服务器通信的情况下判断他的解密尝试是否成功。
由于应用程序在移动设备上运行,密钥派生函数增加的复杂性无助于密钥强化,因为可以完全访问移动设备的离线攻击可能会在资源更丰富的功能更强大的设备上进行。简而言之,密钥推导函数计算轮数的任何增加都会减慢用户体验(这在一定限度内是可以接受的),但如果攻击是在台式计算机上执行的,则会立即被挫败。
有人可以为我提供这些问题的解决方案吗?具体来说,有没有人知道一种非对称加密算法,其中私钥可以是任何随机字节序列(它可以是固定长度的序列,没关系),并且该算法仍然能够产生密文?
prolog - Prolog - PCP 求解器
我想知道是否有一种(可以理解的)方法来使用 prolog 谓词蛮力解决 Post 对应问题?
例如:
algorithm - 如何从一个图中获取所有子图?
如何以伪代码从图中获取固定大小的所有子图?(蛮力)
如果可能的话,没有外部库。谢谢!
c - 创建固定大小数组的每个可能值
我正在尝试制作一些非常基本的东西,它将循环遍历数组的所有可能排列。
确实这是在汇编中完成的,但我将在 C 中解释它。
基本上,假设我们有一个数组uint8_t *data=malloc(10);
我想创建一个算法来打印数组中所有可能的字节组合data
。
是的,我知道它会很慢(并且有很多值),而且我并不是要真正复杂的优化版本。我只是在寻找可以在我的计算机上运行的东西,作为一种蛮力-force 类型的东西来找到符合某些条件的某些值..
(注意,我说排列是因为 [0,1,2] 不应该被视为与 [2,1,0] 相同)
编辑:另外,尽量不要使用太多的 libc 函数,因为我会将它转换为只有 512 字节的独立引导加载程序。
我知道我知道如何做到这一点,但是对于我的一生,我就是无法让算法在我的脑海中运行!
php - PHP:防洪/垃圾邮件系统
我实际上正在开发一个 PHP 项目,该项目将具有用户系统(登录、注册、将丢失的密码发送到电子邮件,..),我认为这可能很容易受到蛮力攻击和/或垃圾邮件(发送某人电子邮件的密码,例如 1000 次等。使用您的幻想)。
- 今天的网络服务器(Apache、IIS)是否有某种针对暴力破解的内置防御?
什么是实现反垃圾邮件/洪水系统的最佳方法,如果我例如:希望一个页面每分钟不能被调用超过两次,但是另一个页面每分钟最多可以调用 100 次左右.
我肯定必须存储 IP 地址、他们上次访问页面的时间以及某处的访问次数 - 但将其存储在文本文件/数据库 (MySQL) 中是否足够有效
我应该使用验证码来注册/恢复丢失的密码吗?
“文本”验证码是否可行?(类似“什么是 5 加 9 减 2?”)
该页面不会被那么多用户(100-200)使用,我真的必须实现所有这些东西吗?
encryption - 能够分解大数如何决定流行加密算法的安全性?
加密算法的安全性如何依赖于大数分解?
例如,我在一些数学编程论坛上读到,通过使用二次筛或通用数域筛,可以在商用硬件上相对轻松地分解 256 位数字。
这如何转化为能够破坏 RSA、AES 等算法的安全性?能够将数字分解为密钥的长度是否足够?
是否有任何了解密码学和加密算法的人可以对此有所了解?
discrete-mathematics - 详尽的网站验证程序
我有一个宏伟的想法,即基本上采用一些蛮力攻击来测试/验证我的 Web 应用程序不会崩溃。
不要让我开始单元测试和 IoC 的东西,这完全是另一回事。
我正在做的,以及我正在寻求帮助的是创建一个智能详尽的搜索,探索程序状态的一部分。
我所拥有的是一个网页,其中包含我可以做的事情,单击是一回事,文本输入是另一回事,一些输入(如单选按钮和下拉列表)被限制为某些值。很基本的东西。我最终得到一组有限的事件和值,而我想要建模的是状态的进展。也许这在某种程度上是 FSM 优化,但目标是系统地检查事件和值的任意排列,看看会发生什么。
当发现问题时,我想尝试以尽可能少的努力引发该错误,以便能够呈现清晰的测试用例。
这与形式验证方法有关,我正在向有经验的人寻求帮助或见解。
c++ - 查找与一组规则匹配的所有排列
我得到 N 个数字,并为他们应用 M 条关于他们的订单的规则。规则以一对索引表示,每一对 (A, B) 都告诉索引 A 的数字(第 A 号)必须在第 B 号之后 - 它不必在他旁边.
该算法应该给我所有不违反规则的可用排列,就像在示例中一样 - 3 必须始终在 2 和 1 之后。
我尝试了暴力破解,但它没有用(虽然暴力破解应该在这里工作,N 在范围(1,8)内。)
有任何想法吗 ?
algorithm - 尝试暴力破解平均密码/非侵入性但有意义的限制的次数?
关于通过应用限制来防止暴力破解 Web 服务密码的 SO 上有几个有用的答案。我找不到任何好的数字,而且我在这方面的专业知识很少,所以问题是:
暴力破解平均 6 个或更多字符的密码通常需要多少次尝试(没有可能有帮助的额外知识,但考虑到密码可能容易受到字典攻击)以及基于此,什么是有意义的限制在不破坏用户体验的情况下应用于节流算法?
这是我目前的方案:
- 登录表单使用随机数,因此攻击者必须等待一个完整的请求周期完成才能获得登录尝试的结果并检索新令牌。
我允许每个 IP 检索登录表单 50 次,请求之间间隔不到一分钟,之后 IP 将被阻止 1 分钟。这一分钟内的任何新尝试都将重新开始超时。sleep
每次获取登录页面都有一个应用程序# of attempts / 5
,因此在请求之间不到一分钟的 5 次请求之后,获取表单需要 > 1 秒,在 10 次请求 > 2 秒后,等等。此外,我只允许每个用户帐户 100 次失败的登录尝试,每次尝试间隔 2 小时,之后该帐户被阻止 2 小时。- 为了避免频繁的 DoS 帐户攻击,IP 可以被列入白名单(没有限制)或列入黑名单(完全忽略任何登录尝试)。
根据到目前为止的答案,我对其进行了调整,使其工作如下:
- 在每个 IP 的基础上,检索登录表单的速度会逐渐减慢。每个新请求都会休眠
# of requests / 2
几秒钟。没有登录活动 10 分钟后,计数器会重置。 - 我为每个 IP 保留了一个 FIFO 堆栈的登录尝试。如果一个IP在2小时内登录30次失败,它就会被挂起。我还保留了每个 IP 的暂停次数列表,暂停时间计算为
2 ^ (# of suspensions + 1) hours
. 这应该会导致将持续违规的 IP 快速列入事实上的黑名单。 - 此外,如果一个帐户在一天内无法登录 20 次,则会被暂停 2 小时。我还不太确定这项措施,因为这意味着帐户可以很容易地被 DoS 攻击。但是,如果没有大规模的分布式僵尸网络,违规的 IP 应该会比帐户被永久 DoS 更快地列入事实上的黑名单。这也是保护帐户的一种非常有效的措施。
我认为这些限制不应该伤害普通用户,即使是那些经常忘记密码并尝试多次登录的用户。考虑到服务的平均规模,IP 限制也应该适用于经过大量 NAT 的用户。有人可以用一些扎实的数学证明这是有效的还是无效的?:)
textfield - 如何让我的浏览器暴力破解输入字段?
我经常访问一个网站,它提供诸如 GD??Q-TPY32-TPTT3-9CM9P-F2QMQ 之类的代码,并暗示 ?? 是一个数字和一个字母。如果您是第一个解锁代码的人,您可以兑换适度的奖品。
所以解决这个问题的明显方法是暴力破解代码。但显然我不想坐在电脑前一个小时手动输入所有 10 * 26 的组合。有没有办法让我的浏览器输入这些代码(假设每个 5 个字符的块是一个单独的文本字段)。或者是否有一个特殊的浏览器可以启用某种宏类型的功能?谢谢。