穷人序列号生成方案

塔尔莫·皮卡罗

我想获得一些简单的方案/算法,用于根据一些唯一的硬件ID(CPU ID或以太网MAC地址或硬盘序列号)生成序列号。

我希望方案仅在一个方向上起作用-因此客户端计算机上的应用程序可以验证序列号,但不能生成一个。(因此破解起来并不容易)。

现在,很可能大多数人会建议使用某种RSA公用/专用密钥对加密,这种加密可以足够可靠地工作-客户端没有专用RSA密钥,因此他无法“生成”序列号。

但是RSA签名的主要问题在于它太大-根据RSA密钥大小(RSA签名大小?),它的签名大小为128或256字节

  • 我希望序列号是从邮件到注册表格的简单复制粘贴-最多64个字符,理想情况下为32个字节。

好的,现在您可能会说这种保护还不足以抵抗暴力破解—在这里,您只需尝试所有组合以确定正确的序列号即可。

但是我会说,通常您需要雇用“昂贵的”黑客或黑客团队来创建这种暴力破解应用程序。

另外,我认为可以为下一版本的应用程序更改序列号生成算法,或者使用多轮传递来显着降低蛮力。

作为基础,我更喜欢使用纯C或C ++(不是C#),最好使用Windows / wincrypt.h或任何现有的纯C源代码(最好不是庞大的第三方库)。

是否可以创建RSA公钥/私钥对,使签名大小为32个字符长?

烈瑞恩

您可能要签出ECDSA

ECDSA是类似于RSA的公钥算法,但是具有比RSA更短的密钥和签名,以提供相同级别的有效安全性。ECDSA基于椭圆曲线密码学。RSA中使用的整数分解问题和ECDSA中使用的椭圆曲线都简化为离散对数问题,这被认为很难解决。

例如,对于与1024位RSA相同的安全级别(据估计具有大约80位安全性),可以使用160位ECDSA密钥,该密钥产生320位签名。您可以将64位签名的base64编码为54个字符的字符串,或者将ascii85编码为50个字符的字符串。

另外,如果您想使用base64编码保留32个字符(最多可容纳192位数据),则可以使用具有96位密钥大小的ECDSA。96位ECDSA的有效强度是48位,通常不足以进行适当的加密,但是对于您而言,攻击者通过反向工程程序删除许可证密钥检查可能比尝试进行加密更容易。生成一个伪造的密钥。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章