许可证密钥模式检测?

7

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

假设我有一组200个已知有效的许可证密钥,用于虚构软件的许可算法,其中一个许可密钥包含5组大小写不敏感(全部大写)的字母数字字符。例如:HXDY6-R3DD7-Y8FRT-UNPVT-JSKON

是否有可能(或很可能)推断出系统的其他可能密钥?

如果已知该集合是连续的,那么方法将如何改变,这会带来什么样的优势?

我以前听说过“keygens”,但我认为它们可能是通过反编译许可软件而非检查已知有效密钥制作的。在这种情况下,我只获得了密钥集,并且必须确定算法。我还被告知这是行业标准算法,所以它可能不是基本的算法,尽管可能性总是存在的。

如果您认为这不适合在Stack Overflow上提问,请至少建议我寻找其他地方或提出问题。我真的不知道从哪里开始解决这个问题。我甚至不知道这种问题的术语。


4
我被告知这是一个行业标准算法,因此它可能不是基础知识。这听起来可疑,似乎不是一个思维实验。 - Michael Mrozek
好的,我把这个短语去掉了。这是一个问题,我正在尝试解决它。它有一个已知的解决算法(虽然我不知道),我要尝试推断出来,给定这200个组合。 - Ricket
2
这是一个故意破坏的算法吗,比如为了完成作业而需要识别故障模式?因为一般来说,除了暴力搜索之外,没有已知的解决方案。 - Ukko
密钥可以“离线”使用,也就是说肯定有一种算法用于生成密钥,并因此可用于检查它们的有效性。 - Ricket
5个回答

1

假设该系统具有加密强度,了解这些密钥对你没有好处。 现在,许多此类系统都是由太过吝啬以至于无法购买真正的密钥生成器的人实现的,所以你仍然有希望。

简单的估算表明,这样一个密钥有125 (原文是800糟糕,谢谢你注意到了)位信息,如果你采样足够的空间,你可能能够进行某种攻击,但是你需要大量的采样点。但是,嘿,你还有什么其他计划可以利用你的业余时间呢?

即使是大公司也会搞砸,六年前,MSDN密钥的生成方式存在错误,允许某种暴力攻击。你会发现有人在eBay上出售作为企业许可包的MSDN订阅。你提交你的信息,他们会在几天内给你一个预注册的MSDN帐户。我相信他们正在利用实现中的漏洞并通过不断尝试的方式强制注册,直到成功。

我曾经在一家公司工作时购买过其中一件商品,因为我们购买时并不知情,所以微软承认了它,但他们对出售给我们的人的地址感兴趣。


1
你从哪里得到800位?以每个字符8位计算,最多只有200位(25*8)。考虑到字符空间通常为2-9和A-Z,除了A、E、I、O、U之外,共有30个可能的字符,我得出每个字符约5位或约125位。我们排除0、1因为它们与O和I的歧义,而且排除元音字母,因为你会惊讶地发现,随机字符串往往会形成某些人会觉得冒犯的单词! - Bob Kaufman
2
哎呀,你能相信我在我的信封上洒了咖啡吗;-) 我猜每个位置有32个可能的值,因为32是一个好数字,而且它省略了一些情况,比如1和l。然后我取32 = 2 ^ 5,做了什么鬼知道的事情。我把32 * 25乘起来了,而不是32 * 5,前者得到800,后者得到正确的估计值160。这与您使用较小字母表进行的125位计算相匹配。如果有任何安慰的话,我所有的数学都是在脑海中完成的,我想这可能更加证明了我的罪行... - Ukko

1

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

如果您研究生成密钥的常见算法,可能会得出一系列可能的属性。然后,您可以使用归纳逻辑编程来找到所有有效密钥适用但无效密钥不适用的属性。(您还需要一组无效密钥,但这些很容易生成)。从结果中,您理论上可以编写一个密钥生成器。如果能够使其正常工作,您也可以撰写一篇论文。祝好运。

然而,如果它们在线验证,则可能只是伪随机数,需要与数据库进行检查。在这种情况下,您就完了。


1

在一般情况下,这是非常难解决的。然而,如果

我也被告知它是一个行业标准算法

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

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

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

鉴于有很多哈希没有已知的漏洞,而且如果您认为选择固定值的人不是笨蛋......这可能是一个棘手的问题,除非您具备良好的密码分析技能。

因此,如果设计算法的人不是笨蛋,则该问题非常难以解决。但他们可能是...


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

这不是问题;算法确实存在,我需要找到它。 - Ricket
1
你“需要”解决你的思维实验?对我来说听起来已经不那么假设了。 - Chad Birch

0

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

如果生成密钥的人懒惰并且未使用某种密码质量的哈希函数(具有足够的位混合以防止您进行任何检查),那么您可以假设某种功能形式的随机数生成,并查看是否可以反推出例如线性同余随机数生成器的模数,或者像Jenkins哈希函数中的一系列位混合移位和加法等。

没有算法可以从您发现的某个通用结构转换为生成该结构的算法;这类似于您所要求的内容。 (这样的算法在一般情况下是无法证明的;如果您想要能够计算密钥的最简单算法,则问题等同于计算Kolmogorov复杂度,这是非常困难的(“迄今为止实际上是不可能的”)。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接