频道直达 - 学院 - 下载 - 交易 - 截图 - 特效 - 字库 - 手册 - 排名-工具 - 繁體
设为首页
加入收藏
联系我们
建站搜索: 虚拟主机  域名注册   常用广告代码      用户注册 | 用户登陆
您当前的位置:中国建站之家 -> 网站开发 -> ASP -> 文章内容
精彩推荐
热门文章
· 注册码大全二
· 注册码大全四
· 注册码大全一
· 通过google 赶快来赚..
· [图文] 头像-qq头像(..
· 要10G免费网络硬盘的..
· 注册码大全三
· 注册码大全十
· [图文] 梦幻背景图片..
· [图文] 卡通动物图片..
相关文章
· 鼠绘技术内幕完全接触-..
· 将数字格式的计算结果转..
· JSP中的page,request,se..
· 在 WIN 平台上让你的 Ap..
· 再论程序的执行速度的问..
· 快速眼睛画法
· 用VB 6封装ASP代码, 制作..
· Photoshop 模仿浪漫的“..
· ASP.NET虚拟主机的重大安..
· CNNIC成为反恶意软件工作..
Microsoft的25位CDKey里有什么
作者:未知  来源:转载  发布时间:2005-7-25 21:20:14  发布人:acx

减小字体 增大字体

从win95起,microsoft的产品安装key从原来的10位数字改为25位字符,这一改动,代表着microsoft告别了简单的校验和,从此投入了椭圆曲线法的怀抱。从密码学的角度来看,这绝对是一个里程碑,因为当时椭圆曲线法仍在研究论证阶段,microsoft是第一个将之实用以商业产品的厂家。那么在这25个字符里到底有什么呢?
  1.base24
  这25个字符实际是114bits的数据用base24进行uucode后的结果,做为安装key,这个base必须绝对避免误认,所以microsoft选择了以下这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”在搜索引擎找相关的资料来看吧,这里只简单介绍microsoft的用法。
  所谓椭圆曲线是指这样一类曲线方程:
  y^2 + a1*xy + a3*y = x^3 + a2*x^2 + a4*x + a6
  在密码学里用的是它的两个特例,而microsoft用的更是这两个特例中的特例:
  y^2 = x^3 + a*x + b ( mod p )
  当a、b、p选定后,就可以确定一个椭圆曲线,再选择一个生成点 g(gx,gy),
于是,存在一个最小的整数q使得q*g=o,然后,再任意选择一个整数 kk(kx,ky)=k*g,这样椭圆曲线签名算法的key就全生成了:
  公开密钥为:a,b,p,g(gx,gy),k(kx,ky)
  私有密钥为:a,b,p,g(gx,gy),q,k
  要对data签名时:
  a.先任意选择一个整数r  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,microsoft 必须公开椭圆曲线签名算法中的公开密钥,那么这个公开密钥放在哪里呢?答案是在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的生成算法,必须从microsoft 公开的密钥中求出对应的私有密钥,即只要求出q和k即可。从bink中公开的密钥来看,p 是一个384 bits的质数,看起来计算量好象至少要o(2^168)才行,但microsoft设计中一个缺陷(?)使实际工作量降低到只有o(2^28)就可以了。
  为什么相差这么远?
  回头看看3.c中的式子: sign = r - hash * k ( mod q )
  通常情况下q可以是很大的值,因此sign应该也很大,但microsoft 为了减少用户输入的cdkey的数量,把sign的值限死在55 bits,因此,自然也限定了q最多也不能超过56 bits。依此类推,由于k在一台赛扬ii 800的机器上只用6个小时就解出某组密钥的q值,最多时在一台雷鸟1g上用了28个小时才算出另一组密钥的k值,其他平均大约都在十个小时左右就可以求出。

先贴上再说,有空在再来研究
[打 印]
[] [返回上一页] [收 藏]
上一篇文章:一个很强的验证脚本
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 人才招聘
网站合作、内容监督、商务咨询:QQ: 9576619
Copyright ? 2005--2008 中国建站之家版权所有
未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
免责申明:中国建站之家(www.jz123.cn)上的所有提供下载的软件和资源
均来源于网络,为软件或程序作者提供和网友推荐收集整理而来,仅供学习
和研究使用。如有侵犯你的版权,请立即联系我们,本站将在3个工作日内删除。
粤ICP备05092265号