【发布时间】:2016-02-25 11:34:28
【问题描述】:
我想获得一些简单的方案/算法,用于根据一些唯一的硬件 id(cpu id 或以太网 MAC 地址或硬盘序列号)生成序列号。
我希望方案仅在一个方向上工作 - 因此客户端计算机上的应用程序可以验证序列号但不能生成序列号。 (所以破解起来并不简单)。
现在你们中的大多数人很可能会推荐某种 RSA 公钥/私钥对加密,它可以足够可靠地工作 - 客户端没有 RSA 私钥,因此他无法“生成”序列号。
但 RSA 签名的主要问题是它太大 - 它的签名大小为 128 或 256 字节,具体取决于 RSA 密钥大小 (RSA signature size?)
- 我希望序列号可以简单地从邮件复制粘贴到注册表单 - 所以最多 64 个字符,最好是 32 个字节。
好的,现在您可能会说这种保护不足以抵御暴力破解 - 您只需尝试所有组合以确定正确的序列号。
但我想说,通常你需要聘请“昂贵”的黑客或黑客团队来创建这样的暴力破解应用程序。
另外我认为可以为下一个版本的应用程序更改序列号生成算法,或者使用多轮传递来显着降低暴力破解速度。
作为基础,我更喜欢使用纯 C 或 C++(不是 C#),最好是 Windows / wincrypt.h 或任何现有的纯 C 源代码(最好不要使用大型 3 方库)。
是否可以创建 RSA 公钥/私钥对,使签名大小为 32 个字符?
【问题讨论】:
标签: c encryption rsa-key-fingerprint