打破签证针
2008年七月二日 在银行和EFTPoS
以下是一篇文章,我发现最近。 这一次最全面的描述密码 验证值( PVV )黑客入侵。
我想在这里复制我的地方参考。
正如评论已作出关于语法中使用的原始文字,我已经纠正了一些明显的错误,同时维护的原始材料。
http://69.46.26.132/ 〜 biggold1/fastget2you/tutorial.php
--- 原文 ----
前言
你有没有不知道会发生什么,如果你失去您的信用卡或借记卡 ,并有人认为它。 此人将能够撤回现金自动取款机猜测,不知何故, 密码 ? 此外,如果你是谁发现别人的卡你会尝试猜密码 ,并有机会获得一些轻松赚钱? 当然,回答这两个问题应该说“不” 。 这项工作并不涉及第二个问题,这是一个问题的个人道德。 在此我尝试回答第一个问题。
所有的信息用于这项工作是公开和可自由在互联网。 其余的一个问题是数学和编程,因此,我们可以学到一些东西,并有一些乐趣。 本人透露任何秘密。 此外,我们的目标(和最后的结论)这项工作是要显示密码算法仍然强大到足以提供足够的安全。 我们都知道技术是不是薄弱环节 。
这项工作分析,最常见的密码算法, 签证 PVV ,被许多提款卡 ( 信用卡和借记卡 ) ,并试图找出抵抗是密码猜测攻击。 通过“猜测”我不意味着选择一个随机密码 ,并试图在自动取款机。 众所周知,通常我们给出了连续三年进入审判的权利的PIN ,如果我们不能保持非同步传输模式卡。 签证 密码是四位数长很容易推断,机会一个随机密码猜测是万分之三= 0.0003 ,似乎足够低是安全的;这意味着你需要失去您的信用卡超过3000倍(或失去超过3000卡在同一时间: ) ,直到有合理的机会赔钱 。
我真正所谓的“猜测”是打破了密码 算法 ,以便提供任何卡您可以立即知道相关的个人识别号码。 因此,本文件研究这种可能性,分析了算法 ,并提出一种方法的攻击。 最后,我们提供的工具,实现了袭击和目前的结果估计机会打破这个系统。 请注意,只要其他银行安全有关的算法(其他的PIN格式,如IBM公司的个人识别号码或信用卡验证签名,如血液滤过或的CVC )是类似签证 的PIN ,同样的分析可以做到的收益率几乎相同的结果和结论。
最常见的一种密码算法是签证 的PIN 核查值( PVV ) 。 客户提供密码和磁条卡 。 编码的磁条是一个四位数的号码,称为PVV 。 这个数字加密签名的个人识别号码和其他有关的数据 卡 。 当使用者输入他/她的个人识别号码的ATM读取磁条 ,加密和传送所有这些信息,以中央计算机。 有审判PVV的计算使用的客户输入密码和信用卡信息的加密算法。 审判PVV是与PVV存储在信用卡 ,如果它们匹配的中央计算机返回到自动柜员机授权的交易。 见更详细。
的说明PVV 算法中可以找到两个文件相联系的前一页。 总之它包括在加密的 8字节( 64位)一连串的数据,所谓的转化安全参数 (总悬浮颗粒物) ,与DES算法 (局)的电子书典模式(央行)使用一个秘密的64位关键。 该PVV来自产出的加密过程 ,这是8字节的字符串。 这四个数字的PVV (从左至右)符合前四个小数(从左至右)的输出加密时,视为一个16进制字符( 16 × 4位= 64位)字符串。 如果没有4个小数之间的16进制字符然后PVV完成采取的(从左至右)非十进制字符和decimalizing他们通过转换一个“ 0的B - ” 1架C - “ 2 , D -> “ 3 ,电子商务” 4架F - “ 5 。 下面是一个例子:
输出加密 : 0FAB9CDEFFE7DCBA
PVV : 0975
该战略以避免十进制的跳跃字符,直到4小数被发现(这恰恰是几乎所有的时间,我们将见下文)是非常聪明的,因为它避免偏见的一个重要的分配数字已被证明是致命的其他系统,虽然对这一系统将大大降低。 又见一个相关的问题,不适用签证 PVV 。
在总悬浮颗粒物,被视为一种16进制字符( 64位)的字符串,是形成(从左至右)与右边的11位数字的潘( 身份证号码 ) ,除最后一位数(检查位数) ,一个数字从1至6该计划旨在挑选的秘密加密密钥和最后四位数字的密码。 下面是一个例子:
潘: 1234 5678 9012 3445
重点选择: 1
个人识别号码: 2468
总悬浮颗粒物: 5678901234412468
显然,问题的突破签证 的PIN组成找到加密的秘密钥匙加密 。 该方法是做蛮力搜索的关键空间。 请注意,这是不是唯一的方法,人们可以试图找到弱点络,许多尝试,但这一旧标准仍在广泛使用(现已改为AES和RSA的 ,尽管) 。 这表明它是不足以使蛮力是唯一可行的方法(也有一些更好的袭击,但没有在我们的实际情况,总结见LASEC备忘录和肮脏的详细情况见比哈姆与沙米尔1990年,比哈姆与沙米尔1991年,松井1993年,比哈姆& Biryukov 1994年和Heys 2001年) 。
选择的关键数字很可能推出,以支付可能的一个关键的妥协。 在这种情况下,他们只需要发行新卡使用另一个关键的选择。 老年卡可以取代新的或干脆自动柜员机可以透明地谱写新的PVV (相应的新的关键和维持同样的PIN )就在下一次的客户使用他/她的信用卡。 为了摆脱安全的所有用户,应当要求改变自己的号码,但将令人尴尬的银行解释的原因,所以很可能他们不会作出这样的要求。
准备攻击
阿蛮力攻击包括加密一中总悬浮颗粒物与已知PVV利用一切可能的加密键和比较每个获得PVV与已知PVV 。 当找到匹配我们有一个候选人的关键。 但是,有多少项,我们必须试试吗? 正如我们上面说的主要是64位长,这将意味着我们必须尝试2 ^ 64项。 然而,这是不正确的。 其实只有56位是有效的加密钥匙,因为一个位元(最重要)的每一个字节是历史上保留作为一个校验和为他人;在实践中这些8位(每个8字节)将被忽略。
因此, 加密密钥空间组成2 ^ 56项。 如果我们尝试所有这些键将我们发现的唯一一场比赛,相应的银行密钥? 当然不是。 我们将获得许多配对键。 这是因为PVV是只有一小部分(四分之一)的加密输出。 此外, PVV是堕落,因为有些数字(这些0和5之间过去后,从左至右,数字之间的第6和第9 )可能来自一个小数位数或从decimalized十六进制数字的加密输出。 因此,许多项将产生一个加密产出率相同的匹配PVV 。
然后我们能做些什么,寻找真正的关键在这些假阳性的其他键? 只要我们有加密第二个不同的TSP问题,也与已知PVV ,但只使用钥匙的候选人给予了积极配合的第一个总悬浮颗粒物, PVV一双。 然而谁也不能保证我们将不会再次获得许多误报随着真正的关键。 如果是这样的话,我们将需要一个第三方重钙, PVV配对,重复此过程,等等。
在我们开始我们的攻击 ,我们必须知道有多少总悬浮颗粒物, PVV对我们的需要。 为此,我们必须计算概率的随机加密产出率匹配PVV只是偶然的。 有几种方法来计算这个数字在这里我将使用一个简单的办法很容易理解,但需要一些背景的数学概率 。
一种概率总是可以被看作是有利的比例情况下,可能的情况。 在我们的问题,一些可能的情况下,给出了置换的16要素( 0至F十六进制数字)的一组16人( 16个十六进制数字的加密输出) 。 这是由16 ^ 16 〜 1.8 * 10 ^ 19日这当然恰逢2 ^ 64 (不同数量的64位) 。 这组数字可分为五类:
那些至少有四个十进制数字( 0到9 )的16个十六进制数字( 0至F )的加密输出。
这些完全只有3个小数。
这些完全只有两个小数。
正是那些只有一个小数位数。
那些没有小数(所有的A和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两位数。 现在的总人数中的第一类是简单地给予总结了此产品一, J型, K型, 1 1日至16日,但与i “ j ” k “湖 如果你做一些数学的工作你会看到这等于给产品的104 / 6的总和超过一的4日至16日(一- 1 ) * ( 1 - 2 ) * ( 1 - 3 ) * 6i - 4 * 16 16一〜 1.8 * 1019卷。
类推的案件数量在第二类是由总结了我, J型, K 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年。 再次,对第四类,我们总结了I的1至16 6i - 1 * 10 * 616一= 160 * 615 〜 7.5 * 1013 。 最终的数额案件的第五类是由置换六要素( A至F位数)在一组16个,也就是说, 616 〜 2.8 * 1012年。
我希望你的计算遵循了这一点,辛勤工作的一部分。 现在,作为一个证明,一切是正确的,您可以总结案件的数量在5个类别,并看到它等于总人数可能情况下,我们之前计算。 这样做的业务使用64位数字或四舍五入(用于彩车)或溢出(为整数)的错误不会让你得到确切的结果。
直至目前为止,我们计算了一些可能的情况下在每个五类,但我们感兴趣的是获得一些有利的情况下代替。 这是很容易获得,后者由前,因为这是刚刚确定组合的四个小数(或所需的十六进制数字,如果没有4个小数)的PVV而不是让他们免费的。 在实践中,这意味着把10的在上面的公式到1的和所需的6的成1的,如果没有4个小数。 这就是,我们必须鸿沟的第一个结果是104 ,第二个是103 * 6 ,第三个是102 * 62 ,第四个10 * 63和第五个64 。 然后,一些有利的情况下在五个类别的大约有1.8 * 1015 1.2 * 1012 2.6 * 1011 3.5 * 1010 , 2.2 * 109分别。
现在,我们能够获得什么是概率为加密输出匹配PVV的机会。 我们只需要添加五个号码的有利情况下,分化它的总人数可能的情况。 这样做,我们获得的概率是非常约0.0001或三分之一的10000 。 奇怪的是这个以及四舍五入结果如何呢? 不是所有的,只要看看我们的人数计算以上。 第一类占主导地位的几个数量级的数量和可能的有利情况下。 这是相当直观的,因为它似乎很清楚,这是非常不可能没有四个小数( 10的机会了百分之十六位数字)之间的16个十六进制数字。 我们看到了以前的关系,一些可能的和有利的案件,第一类是一个部门的10 ^ 4 ,这就是我们的结果P值0.0001从何而来。
我们的目标,所有这些计算方法是寻找有多少总悬浮颗粒物, PVV对我们需要进行一个成功的蛮力攻击。 现在我们能够计算出预期的一些误报在第一次搜索:这将是审判数目次的概率为一个单一的随机假阳性,即吨*铁在那里吨= 2 ^ 56个,大小的关键空间。 这相当于大约7.2 * 10 ^ 12 ,一个相当大的数目。 预计一些误报在第二个搜索(仅限于积极的钥匙中发现第一个搜索)将(吨*铁) *磷,第三次搜寻将( (吨*铁) *铁) * p和等等。 因此,搜索的n预期的一些误报将吨*铁^注
我们可以得到一些需要的搜索期望只有一个假阳性表示方程吨*铁^ 1例和解决的注 所以ñ等于对数基在1 /吨,其中的性能对数收益率这例记录( 1 /吨) /日志( p ) 〜 4.2 。 既然我们不能做的分数是搜索方便一轮这个号码。 因此,什么是预期的一些误报,如果我们执行五年搜寻吗? 这是吨*铁^ 5 〜 0.0007或大约1个1400 。 因此,使用5个总悬浮颗粒物, PVV对是安全的,以取得真正的密钥,没有误报。
一旦我们知道我们需要五个总悬浮颗粒物, PVV对,我们如何让他们? 当然,我们至少需要一卡与已知的PIN ,由于性质的PVV 算法 ,这是我们唯一需要。 与其他的个人识别号码系统,如IBM ,我们将需要5个卡,但是这是没有必要的签证 PVV 算法。 我们只需要读取磁条然后更改密码的4倍,但阅读卡后,每一个变化。
要读磁条 卡获得PVV和加密重要的选择。 你可以购买一个商业磁条 读写器或作出一个自己的指示后,你可以找到的前一页和有联系。 一旦你有一个读者看到此说明的标准磁轨道找出如何让PVV 从数据读取。 在该文件中PVV领域的轨道1和第2款据说是5个字符长,但实际上真正的PVV组成的最后四个数字。 第一个5位数的关键是选择。 I have only seen cards with a value of 1 in this digit, which is consistent with the standard and with the secret key never being compromised (and therefore they did not need to move to another key changing the selector).
我没有一个简单的C程序, getpvvkey.c ,进行攻击。 它是一个循环尝试所有可能的密钥来加密的第一个总悬浮颗粒物,如果得出的PVV比赛的真正PVV一个新的TSP问题是审判,依此类推,直至有一个不匹配,在这种情况下,关键是摒弃和一个新的是审判,或五个衍生PVVs匹配相应的真正的PVVs ,在这种情况下我们可以假设我们得到了银行密钥,但环推移,直到排气管的主要空间。 这样做是为了保证我们找到了真正的关键,因为有机会(尽管非常低)的第一个关键发现是假阳性。
预计该计划将需要一个很长的时间来完成,并尽量减少风险的停电,电脑挂出,等它的检查站,进入该文件getpvvkey.dat不时(确切的时间取决于速度计算机,这是一个小时左右的速度最快的计算机中现在使用) 。 出于同样的原因,如果一个积极的关键是发现它是写在文件getpvvkey.key 。 该项目仅显示一个信息开始,出发采取的立场从检查点文件如果有的话,之后,更是没有任何显示。
该加密 算法是一个关键的程序,因此非常重要,优化其速度。 我测试了几个实现: libdes , SSLeay ,的openssl , cryptlib ,国家安全局, libgcrypt ,地下墓穴, libtomcrypt , cryptopp , ufc ,隐窝。 该加密功能的前四个都是基于同样的代码由埃里克扬是其中表现最好(包括优化的C语言和x86汇编代码) 。 因此,我选择libdes这是原来的执行情况和凝聚所有相关代码的文件encrypt.c (丙版)和x86encrypt.s ( 2007汇编语言版本) 。 该代码是略加修改,以实现某种功能在蛮力攻击:最初的排列是固定的共同陡峭的每个重钙加密 ,因此可以作出一个时间开始。 另一项改进是,我写一个完全新的setkey功能(我称之为nextkey )这是最佳的蛮力循环。
要获得该计划的工作你必须输入相应的地方5 TSPs及其PVVs ,然后编译它。 我已经测试,只有在UNIX平台,使用Makefile文件Makegetpvvkey汇编(使用命令“使口Makegetpvvkey ” ) 。 这可能对其他编译系统,但您可能需要修正一些东西。 可以肯定,这一定义的类型long64相当于64位的整数。 在原则上没有任何依赖的字节序的处理器。 我已经成功地编译和运行它奔腾的Linux , α - Tru64为MIPS - Irix和Sparc - Solaris操作系统。 如果你没有和不想安装的Linux (你不知道你失踪;-)你还可以选择运行Linux的CD和使用我的计划,看到我的网页上运行Linux的安装。
一旦您找到了秘密银行的关键,如果你想知道密码的任意卡你只是写了类似的计划(抱歉,我已经不写它,我太懒惰: )尝试将所有10 ^ 4码通过创造相应的总悬浮颗粒物,加密它(不再)密钥,产生的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处理器,超过340万项每秒。 有趣的它得到更好的结果比英特尔奔腾4 1800 MHz和2000年兆赫(见图所示,点击放大) 。 我认为这是由于某些I / O饱和,必将快取或记忆体存取,即AMD处理器(已一半缓存的Pentium )或主板,其中正在运行,管理,以避免。 在第一图所示,您可以看到, 加密的速度打破所有处理器或多或少的线性关系,处理器速度,除了这两个英特尔奔腾我前面提到的。 这是合乎逻辑的,这意味着一个双处理器的速度就会增加一倍的速度突破,但提防饱和的影响,在这种情况下,最好是AMD速龙1600兆赫,这将是更便宜比英特尔奔腾1800兆赫或2000兆赫。
在第二个数字,我们可以看到更详细,我们将要求内在的加密打破权力的处理器。 我只是这个值除以打破速度的处理器速度,也就是说,我们得到的数目的 DES密钥试图每秒每兆赫兹。 这是一个衡量处理器的效能型独立的速度。 结果表明,最好的处理器,这一任务是AMD速龙,然后来了Alpha和非常密切后,这是英特尔奔腾(除高速那些表现极差由于饱和效应) 。 其次是MIPS处理器,并在最后取而代之的是的Sparc 。 一些Alpha和MIPS处理器是位于底部的规模,因为他们提前释放不包括改进后的版本。 请注意,我包括性能的x86处理器的C语言与汇编程序代码有很大的区别。 看来,海湾合作委员会不是一个好发电机优化机器代码,但我们当然不知道是否手动优化的汇编代码的其他处理器(阿尔法, MIPS的,的Sparc )将推动其结果相比,本地ç编译(我没有使用这些海湾合作委员会其他平台) ,因为它发生的x86处理器。
更新
这是一篇文章在这些技术可能被用来。




























