这不是真实情况;请忽略您认为适用的法律问题,因为他们没有。
假设我有一组200个已知的有效许可证密钥用于假设的软件许可算法,许可证密钥由5组5个字母数字不区分大小写(全部大写)组成。示例:HXDY6-R3DD7-Y8FRT-UNPVT-JSKON
是否有可能(或可能)推断系统的其他可能密钥?
如果已知该组是连续的,该怎么办?这种情况如何改变方法,这会带来什么样的优势呢?
之前我听说过“keygens”,但我相信它们可能是通过反编译许可软件而不是检查已知的有效密钥来制作的。在这种情况下,我只给出了一组键,我必须确定算法。我也被告知这是一个行业标准算法,所以它可能不是什么基本的东西,尽管我认为机会总是在那里。
如果您认为这不属于Stack Overflow,请至少建议一个替代的地方让我查看或提出问题。老实说,我不知道从哪里开始这样的问题。我甚至都不知道这类问题的术语。
答案 0 :(得分:1)
假设系统在加密方面非常强大,知道这些密钥对你没有好处。现在,许多这样的系统都是由那些太便宜而无法购买真正的keygen的人实现的,所以你可能仍然有希望。
信封评估的一小部分后面说,这样一个密钥有125个(800哎呀,感谢捕获)信息,如果你对这个空间进行足够的采样,你可能会做出某种攻击,但是你在谈论大量的样本点。但是,嘿,你有什么其他的业余计划吗?
即使是大家伙也搞砸了这一点,半年前,MSDN密钥的生成方式出现了错误,导致某种暴力攻击。你会发现在eBay上销售MSDN订阅的人是公司许可包的一部分。您将提交您的信息,他们会在几天内为您提供预先注册的MSDN帐户。我很确定他们正在利用实施中的一个错误,并强制注册,直到一个卡住。
我工作的一家公司买了一个,微软很尊重它,因为我们买的时候并不聪明,但是他们对把它卖给我们的人的地址感兴趣。
答案 1 :(得分:1)
离线验证的密钥往往由一组属性定义。某些位子集具有特定值或对称性。如果传递给某些仿函数的某些字节子集返回预期结果,则该密钥被认为是有效的。
如果您研究了生成密钥的常用算法,您可能会想出一系列可能的属性。然后,您可以使用归纳逻辑编程来查找哪些属性适用于所有有效密钥,而不是无效密钥。 (您还需要一组无效键,但这些键很容易生成)。从结果中你理论上可以写一个keygen。你也可以用它来写一篇论文,如果你能让它发挥作用的话。祝你好运。
如果它们在线验证,它们可能很简单,就是根据数据库检查的伪随机数。在那种情况下,你是SOL。
答案 2 :(得分:1)
在一般情况下,这是非常难以解决的。但是,如果
我还被告知这是一种行业标准算法
如果是这种情况,您应该获得这些“标准算法”的列表,并分析它们的弱点。
我天真的猜测是,大多数密钥生成的形式为x || hash(x || fixed),其中x是每个键的随机生成值,fixed是固定值。使用此表单,可以非常轻松地验证密钥(提取x,计算哈希值(x ||固定),看它是否匹配)。
假设你知道使用的确切算法,你要么必须找到算法中的弱点(不太可能,除非他们使用具有已知漏洞的哈希),强制使用固定值等等。
鉴于有很多哈希没有已知的漏洞,如果你认为选择固定值的人并不愚蠢......这可能是一个艰难的cookie,除非你有很好的密码分析技能。
如果设计算法的人不傻,那么问题很难解决。但他们可能是......
答案 3 :(得分:0)
系统可以随机生成密钥,然后让客户端检查中央服务器。这与任何其他DRM算法一样安全,也就是说根本不安全。在这种情况下,推断是不可能的。
答案 4 :(得分:0)
一般来说,答案是,“不,你不能做任何有用的事情。”
如果生成密钥的人变得懒惰并且未能使用索引编号的某种加密质量哈希(具有足够的位混合以阻止您的任何检查),那么您可能会假设某种功能随机数生成的形式,看看你是否可以退出,例如,线性同余随机数发生器的模数,或一系列比特混合移位和添加,如在Jenkins散列函数或其他任何内容。
没有算法可以从您发现的某些通用结构转到生成所述结构的算法;类似于此的东西就是你想要的东西。 (一般来说,这样的算法是不可能的;如果你想要最简单的算法来计算你的密钥,那么这个问题就与Kolmogorov复杂度的计算是同构的,这是非常困难的(迄今为止“实际上是不可能的”)计算。)