25位产品密钥是如何工作的?

13

微软产品和其他产品通常有一个由5组5个字符组成的产品密钥,就像这样:

ABCDE-12345-ABCDE-12345-VWXYZ

这些产品是如何知道密钥是否有效的呢?是使用某种密码学算法吗?如果我想在我的代码中使用这种产品密钥,是否有相关库可供使用?


3
微软可能永远不会公开他们的算法。 - Rafe Kettler
5
就像27个字符的产品密钥一样,只是更快。只要没有人想出23个字符的产品密钥,我们应该就没问题了 :-) {向法雷利兄弟道歉}。 - paxdiablo
2
我曾想过,为什么是25呢?然后计算出,25是编码128比特数据所需的最小符号数量。而且25是5的倍数,这允许进行均匀分组。这些密钥对于数据容量和人类可读性都非常精细地设计! - ogurets
@ogurets - 只有114位比特 - 因为每个字符是24个中的一个,而不是你假设的36个 :p - Jaromanda X
1
@JaromandaX,26个字母+10个数字。我不知道我缺了什么。 - ogurets
抱歉,我指的是微软使用的是base24而不是base36。 - Jaromanda X
3个回答

6
您可能想要查看有关如何实现序列号验证功能的此文章。它还涵盖了一些高级技术,例如如何跟踪keygen、泄漏密钥等。
简而言之,在这样的密钥中通常有三个基本字段:
  • 实际序列号,该文章称之为“种子”
  • 一些验证数据;代码只检查验证数据的部分内容
  • 校验和、CRC或其他简单的防错机制
通过仅在代码中实现部分验证数据检查,您可以执行诸如“真实验证”(在这种情况下,其余验证将在您的服务器上进行)或通过在新版本中检查不同的验证数据子集来避免keygen等操作。

3
针对微软产品,有一些相关知识。
在Windows XP上,产品密钥使用自定义字母表进行基于24位的编码。它由序列号(源称其为“原始产品密钥”)和数字签名组成。source 在Windows 8及以上版本中,产品密钥在软件专利申请WO 2012067888 A1中有一些文档。它仍然是基于24位编码(法案57等等,在实践中意味着使用“N”的位置作为解码的第一个字符)。其要点是Windows 8及以上版本的产品密钥包括以下几个部分:
  • 组ID,表示类型/版本/系列/分销渠道,见第34条
  • 序列号(与组ID一起形成“原始产品密钥”)
  • 安全值1和2(具有不同级别的安全性,两者可能都是签名,参见第34条等,46、55)
  • 校验和(第56条,在实践中是对密钥进行截断的POSIX cksum)
  • 升级位

0

确认密钥有四种方法。

  1. 简单地与exe中的现有字符串进行比较(极易破解)。
  2. 算法比较输入的字符字符串(几乎和#1一样容易。完全取决于黑客的逆向工程技能)。
  3. 通过互联网与服务器进行比较。(可以被规避)
  4. 硬件加密狗。

根据您从微软获得的产品,他们使用上述前三种机制之一。例如,他们的操作系统通常会自动连接到服务器;但是他们的开发工具要么内置密钥,要么进行算法比较。他们的一些旧操作系统曾经使用过算法。

还有一种修改后的选项3,即应用程序定期连接到服务器,通常基于某些事件。在操作系统的情况下,微软会验证输入的产品密钥以获取某些Windows更新和其他产品下载。此外,根据许可证密钥本身,它可能每月或更长时间连接一次。顺便说一句,中国拥有IE6的最大安装基数的原因是有其特殊的原因。

第四个选项也可以被规避。通常黑客会修补您的产品,以绕过执行硬件检查的代码部分。

1
@ArsenMkrt:关键是,你可以让它变得困难,但不是不可能。你应该让它足够困难,以至于普通人会直接支付你试图保护的任何东西的费用。无论如何,骗子都会成为骗子。 - NotMe
2
选项3可以被任何能够反汇编和调整自己的网络路由器或DNS服务器的人绕过。设置一个虚假的认证服务器并将流量定向到它是微不足道的。如果程序使用SSL证书或类似物验证服务器的真实性,那么简单的十六进制编辑器就可以用来用攻击者伪造的证书覆盖它。简而言之:如果它在别人的计算机上运行,你最终无法百分之百地保护它。 - cdhowie
1
@Pacerier 这方面有什么想法吗?请记住,仅在传输层使用加密并不能防止局部二进制代码进行篡改,从而跳过此类检查。(当然,假设没有 TPM 的情况下。) - cdhowie
1
@Pacerier 简单是一个相对的术语,也非常依赖于攻击者的专业程度。最终难度完全无关紧要——总会有人或某些团体找出漏洞,并在互联网上(咳咳)不那么光彩的地方公布结果。我能证明这一点吗?不能。你能给我展示一个反例,证明像这样的保护措施从未被攻破过吗?(我需要引用像 HD-DVD/AACS 这样的事情吗?) - cdhowie
抱歉,这完全没有回答问题。这个提议的答案解释了机制。问题是在问语义。 - IInspectable
显示剩余7条评论

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