关于ICAO 9303中MAC创建的ePassport问题”;“工作实例”;在Java/Clojure中
我在一个需要从epassports读取数据的应用程序上工作。 我正在研究国际民航组织文件9303第3部分第2卷(第三版)中的“工作示例” 在工作的示例中有一个部分,其中他们将MUTAUAL_apdu放在一起。它涉及计算“72C29C2371CC9BDB65B779B8E8D37B29ECC154AA56A8799FAE2F498F76ED92F2”的MAC 使用键“7962D9ECE03D1ACD4C76089DCE131543”哪个euqals关于ICAO 9303中MAC创建的ePassport问题”;“工作实例”;在Java/Clojure中,java,clojure,bouncycastle,Java,Clojure,Bouncycastle,我在一个需要从epassports读取数据的应用程序上工作。 我正在研究国际民航组织文件9303第3部分第2卷(第三版)中的“工作示例” 在工作的示例中有一个部分,其中他们将MUTAUAL_apdu放在一起。它涉及计算“72C29C2371CC9BDB65B779B8E8D37B29ECC154AA56A8799FAE2F498F76ED92F2”的MAC 使用键“7962D9ECE03D1ACD4C76089DCE131543”哪个euqals“5F1448EEA8AD90A7”。 因此,使用
“5F1448EEA8AD90A7”
。
因此,使用BouncyCastle,我将进行计算的代码放在一起,以便与文档内联
但在“安全消息传递”一节中,“887022120C06C2270CA4020C800000008709016375432908C044F6800000000”的MAC和键“F1CB1F1FB5ADF208806B89DC579DC1F8”。这应该等于“BF8B92D635FF24F8”,但使用与前一示例完全相同的代码,我在这里得到了不同的结果。(“582AFC932A87F378”
)
这怎么可能?他们是否改变了在MUTAUAL_认证和安全消息中创建Mac的方式?我在文件里找不到关于它的任何东西
这是我的代码,我使用clojure,但是所有的工作都是在BouncyCastle(Java)中完成的
这在java中大致可以理解为:
mac = org.bouncycastle.crypto.macs.ISO9797Alg3Mac(org.bouncycastle.crypto.engines.DESEngine(), org.bouncycastle.crypto.paddings.ISO7816d4Padding());
mac.init(org.bouncycastle.crypto.params.DESedeParameters(key));
mac.update(msg, 0, msg.length);
mac.doFinal(bytes, 0)
编辑:
医生是这么说的:
f。计算M的MAC:
一,。增量SSC为1:
SSC='887022120C06C227'
二,。连接SSC和M并添加填充:
N='887022120C06C2270CA4020C8000008709016375432908C044F6800000000'
iii.使用KSMAC计算N上的MAC:
CC='BF8B92D635FF24F8'
他们还提供了一个图表,这也不能使它更清晰。
正如下面正确指出的那样。这里的关键是通过计算MAC
N' = ‘887022120C06C2270CA4020C800000008709016375432908C044F6
我认为他们的文档非常好,但目前还不清楚。我自己也不会明白的
@sainaen:作为跟进,您是如何做到这一点的?不,对于安全消息传递,他们使用相同的算法,只是在MuthualAuth示例中,他们没有显式地填充数据(因为数据已经达到所需长度),而在SM示例中则是这样做的
试着用你的代码“887022120C06C2270CA4020C8000008709016375432908C044F6”计算MAC(这是一个没有填充的SSC+M),你会得到预期的
“BF8B92D635FF24F8”
,是的。我明天会去看医生,我想这还不清楚。那个答案救了我一天!文件中的示例在这个问题上非常不清楚,如果没有误导的话。
N' = ‘887022120C06C2270CA4020C800000008709016375432908C044F6