以下是一篇文章,我发现最近。 这其中一个最全面的说明密码 验证值( PVV ) 黑客 。
我想复制在这里为我的地方参考。
正如评论作了语法中所使用原始文字 ,我已经纠正了一些明显的错误,同时保持背景下的原始材料 。
http://69.46.26.132/ 〜 biggold1/fastget2you/tutorial 。 PHP的
--- 原文 ----
前言
你曾经不知道会发生什么,如果你失去你的信用卡或借记 卡 ,并有人认为。 此人将能提取现金从ATM机猜测,不知何故, 密码 ? 此外,如果你是谁发现某人的信用卡你会尝试猜测密码 ,并有机会获得一些轻松赚钱 ? 当然,这两个问题的答案应该是“没有” 。 这项工作不涉及第二个问题,这是一个个人道德 。 现将我尝试回答第一个问题。
所有的信息用于这方面的工作是公开和可自由在互联网 。 其余的一个问题是数学和编程,因此,我们可以学到一些东西 ,并且有一定的乐趣。 本人透露任何秘密。 此外,我们的目标(和最后的结论 )这方面的工作,以证明密码算法仍然强大到足以提供足够的安全 。 我们都知道技术并不弱一点 。
这项工作分析最常见的密码算法, VISA卡PVV ,被许多提款卡 ( 信用卡和借记卡) ,并试图找出抗药性是密码猜测攻击。 由“猜测: ”我不意味着选择一个随机密码 ,并试图在自动取款机。 众所周知,通常给我们连续三年进入审判的权利的PIN ,如果我们不能保持自动柜员机卡 。 签证 密码是四位数长很容易推断的机会随机密码猜测是万分之三= 0.0003 ,似乎足够低的安全,这意味着你需要失去您的信用卡超过3000次(或失去超过3000卡在同一时间: ) ,直到有一个合理的亏损 。
我真正含义“猜测”是打破了密码 算法 ,以便提供任何卡您可以立即知道相关的个人识别号码 。 因此,本文件研究这种可能性,分析了算法 ,并提出了一种对此次袭击事件 。 最后给出了工具,实施攻击,目前的估计结果的机会,打破制度。 请注意,只要其他银行 安全相关算法(其他号码格式,如IBM公司的个人识别号码或信用卡验证签名,如CVV或CVC的)类似签证 的个人识别号码 ,同样的分析可以做到高产,几乎在同样的结果和结论。
签证 PVV 算法
最常见的密码算法是签证 的PIN 核查价值( PVV ) 。 客户是一个密码和磁条 卡 。 编码的磁条是一个四位数的编号,称为PVV 。 这个数字是一个加密签名的个人识别号码和其他有关的数据 卡 。 当用户输入他/她的个人识别号码的ATM读取磁条 ,加密和发送所有这些资料的中央计算机。 有一个审判PVV是计算客户输入密码和信用卡信息的加密算法 。 审判PVV是与PVV存储在信用卡 ,如果它们匹配的中央计算机返回到自动柜员机授权交易 。 查看更详细。
说明的PVV 算法中可以找到这两个文件中的链接前一页。 总之它的加密一个8字节( 64位)的字符串的数据 ,所谓的转化安全参数(总悬浮颗粒物) ,与DES 算法 (络)在电子密码本模式(欧洲央行)使用一个秘密的64位密钥。 该PVV来自产出的加密过程,这是一个8字节的字符串。 这四个数字PVV (从左至右)符合前四个小数(从左至右)的输出的DES时视为一个16十六进制字符( 16 × 4位= 64位)的字符串。 如果没有4个小数之间的16个十六进制字符然后PVV完成采取的(从左至右)非十进制字符和decimalizing他们使用转换一个“ 0的B - ” 1架C - “ 2 , D - “ 3 ,电子商务” 4架F - “ 5 。 下面是一个例子:
输出的DES : 0FAB9CDEFFE7DCBA
PVV : 0975
该战略是避免十进制跳过4个字符,直到找到小数(这恰恰是几乎所有的时间,我们将见下文) ,是非常聪明的,因为它避免了重要的偏见分配中的数字已被证明是致命的用于其他系统,但这一制度的影响将大大降低。 查看相关的问题也没有申请签证 PVV 。
的TSP问题,看作是一个16十六进制字符( 64位)的字符串,是形成(从左至右)在11右边的数字潘( 身份证号码) ,除最后一位数(检查码) ,一个数字从1至6其中选择加密的秘密钥匙和最后的四位数字的密码 。 下面是一个例子:
潘: 1234 5678 9012 3445
关键的选择: 1
密码 : 2468
TSP问题: 5678901234412468
很明显的问题,打破签证 密码组成的秘密找到加密密钥加密 。 该方法是做蛮力搜索的主要空间。 请注意,这是不是唯一的方法,我们可以试图找到弱点络,许多尝试,但仍然是旧标准中的广泛使用(现已改为AES和RSA的 ,虽然) 。 这表明它是不足以使蛮力是唯一可行的方法(也有一些更好的袭击,但没有在我们的实际情况,总结见LASEC备忘录和肮脏详情见比哈姆与沙米尔1990年,比哈姆与沙米尔1991年,松井1993年, 1994年比哈姆& Biryukov和Heys 2001年) 。
关键选择数字很可能推出,以支付的可能性,一个关键的妥协。 在这种情况下,他们只需要发行新卡使用的另一个关键选择。 旧卡可以取代新的或简单的ATM可以透明地谱写新的PVV (相应的新的关键并保持相同的密码 )下一次的客户使用他/她的信用卡 。 为摆脱安全的所有用户,应当要求改变其引脚,但是那将是令人尴尬的银行解释的原因,所以很可能他们不会作出这样的要求。
准备攻击
阿蛮力攻击包含在加密1重钙与已知PVV使用一切可能的加密密钥和比较每个获得PVV与已知PVV 。 当找到匹配我们有一个候选人的关键。 但是,有多少项,我们必须尝试? 正如我们在上述问题的关键是64位长,这就意味着我们必须尝试2 ^ 64项。 然而,这是不正确的。 实际上只有56位是有效的加密密钥,因为1位(最不重要的)的每一个字节是历史上保留作为校验的其他人;在实践中这些8位(每个8字节)将被忽略。
因此, 加密密钥空间包括2 ^ 56项。 如果我们试图将所有这些按键我们发现的唯一一场比赛,相应的银行密钥? 当然不是。 我们将获得许多配对键。 这是因为PVV是只有一小部分(四分之一)的加密输出。 此外, PVV是堕落,因为有些数字(这些介于0和5日的最后,从左至右,两位数的6至9 )可能来自一个十进制数字或从十进制十六进制数字的加密输出。 因此,许多钥匙将产生的DES产出收益率相同的匹配PVV 。
那么我们怎样做才能找到真正的关键在那些其他假阳性键? 只要我们有加密第二个不同的TSP ,也与已知PVV ,但只使用其中的候选键给予了积极配合第一的TSP - PVV一双。 但是也不能保证我们不会再次许多误报随着真正的关键。 如果是这样,我们将需要一个第三方的TSP - PVV一双,重复上面的过程,等等。
在我们开始我们的攻击 ,我们必须知道有多少的TSP - PVV对我们的需要。 为此,我们必须计算概率随机加密输出产量匹配PVV公正的机会。 有几种方法来计算这个数字在这里我将使用一个简单的办法很容易理解,但是这需要一些背景数学 概率 。
概率总是可以被看作是良好的比率情况下,可能的情况。 在我们的问题的一些可能的情况下,给出了置换的16要素( 0至F十六进制数字)的一组16人( 16个十六进制数字的加密输出) 。 这是由16 ^ 16 〜 1.8 * 10 ^ 19这当然符合2 ^ 64 (不同数目的64位) 。 这组数字可分为五类:
那些有至少四个十进制数字( 0到9 )的16个十六进制数字( 0至F )的加密输出。
这些完全只有三个小数。
这些完全只有两个小数。
这些完全只有一个小数位数。
那些没有小数(所有之间和F ) 。
让我们计算出有多少数量下降的每一类。 如果我们公司的16个十六进制数字的加密输出X1到x16那么我们可以标签头四个小数任何特定数目的第一类为西安,新疆, Xk和XL 。 在许多不同的组合与该配置文件是由该产品6的i - 1 * 10 * 6j - 1 - 1 * 10 * 6k -的J - 1 * 10 * 6路- 1 * 10 * 1616 - 1在6 '县来自一些可能性为A至F两位数, 10的来自可能性为0到9的数字,以及来自16的可能性为0至F两位数。 现在的总人数中的第一类是简单的总结提供此产品的字母i ,强,钾,升1日至16日,但与i “ j ” k “湖 如果你做一些数学的工作你会看到这等于给产品的六分之一百〇四的总和超过一的4至16 ( I型-1 ) * ( 1 - 2 ) * ( 1 - 3 ) * 6i - 4 * 16 16 - 1 〜 1.8 * 1019 。
类推的案件数目在第二类是所提供的字母i总和,强,钾从1到16 ,与i “ j ” K的产品6i - 1 * 10 * 6j - 1 - 1 * 10 * 6k约翰逊-1 * 10 * 616 - K报表,您可以工作到16岁! / ( 3 ! * ( 16-13 ) ! ) * 103 * 6 13 = 16 * 15 * 14 / ( 3 * 2 ) * 103 * 613 = 56 * 104 * 613 〜 7.3 * 1015 。 同样的第三类,我们总结了字母i ,强从1到16 ,与i “杂志6的i - 1 * 10 * 6j - 1 - 1 * 10 * 616约翰逊即16 ! / ( 2 ! * ( 16-14 ) ! ) * 102 * 614 = 2 * 103 * 615 〜 9.4 * 1014年。 同样,第四类,我们在总结了一的1至16 6i - 1 * 10 * 616 - 1 = 160 * 615 〜 7.5 * 1013 。 最后案件的数量在第五类是所给予置换六要素( A至F位)在一组16个,也就是616 〜 2.8 * 1012 。
我希望你之后的计算达到这一步,最困难的部分已经完成。 现在,作为一个证明,一切都是正确的,您可以总结案件的数量在5个类别,并看到它等于总人数的可能情况下,我们计算的。 这样的业务使用64位数字或四舍五入(为浮筒)或溢流(为整数)的错误不会让你得到确切的结果。
到现在为止,我们计算了一些可能的情况下每年的5个类别,但我们感兴趣的是获得一些有利的情况下代替。 这是很容易获得,后者从前者,因为这是刚刚确定的四个相结合的小数(或所需的十六进制数字,如果没有4个小数)的PVV而不是让他们自由。 这意味着在实践中把10的公式中上述成1的和所需的6的成1的,如果没有4个小数。 这就是,我们已经分裂的第一个结果是104 ,第二个是103 * 6 ,第三个是102 * 62 ,第四个10 * 63和第五1 64 。 然后,一些有利的情况下在5个类别的约1.8 * 1015 1.2 * 1012年, 2.6 * 1011 3.5 * 1010年,分别为2.2 * 109 。
现在,我们能够获得什么样的概率为己烯雌酚输出匹配PVV的机会。 我们只需要购买5个数字的有利情况下,分化它的总人数可能的情况。 这样做,我们得到的概率是非常约0.0001或三分之一的10000 。 这是很奇怪以及四舍五入结果如何呢? 不,只要看看我们的数字计算以上。 第一类主要由几个数量级的数量和可能的情况下有利。 这是相当直观的,因为它似乎很清楚,这是极不可能没有四个小数( 10机会了百分之十六位)之间的16个十六进制数字。 我们看到了以前的关系的一些可能的和有利的情况下在第一类是一个分裂的10 ^ 4 ,这就是我们的结果P值0.0001来自。
我们的目标,所有这些计算的是寻找有多少的TSP - PVV对我们需要进行一个成功的蛮力攻击 。 现在,我们能够计算出预期的一些误报在第一次搜索:这将是审判数量次的概率为单一随机假阳性,即吨*铁其中T = 2 ^ 56的大小,关键空间。 这相当于大约7.2 * 10 ^ 12 ,一个相当大的数目。 预计一些误报在第二个搜索(仅限于积极键发现在第一个搜索)将(吨*规划) *磷,第三搜索将是( (吨*规划) *规划) * p和等等。 因此氮搜查预期一些误报将吨*铁^北路
我们能够获得的搜索结果数量预计需要一个假阳性表示方程吨*铁^ 1例和解决的注 所以ñ等于对数的基1 /吨,这是它性能的对数收益率每组日志( 1 /吨) /日志(规划) 〜 4.2 。 因为我们不能做的分数搜索方便围捕这个数字。 因此,什么是预期一些误报,如果我们执行五个搜索? 它是T *铁^ 5 〜 0.0007或大约1个1400年。 因此,使用五年的TSP - PVV对是安全的,以取得真正的密钥,没有误报。
攻击
一旦我们知道我们需要五年的TSP - PVV对,我们如何让他们? 当然,我们需要至少一卡与已知旗杆 ,由于性质PVV 算法 ,这是我们唯一需要。 与其他的个人识别号码系统,如IBM ,我们将需要5个卡,但是这是没有必要有 VISA PVV 算法 。 我们只需要读取磁条然后更改密码 4倍,但阅读卡后,每一个变更。
要读磁条 卡获得PVV和加密的关键选择。 你可以购买一个商业磁条 读写器 ,或一个自己以下的指示,你可以找到的前一页的链接有。 一旦你得到了一个读者看到此说明的标准磁轨道找出如何让PVV的数据读取。 在该文件中的PVV领域的轨道1和第2款被认为是5个字符长,但实际上真正的PVV组成的最后四个数字。 第一个5位数的关键是选择。 我只看到卡,价值1在这个数字,这是符合标准和密钥从未受到损害(因此它们并不需要移动到另一个关键改变选择) 。
我没有一个简单的C程序, getpvvkey.c ,进行攻击 。 它是一个循环尝试所有可能的密钥来加密的第一个总悬浮颗粒物,如果衍生PVV比赛的真正PVV是一个新的TSP的审判,并依此进行,直至有一个不匹配,在这种情况下,关键是摒弃和一个新的是审判,或五个产生的相应PVVs比赛真正PVVs ,在这种情况下,我们可以假设,我们得到了银行密钥,但是循环推移,直到它废气的主要空间。 这样做是为了保证我们发现真正的关键,因为有机会(尽管非常低)的第一个关键发现是假阳性。
预计该计划将需要一个很长的时间来完成,并尽量减少风险的停电,电脑挂出,等它的检查站,进入文件getpvvkey.dat不时(确切的时间取决于速度计算机,这是约1小时,为目前速度最快的计算机中使用) 。 出于同样的原因,如果一个积极的关键是找到这是写在文件getpvvkey.key 。 该项目仅显示一个邮件的开头,开始采取的立场从检查点文件如果有的话,之后,更是没有任何显示。
对DES 算法是一个关键点的计划,因此,很重要的优化其速度。 我测试了几个实现: libdes , SSLeay ,的openssl , cryptlib ,高中, libgcrypt ,地下墓穴, libtomcrypt , cryptopp , ufc -隐窝。 该加密功能的前四个都是基于同样的代码由Eric Young和是其中表现最好(包括优化的C语言和x86汇编代码) 。 因此我选择libdes这是原来的执行和凝聚所有有关文件中的代码encrypt.c (丙版)和x86encrypt.s (的X86汇编语言版) 。 该代码是略作修改,以实现某种功能的蛮力攻击 :初次置换是一个固定的共同陡峭每个TSP的加密 ,因此,可以只在开始的时间。 另一项改进是,我写了一个全新setkey功能(我称之为nextkey )这是最佳的蛮力循环。
要获得该计划的工作你只需要输入相应的位置5 TSPs及其PVVs然后编译它。 我已经测试,只有在UNIX平台,使用的makefile Makegetpvvkey汇编(使用命令“使氟Makegetpvvkey ” ) 。 它可能对其他系统的编译,但您可能需要修正一些东西。 可以肯定的定义, 类型 long64对应的64位整数。 在原则上没有依赖于字节序的处理器。 我已经成功地编译和运行它的奔腾的Linux , α - Tru64为MIPS - Irix和Sparc - Solaris操作系统。 如果您没有和不想安装的Linux (你不知道你失踪;-)你还可以选择运行Linux的CD ,并使用我的程序,见我的网页上运行Linux ,但不进行安装它。
一旦您找到了秘密银行关键如果您要查找的 PIN任意卡你只是写了类似的计划(抱歉,我已经不写它,我太懒惰: ) ,将尽一切10 ^ 4码通过创造相应的TSP问题,加密的(不再)密钥,产生的PVV和比较它与PVV的磁条 卡 。 您将获得一场比赛的真正密码 。 只有一场比赛? 请记住我们所看到的上述情况,我们有机会的0.0001 ,一个随机加密匹配PVV 。 我们正在努力10000引脚(因此TSPs )因此,我们期望10000 * 0.0001 = 1假阳性的平均水平。
这是一个非常有趣的结果,这意味着,平均而言,每个卡有两个有效的管脚:客户PIN和预期的假阳性。 我把它称为“假” ,但指出,只要它产生的真正PVV这是一个个人识别号码一样有效的客户之一。 此外,也没有办法知道这是它,甚至对ATM机;只有客户知道。 即使假阳性是不能作为有效的个人识别号码后,您仍然有三个审判的ATM反正不够平均。 因此, 概率计算在本月初文件关于随机猜测的密码必须得到纠正。 实际上它的两倍的价值,即它是0.0006或有三分之一的1600多人,仍安全低。
结果
重要的是要优化汇编程序并运行它以最快的处理器,由于长期预期运行时间。 我发现,编译器优化国旗氧得到更好的性能,认为情况有所改善,实现增加- fomit帧指针国旗的奔腾- Linux的穗国旗的α - Tru64的,国际音标国旗的MIPS - Irix和快速的国旗在Sparc - Solaris操作系统。 特别旗帜( - DDES_PTR - DDES_RISC1 - DDES_RISC2 - DDES_UNROLL - DASM )的加密代码普遍好处。 所有这些国旗已经过测试,我选择的最佳组合为每个处理器(见Makefile中) ,但您可以尝试进行微调其他旗帜。
根据我的测试中的最好成绩是取得了AMD Athlon 1600 MHz处理器,超过三百四十○点○○○万键每秒。 有趣的是得到更好的结果比英特尔奔腾IV 1800 MHz和2000年兆赫(见图所示,点击放大) 。 我认为这是由于某些I / O饱和,当然缓存或内存访问 ,即AMD处理器(其中一半缓存的Pentium )或主板,其中正在运行,管理,以避免。 在第一个图所示,您可以看到, 己烯雌酚打破所有处理器速度或多或少的线性关系的处理器速度,除了这两个英特尔奔腾我在前面提到的。 这是合乎逻辑的,这意味着一个双处理器的速度就会增加一倍的速度突破,但提防饱和效应,在这种情况下,最好是AMD速龙1600兆赫,这将是更便宜超过1800兆赫的英特尔奔腾或2000兆赫。
在第二个数字,我们可以看到更详细,我们将要求内在的DES打破权力的处理器。 我得到这个值只是除以打破速度的处理器速度,也就是说,我们得到一些的DES密钥试图每秒每兆赫。 这是一个衡量处理器的效能型独立的速度。 结果表明,最好的处理器完成这个任务,是AMD速龙,然后来了Alpha和非常接近后,它是英特尔奔腾(除高速那些表现极差由于饱和效应) 。 其次是MIPS处理器,在过去的地方是的Sparc 。 有些Alpha和MIPS处理器位于底部的规模,因为他们提前释放不包括增强的后期版本。 请注意,我的表现包括x86处理器的C和汇编代码是有很大的区别 。 看来,海湾合作委员会不是一个好发电机优化机器代码,但我们当然不知道手动优化的汇编代码的其他处理器(阿尔法为MIPS , Sparc的)将提高其结果比较,本地ç编译(我没有使用海湾合作委员会对这些其他平台) ,因为它发生的x86处理器。
更新
这是一篇文章,这些技术可能被用来。
http://redtape.msnbc.com/2008/08/could-a-hacker.html