7

这不是真实情况;请忽略您可能认为适用的法律问题,因为它们不适用。

假设我有一组 200 个已知的有效许可证密钥,用于假设的软件许可算法,并且许可证密钥由 5 组 5 个字母数字不区分大小写(全部大写)字符组成。例子:HXDY6-R3DD7-Y8FRT-UNPVT-JSKON

是否有可能(或可能)为系统推断其他可能的键?

如果已知集合是连续的怎么办?在这种情况下,方法如何改变,这有什么好处?

我以前听说过“keygens”,但我相信它们可能是通过反编译许可软件而不是检查已知的有效密钥来制作的。在这种情况下,我只得到一组键,我必须确定算法。我还被告知这是一种行业标准算法,所以它可能不是基本的,尽管我想机会总是存在的。

如果您认为这不属于 Stack Overflow,请至少建议一个备用位置让我查看或提出问题。老实说,我不知道从哪里开始这样的问题。我什至不知道这类问题的术语。

4

5 回答 5

1

离线验证的密钥往往由一组属性定义。某些比特子集具有某些值或对称性。如果传递给某些函子的某些字节子集返回预期结果,则该密钥被视为有效。

如果您研究了生成密钥的通用算法,您可能会想出一系列可能的属性。然后,您可以使用归纳逻辑编程来查找哪些属性适用于所有有效键,但不适用于无效键。(您还需要一组无效密钥,但这些密钥很容易生成)。根据结果​​,您理论上可以编写一个注册机。如果你能让它发挥作用,你也可以用它写一篇论文。祝你好运。

但是,如果它们经过在线验证,它们可能只是针对数据库进行检查的伪随机数。在这种情况下,你就是 SOL。

于 2010-05-19T21:53:03.527 回答
1

众所周知,这在一般情况下很难解决。然而,如果

我还被告知这是一种行业标准算法

如果是这种情况,您应该获取这些“标准算法”的列表,并分析它们的弱点。

我天真的猜测是大多数密钥生成的形式是 x || hash(x || fixed),其中 x 是每个键随机生成的值,fixed 是固定值。使用这种形式,可以很容易地验证密钥(提取 x,计算哈希(x || 固定),看看它是否匹配)。

假设您知道使用的确切算法,您要么必须找到算法中的弱点(不太可能,除非他们使用具有已知漏洞的哈希),暴力破解固定值等。

鉴于有许多没有已知漏洞的哈希值,并且如果您假设选择固定值的人并不愚蠢……这可能是一个艰难的 cookie,除非您具有良好的密码分析技能。

所以如果设计算法的人不傻的话,这个问题就很难解决。但他们可能...

于 2010-05-19T22:29:22.473 回答
1

假设系统在密码学上很强大,知道这些密钥对你没有好处。现在,许多这样的系统是由那些太便宜而无法购买真正的 keygen 的人实施的,所以你可能仍然有希望。

信封估计的后退一点说,这样的密钥有 125 条(原来是 800 哎呀,谢谢你抓住了)信息,如果你对那个空间进行了足够多的采样,你可能会进行某种攻击,但你是谈论大量的样本点。但是,嘿,您在业余时间还有什么其他计划?

即使是大人物也搞砸了,六年前,MSDN 密钥的生成方式出现了错误,导致某种暴力攻击。您会发现有人在 eBay 上出售 MSDN 订阅作为企业许可捆绑包的一部分。您将提交您的信息,他们会在几天内为您提供一个预先注册的 MSDN 帐户。我很确定他们正在利用实施中的一个错误并暴力强制注册,直到一个卡住为止。

我工作的一家公司买了一个,微软很荣幸,因为我们买它的时候并不聪明,但他们对卖给我们的人的地址感兴趣。

于 2010-05-19T21:40:23.557 回答
0

系统可以随机生成密钥,然后让客户端检查中央服务器。这与任何其他 DRM 算法一样安全,也就是说根本不安全。在这种情况下,外推是不可能的。

于 2010-05-19T21:36:15.500 回答
0

一般来说,答案是,“不,你不能做任何有用的事情。”

如果生成密钥的人变得懒惰并且未能使用索引号的某种加密质量散列(具有足够的位混合以阻止您的任何检查),那么您可能会假设某种功能形式的随机数字生成,看看您是否可以退出,例如,线性同余随机数生成器的模数,或一系列位混合移位和添加,例如在 Jenkins 散列函数或其他任何东西中。

没有算法可以从您发现的某些通用结构到产生所述结构的算法;与此类似的东西似乎是您所要求的。(这样的算法通常被证明是不可能的;如果你想要最简单的算法来计算你的密钥,那么问题与 Kolmogorov 复杂度的计算是同构的,这是非常难以计算的(“到目前为止实际上是不可能的”)。)

于 2010-05-19T21:41:35.300 回答