📚 文稿库

一群草台班子,让 99% 的门禁卡都在裸奔:如何破解门禁卡?【柴知道】

科普门禁卡的技术原理与加密漏洞,揭示门禁系统行业普遍存在的安全隐患与“草台班子”现状。

UP主: 柴知道 · 时长: 9:55 · 🔗 B站原视频

标签: NFC · 门禁卡 · 网络安全 · 行业内幕 · 柴知道

99%的门禁卡都在“裸奔”

这是物业卖你20的门禁卡,拿手机复制一张只要零元,安全性也是零。我们研究了一圈后发现,不是针对谁,在座的从物业到卡片商,全都是草台班子。在各位的共同努力下,所有的门禁卡全都在裸奔。你用一个手机软件或者几十块的机器,就能复制99%的门禁卡。当然你也可能碰到过,有些门禁卡没法复制,有些卡复制了也刷不了,还有些更恶毒的卡,复制完一刷,原卡居然还失效了。这又是怎么回事?不同的卡该怎么破解复制?为什么说门禁卡的背后全是草台班子?柴知道,在知识的海洋里狗刨。

什么是M1卡?

门禁卡、电梯卡、银行卡、公交卡都是贴一下就能刷的NFC卡。它们都内置了一颗芯片,也就是集成电路IC,所以也叫IC卡。当卡片贴近读卡器时,卡里的线圈会在交变磁场中产生感应电流激活芯片,这时读卡器就能跟卡片交流了。如果你去电商网站上搜一下IC卡或者门禁卡,会发现它们都会提到一个词——M1。这里的M1是前身为飞利浦的恩智浦半导体开发的IC卡产品。它诞生于1994年,是全世界最流行的IC卡。大概到了2001年,一些国产厂商成功复刻了M1卡之后,海量便宜大碗的兼容卡逐渐涌现。时至今日,你的校园一卡通、小区门禁卡、电梯卡、公司考勤卡几乎全都是M1卡或者它的兼容卡。关键就在于,M1卡的安全性已经几乎为零了。

不加密卡:只验证UID的“草台物业”

M1卡中的“1”代表它只有1K,也就是1024字节的存储空间。它们被划分成了16个扇区,每个扇区包含四个数据块,门禁系统验证的就是这些数据。我们只要读取数据,这张卡就被破解了,可以随便复制。在这16个扇区中,第0扇区的第0行记录了UID,也就是卡号等信息,你可以把它理解为用户名,这一行完全不加密。

现在第一个草台班子来了——物业。大部分物业发的门禁卡只用了第0扇区,就是门禁系统里添加一张卡的UID之后,只要读到这个UID就直接开门。相当于你上网都不用输密码,输入用户名就行了。那这样草台的物业占比有多少呢?我斥80元巨资网购了一台机器,收集了六张柴司同事的小区门卡挨个做了测试。结果是其中四张都只有第0行的UID有数据,其他部分完全没动,全部是零。这种卡就是不加密卡,可以随便复制。手机(iPhone除外啊)只要读取到UID信息,写到模拟的新卡里就行了。如果你想复制一张实体卡给家人用,那可以买一张几毛钱的国产魔术卡。因为原厂M1卡的UID是唯一且无法改写的,但魔术卡的UID可以随意改写,可以伪装成任何卡。

默认密码:形同虚设的加密

当然有时候,物业也会在门禁卡里附加一些其他信息。刚才说过,M1卡的每个扇区包含四个数据块,其中第一个数据块叫控制块,有Key A和Key B两个密钥守护扇区中的信息。比如这张卡,就把发卡时间的信息写在了加密的第14扇区中。那你猜要怎么解开密钥复制这张卡呢?别想得太复杂,不需要什么高科技手段,你根本就不用解密钥,因为他们用的是默认密码。

没错,M1卡有一些默认密码,其中最常见的就是六个FF。根据默认规则,只要知道其中的任意一个密钥就能读写数据、修改密码。绝大多数物业根本就不会去修改密码,所以压根谈不上什么破解,用常见的默认密码,甚至一个FF试一遍就能读取复制了,就是这么简单。大部分手机自带的钱包APP都能做到。不过也有一些手机的自带软件并不想这么做,而是只复制公开的UID。如果门禁系统需要验证UID加存储在数据库里的其他信息的话,那就刷不开门了。要解决的话也简单,安卓手机的话,找一个像MCT这种第三方软件就行,它们内置的密码本已经足以破解绝大多数门禁卡了。如果想要实体卡,或者是尊贵的iPhone用户,那还是买个设备加魔术卡就行了。5分钟过去了,直到现在我们根本就没有涉及到什么破解,因为正如大家知道的那样,绝大多数物业除了收物业费以外,对其他事根本不上心。

半加密卡与嵌套攻击漏洞

但有些情况下,物业也真的会给卡加密。比如柴司的设计师小姐姐,有一栋公寓的电梯卡,为了控制租客只能进入对应的楼层,物业把相应的数据写进了数据块中,而且改了对应区块的默认密码,这就是所谓的半加密卡。那半加密卡能被复制吗?当然可以。而这背后的草台班子是M1卡的原始设计方——恩智浦。他们在M1的设计中留下了一个重大漏洞,让半加密就等于不加密。

这个漏洞跟随机数有关。如果想进入加密区块,M1卡会向读卡器发送一串明文随机数,读卡器会利用密钥、UID、随机数,通过一种叫Crypto-1的算法算出密文,再发给M1卡。M1卡解码验证无误后,会把刚才的随机数左移八位再加密发过去,读卡器也解码验证无误,这样双方互相完成验证就能进入加密扇区。看起来很科学对吧?但问题是,M1卡发送的这个随机数并不是真正的随机,它是在利用一种叫LFSR的设备来生成伪随机数,生成的是一串有规律的数列,而且不断循环。

这导致的结果是,只要有任意一个扇区用了默认密钥,让双方完成了一次验证,那攻击者就可以通过M1卡两次发送的结果,推断出整个LFSR的运行状态,精准计算出任意时间的随机数。这下完了,在进入真正的加密区块时,攻击者会诱骗卡片发送一个随机数,用密钥流加密后发过来。此时攻击者已经知道了这个随机数,也收到了密文,而中间这个用于加密的密钥流本身,也是LFSR利用密钥、UID、随机数所生成的一串乱码,它和密钥之间是有联系的。这样一来,只要收集到足够多的密钥流样本,就可以反推出密钥,进入加密扇区,彻底破解整张卡。这种方式被称为Nested Authentication(嵌套攻击)。由于嵌套攻击的存在,M1卡中只要有任何一个区块用了默认密码,那整张卡的加密都会像多米诺骨牌一样被彻底推倒、完全暴露。所以,半加密的M1卡就等于不加密。

全加密卡:核心算法早已被攻破

这么严重的漏洞,恩智浦不知道吗?当然知道,而且还推出过修补款。但为时已晚,各种便宜大碗的国产兼容卡早就占领了市场,它们原汁原味地复刻了M1卡的所有算法,包括漏洞,并一直延续至今。像设计师小姐姐的这张电梯卡,也在几秒钟内就被机器破解了,依然可以随便复制。

那手机行不行呢?我们拿四台手机,用它们自带的钱包APP分别复制了这张半加密卡,再用外接设备去读取它们复制到的数据。结果发现,这几年发布的OPPO、小米、vivo都可以破解密码完全复制,只有一台2019年发布的老华为手机选择了只复制UID,没有去破解加密扇区的数据。所以我们推测,现在的绝大多数手机想破解复制这种半加密卡都没问题。

既然如此,那如果我们把每个扇区的默认密码都改掉,做成全加密卡,那它会安全吗?怎么说呢,这样一来,手机和普通设备确实是无法破解它了,但只要加几十块钱上个高端设备,它仍然会被破解。这是因为M1卡的核心加密算法Crypto-1在十几年前就被攻破了。2008年,荷兰的研究团队发表论文,完全复原了Crypto-1算法的细节,这意味着M1卡被彻底攻破。随后各种用于破解的开源工具、硬件都出现了。所以毫不夸张地说,时至今日,所有的M1卡无一例外全部是在裸奔。

滚动码与CPU卡:涉及钱就专业了

不过裸奔并不意味着你可以轻松逃脱物业的制裁。比如柴司同事八哥老家沈阳的小区里,用电梯要刷电梯卡,每年都要交钱续卡。他曾经用手机成功复制了家人的电梯卡,结果原卡失效了,又只能灰溜溜地跑去物业交费补卡。这是因为物业用了滚动码技术,也就是电梯卡和读卡器每通讯一次,就会修改一次卡片内部的信息,相当于下次就换了一个暗号。而用手机复制并刷卡之后,原卡的信息在系统里就过时了,只好去补办,让物业又挣一笔。你看,一旦涉及到钱,草台班子也会立刻专业起来。

如果是银行卡、交通卡、燃气卡等等对安全性要求更高的卡,那它们根本就不用M1方案。它们里面内置了CPU芯片,所以也叫CPU卡,采用了完全不同的安全机制,无法被破解。可惜啊,无法修改银行卡余额了。

结语

OK,如果你看到了这里,那门禁卡的奥秘你就已经了解了。不出意外的话,这会是我们蛇年的最后一期非广告视频。我们提前祝各位春节快乐,预祝你和我们自己在新的一年里,能像解码机一样去勇敢地直面每一道难题,推开每一扇看似打不开的门。明年见!喜欢我们的话,请一定要长按点赞,一键三连哦。

On this page