关于IC卡的两篇文章
2017-06-24 23:30
417 查看
M1卡修改各区块控制位值和数据
(一),以常用设置"08 77 8F 69"控制条件为例,先搞清楚它――具有的访问权限。
1、对"08 77 8F 69"值进行计算,该值定位于各区块3的6,7,8,9四个字节内,字节6=08,字节7=77, 字节8=8F, 字节9=69(默认值,不予计算)。
2、例如:字节6=08,对应其二进制值=00001000, 则对6,7,8这三个字节进行二进制转换结果见下表:
字节6 = 0 0 0 0 1 0 0 0 | 字节7 = 0 1 1 1 0 1 1 1 | 字节8 = 1 0 0 0 1 1 1 1 |
3、参照表2及表4算法,字节6的全部二进制值取反,字节7的低四位二进制值取反,字节8不变,得到:
字节号 | 对应二进制值 | 位置 | 高4位 | 位置 | 低4位 |
字节6 字节7 字节8 | 0 0 0 0 1 0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 1 1 1 1 | C2Y C1Y C3Y | 1 1 1 1 0 1 1 1 1 0 0 0 | C1Y C3Y C2Y | 0 1 1 1 1 0 0 0 1 1 1 1 |
所 属 块 位 | 块3 块2 块1 块0 | 块3 块2 块1 块0 |
4、对以上6,7,8字节的存取/控制二进制已取反值,依照表2,表4块位转换为各块控制值,如下表:
块3位 | 字节7,字节6,字节8 = C13,C23,C33 = C1Y,C2Y,C3Y = 0 1 1 |
块2位 块1位 块0位 | 字节7,字节6,字节8 = C12,C22,C32 = C1Y,C2Y,C3Y = 1 1 0 字节7,字节6,字节8 = C11,C21,C31 = C1Y,C2Y,C3Y = 1 1 0 字节7,字节6,字节8 = C10,C20,C30 = C1Y,C2Y,C3Y = 1 1 0 |
注意: 高4位的各块值=低4位的各块值时,其值可用。高4位值≠低4位值时,其值不可用!
5、查对访问权限(数据存取控制依照表3,块3存取控制依照表5),该例"08 77 8F 69"的访问权限为:
◆ 块3 = 011:权限为:KeyA,KeyB均不可读,验证KeyB正确后可改写KeyA和KeyB,验证KeyA或KeyB正确后可读"控制位"。在此可见密钥KeyB的重要性,KeyB不正确是无法看到块3控制值,更无法修改密钥。
◆ 块2 = 块1 = 块0 = 110:权限为:验证KeyA或KeyB后可读该块数据,减值以及初始化值,只有验证KeyB 正确后才可改写该块数据,在此可以看到密钥KeyB对改写数据块也起着关键性作用。
(二)、"08 77 8F 69" 控制条件设置步骤:
由(一)可知:KeyB设置后为不可读,并且改写数据和改写控制位都需要正确验证它,故KeyB设置后程序
操作员必须妥善保管KeyB值,否则以后改写数据和控制位时,不正确的KeyB值将无法实现卡的任何操作!!!
1、修改块3控制位的值:最初的各区块3内的KeyA,KeyB都是厂商12个"F"默认值(KeyA在任何条件下均为不可读,大部分读写机程序表现KeyA为未知的12个"0" ),在修改控制值时,先不要修改默认密码KeyA和KeyB,在控制位修改成功后,再去更改新密码值。即先对块3的控制位进行修改(默认值FF 07 80 69改为新值08 77 8F 69)并执行写操作。控制位写成功后,KeyB亦为12个"0"不可读了,但仍是隐藏的12个"f"默认值。
2、修改块3的KeyA和KeyB值:控制位08 77 8F 69值写成功后,验证KeyB正确后方可改写KeyA和KeyB新密码。在密码操作模式键入要改写区块之先前密码B(先前密码为默认值时,则不需改动和加载),加载后反回数据操作模式,再进行读值,KeyA和KeyB值的改写。
3、修改块0~块2中数据:由新的控制条件08778F69可知,要修改数据,必须先验证KeyB,故先设置密码操作为KeyB认证方式,加载后再返回数据操作模式,对要修改的数据块进行值的改写操作。
4、上例中分析了"08 77 8F 69"的访问条件及其改写步骤,对用户的其它控制条件亦可参照应用。
关于S50卡密钥A和密钥B |
1. Mifare_Std 卡片的密钥属性取决于控制字。控制字的默认值是“FF078069”,此时 A密钥:不可被读出,有全部权限。 B密钥:可被读出,没有任何权限。 2. Philips/NXP在2001年对S50芯片有重要更新:当B密钥可以被读出时,B密钥失效。关于这一点请仔细阅读S50 DATASHEET的第15页。2000年以前的卡片以及大陆地区仿制的卡片不具备此功能。 3. 如果使用的是PHILIPS原始芯片的卡片,且控制字 = FF078069时,通过某台读卡器进行B密钥验证后可读写卡片,说明这台读卡器有BUG。最大的可能性是这个读卡器并不区分AB密钥。 我们可以做个简单的实验,将AB密钥设为不同的值,例如首先将密钥BLOCK改写为如下:111111111111 FF078069222222222222此时KeyA = 111111111111, KeyB = 222222222222然后用您所说的可以通过B密钥读写的读卡器进行操作,就会发现问题所在。 4. 在大多数使用B密钥的系统中,控制字 = 08778F00,此时 A密钥:不可被读出,有读取数据可扣款权限。 B密钥:不可被读出,有全部权限。 5.原装的Philps S50芯片在出厂时设置每个分区的的第四块A密钥是“FFFFFFFFFFFF”,控制字是:“FF078069”,B密钥是:“FFFFFFFFFFFF”,A密钥是供用户读写操作的,利用A密钥可对对除0区外其它所有扇区块进行读写操作。B密钥不可操作,这些用的都是逻逻加密算法加密,而且密钥都是不可见,我们在读时能看到的A密钥都是显示为“000000000000”,B密钥显示:“FFFFFFFFFFFF”, 这 些都是出厂时厂家设定的默认值。 6.如果用户要使用B密钥,那先要把中间控制改了,如果改错那所改的那个分区就被加密没用了。比如先把控制改成“08778F00”,A密钥改成“111111111111”,B密钥改成“222222222222”,改完之后再用我们的测试DEMO对块三进行写,写操作成功后,这样您就可以利用B密钥对您所改的扇区进行读写操作了,这时A密钥也就不起作用。 |
相关文章推荐
- 两篇关于MCU的嵌入式应用的文章【ZZ】
- 两篇关于IME的文章
- 关于线程的两篇文章
- 关于Domain Driven Desing的两篇简单易懂的文章
- 【转】两篇关于练习乒乓球基本功的文章
- ASP.NET 2.0 Beta2 关于页面编译模型变化的两篇文章
- 推荐两篇关于javascript闭包的两篇文章
- NHibernate 学习 (转园子里子两篇关于NHibernate的文章)
- 关于Caching的文章两篇,作者翻译的不错!【转】
- 两篇关于委托和事件的文章之二___详解C#委托,事件与回调函数
- 关于JAAS的两篇文章
- 关于翻译的两篇好文章
- 关于翻译的两篇好文章
- 转载两篇有关于详细讲解字符编码的文章
- 关于Portlet的两篇文章
- 关于系统设计和模式的两篇不错的文章
- [导入][阅读]关于Vista的两篇评论文章
- 转两篇关于jdbc的用法的文章
- 两篇关于正则表达式的文章
- 关于编译qtopia4.3.2的两篇文章