Проблемы с электронным паспортом при создании MAC в ICAO 9303 «рабочие примеры» в Java/ClojureJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы с электронным паспортом при создании MAC в ICAO 9303 «рабочие примеры» в Java/Clojure

Сообщение Anonymous »

Я работаю над приложением, в котором мне нужно считывать данные из электронных паспортов.
Я работаю над «проработанными примерами» в документе ICAO Doc 9303, часть 3, том 2 (третье издание).

В проработанных примерах есть раздел, где собран apdu MUTAUAL_AUTHENTICATE. Он включает в себя вычисление MAC-адреса «72C29C2371CC9BDB65B779B8E8D37B29ECC154AA56A8799FAE2F498F76ED92F2»
с ключом «7962D9ECE03D1ACD4C76089DCE131543», который равен euqals "5F1448EEA8AD90A7".
Итак, с помощью BouncyCastle я собрал код, выполняющий вычисления, так, чтобы он был встроен в документ.

Но затем в разделе «Безопасный обмен сообщениями» MAC «887022120C06C2270CA4020C800000008709016375432908C044F68000000000» с ключом "F1CB1F1FB5ADF208806B89DC579DC1F8". Это должно быть равно «BF8B92D635FF24F8», но с тем же кодом, который работал в предыдущем примере, я получаю другой результат. (

Код: Выделить всё

"582AFC932A87F378"
)

Как такое возможно? Изменяют ли они способ создания MAC-адресов в MUTAUAL_AUTHENTICATE и в безопасном обмене сообщениями? Я не могу найти ничего об этом в документе.

Вот мой код, я использую Clojure, но вся работа выполняется в BouncyCastle (Java)< /p>

Код: Выделить всё

(defn gen-mac [key message]
(let [engine (org.bouncycastle.crypto.engines.DESEngine.)
mac (org.bouncycastle.crypto.macs.ISO9797Alg3Mac. engine   (org.bouncycastle.crypto.paddings.ISO7816d4Padding.))
bytes (byte-array (.getMacSize mac))
key (->bytes key)
msg (->bytes message)]
(.init mac (org.bouncycastle.crypto.params.DESedeParameters. key))
(.update mac msg 0 (count msg))
(.doFinal mac bytes 0)))
В 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 . Вычислить MAC M:

i. Увеличьте SSC на 1:
SSC = ‘887022120C06C227’

ii. Объедините SSC и M и добавьте дополнение:
N = ‘887022120C06C2270CA4020C800000008709016375432908C044F68000000000’

iii. Вычислите MAC по N с помощью KSMAC:
CC = 'BF8B92D635FF24F8'


Также они предоставляют диаграмму, которая не делает это тоже яснее.
Как правильно указано ниже. Ключевым моментом здесь является вычисление MAC

Код: Выделить всё

N' = ‘887022120C06C2270CA4020C800000008709016375432908C044F6
Я думаю, что их документация действительно хороша, но на данный момент она более чем неясна. Сам бы никогда этого не догадался.

@sainaen: И в заключение, как тебе это удалось?

Подробнее здесь: https://stackoverflow.com/questions/308 ... es-in-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»