微软序列号生成和验证的技术原理.doc_第1页
微软序列号生成和验证的技术原理.doc_第2页
微软序列号生成和验证的技术原理.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微软序列号生成和验证的技术原理!1.产品ID(ProductID)产品ID是由五组十进制数组成,如下:AAAAA BBB CCCCCCC DD EEE52273 005 6861993 09 146如果你用“ProductID”搜索注册表,你会发现一个与你安装的软件有关的产品ID。在Windows的控制面板里的系统里,你可以找到Windows 操作系统的产品ID。每组数字所代表的意义如下表:数字 意义AAAAA 产品编号,例:55661为windows pro版 55660为HOME版BBB 初级产品序列号的最高有效三位数字(见下文)CCCCCCC 初级产品序列号的最低有效六位数字以及校验数位的和 (见下文)DD 用来验证产品序列号的公开密匙索引.例:PRO版为22,VLK版为23EEE 随机值(用于电话激活时,产生不同的安装ID)在上面的CCCCCCC部分中,由一个校验数位和六个数字组成。校验数位是这样计算得到的:将所有数位相加,包含一个检验数位,可以被七整除。例:初级产品序列号的最低有效六位数字是7284397 + 2 + 8 + 4 + 3 + 9 = 33所以检验数位为2,因为7 + 2 + 8 + 4 + 3 + 9 + 2 = 33 + 2 = 35所得到的结果35可被七整除。所以产品ID中的CCCCCCC部分的结果为7284392。2、产品序列号组成这25位的序列号,是用来区分每份微软产品的产品序列号。产品序列号由五组被“-”分隔开,由字母数字混合编制的字符串组成,每组字符串是由五个字符串组成。如下:FFFFF-GGGGG-HHHHH-JJJJJ-KKKKK每个字符是取自于以下24个字母及数字之中的一个:B C E F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9采用这24个字符的原因是为了避免混淆相似的字母和数字,如I和1,O和0等,减少产生不必要的麻烦。这25个字符的产品序列号是由长度为114bits用二进制表示的产品序列号用Base-24进行编码得到的。114bits的二进制产品序列号按高位在后排列,各bit定义如下: X XXXXXXXX XXXXXXXX XXXXXXXXXXXXXXXXXX Total 114 Bits | | | 55 Bits Sign | | 28 Bits Hash | 30 Bits Serial 31 Bits Data 1 Bits FlagFlag: 不明标志,目前所见的各类Key中这一位总是为0。 Serial:产品ID的缩写,转成十进制表示为AAAABBBBBB,对应显示为: 零售版:xxxxx-AAA-BBBBBBx-xxxxx OEM版: xxxxx-OEM-0AAAABx-BBBBB 以上31bits总称为Data,是产品序列号中的基本部分。 Hash:Data经特定处理得到的结果,见后文。 Sign:Hash值的椭圆曲线签名,见后文。3、椭圆曲线签名算法所谓的椭圆曲线是指这样一类曲线方程:Y2 + a1XY + a3Y = X3 + a2X2 + a4X + a6在密码学里用的是它的两个特例,而微软公司用的更是特例中的特例:Y2= X3 + aX +b (mod p)当a、b、p选定后,就可以确定一个椭圆曲线,再选择一个生成点G(gx,gy),于是,存在一个最小的整数q使得qG=0,然后,再任意选择一个整数kq,求出点K(kx,ky)=kG,这样椭圆曲线签名算法的Key就全生成了:公开密钥为:a,b,p, G(gx,gy), K(kx,ky)私有密钥为:q,k要对Data签名时:(1).先任意选择一个整数rq,求点R(rx,ry)=rG;(2).将Data、rx、ry进行SHA-1(4)运算,取结果中的28位得到Hash;(3).求Sign = rHashk (mod q);(4).把Data、Hash、Sign三个数组合编码后得到25位的产品序列号。验证产品序列号时:(1).把25位产品序列号译码后,拆分为Data、Hash、Sign;(2).求点R(rx,ry)SignG + HashK(mod p);(3). 将Data、rx、ry进行SHA-1运算,取结果中的28位得到Hash;(4).如果HashHash,则该产品序列号为有效的。-【注意1】4. 公开密钥从前文可以看出,为了验证产品序列号,微软公司必须公开椭圆曲线签名算法中的公开密钥。我们可以从Windows XP安装光盘中的文件pidgen.dll的BINK资源里找到(其他产品如Office则被包在*.msi里)。而且一共有两组。从目前已知的Key组合来看,第一组公开密钥是用以零售版本的,第二组公开密钥则用于OEM版本。两个产品的Key能否通用就在于对应的公开密钥是否相同,比如中文版的Windows 2000的Pro/Srv/AdvSrv的第二组密钥也是相同的,即一个中文Windows 2000 Pro的OEM版的Key,可同时供 中文Windows 2000 Srv/Adv的OEM版使用。5.破解及其难度要破解产品序列号生成算法,必须从微软公司公开的密钥中求出对应的私有密钥,即只要求出q和k即可。从BINK中公开的密钥来看,p是一个384 bits的质数,看起来计算量好像至少要O(2168)才行,但微软公司设计中存在一个严重缺陷,使实际工作量降低到只O(228)就可以了。为什么相差这么远?回头看看2.(3)中的式子:Sign = r - Hash * k ( mod q )通常情况下q可以是很大的值,因此Sign应该也很大,但微软公司为了减少用户输入的产品序列号的数量,把Sign的值限死在55 bits,因此,自然也限定了q最多也不能超过56 bits。依此类推,由于k结论:我估计所有微软公司产品的序列号生成算法是一样的.只是公有密钥和私有密钥不同而已,只要我们求出私有密钥q和k,要生成序列号,就容易得多了.新版算号器的作者就是把各个版本的私有密钥q和k求出来了.新版算号器的工作流程:在新版算号器中输入初级产品ID的范围,就可以随机确定产品ID.初级产品ID中的前三位,根据算号激活成功经验和统计正版序列号的结果,每个版本都有特定数字.例在PRO版中010,011激活成功机率很高,在HOME版中005,006激活机率很高.后7位中有一位是效验位,其它6位随机指定即可,所以只需输入6位

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论