Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于ICAO 9303中MAC创建的ePassport问题”;“工作实例”;在Java/Clojure中_Java_Clojure_Bouncycastle - Fatal编程技术网

关于ICAO 9303中MAC创建的ePassport问题”;“工作实例”;在Java/Clojure中

关于ICAO 9303中MAC创建的ePassport问题”;“工作实例”;在Java/Clojure中,java,clojure,bouncycastle,Java,Clojure,Bouncycastle,我在一个需要从epassports读取数据的应用程序上工作。 我正在研究国际民航组织文件9303第3部分第2卷(第三版)中的“工作示例” 在工作的示例中有一个部分,其中他们将MUTAUAL_apdu放在一起。它涉及计算“72C29C2371CC9BDB65B779B8E8D37B29ECC154AA56A8799FAE2F498F76ED92F2”的MAC 使用键“7962D9ECE03D1ACD4C76089DCE131543”哪个euqals“5F1448EEA8AD90A7”。 因此,使用

我在一个需要从epassports读取数据的应用程序上工作。 我正在研究国际民航组织文件9303第3部分第2卷(第三版)中的“工作示例”

在工作的示例中有一个部分,其中他们将MUTAUAL_apdu放在一起。它涉及计算“72C29C2371CC9BDB65B779B8E8D37B29ECC154AA56A8799FAE2F498F76ED92F2”的MAC 使用键“7962D9ECE03D1ACD4C76089DCE131543”哪个euqals
“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