CPU卡发卡总结(二)——线路保护和线路加密
安全报文传送
三种情况:
- 线路保护:对传输的数据附加4字节的MAC码,接收方收到后首先进行校验,只有校验正确的数据才予以接受,这样就防止了对传输数据的篡改。
- 线路加密:对传输的数据进行DES加密,这样传输的就是密文,攻击者即使获得了数据也没有意义。
- 线路加密保护:对传输的数据进行DES加密后再附加4byte MAC码
如何使用安全报文传送:
在建立文件时改变文件类型,使用线路保护则最高位置为1,使用线路加密则次高位置为1,使用线路加密保护则最高位和次高位都置为1.
在对文件进行读写或使用密钥时,如需采用安全报文传送,必须置CLA的后半字节为十六进制“4”
线路保护MAC计算:
假设创建了一个二进制文件,使用线路保护,文件标识0x16,文件空间0x20。
则向二进制文件中写数据的指令为:
04D6960024 + val + mac
其中CLA为04,因为文件使用线路保护,所以后半字节为4
INS为D6
P1为96,其中高3位为100,低5位为文件标识
P2为00,为欲写文件的偏移量
Lc为24
val为要写入到二进制文件中的数据,0x20个字节
mac就是我们需要计算的线路保护mac
而mac又是根据写指令去除mac部分计算得到的,即是根据“04D6960024 + val”计算得到的。
Mac计算步骤:
1、 终端向CPU卡发送GET CHALLENGE指令,取得4字节随机数,后补“0x00000000”,得到的8字节结果作为MAC计算的初始值。
2、 检查“04D6960024 + val”的字节数是否为8的倍数,不是则补“0x8000…”,是则补“0x8000000000000000”,然后将得到的结果按8字节每块分成D1、D2、D3…
3、 判断密钥的长度。
如果密钥长度为8字节,则按如下方式计算MAC:
如果密钥长度为16字节,则按如下方式计算MAC:
使用SAM卡计算MAC:
1、 终端向CPU卡发送GET CHALLENGE指令,取得4字节随机数,后补“0x00000000”,得到的8字节结果作为MAC计算的初始值。
2、 通用DES初始化
80 1A + P1(密钥用途)+ P2(密钥版本)+ Lc + DATA(分散因子)
3、 通用DES计算
80 FA + P1 + P2(00) + Lc + DATA(8字节随机数+)+ “04D6960024 + val + 0x8000…”
这里P1的取值是关键:00001001,即05,代表有初始值的MAC计算
返回数据即为4字节MAC
线路加密计算:
具体计算方式同DES/3DES算法,这里介绍的是如何使用SAM卡加密。
1、通用DES初始化
80 1A + P1(密钥用途)+ P2(密钥版本)+ Lc + DATA(分散因子)
2、通用DES计算
80 FA + P1 + P2(00) + Lc + “明文”
这里P1的取值是关键:00000000,即00,代表无后续快的加密计算
返回数据即为加密得到的密文
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库