我想为ePassport文档实现芯片身份验证,并希望验证我对它的理解。
通过使用JMRTD库,特别是函数doEACCA(),我成功地启动并运行了它。在检查这个和相关函数的代码时,我注意到它实际上没有验证协议的结果。它按照标准运行CA协议,这将导致一个新的安全消息传递密钥,然后切换内部包装器以继续使用该协议。但似乎在这之后没有实际的验证,之后也没有实际的沟通。因此,如果一个人停在这里,它实际上将导致一个错误的印象,成功的检查系统,因为它不知道它得到了一个与芯片不同的共享密钥。实际上,调用协议芯片身份验证似乎有点不恰当。把它称为密钥交换会更正确。由于所有共享密钥都用于设置一个新的SM隧道,我想(这就是我想通过这个问题来验证的)实际验证首先在发出其他命令时进行。这个命令必须包含SM -关键的是,来自芯片的响应必须有一个包含MAC的有效负载。正是这个MAC的验证,通过检测系统,才真正完成了芯片认证。
似乎选择指挥(除了上面提到的方面)并不重要?如果是的话,你能建议一个命令来运行吗?由于设置的其他方面,我的解决方案运作,它将更好地使用一个简单的,“一次”的命令,其中的命令和响应可以适应在一个单一的APDU等。这将完成我与芯片的通信。
发布于 2021-06-02 20:53:09
是的,您是对的,下一个命令--或者更确切地说,下一个命令返回的响应数据和状态字上的MAC命令--是用来验证芯片上有私钥的。这是一种不幸的做法;响应应该包括一个带有其中一个键的MAC集或一个单独派生的密钥。目前,在实现安全消息传递时,您必须做出可怕的设计选择。也许你只是想验证一下芯片。
如果我没有记错的话,这是我当时所指出的,如果我没有记错的话,它应该在使用佩斯-CAM时得到纠正。这就是使用集成芯片身份验证的PACE密码身份验证(我忘记了M是用来做什么的)。
如果您想找一个不应该做任何事情的命令,那么GET质询是一个很好的命令,它只会从芯片中获得一些随机字节,因此不会包含任何用户数据或重置任何安全环境。我将请求一个8字节的挑战,因为这是在BAC身份验证过程中使用的。当然,您需要发送此命令(或任何以下命令),包括安全消息传递。唯一稍微令人担忧的是,GET挑战只能在没有SM的情况下才能实现。
您还可以使用READ二进制文件来读取包含MRZ的DG1。该数据组无论如何都包含所需的知识,您可能希望将其与物理MRZ作为身份验证检查进行比较。
https://security.stackexchange.com/questions/249993
复制相似问题