使用Mifare卡加密数据 笔记
Mifare 是最常用的射频卡,具体介绍网上太多,我就不说了.,很多城市的最早的地铁公交卡都是用这种卡,后来被破解后都换成智能卡了.
但是由于技术成熟,使用方便,成本低,现在很多小区门禁卡,停车卡,食堂饭卡,包括很多医院的就诊卡都用的这种卡.
简单介绍下,一张卡就好像一张白纸,S50有16个分区,每一个分区可以设置单独的两个密码KeyA和KeyB. 而KeyA是永远不能读的, KeyB在默认情况下是可以读到的.
.(简单可以这样理解, 注意,每个扇区可以设置KeyA和KeyB独立的访问条件)
而分区1比较特殊,分区1的第一段写着卡的硬件ID,这个是出厂时就写进去了,不能更改,并且全球唯一(当然这只是约定). 淘宝上有UID白卡, 这种卡可以给分区1写入任意的硬件ID.
08年的时候,发现卡漏洞,这种卡已经很容易被破解, 网上买个读卡器 ACCR122U (一百多)就可以破解.
大概的破解原理是因为这种卡不能产生随机数.而用上位机控制随机数的产生来破解..
但是如果是全扇区加密的卡(就是16个分区都加密) ,那么需要使用Proxmark破解,淘宝居然二三百..
推荐软件 (mifare classic tool) 这个软件使用Android也可以破解, 使用的是穷举方式.
https://github.com/ikarus23/MifareClassicTool
问题: 既然这种卡已经被破解,也就是写什么别人也能看得到,但是我们还必须用这种卡,那么我们如何存储数据并且防止被破解?
设计要求:
我们是一家连锁店,,使用mifare卡作为用户标识卡...
1, 防止更改卡内数据(如卡号,信息等)
2, 防止卡被复制.
3,防止第三方制作卡(我们的系统以后可能会有加盟商,不能让加盟商自己私自买新卡用我们的系统.,需要通过我们这里制作.)
4,保证稳定,快速的读取,并且易于量产加密重置等.(需要单独写一个卡批量加密工具,用于量产.)
网上大都是Mifare的介绍或者如何破解等...不知道别人是如何设计的...
所以在这里写一下自己的思路..
卡内只保存卡号, 不保存任何金额等其他信息.要求与实体卡上印的卡号一致.
将卡号加密后,存储到指定分区M中,并且设置分区密码为固定密码 MA 和 MB..
根据卡号(+硬件ID) 生成对应卡号的校验数据K.(或者根据算法生成).
使用固定密码 NA 作为密匙A,
读取卡硬件ID,使用加密算法 Fun(ID) 计算出16位密码NB.
将校验数据K存入分区N中,并且使用NA和NB作为分区密码..
将其他分区使用固定的密码全部填入随机的垃圾数据,
写卡完成..
读卡时,只使用密码B读取,(只给客户端下发KeyB的密码,更安全.)
使用密码MB读取分区M ,获取卡号,
读取硬件ID,计算校验分区N的密码NB.读取校验信息.
(根据情况操作,可在客户端确认,如何客户端不可信,需要在服务端确认..)获取校验信息,通过服务端确认卡校验信息是否有效,或者通过服务端解密卡ID..
总结:
虽软卡硬件被破解了,写什么都看得见..当然完全可以通过软件算法来防止卡被进一步破解更改数据...
卡上写的信息越少越安全,只在卡上写卡号,不储存用户信息金额等.
当然校验信息需要和校验每张卡独有的硬件ID绑定.来防止卡被复制..
但是网上有可写UID的白卡,就是可以在不破解算法的情况下完全复制..(我们小区的门禁卡我就复制了好几张,不然去物业办一张十块.)
这个时候只能人为的控制,比如消费或者退卡的时候,前台需要确认卡上的标识,或者确认人员信息等.
(有的医院退卡需要缴费清单)
这个用了不到两个星期来设计并完成.目前已经稳定工作了两年,写了大概十几万张卡..
中途碰到过公司采购一批小厂商生产的垃圾卡,上万张卡的KeyB坏掉了,不能读取..只能通过改程序来兼容..
写出来做个笔记, 只是不晓得别人是怎么设计的....
使用Mifare卡加密数据 笔记的更多相关文章
- ID卡学习笔记
前言: 我也来篇关于当时学习ID卡的笔记.前段时间小区装门禁.一个钮扣型的ID卡就要30块.非常黑心.因为其ID卡的成本也就是1块钱以下.因此我也加入到这方面的研究.用来模拟ID卡的T5557卡成本2 ...
- 开发企业微信打卡API笔记
获取企业微信打开API上面的数据 根据企业ID和打卡模块的secret获取access_token 打卡传参body为json格式的字符传 创建打卡对象把参数写入,useridlist为list格式. ...
- SD卡学习笔记
最近调试了SD卡,遇到了一些小问题,记录一下,分享一下. 1. SD卡 卡槽旁边的一个小开关 我们平时见过的SD卡都是小的SD卡,可以放在手机上的.现在大多数的开发板上也是小的SD卡的卡槽,插入 ...
- [SD卡] FPGA笔记之SD卡
1.数据怎么存进去的? 其中的sd_miso就是接收的1位数据,n个时钟下就收到n个数据,比如n=21. 2.如何做到先发送高位?
- MIFARE系列3《卡能源和数据传递》
在MIFARE卡中,能量和数据通过天线传输,卡中天线为几匝线圈,直接连接到芯片上,不再需要额外的组件.线圈嵌入塑料中,形成了一个无源的非接触卡. 读卡器向IC发一组固定频率的电磁波,卡内有一个IC串联 ...
- 破解简单Mifare射频卡密钥杂记
先要了解一点大学城浴卡用的是什么卡,经查证是Mifare S50卡,也有叫ISO14443A的(协议名).本来想看看大学城浴卡有没有安全漏洞,没想到浴卡公司在安全性上几乎是蔑视我们大学生的智商,虽然被 ...
- 由Mifare 1卡破解带来的危险以及应对方法
今年年初以来,一个消息的传出震惊了整个IC卡行业.最近,德国和美国的研究人员成功地破解了NXP的Mifare1芯片的安全算法.Mifare1芯片主要用于门禁系统访问控制卡,以及一些小额支付卡,应用范围 ...
- RFID-RC522、FM1702SL、M1卡初探
catalogue . 引言 . RC522芯片(读卡器)简介 . FM1702SL芯片(读卡器)简介 . RFID M1卡简介 . 读取ID/序列号(arduino uno.MFRC522芯片 Ba ...
- Mifare系列7-安全性(转)
文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38087245 飞利浦的MIFARE卡 由于它的高安全性在市场上得到广泛应用,比如 ...
随机推荐
- cips2016+学习笔记︱简述常见的语言表示模型(词嵌入、句表示、篇章表示)
在cips2016出来之前,笔者也总结过种类繁多,类似词向量的内容,自然语言处理︱简述四大类文本分析中的"词向量"(文本词特征提取)事实证明,笔者当时所写的基本跟CIPS2016一 ...
- 手把手教你在Windows环境下升级R
在Windows环境下,我们可以使用installr包自动将R升级到最新版本.并且可以安装软件.下面主要演示如何在Windows环境下升级R,并将旧版本安装的R包复制到更新版本的R. 1.加载inst ...
- dojo实现省份地市级联报错(一)
- mysql字符串连接
用SQL Server 连接字符串是用“+” 现在数据库用mysql, 写个累加两个字段值SQL语句居然不支持"+",郁闷了半天在网上查下,才知道mysql里的+是数字相加的操作, ...
- Excel 2010去掉网格线
怎么去掉Excel中的网格线? 具体错误步骤如下: 1.新建excel文件,双击打开文件 2.打开视图 3.取消勾选"网格线"
- FusionCharts报错
1.具体报错如下 SCRIPT 5007:无法获取属性"SetReturnValue"的值: 对象为空或未定义 script block(158),行1字符158 2.错误原因 3 ...
- Linux查看网络的联机状态
Linux查看网络的联机状态 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ netstat -a^C unix 3 [ ] 流 已连接 14923 @/tmp ...
- C# 利用Newtonsoft.Json进行Json序列化与反序列化
我们可以通过DataContractJsonSerializer类来序列化一个对象为json字符串. public class JsonConvert<T> { public static ...
- 如何登录mysql? cmd怎么连接mysql数据库||从MYSQL客户端登录MYSQL
1 2 3 4 5 6 7 分步阅读 Mysql开源数据库,任何人都可以下载安装使用.那么安装好的mysql如何登陆连接mysql数据库呢?本经验咗嚛介绍几种常见的方法 工具/原料 mysql 连 ...
- 在ASP.NET 中检测手机浏览器(转)
引言 之前做的项目中需要在浏览器查看PDF文件.在电脑端没有问题,但是手机端网页打开失败. 后来使用了pdf.js,个人认为pdf.js的页面不够清爽,就希望网站能自动检测登录设备,电脑端保持原样,手 ...