栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何解密从Mifare Desfire EV1发送的第一条消息

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何解密从Mifare Desfire EV1发送的第一条消息

认证后,IV重置为全零。使用AES身份验证时,您必须为每个后续命令计算CMAC(即使CMAC实际上未附加到该命令之后)。因此,针对您的命令的CMAC计算将导致正确的IV初始化,以对响应进行解码。即,该命令的CMAC等于解密响应的IV。同样,对于所有其他命令,IV是来自先前加密/
CMAC的最后一个密码块。


更新:

如何计算CMAC填充XOR值

  • 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    使用会话密钥(使用零的IV)加密一个零块()。->
    x[0..15]
  • x[0..15]
    向左旋转一位。->
    rx[0..15]
  • 如果最后一位(中的位0
    rx[15]
    )为1:
    rx[15]
    与或
    0x86
  • 储存
    rx[0..15]
    crc_k1[0..15]
  • rx[0..15]
    向左旋转一位。->
    rrx[0..15]
  • 如果最后一位(中的位0
    rrx[15]
    )为1:
    rrx[15]
    与或
    0x86
  • 储存
    rrx[0..15]
    crc_k2[0..15]

如何计算CMAC

  • 使用
    0x80 0x00 0x00 ...
    密码的块大小填充命令(AES为16字节)。如果命令长度与块大小的倍数匹配,则不添加填充。
  • 对于您的命令(
    0x51
    ),它看起来像:
    0x51 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
  • 如果添加了填充,请使用来对填充命令的最后16个字节进行xor运算
    crc_k2[0..15]
  • 如果未添加填充,请使用来对命令的最后16个字节进行xor运算
    crc_k1[0..15]
  • enc(IV xor datablock)
    用会话密钥加密(在发送模式下,即前一个块的密文为新的IV)结果。
  • 最后一块的密文是CMAC和新的IV。

更新2:

如何将位向量向左旋转一位

public void rotateLeft(byte[] data) {    byte t = (byte)((data[0] >>> 7) & 0x001);    for (int i = 0; i < (data.length - 1); ++i) {        data[i] = (byte)(((data[i] << 1) & 0x0FE) | ((data[i + 1] >>> 7) & 0x001));    }    data[data.length - 1] = (byte)(((data[data.length - 1] << 1) & 0x0FE) | t);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/570279.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号