序列号加密算法
授权系统中密钥的安全性基于非对称加密算法。当前版本实现了密钥长度为 1024 到 16384 位的 RSA 算法。未来的版本计划实现基于 ECC 以及对称+非对称组合密码学的其他算法。
使用的算法对于每种产品都是唯一的。用一种算法生成的密钥不能与另一种算法一起使用,这意味着在创建至少一个授权后更改算法是不允许的。受保护程序中的保护模块“知道”序列号是使用哪种算法加密的,并且不会接受使用其他算法或使用相同算法但参数不同(例如,不同的密钥长度)生成的密钥。
RSA算法
序列号使用 RSA 算法加密如下:
- 在序列号的开头添加随机数据 - 方法基于 RFC2313,但实现方式略有不同。以下字节添加到密钥的开头:00 02 NN...NN 00,其中 NN..NN 是 8 到 16 个随机非零字节。字节数是随机的,但系统会考虑密钥的长度及其最大容量。
- 在序列号末尾添加随机数据 - 序列号中的总字节数必须等于算法密钥中的位数除以 8。序列号附加相应的字节数保持随机数据。结果,产生了以下序列号格式:00 02 NN..NN 00 DD..DD MM..MM,其中NN是一组随机非零字节,DD是原始序列号,MM是一个一组随机字节(包括零)。序列的摘要长度应等于算法的密钥中的位数除以 8。
- 加密 使用许多库中实现的典型过程来处理大数字。PHP 生成器包含所有必需的信息。
- 压缩 - 加密后获得的一组字节被编码为 base-64 – 这是一个发给客户的序列号。