• 射频识别技术漫谈(15)——Mifare1的安全性及7字节序列号M1卡【worlsing笔记】


    Mifare1的安全性主要指卡中数据的安全性,要求卡中的数据不能被非法修改或窃听。数据的安全性主要使用加密技术来保证,加密技术有两个关键因素:加密算法和密钥。现代加密技术的一大特点是加密算法公开,如果加密密钥和解密密钥相同,则称为对称加密,密钥不能公开;如果加密和解密密钥不同,则可以公开其中一个密钥(公钥),另一个不公开(私钥)。加密破解的实质就是如何获得不公开的密钥。

    Mifare1中使用了一种称为“crypto1”的加密算法。遗憾的是,这是一种不公开的私有算法。就本人目前所知,这种算法先在卡片与读写器之间进行三次相互认证,认证成功才能进行对卡片的读、写、加值、减值等后续操作,这些操作使用“crypto1”加密流。三次认证的原理与步骤我们是清楚的,但具体采用了什么算法却不得而知,可以确定的是,认证过程中使用了4字节卡序列号、6字节密码和1字节数据块号。

    不公开的好处是卡片市场的排他性,而且过去的事实已经证明,NXP的这种做法在市场上取得了巨大的成功。不公开算法的潜在危害也同样显而易见,这种没有经过黑客们攻击考验的加密算法,它的市场应用是如此的大,一旦算法被破解,所有使用这种卡片的应用都将受到威胁。

    不幸的是,自2007年以来,Mifare Classic芯片逐步被破解。国外已经有高手,即使在不需要使用合法读卡器的情况下,一种新的攻击能够在300次查询内获得任意扇区的密钥;如果使用合法读卡器,另外一种攻击获得密钥仅需要40毫秒。而且网上已经有“crypto1”的原理图及相关破解源代码。

    面对M1卡片这些现实的风险,作为用户应该怎么办呢?其实也大可不必惊慌。任何一种安全算法都不会是100%安全的,任何一种算法都有一种叫做“穷举”的方法可以破解它。一方面“crypto1”虽然被破解,但通常需要一定的破解硬件设备,并要求破解者有一定的专业水平;另一方面对于多数小金额应用的卡片来说,破解的风险与收益也是破解者必须考虑的因素;更重要的是,我们不能一棵树上吊死,可以采取其他的方法协助“crypto1”算法用于防破解,比如一卡一密、对M1卡进行升级、将M1卡联网使用等。

    Mifare1的应用如此广泛,而当初设计时它的序列号只有4个字节,为了保证卡序列号的全球唯一性,所有的卡号都占满了也就能生产40多亿张,这样的容量很难满足日益增长的对Mifare1的庞大需求,于是市场上开始出现7字节序列号的M1卡。用户在使用这些7字节M1卡片时会经常会遇到一种现象,就是各个厂家生产的7字节M1卡片有时差异巨大,读写器无法兼容。

    出现这种情况主要有两个原因。一是经典M1卡片只有4字节卡序列号,只需要一个层次(cascade)的防冲突循环就可以选中卡片;而7字节序列号的M1卡片需要两个层次的防冲突循环才能选中卡片。但是有些卡片并不需要第二层的防冲突循环,如果进行了第二层的防冲突循环反而会出错。

    另一个问题出在卡认证阶段。前面说了,卡认证需要4字节卡序列号、6字节密码和1字节数据块号参加。但是新卡片有7字节卡序列号,到底让哪4个字节参加认证呢?目前主要有3种情况,一是使用88H和卡号的前3个字节(也就是第一层防冲突得到的卡序列号数据)参加认证,第二种情况是使用卡号前4个字节参加认证,最后一种情况是使用卡号的后4个字节(也就是第二层防冲突得到的卡序列号数据)参加认证。

    所以对于读写器的开发者来说如果你的读写器不能读取7字节卡序列号的M1卡片,可以从是否需要第二层防冲突选择和到底哪4个字节的序列号参加认证两个方面考虑。

    本文来自新浪网

  • 相关阅读:
    mysql修改数据表名
    HDU 5742 It's All In The Mind (贪心)
    HDU 5752 Sqrt Bo (数论)
    HDU 5753 Permutation Bo (推导 or 打表找规律)
    HDU 5762 Teacher Bo (暴力)
    HDU 5754 Life Winner Bo (博弈)
    CodeForces 455C Civilization (并查集+树的直径)
    CodeForces 455B A Lot of Games (博弈论)
    CodeForces 455A Boredom (DP)
    HDU 4861 Couple doubi (数论 or 打表找规律)
  • 原文地址:https://www.cnblogs.com/worldsing/p/3304491.html
Copyright © 2020-2023  润新知