Microsoft的25位CDKey里有什么?(转载)

12小时前 (13:16:45)阅读1回复0
丸子
丸子
  • 管理员
  • 注册排名9
  • 经验值56530
  • 级别管理员
  • 主题11306
  • 回复0
楼主

  从Win98起,M$(编纂注:即Microsoft,下同) 的产物安拆Key从本来的10位数字改为25位字符,那一改动,代表着M$辞别了简单的校验和,从此投入了椭圆曲线法的怀抱。从密码学的角度来看,那绝对是一个里程碑,因为其时椭圆曲线法仍在研究论证阶段,M$是第一个将之适用以贸易产物的厂家。

  那么在那25个字符里到底有什么呢?

  1.Base24

  那25个字符现实是114bits的数据用Base24停止UUCode后的成果,做为安拆Key,那个Base必需绝对制止误认,

  所以M$选择了以下那24个字符做为UUCode的Base:

  BCDFGHJKMPQRTVWXY2346789

  所以,若是你的安拆Key 有那24个字符以外的字符的话,你完全能够把它丢到垃圾筒里去了━━不消试就晓得它

  底子通不外了。

  2.114 bits

  UUDecode后得到的114位按Intel高位在后的格局表达如下:

  [ X XXXXXXXX XXXXXXXX XXXXXXXXXXXXXXXXXX ] Total 114 Bits

  | | | \ 55 Bits Sign

  | | \ 28 Bits Hash

  | \ 30 Bits Serial \ 31 Bits Data

  \ 1 Bits Flag /

  Flag: 不明标记,目前所见的各类Key中那一位老是为0。

  Serial:用户序列号,转成十进造表达为AAAABBBBBB,对应显示为:

  零售版:xxxxx-AAA-BBBBBBx-xxxxx

  OEM版: xxxxx-OEM-0AAAABx-BBBBB

  以上31bits总称为Data,是CDKey中的根本部门。

  Hash:Data经特定处置得到的成果,见后文。

  Sign:Hash值的椭圆曲线签名,见后文。

  3.椭圆曲线签名算法

  要阐明椭圆曲线签名算法可不是一件容易的事,有兴致的能够本身用“椭圆曲线”或是“elliptic curve”在搜索引擎

  找相关的材料来看吧,那里只简单介绍M$的用法。

  所谓椭圆曲线是指如许一类曲线方程:

  y^2 + a1*xy + a3*y = x^3 + a2*x^2 + a4*x + a6

  在密码学里用的是它的两个特例,而M$用的更是那两个特例中的特例:

  y^2 = x^3 + a*x + b ( mod p )

  当a、b、p选定后,就能够确定一个椭圆曲线,再选择一个生成点 G(gx,gy),

  于是,存在一个最小的整数q使得q*G=O,然后,再肆意选择一个整数 kq,求出点

  K(kx,ky)=k*G,如许椭圆曲线签名算法的Key就全生成了:

  公开密钥为:a,b,p,G(gx,gy),K(kx,ky)

  私有密钥为:a,b,p,G(gx,gy),q,k

  要对Data签名时:

  A.先肆意选择一个整数rq,求点R(rx,ry)=r*G;

  B.将Data、rx、ry共100个字节求SHA-1,取成果中的28位得到Hash;

  C.求Sign = r - Hash * k ( mod q );

  D.把Data、Hash、Sign三个数组合后UUCode得到25位CDKey。

  验证CDKey时:

  A.把25位CDKey先UUDecode再拆分后提到Data、Hash、Sign;

  B.求点R( rx, ry ) = Sing * G + Hash * K ( mod p );

  C.将Data、rx、ry共100个字节求SHA-1,取成果中的28位得到Hash’;

  D.若是Hash = Hash’,则该CDKey为有效Key。

  4.BINK

  畴前面的阐明能够看出,为了验证CDKey,M$ 必需公开椭圆曲线签名算法中的公开密钥,那么那个公开密钥放在

  哪里呢?谜底是在pidgen.dll里的BINK资本里(其他产物如Office则被包在*.MSI),并且一共有两组,从目前已知的

  Key组合来看,第一组密钥是用以零售版本的,第二组则用于OEM版本。两个产物的Key能否通用就在于对应的密钥

  能否不异,好比中文版的Windows 2000的Pro/Srv/AdvSrv的第二组密钥也是不异的,即一个PWindows 2000 Pro的

  OEM版的Key,可同时供 PWindows 2000 Srv/Adv的OEM版利用。

  5.破解及其难度

  要破解CDKey的生成算法,必需从M$ 公开的密钥中求出对应的私有密钥,即只要求出q和k即可。从BINK中公开的

  密钥来看,p 是一个384 bits的量数,看起来计算量好象至少要O(2^168)才行,但M$设想中一个缺陷(?)使现实

  工做量降低到只要O(2^28)就能够了。

  为什么相差那么远?

  回头看看3.C中的式子: Sign = r - Hash * k ( mod q )

  凡是情状下q能够是很大的值,因而Sign应该也很大,但M$ 为了削减用户输入的CDKey的数量,把Sign的值限死在

  55 bits,因而,天然也限制了q最多也不克不及超越56 bits。依此类推,因为kq,所以k也不克不及超越56 bits,也就是说

  我们面临的只是两个最多2^56的数据罢了,用目前最通俗的算法也只要O(2^28)的工做量。

  做者曾经在一台赛扬II 800的机器上只用6个小时就解出某组密钥的q值,最多时在一台雷鸟1G上用了28个小时才

  算出另一组密钥的k值, 其他均匀大约都在十个小时摆布就能够求出。

  6.现实例子

   mskshow CCC64-69Q48-Y3KWW-8V9GV-TVKRM

  Key CCC64-69Q48-Y3KWW-8V9GV-TVKRM is for P-WinXP_Pro, Sign is OK.

  Flag = 0, Serial = 005-080936, Hash = 5AA62EB, Sign = ED6AA259.

  This key is for Windows XP Pro, Simplified chinese OEM/MSDN, serial is xxxxx-005-080936x-xxxxx

   mskshow GJ27Y-XHH2X-GRR3G-Q3WVJ-H9P33

  Key GJ27Y-XHH2X-GRR3G-Q3WVJ-H9P33 is for E-WinXP_Pro-2, Sign is OK.

  Flag = 0, Serial = OEM-006400-00001, Hash = 2177C11, Sign = 79B54F13.

  This key is for Windows XP Pro, English Corporate Select Editions, serial is xxxxx-OEM-006400x-00001

   mskshow BCC64-69Q48-Y3KWW-8V9GV-TVKRM

  Key BCC64-69Q48-Y3KWW-8V9GV-TVKRM is for Unknow Product, Sign is not check

  Flag = 0, Serial = 005-080936, Hash = 5AA62EB, Sign = 564E8259.

  This key is for some product I don’t know, serial is xxxxx-005-080936x-xxxxx

   mskshow ACC64-69Q48-Y3KWW-8V9GV-TVKRM

  Invaild key: ACC64-69Q48-Y3KWW-8V9GV-TVKRM.

  This key is not a vaild M$ CD key.

  Author: Bug Fix

0
回帖

Microsoft的25位CDKey里有什么?(转载) 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息