为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

利用CPU ID 实现基于背包算法的软件注册功能

2010-04-02 3页 pdf 102KB 19阅读

用户头像

is_151665

暂无简介

举报
利用CPU ID 实现基于背包算法的软件注册功能 现 代 计 算 机 ^ 总 第 _ - 八 七 期 实践与经验 刘平安 , 罗林开 (厦门大学 自动化系,厦门 361005) , 一 摘 要:传统的软件保护方式通常采用“用户名”和“注册码”对应的机制,这种方法安全性很差。本文提出了 一 种采用软件所装机器CPUID号作为原始码,并通过背包算法加密的软件注册功能实现方案。 关键词:注册码;CPUID;超递增背包序列;普通背包序列;加密/解密 引 言 软件通常采用在限定时间内试用,通过合法用 户注册产生注册码...
利用CPU ID 实现基于背包算法的软件注册功能
现 代 计 算 机 ^ 总 第 _ - 八 七 期 实践与经验 刘平安 , 罗林开 (厦门大学 自动化系,厦门 361005) , 一 摘 要:传统的软件保护方式通常采用“用户名”和“注册码”对应的机制,这种安全性很差。本文提出了 一 种采用软件所装机器CPUID号作为原始码,并通过背包算法加密的软件注册功能实现。 关键词:注册码;CPUID;超递增背包序列;普通背包序列;加密/解密 引 言 软件通常采用在限定时间内试用,通过合法用 户注册产生注册码的方式进行保护。然而,这种方 法一旦用户名和注册码被泄漏便可以无限制地在 任何机器上注册使用,完全失去了其保护能力。 本文采用 CPU ID号和用户名并作一些简单 处理作为软件加密的原始码,通过网络或其他方式 传递给软件开发者,然后经过普通背包序列加密原 文,反馈给合法用户,合法用户使用该加密后的“注 册码”注册软件 ,在程序运行时使用一超递增背包 序列解密密文 ,可以解析出一 CPUID,如果是注册 用户 自己的机器 ,则该 CPU ID和机器 CPU ID相 同,可以合法使用。由于加密密钥在开发者手中, 其他人很难解密密文,从而大大提高了软件合法使 用的安全性。 1 保护机制分析 背包问题 :给定一堆物品,每个重量不同,能否 将这些物品中的几件放入一个背包中,使其等于一 给定的重量?数学描述 :给定一系列值 Mt,M ,...,M 和一个和值 S,计算机 b;使之满足 : S:blMl+b ⋯+b bi的值可为 0或 l,l表示该物品在背包中,0 表示不在。 一 般来说,解决这个问题所需的时间会随着堆 中物品个数增加而呈指数增长。 o MODERN COMPUTER 2004.5 一 一 一 Merkle-Hellman:背包算法的思想是将消息 编码为背包问题的解。明文分组长度等于堆 中物 品个数 ,且明文位与 b的值相对应 ,密文就是计算 得到的和值。 超递增序列 :如果一个序列 ,它的每一项都大 于它之前所有项之和 ,那么就称为一个超递增序 列。例如:{2,3,6,l3,27,52}。 在本文中,明文就是客户的机器 CPU ID号加 上用户名经过简单处理的信息串。由于每台机器 的 CPU ID号都不同,利用 CPU ID号的唯一性可 以避免常用的注册方法中“用户名”和“注册码”泄 漏导致的加密失效。因为在一台机器上的 “用户 名”(经过和 CPU ID信息处理后)在另外一台机器 上是无效的,即使“注册码”泄漏 了也不能正常使用 软件。 一 般 ,超递增背包问题的解很容易找到 ,可 以 把易解的超递增背包序列作为私人密钥 而对于 普通(非递增)的背包是难解的问题 ,因此,我们把 和超递增背包 问题具有相 同解 的普通的背包问题 用来作为公开密钥,它可 以很容易地被用来加密明 文但不能用来解密密文。这样 ,不知道私人密钥的 人要破译密文就不得不解一个非常难的背包问题。 2 具体实现 (1)CPU ID 的获取 AnsiString GetCPUID(void) 维普资讯 http://www.cqvip.com { . int EAX 一 'EDX ,ECX_; _ a~/n { MOV EAX,01H CPUID MOV EAX _ ~EAX MOV EDX _ , EDX } if(EDX_&Ox(X)(O 1O0) {一a锄 { MOV EAX,03H CPUID MOV EDX _ ,EDX MOV ECX.-。ECX } } return AnsiString(IntToHex(EAX_,8)+IntToHex(EDX ,8)+ IntToHex(ECX_,8)); } (2)产生超递增背 包 bool ProduceSuperIncreasingKnapsack( 1ongint ip/ 返 回二进制 串 /, int count/*序列产生项数 /) { long int sum .temp--0; Randomize(); for(int i--O;iO) { //gcd为求最大公约数函数 //m与n互素igcd=gcd(temp。n,&tempx,&tempy); if(igcd==1) MODERN COMPUTER 2004.5 o 理 代 计 算 枫 ^总 第 一 八 七 期 维普资讯 http://www.cqvip.com 实践与经验 {m---temp;bnag=true;break;J ) !bra~S)returnfalse; //生成一般背包序列 int64 Imp; forO----O;j
/
本文档为【利用CPU ID 实现基于背包算法的软件注册功能】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索