Ваш вопрос немного неясен в отношении, что вы пытаетесь защитить с помощью шифрования и против чего (программист по хобби, криптологический эксперт, секретная служба). Маловероятно, что вы хотите предотвратить несанкционированное извлечение карты, поскольку смарт-карты и их операционная система достаточно защищены. Также маловероятно, что законное хост-приложение выполняет свою обработку в зашифрованном виде. Поэтому, скорее всего, сам процесс чтения должен быть защищен, что очевидно для бесконтактных/NFC, но также является хорошей идеей для контактной связи.
Важным термином здесь является защищенный обмен сообщениями. Либо у вас есть сильный статический ключ, который редко нужно изменять, в зависимости от интенсивности использования, или, что более общее, вы обсуждаете ключ сеанса, который также может зависеть от (возможно, фиксированного) тайна. Оба могут быть объединены с счетчиком последовательности, поэтому даже чтение одних и тех же данных в сеансе будет предоставлять различные криптограммы. Независимо от того, каким образом вы выбираете, ключ должен храниться/вычисляться с обеих сторон. Для части секретности потребуется безопасное хранилище, которое, в зависимости от потенциала атаки, может быть в зашифрованном файле (с совершенно другим ключом) на диске или в крайнем случае на специальной смарт-карте, такой как устройство, называемое модулем безопасности , который может иметь аппаратное сопротивление против несанкционированного доступа. (Если это не мешает атаке, по меньшей мере, проявлять манипуляцию, например, сломанным защитным уплотнением).
Большое спасибо за ваш ответ. На самом деле я хочу, чтобы неавторизованное приложение не читало данные, используя шифрование, поэтому только авторизованное хост-приложение может расшифровать данные и прочитать их –
@hum. Обычно это можно было бы применять с помощью правила доступа, заявляя, что чтение файла (ов), содержащего данные о работоспособности, разрешается только после теста на запрос-ответ, поэтому шифрование необязательно будет необходимо. Это все еще требует криптографии для вычисления ответа, и ключ для этого должен присутствовать на обеих сторонах: сторона хоста для вычисления, сторона карты для проверки. – guidot