-
2018-05-30 18:22:23
M1卡信息
- 一张M1卡的存储量为1KB( 16扇区 * 4块 * 16字节 = 1024字节 = 1KB);
- 一张卡有16个扇区,每个扇区有4个块,每个块有16个字节的存储量。
- 1字节 = 8个二进制 = 2个16进制,
所以一个块的存储量为:16个字节 = 128个二进制 = 32个16进制。 - 第0扇区的块0为厂商代码,已经固化。
每个扇区的块3为控制块,用来存放密码和控制权限 ,不能用来存储数据。
每个扇区的块0,块1,块2可以用来存储数据(扇区0的块0除外)。 - 每个扇区都有独立的密码和存取权限(存储在块3)。
读写卡流程
- 上电:使用卡片前需要上电,上电成功后可获取到卡的序列号,卡的类型等相关信息。
- 认证:认证需要:
A. 选择KeyA或者KeyB;
B. 认证的块;
C. SNR序列号:即Byte数组类型的卡序列号(上电后即可获取);
D. KeyA或者KeyB的值(默认12个F); - 读写块。
读写卡相关
理论部分
-
在认证过密码之后,可以对每个扇区的块0,块1,块2进行数据存储(扇区0的块0除外)。每个块能存储32个16进制的字符。
-
块3用来存储该扇区的密码和存储权限。
-
块3的前6个字节为KeyA,后6个字节为KeyB。中间的4个字节为存储控制。
-
存取控制的4个字节:
-
数据块(块0,块1,块2)的存取控制如下:
(计算出C10,C20,C30即可在下表中找出块0对应的权限)
-
控制块(块3)的存取控制如下:
(计算出C13,C23,C33即可在下表中找出块0对应的权限)
实践部分
- 如果一个扇区的块3的存储控制字节为: 08 77 8F 69
- 转为二进制即
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
字节9为备用字节,可忽略。 - 参照理论部分第4条,字节6全部取反, 字节7的低4位取反,得到:
C2Y:1111 C1Y:0111
C1Y:0111 C3Y:1000
C3Y:1000 C2Y:1111
对应块:3210 对应块:3210 - 高4位的各块值=低4位的各块值时,其值可用。高4位值≠低4位值时,其值不可用!
- C10 C20 C30 = C1Y C2Y C3Y = 1 1 0
所以块0的权限为:验证KeyA或者KeyB可读,可减值,可初始化,验证KeyB后可写,可加值。
C13 C23 C33 = C1Y C2Y C3Y = 0 1 1
所以块3的权限为:验证KeyA或者KeyB可读,验证KeyB后可写
所以扇区KeyA的权限为:KeyA 不可读,验证KeyB后可写
所以扇区KeyB的权限为:KeyB 不可读,验证KeyB后可写
更多相关内容 -
M1卡解密程序
2018-10-02 02:47:15用于加密的M1卡解密,获取密码并保存为dump文件,支持暴力穷举法破解 -
Mifare_S50_S70_M1卡_解密算法.pdf
2021-12-17 22:38:33S50_S70_M1卡_解密算法,Cryptanalysis of Crypto-1,原版加密解密算法文档.本人根据此文档,用单片机成功设计出能通过密码读写M1卡的方案。 -
一卡通(M1卡)破解过程记录——获取扇区密钥
2020-11-19 15:10:43其他几篇:一卡通(M1卡)破解过程记录——准备篇 理论篇 数据分析篇 一般淘宝卖的pm3都送比较高级的windows下的GUI软件,这个软件使用比较傻瓜化而且一般附带教程,我在这里不再介绍详细的使用过程,假设你的pm3是...前些日子在研究学校的一卡通安全,在此记录一下一卡通破解的全过程,仅用作学习交流,切勿用于违法用途
其他几篇: 一卡通(M1卡)破解过程记录——准备篇 理论篇 数据分析篇
一般淘宝卖的pm3都送比较高级的windows下的GUI软件,这个软件使用比较傻瓜化而且一般附带教程,我在这里不再介绍详细的使用过程,假设你的pm3是自己组装的或者没有附带国产软件,那你可以在Proxmark3的Github找到配套的命令行软件,Linux下编译好用Terminal运行即可
半加密M1卡攻击方法
现在我们已经确定智能卡类型为M1卡,根据M1卡的存储结构可知其每个扇区的块3中存放了密钥,这些密钥控制着M1卡其他数据的读写权限,因此我们的首要任务是获取卡内扇区的密钥。目前国内大部分M1卡都只加密了部分扇区,为半加密卡,对半加密卡的攻击方法相对简单,因此拿到M1卡后我们首先测试半加密M1卡的攻击方法。
暴力破解法
M1卡属于被动式智能卡,电源由读卡器提供,与读卡器断开连接后就无法保存数据,也不存在尝试多次密钥错误后锁死卡片的可能,所以针对这一特性我们可以使用暴力破解法,更换密钥循环测试直到扇区验证通过。但是读卡器与卡片的通信有延时,枚举某一扇区的密钥A或密钥B共有248即281474976710656种可能性,假设每次验证密钥需要1ms时间,也需要8296年才能暴力破解出一个扇区的一种密钥,在M1卡的加密算法被公开之前,穷举每一位去暴力破解M1卡密钥是不可能的。当M1卡的算法被攻破后,很多发卡商的M1卡都受到了攻击,攻击者利用获得密钥构建了密钥库,而由于M1卡的密钥不能像网络账户一样随时更换,很多发卡商又使用了统一的密钥,因此可以通过遍历已有密钥库中密钥的方式来解开一部分M1卡的密钥。对于那些未受到密钥泄露影响的M1卡,即使知道了Crypto-1算法,再配合高性能计算机辅助运算,仍需要几十个小时的时间才能解开非典型密钥,所以一般只用暴力破解的方式扫描扇区默认密钥或弱密钥作为其他攻击方法的辅助。
默认密钥扫描
M1卡出厂时使用统一的默认密钥,密钥A和密钥B的值均为FFFFFFFFFFFF,控制位为FF087069,也有一部分制造商使用自己的简单密钥作为出厂密钥。发卡商为了便利通常使用厂家提供的默认密钥,或者仅仅将包含重要数据的扇区修改密钥。对M1卡的扇区进行默认密钥扫描有助于我们提高破解的效率,并且可用来判断该卡是否为全加密卡,若未扫描到默认密钥则直接使用嗅探手段获取密钥。
使用“hf mf chk *4 ? t”命令开始扫描,该命令使用12个全球通用的默认密钥扫描0-39扇区,若事先知道所用数据在多少扇区及对应的密钥类型,可以修改指令来缩短扫描时间。扫描大概需要1分钟时间,完成后可以看到除了10-15扇区外其他扇区的密钥均为FFFFFFFFFFFF,这说明10-15扇区存放了一卡通的关键数据,这6个扇区就是后续数据分析研究的重点对象。
嵌套认证攻击
嵌套认证攻击即验证漏洞攻击,是获取M1卡密钥的最常用方法,它利用M1卡与读卡器三轮认证过程中的漏洞来实现知一密而求全密。三轮认证的过程中读卡器与M1卡使用的是对称加密算法,读卡器与M1卡中均存有相同的密钥,加解密过程也是一致的,这就给我们提供了还原密钥的可能性。
当进行三轮认证时,卡片和读卡器在会生成伪随机数并对其加解密,如果使用错误密钥对伪随机数的验证就会失败,这说明数据的加解密与扇区密钥是相关的。而在M1卡中每个扇区的密钥又是独立的,一次三轮认证通过后处理完扇区数据后就会转到另一个扇区重复三轮认证,此时使用新扇区的密钥参与加密运算出伪随机数。国外研究人员测试后发现了该过程中M1卡的重大缺陷,标签在通过第一次三轮认证后就会将其他扇区的数据加密后发送给读卡器,扇区中块3用来存放密钥,获取了加密后的扇区数据就等于获取了加密后的密钥信息。此时,我们可以使用获得的加密信息辅助暴力破解,大大降低了对48位密钥的搜索空间,缩短了获取密钥的时间成本。
该方法实施的前提是已知某扇区密钥A或密钥B的一种,否则M1卡无法与读卡器完成三轮认证。在默认密钥扫描过程中我们已经得知了除10-15扇区外的所有扇区密钥,此时通过Proxmark3执行“hf mf nested 1 0 A FFFFFFFFFFFF”,使用已获得的0扇区密钥A进行嵌套认证攻击。桂电一卡通使用的M1 4k卡扇区结构与1k卡不同,Proxmark3难以预测到认证过程的随机数,因此无法一步被nested攻击方式破解所有扇区,必须使用单已知密钥对单未知密钥的Hardnested方式。执行“hf mf hardnested 1 0 A FFFFFFFFFFFF 40 A”,即使用已知的0扇区密钥爆破40块所属扇区,结果“a1fbf4d6489b”就是10扇区的密钥A。对其他扇区的爆破也同理,爆破期间会占用大量CPU资源来运算,不同的电脑配置所需时间也不同,一般来说,爆破单扇区未知密钥的时间应在5分钟内,在这期间还未成功就应尝试通过其他方式获取密钥。
全加密M1卡的攻击方法
目前市面上也存在一些安全性相对较高的M1卡,发卡商在发卡前对M1卡的每个扇区都做了加密处理。若我们使用半加密M1卡的攻击方式未获取到任何扇区的密钥,说明该卡是各扇区使用强密钥的全加密卡。对全加密M1卡我们可用针对性地攻击方法获取其某扇区密钥,然后便可以使用半加密卡的攻击方式获取密钥。
Darkside攻击
M1卡的数据被分为若干个1bit位的块加密传输给读卡器,当读卡器发送或接收1条信息时,密钥流会位移相应的大小来和卡片保持同步。研究人员截取并重放M1卡与读卡器之间交互的部分数据发现其存在这样一个漏洞:当读卡器发送的加密数据中的某8bit部分全部正确而其他内容出错时,M1卡会给读卡器发送一个加密的4bit的数据作为NACK,而在测试其他任何情况下都会直接停止会话。
我们知道在M1卡通信数据的加密过程中使用了M1卡对应扇区的密钥,因此获取到这个4bit的否定应答就相当于获取到了该扇区密钥的相关信息,结合算法的漏洞可以破解出某个扇区的密钥,知道一个扇区的密钥,就可以使用其嵌套认证攻击得到其他扇区的密钥了。
终端执行“hf mf mifare”指令,Darkside攻击结果显示卡片无法使用Darkside攻击,因为其不返回NACK。这说明桂电一卡通使用的M1卡芯片是修复了这一算法缺陷后的版本,其去除了流密钥算法设计中本不该有的反馈机制,此时我们只能通过使用其他方法获取扇区密钥。
嗅探还原密钥
嗅探是破解全扇区加密卡的主要方法,原理是使用硬件对M1卡与已授权的读卡器的交互过程窃听获取数据。如图所示,将嗅探设备方式M1卡和已授权读卡器之间,对M1卡嗅探设备伪装为已授权读卡器,发送身份验证请求,同时对读读卡器伪装为M1卡,发送从M1卡获取的信息,这样嗅探设备便同时与M1卡和已授权的读卡器建立了会话,从而达到窃听交互信息的目的。
我们使用Proxmark3嗅探时先将桂电一卡通固定在设备的高频天线上,终端输入“hf 14a snoop”命令开启对ISO-14443 A型卡的嗅探功能,此时将Proxmark3放在自动贩卖机的识别区域,待自动贩卖机成功识别后拿开设备,重复几次确保收集到足够多的数据后结束嗅探,此时终端已获取到嗅探的结果。我们浏览M1卡开发文档可知基于M1卡的RFID系统在工作时会使用一套专业指令,如图所示。
嗅探的目的是为了获取一卡通的扇区密钥,所以我们首要关注其身份验证指令。用于身份验证的指令有两个,一个以60开头表示使用密钥A验证,另一个以61开头表示使用密钥B验证。我们可以直观的看到嗅探结果中哪些数据是由标签发出的,哪些数据是由读卡器发出的。三轮认证中的读卡器首先像标签发送身份验证请求,因此在所有读卡器发出的数据中筛选好以60和61开头的部分,这部分即为读卡器发出的身份验证请求指令,如图所示。
观察“60 2c 9b 90”的前几行数据,标签首先发送“0200”,根据前面的卡类型测试可知这是M1 4k卡的AQTA值,告诉读卡器标签类型,读卡器接收后发送一个“9320”请求标签返回UID值,标签发送4个字节的UID“4d b0 1c eb”及其BCC校验值“0a”,读卡器使用“93 70”命令选择卡片UID,“0b 87”是该指令的CRC校验位,用于卡片判断接收到的命令是否正确。标签核验通过后同意命令,读卡器执行“60 2c 9b 90”,“60 2c”即验证0x2c块的密钥A,“9b 90”为该命令的CRC校验位。此时M1卡与读卡器开始三轮认证,标签发送的“98 64 de 8a”为随机数Nt的明文,“90 d6 81 88 6d 38 1d 00”是读卡器对随机数Nt及Nr加密得到的结果,标签收到加密Nr返回给读卡器。
现在我们得到了一卡通与读卡器对2c块进行三轮认证的数据,M1卡在生成密钥时会混合卡片UID计算,因此我们将卡片UID和三轮认证过程的数据对应填入Crypto-1逆向工具箱中运算。因为认证成功的2c块属于10扇区,这样我们就得到了10扇区的密钥A“A1FBF4D6489B”。
在得到10扇区密钥后该卡便由全加密卡变为了半加密卡,此时可以继续使用嗅探的方式获得更多扇区的密钥,也可以使用前文中对半加密M1卡的嵌套认证攻击来获取其全卡密钥。
导出M1卡扇区数据
入侵M1卡扇区的意义在于获取其中的数据,M1卡的数据是其中最有价值的部分,使用Proxmark3获取到全卡密钥后,我们就可以导出卡的数据分析研究。终端使用“hf mf dump”指令,此时Proxmark3将使用前面破解扇区密钥过程中生成的dump.key 文件读卡并将数据生成为一个名为“dumpdata.bin”的二进制文件,但Proxmark3并不能直接识别该文件,为了分析数据及改写一卡通的便利性,我们将此文件放到Windows系统下使用WinHex进行后续操作,自此我们已成功完成对于M1卡扇区的入侵,利用前文的方法可以获取市面上任何一种M1卡的扇区密钥,也就是说,只要我们拥有M1卡的短期控制权,就可侵入卡扇区获取所有数据。
-
基于RC522的M1卡密码猜解工具
2020-06-19 17:12:04使用RC522对M1卡密码进行疯狂猜解,GuessPassword会尝试各种密码直到对M1卡解锁,赞尼 -
加密解密 GPG加密解密过程
2020-05-15 23:12:26GPG加密解密过程 一、Linux系统下 1.安装 yum安装 [root@POC-ORACLE ~]# yum install gnupg 下载安装包安装 https://www.gnupg.org/download/index.en.html 查看gpg帮助 [root@POC-ORACLE ~]# gpg --help gpg ...GPG加密解密过程
一、Linux系统下
1.安装
yum安装
[root@POC-ORACLE ~]# yum install gnupg
下载安装包安装
https://www.gnupg.org/download/index.en.html
查看gpg帮助
[root@POC-ORACLE ~]# gpg --help
gpg (GnuPG) 2.0.14 libgcrypt 1.4.5 Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. ...... 支持的算法: 公钥:RSA, ELG, DSA 对称加密:3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 散列:MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 压缩:不压缩, ZIP, ZLIB, BZIP2 语法:gpg [选项] [文件名] 签名、检查、加密或解密 默认的操作依输入数据而定 指令: -s, --sign make a signature --clearsign make a clear text signature -b, --detach-sign 生成一份分离的签名 -e, --encrypt 加密数据 -c, --symmetric 仅使用对称加密 -d, --decrypt 解密数据(默认) --verify 验证签名 -k, --list-keys 列出密钥 --list-sigs 列出密钥和签名 --check-sigs 列出并检查密钥签名 --fingerprint 列出密钥和指纹 -K, --list-secret-keys 列出私钥 --gen-key 生成一副新的密钥对 --delete-keys 从公钥钥匙环里删除密钥 --delete-secret-keys 从私钥钥匙环里删除密钥 --sign-key 为某把密钥添加签名 --lsign-key 为某把密钥添加本地签名 --edit-key 编辑某把密钥或为其添加签名 --gen-revoke 生成一份吊销证书 --export 导出密钥 --send-keys 把密钥导出到某个公钥服务器上 --recv-keys 从公钥服务器上导入密钥 --search-keys 在公钥服务器上搜寻密钥 --refresh-keys 从公钥服务器更新所有的本地密钥 --import 导入/合并密钥 --card-status 打印卡状态 --card-edit 更改卡上的数据 --change-pin 更改卡的 PIN --update-trustdb 更新信任度数据库 --print-md print message digests --server run in server mode 选项: -a, --armor 输出经 ASCII 封装 -r, --recipient USER-ID encrypt for USER-ID -u, --local-user USER-ID use USER-ID to sign or decrypt -z N set compress level to N (0 disables) --textmode 使用标准的文本模式 -o, --output FILE write output to FILE -v, --verbose 详细模式 -n, --dry-run 不做任何改变 -i, --interactive 覆盖前先询问 --openpgp 行为严格遵循 OpenPGP 定义 (请参考在线说明以获得所有命令和选项的完整清单) 范例: -se -r Bob [文件名] 为 Bob 这个收件人签名及加密 --clearsign [文件名] 做出明文签名 --detach-sign [文件名] 做出分离式签名 --list-keys [某甲] 显示密钥 --fingerprint [某甲] 显示指纹 显示帮助安装成功
2.生成密钥
[root@POC-ORACLE ~]# gpg --gen-key
gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 请选择您要使用的密钥种类: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (仅用于签名) (4) RSA (仅用于签名) 您的选择? 1 RSA 密钥长度应在 1024 位与 4096 位之间。 您想要用多大的密钥尺寸?(2048)2048 您所要求的密钥尺寸是 2048 位 请设定这把密钥的有效期限。 0 = 密钥永不过期 <n> = 密钥在 n 天后过期 <n>w = 密钥在 n 周后过期 <n>m = 密钥在 n 月后过期 <n>y = 密钥在 n 年后过期 密钥的有效期限是?(0) 0 密钥永远不会过期 以上正确吗?(y/n)y You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>" 真实姓名:lyzkey 电子邮件地址:lyzkey@qq.com 注释: 您选定了这个用户标识: “lyzkey <lyzkey@qq.com>” 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?o 您需要一个密码来保护您的私钥。
输入两次密码 can't connect to `/root/.gnupg/S.gpg-agent': 没有那个文件或目录 我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。 几分钟后完成生成 gpg: 密钥 10A20444 被标记为绝对信任 公钥和私钥已经生成并经签名。 gpg: 正在检查信任度数据库 gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型 gpg: 深度:0 有效性: 1 已签名: 0 信任度:0-,0q,0n,0m,0f,1u pub 2048R/10A20444 2018-04-29 密钥指纹 = 9259 721A 61DA 6C18 3DBA 05CE 9068 BA24 10A2 0444 uid lyzkey <lyzkey@qq.com> sub 2048R/4B7C31FC 2018-04-29
另一台服务器上同样创建密钥
[root@POC-APP ~]# gpg --list-keys /root/.gnupg/pubring.gpg ------------------------ pub 2048R/F98FA558 2017-12-07 uid lyzkk <lyzkk@qq.com> sub 2048R/B3A4A822 2017-12-07
3.导出公钥
[root@POC-APP ~]# gpg --armor --output lyzkk.asc --export F98FA558 F98FA558 为pub key的ID
公钥导出文件 可vi查看
[root@POC-APP ~]# ll lyzkk.asc -rw-r--r--. 1 root root 1703 12月 7 18:29 lyzkk.asc
4.导入公钥
将公钥发布,导入另一台服务器
[root@POC-ORACLE ~]# gpg --import lyzkk.asc gpg: 密钥 F98FA558:公钥“lyzkk <lyzkk@qq.com>”已导入 gpg: 合计被处理的数量:1 gpg: 已导入:1 (RSA: 1)
5.文件加密
给文件不加签,加密
[root@POC-ORACLE ~]# gpg --recipient lyzkk --output install.log.asc --encrypt install.log gpg: B3A4A822:没有证据表明这把密钥真的属于它所声称的持有者 pub 2048R/B3A4A822 2017-12-07 lyzkk <lyzkk@qq.com> 主钥指纹: EE13 B668 8956 7766 EEF7 6DE2 67F5 B833 F98F A558 子钥指纹: B6DA 032C 47B4 649E 1046 8CE4 FB2C 55EF B3A4 A822 这把密钥并不一定属于用户标识声称的那个人。如果您真的知道自 己在做什么,您可以在下一个问题回答 yes。 无论如何还是使用这把密钥吗?(y/N)y
上传到有对应私钥解密的服务器6.文件解密
[root@POC-APP ~]# gpg --decrypt install.log.asc --output install.log 用法:gpg [选项] --decrypt [文件名]
参数顺序不能反
[root@POC-APP ~]# gpg --output install.log --decrypt install.log.asc
您需要输入密码,才能解开这个用户的私钥:“lyzkk <lyzkk@qq.com>” 2048 位的 RSA 密钥,钥匙号 B3A4A822,建立于 2017-12-07 (主钥匙号 F98FA558) can't connect to `/root/.gnupg/S.gpg-agent': 没有那个文件或目录 gpg: 由 2048 位的 RSA 密钥加密,钥匙号为 B3A4A822、生成于 2017-12-07 “lyzkk <lyzkk@qq.com>”
解密后的文件
7.删除密钥
删除钥匙前需要先删除私钥
[root@POC-ORACLE ~]# gpg --delete-key lyzkey gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. gpg: 公钥“lyzkey”有对应的私钥! gpg: 请先使用“--delete-secret-keys”选项来删除它。 [root@POC-ORACLE ~]# gpg --delete-secret-keys lyzkey gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. sec 2048R/CCB014D0 2018-04-28 lyzkey <lyzkey@qq.com> 要从钥匙环里删除这把密钥吗?(y/N)y 这是一把私钥!――真的要删除吗?(y/N)y [root@POC-ORACLE ~]# gpg --delete-keys lyzkey gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. pub 2048R/CCB014D0 2018-04-28 lyzkey <lyzkey@qq.com> 要从钥匙环里删除这把密钥吗?(y/N)y
8.涉及命令
1、生成密钥对:gpg --gen-key 为用户生成新密钥对。需提供:密钥类型(默认为RSA/RSA);密钥长度(以位为单位,越长越强);过期时间(以防密钥损坏);填:名称、电子邮箱、标识密钥所有者的注释;密码短语(必须提供,如果私钥被盗,将无法使用)。 2、列出公钥:gpg --list-keys 列出所拥有的公钥:他们自己的公钥以及从与之通信的其他人那里导入的任何公钥。 3、导出公钥:gpg –export –armor key-id -o file.key 将公钥导出至文件,以便于其他人使用。–armor选项以文本形式显示输出,而非二进制格式。key-id是电子邮箱地址或在–list-keys的pub行中列出的八位十六进制数。 4、导入公钥:gpg –import file.key 从发送给您的密钥文件中导入其他人的公钥 5、加密文件:gpg –encrypt –armor -r key-id file 用key-id的公钥加密消息。如果未提供-r key-id,命令将提示收件人输入。默认输出文件为file.asc. 6、解密文件:gpg –decrypt file
二、Windows系统下
1.安装
https://www.gnupg.org/download/index.en.html
https://download.csdn.net/download/qq_21271511/12434919
安装对应密钥管理软件
2.新建密钥对
输入信息
3.导入公钥
导入完成
公钥导入成功
4.加密文件
点击加密按钮,选择加密文件
选择为他人加密
加密成功
5.解密文件
用linux端私钥解密
[root@POC-APP ~]# gpg --output codetemplates.xml --decrypt codetemplates.xml.gpg
解密成功
6.删除密钥
右键删除即可
-
转】M1卡密钥破解,收藏
2017-08-15 14:50:58M1卡说明及使用proxmark3破解方法 看了网上写的一些关于M1卡的文章,多数有些误导之嫌。首先谈谈M1卡的规格,M1卡的容量为1KB,好多网上写8KB,这里其实是有个误区,应该是8K位。1Byte=1B=8位。其实也就是说8k位想到...
M1卡说明及使用proxmark3破解方法
看了网上写的一些关于M1卡的文章,多数有些误导之嫌。首先谈谈M1卡的规格,M1卡的容量为1KB,好多网上写8KB,这里其实是有个误区,应该是8K位。1Byte=1B=8位。其实也就是说8k位想到于1KB的容量,也就是说一个4GB的U盘的存储空间约等于四百万张m1卡的空间。
虽然空间比较小,但是里面其实学问很大,我们来看一下M1卡的内部结构。M1卡分为16个数据存储区,通常我们称为“扇区”,编号是“0”到“15”。每个扇区又分为4个存储单元,我们称为“块”,在M1卡中数据存储的最小单位就是“块”。每一块有16字节(16B),用来存放数据。
就像下图所示:
其中每个data为一个“块”。这样我们可以计算一下:16b* 4(块)*16(扇区)=1024B 就是1K。
第0扇区的块0(即绝对地址0块),它用于存放厂商代码,已经固化,不可更改。
在全扇区加密时,通常用前三个“块”(0,1,2号块)存放数据,用最后一个”块“(3号块)存放密码。
其中密码分为A密码和B密码:前6个字节存放A密码,中间4字节为控制字段,后6字节存放B密码。
例如:
A0 A1 A2 A3 A4 A5 FF 07 80 69 B0 B1 B2 B3 B4 B5
注意这里每个扇区的密码都是独立的,也就是说可以为16个扇区设置16个不同的密码,当然也可以使用相同的密码,但是这样会大大降低破解的难度。例如上图中的该扇区A密码为空:000000000000,B密码为:FFFFFFFFFFFF。
对于控制位这里有点门路,我找了很多网上的文章,其中发现这篇讲解得最好:http://www.duoluodeyu.com/2013/835.html
但是注意其中的 字节7是C1Y,而不要把字节6、7、8一次当成了C1Y C2Y C2Y。注意到这一点对于理解就没什么难度了。
每个M1卡都有一个唯一的序列号,我们称为“UID”,是32位的,也就是4个字节。
M1卡是典型的高频卡,工作频率为13.56MHz,一般调频(FM)收音机接收的广播频率在87MHz到108MHz之间。猜想:如果高频卡工作频率达到80MHz以上时在读卡或写卡时产生的频率应该能对该频段收音机产生电磁干扰。
通信速率:106KBPS,也就是说可以在10毫秒的时间内完成读写内容。
工作半径:100mm。大约在100mm以内的距离,可以使用读卡器对m1卡进行操作(一般写距离要小于读距离)。
在使用proxmark3对M1卡进行破解时 ,我们可以使用hf mf mifare命令去探测基于PRNG的漏洞出现的Key 。
例如:
然后使用hf mf nested 1 0 A FFFFFFFFFFFF 去探测各个扇区的密码,例如:
花费几分钟后,得到如下的key列表:
根据这个key列表,按道理使用hf mf dump就可以直接读取各扇区的数据了,但是这里遇到了点问题,hf mf dump使用默认的密码FFFFFFFFFFFF来读取各扇区数据,而这里只有0扇区密码正确,其他的均无法dump,所以我们需要使用其他办法。
[size=1em]hf mf rdsc 1 a 1866c42fe6a8
来读取第一扇区数据:
同样的用 hf mf rdsc 2 b 1866c42fe6a8
读取第二扇区数据,这里为什么用B密码是有原因的(因为控制位设置的问题 )。
依次读取16个扇区即可。(其实在这张卡中,只有前3个扇区有数据,后面的扇区数据块均为空)
这里我们就获取了全部想要的数据,在最开始接触m1卡的时候由于知识的不足,总感觉可以控制的位置是有限的。
这也就是不要已经拥有了整个世界还觉得不完美。
现在就可以去刷卡,然后把16个扇区的数据做一个对比了,看看哪一位变化了,如何变化了。
Mifare1智能洗澡卡破解分析
Mifare Classic card提供1k-4k的容量,我们经常见到的是Mifare Classic 1k(S50),也就是所谓的M1卡。M1卡有从0到15共16个扇区,并且每个扇区都有独立的密码,每个扇区配备了从0到3共4个段,每个段可以保存16字节的内容,反正从0开始数 就对了(和数组下标为0开始一样)。
每张M1卡都有一个全球唯一的UID号,这个UID号保存在卡的00扇区的00段,也称为厂商段,其中前4个字节是卡的UID,第5个字节是卡UID的校验位,剩下的是厂商数据。并且这个段在出厂之前就会被设置了写入保护,只能读取不能修改,当然也有例外,有种叫UID卡的特殊卡,UID是没有设置保护的,其实就是厂家不按规范生产的卡(我们在网上买的空白卡片一般都是这种可以修改UID号的卡)。
今天我们以破解一张洗澡卡为例:
用到的工具
读卡设备:ACCR122U一个
空白M1卡片两张
正常使用洗澡卡一张
上图:
平台:windows7
软件:NFCGUI-PRO.exe
M1卡服务程序
破解思路:在M1卡的16个扇区内的某一个扇区内的字段中存储着洗澡卡内的信息,例如使用时间、使用次数、水卡金额等信息,想要修改卡内的信息就要将卡片内的记录数据导出,每个扇区第一个字段的16个字节是扇区的秘钥对,我们要是想要导出数据就要通过穷举的方法测试出秘钥对,只有知道秘钥对后才可以导出卡片内文件(具体原因请百度M1卡工作原理或查看:http://www.hufubo.com/?p=202),幸运的是国内大部分的M1卡都是使用的默认密码或者弱密码(例如 FFFFFFFF FFFFFFFF),我们可以使用比较傻瓜式的软件M1卡服务程序穷举秘钥对并导出卡内的dump文件(通过破解软件导出的数据文件都为xx.dump格式文件),然后通过一张卡多次消费并导出dump文件来对比不同金额情况下扇区内的信息来核算出具体的金额控制位,然后通过NFCGUI-PRO.exe程序将修改好的dump文件写入到空白的M1卡内。
具体实施:
声明:在实施过程中有可能我的步骤不是最简便和最有效的办法,但是作为科普入门级的文章,只希望更多的人能理解实施的过程,以更好的去防护这种方法。
- 先去洗澡卡终端查看卡内的余额:
卡内余额为26.91元,然后将ACR122u插在机器上,使用M1卡服务程序破解得出卡内的DUMP文件
使用M1卡服务器程序破解:
破解成功:
由于这种M1卡秘钥对为弱密码所以大约几十秒的时间就会破解成功,dump文件会生成在文件目录下:
dumpfile 4da2e80e(2015-08-2523_4).dump文件就是生成的破解文件 可以看到生成的dump文件为1KB大小,但是具体写入M1卡的时候是需要写入4KB大小的dump文件的
ps:这些软件本来是基友Linux开发的,移植到win平台上只能生成1kb的dump文件,我们可以使用修复工具:fixdump将1KB文件修复为4KB,也可以使用NFCGUI-PRO.exe
这个软件自带的修复功能修复为4KB文件,我是使用的NFCGUI-PRO.exe
修复,如图:
打开这个软件点击选择文件-选择刚才生成的1KB文件-就会提示“是否保存为4K文件格式”—选择“是”-就是自带修复成功
然后关闭软件,刚才的1kb的DUMP文件就会自带修复为4KB文件了。
通过上面的方法得出三个不同金额的dump文件。
2)通过十六进制编辑器进行dump文件的对比,找出金额控制位,我使用winhex进行编辑dump文件:
因为这两个文件都是同一张卡片不同金额的dump文件,所以假定有金额的数据不同,有刷卡次数记录的数据不同,刷卡时间的记录不同,(假定会有这些不同之处,也许只有记录金额的变化),通过对比两张卡片,发现在00000176 和00000192处有不同的数据块
如图;
余额为26.91:
余额为26.88:
发现这两张卡内的不同之处在于:
通过十六进制转换测试:
Hex(80 0A)=32778
HEX(7F F5)=32757
测试发现并不是这么简单的直接转换,于是将 800A 进行翻转为 0A80
HEX(0A80)=2688 2688符合卡内余额为26.88的实际情况。
HEX(0A83)= 2691 2691符合卡内月为26.91的实际情况。
可以总结得出金额位的加密方法为 金额转换十六进制后进行翻转存储。
接下来分析 7F F5代表的含义
根据M1卡了解 金额位置后面会有校验位数据,通俗讲就是当前面金额数据变了之后,校验位会根据另外的算法去改变值。
一般最简单的算法都是二进制取余后转换为16进制再加上金额位的加密方法
计算方法如下:
校验位7F F5-翻转为F5 7F转换二进制为1111010101111111 二进制取余为0000101010000000 转换为十进制为:
Hex(0000101010000000)=2688
可以得出金额校验位的加密方式为将金额转换为二进制后取余,取余后的二进制转换为16进制,将16进制翻转后得到的结果就是金额校验位的信息
例如金额为26.88—2688–0000101010000000—1111010101111111–F5 7F–7F F5
计算出金额校验位应填7F F5
计算出金额位和金额校验位的加密方式后可以进行金额的修改
修改金额为600元则计算
金额位:600—60000—EA60—60EA
金额校验位:600—60000—1110101001100000—0001010110011111—159F—9F15
则金额位填:60EA
金额校验位填:9F15
直接在winhex内修改dump文件:
直接保存文件为600.dump,dump金额就修改成功了
3)将文件写入到空白卡片中
通过NFCGUI-PRO.exe软件进行dump文件写入:
如图:
打开NFCGUI-PRO.exe软件后DUMP和Key文件选择加载文件600.dump
将ACR122U插入到电脑后将空白卡片放到读卡器上后选择写入文件
写入成功:
4)测试:
到这里就是M1卡破解的基本步骤,仅作科普文章,请勿做违法事件!
解决方案:
1)将卡片全部更换成CPU卡,CPU卡可以模拟M1卡结构,完全代替M1卡,安全性也比逻辑加密的M1卡更安全。
2)采用一卡一密系统,一卡一密可以免去升级硬件的麻烦,最大程度保护IC卡系统。
3)采用滚动码系统,增加效验,加大破解成本
通过十六进制转换测试:
Hex(80 0A)=32778
HEX(7F F5)=32757
测试发现并不是这么简单的直接转换,于是将 800A 进行翻转为 0A80
HEX(0A80)=2688 2688符合卡内余额为26.88的实际情况。
HEX(0A83)= 2691 2691符合卡内月为26.91的实际情况。
可以总结得出金额位的加密方法为 金额转换十六进制后进行翻转存储。
接下来分析 7F F5代表的含义
根据M1卡了解 金额位置后面会有校验位数据,通俗讲就是当前面金额数据变了之后,校验位会根据另外的算法去改变值。
一般最简单的算法都是二进制取余后转换为16进制再加上金额位的加密方法
计算方法如下:
校验位7F F5-翻转为F5 7F转换二进制为1111010101111111 二进制取余为0000101010000000 转换为十进制为:
Hex(0000101010000000)=2688
可以得出金额校验位的加密方式为将金额转换为二进制后取余,取余后的二进制转换为16进制,将16进制翻转后得到的结果就是金额校验位的信息
例如金额为26.88—2688–0000101010000000—1111010101111111–F5 7F–7F F5
计算出金额校验位应填7F F5
计算出金额位和金额校验位的加密方式后可以进行金额的修改
修改金额为600元则计算
金额位:600—60000—EA60—60EA
金额校验位:600—60000—1110101001100000—0001010110011111—159F—9F15
则金额位填:60EA
金额校验位填:9F15
直接在winhex内修改dump文件:
直接保存文件为600.dump,dump金额就修改成功了
3)将文件写入到空白卡片中
通过NFCGUI-PRO.exe软件进行dump文件写入:
如图:
打开NFCGUI-PRO.exe软件后DUMP和Key文件选择加载文件600.dump
将ACR122U插入到电脑后将空白卡片放到读卡器上后选择写入文件
写入成功:
4)测试:
到这里就是M1卡破解的基本步骤,仅作科普文章,请勿做违法事件!
解决方案:
1)将卡片全部更换成CPU卡,CPU卡可以模拟M1卡结构,完全代替M1卡,安全性也比逻辑加密的M1卡更安全。
2)采用一卡一密系统,一卡一密可以免去升级硬件的麻烦,最大程度保护IC卡系统。
3)采用滚动码系统,增加效验,加大破解成本
-
欧姆龙CJ2M解密软件 OMRON PLC CJ2M上传下载UM密码 任务密码 直读密码解密软件 高级安全不破坏程序.zip
2022-01-08 19:26:55欧姆龙CJ2M 直读密码解密软件 再送 OMRON CPM1A CPM2A ...(注意,如果是加密扩展的就解不了,如何看是不是加扩展,读内存A99,第4位是1就是扩展加密。或者A99全部是0但是又提示有UM保护也是扩展加密,这样就解不了) -
android NFC (读取M1卡内容)
2012-06-14 11:12:41android,需要手机有NFC功能,可以读写M1卡,获得UID -
一卡通(M1卡)破解过程记录——理论篇
2019-07-15 15:17:33其他几篇:一卡通(M1卡)破解过程记录——准备篇 获取扇区密钥 数据分析篇 理论篇参考了国内外的一些文献,写的比较杂乱,如有错误请指正,有条件的推荐去谷歌一些外文文献了解其原理,如《Attack.MIFARE》、... -
一卡通(M1卡)破解过程记录——准备篇
2020-11-19 15:03:42按照使用方式分类: ...·双界面卡IC:又称组合卡/双端口卡,是同时兼备接触和非接触两种界面通信的多功能卡,将非接触IC卡的方便性和接触IC卡的安全性融为一体,使之成为一卡多用的极佳载体,代表着未来.. -
GPG加密解密过程
2021-03-14 01:54:15GPG加密解密过程一、Linux系统下1.安装yum安装[root@POC-ORACLE ~]# yum install gnupg下载安装包安装https://www.gnupg.org/download/index.en.html查看gpg帮助[root@POC-ORACLE ~]# gpg --helpgpg (GnuPG) 2.0.14... -
数字信号处理-基于matlab的语音信号的加密解密
2020-02-02 16:50:26在数字信号处理的课程设计期间,在老师建议下,笔者额外做了语音信号的加密解密,由于课上基本没有介绍,自己接触也很少,从零开始。本想从网上找一个合适的例程改改,无奈在网上查找半天也没有找到自己想要的简单... -
RSA加密解密及制作软件license
2019-03-16 15:45:53倘若在加解密信息的过程中,能让加密密钥(公钥)与解密密钥(私钥)不同,即: 甲要传密信给乙,乙先根据某种算法得出本次与甲通信的公钥与私钥; 乙将公钥传给甲(公钥可以让任何人知道,即使泄露也没有任何关系... -
用JAVA实现对palyfair密码算法的加密解密
2021-11-11 21:52:15卡思维的点: 1、应将j视为i 2、解密只得出i没法得出j,因此应根据语义猜密文中的i是i还是j。 3、密文中的z同样需要自己根据语义判断是添加的还是原来就有的。 参考链接: 古典密码:playfair(Java实现)_会飞... -
M1卡存取控制字节规则详解
2018-12-26 11:19:12继续上次的M1卡课题,这次做一次详细的讲解教程,新手勿喷。所谓的M1芯片,是指菲利浦下属子公司恩智浦出品的芯片缩写,全称为NXP Mifare1系列,常用的有S50及S70两种型号。 M1卡的基本信息: 容量为8K位EEPROM ... -
Python 加密文件与解密文件
2019-12-26 21:09:23加密文件 # -*- coding: utf-8 -*- #AES-demo #采用AES对称加密算法 import os import base64 from Crypto.Cipher import AES #import struct def add_to_16(value):# str不是16的倍数那就补足为16的倍数 ... -
几种常用加密手段的加密与解密
2019-01-31 15:36:321.Base64位加密(可加密解密) 最简单的加密方式,没有密钥,这种方式只要让别人拿到你的密文,就可以直接解密,只能用来迷惑,一般情况下不单独使用,因为真的并没有什么卵用~可以和其他加密方式混合起来,作为一层... -
从文件加密解密到RSA加密算法
2018-09-23 10:22:421.文件的加密解密 其实文件的加密解密我们可以理解成在复制文件时对文件中的每一个字节做一些操作,比如最简单的就是加上一个常数或一个随机数,还有取模等,只要把它变成不是原本的模样就OK了。 以下给出生成... -
加密解密
2017-11-15 15:55:00在现代密码学中,加密方法大致可分为对称密钥加密(对称加密)和公开密钥...对称加密,即加密和解密使用同一个密钥,或者知道一方密钥能够轻易计算出另一方密钥。其解密(decryption)算法等同于加密算法,也就是说,... -
golang RSA (PKCS#1)加密解密
2019-08-02 15:43:32RSA非对称加密算法,基于PKCS#1规范, 我们在使用RSA的时候需要提供 公钥和私钥 , 我们可以通过openss来为我们生成对应的pem格式的公钥和私钥匙。 关于pkcs相关标准如下,摘自百度: PKCS#1:定义RSA公开密钥算法... -
IC卡 M1卡 各个扇区 控制块 密码 详解
2021-11-02 14:48:39无电源,自带天线,工作频率为13.56MHZ.M1卡内含加密控制逻辑和通讯逻辑电路。M1卡主要有两种,一种是S50和一种是S70。主要应用:门禁、考勤、会议签到、身份识别、物流、工业自动化、各种会员卡、如售饭、地铁、... -
M1卡破解(自从学校升级系统之后,还准备在研究下)
2017-03-24 21:29:19M1卡说明及使用proxmark3破解方法 看了网上写的一些关于M1卡的文章,多数有些误导之嫌。首先谈谈M1卡的规格,M1卡的容量为1KB,好多网上写8KB,这里其实是有个误区,应该是8K位。1Byte=1B=8位。其实也就是说8k位... -
浅谈IC卡、ID卡、M1卡和CPU卡
2020-01-10 11:19:30在工作中经常遇到IC卡、ID卡、M1卡和CPU卡,一直很疑惑他们有什么联系和区别,现在把我认为的理解整理一下,以便于以后又模糊了提醒自己(当然也有可能不对,只代表本人观点)。 由于在工作中我基本上目前接触到... -
常见的加密解密算法
2019-09-16 11:15:241.Base64位加密(可加密解密) 最简单的加密方式,没有密钥,这种方式只要让别人拿到你的密文,就可以直接解密,只能用来迷惑,一般情况下不单独使用,因为真的并没有什么卵用~可以和其他加密方式混合起来,作为一层... -
Python实现Paillier加密解密算法 - B3ale
2020-11-25 07:38:27Paillier 加密系统,是 1999 年 Paillier 发明的概率公钥加密系统。基于复合剩余类的困难问题。该加密算法是一种同态加密,满足加法和数乘同态。IntroductionKeygen首先选择两...然后根据卡迈克尔函数计算私钥 $\lam... -
RSA加密与解密
2019-11-20 16:07:35数据信息安全对我们每个人都有很重要的意义,特别是一些...报文加密解密,加签验签。 我害怕什么 我害怕卡里的钱被别人取走 我害怕转账的时候,报文被黑客拦截到,篡改信息转到别人的账户。 我害怕我的敏感信息被有... -
安全系列之——RSA的公钥私钥有多少人能分的清楚?RSA的签名验签与加密解密如何使用公私钥?
2020-08-21 00:34:12在对接很多的互联网公司的开发平台时,这些互联网公司未来自身平台的安全,都会需要调用方签名确认调用方的身份是合法的,同时未来信息网络传输的安全可能还需要加密解密。比如对接支付宝、微信开放平台时,需要配置...