2016-01-20 2 views
1

Теперь для javacard 2.2.2 есть no such emulator, который поддерживает манипуляции с точками эллиптической кривой.Добавить поддержку API-интерфейса bouncycastle для jCardSim

Однако существует один эмулятор с именем jCardSim, который делегирует все операции криптографии в java-библиотеку Bouncycastle.

Нет никаких указаний на официальном сайте о том, как добавить «proxy» API-интерфейс bouncycastle, чтобы использовать его в эмулированном апплете.

Поэтому цель состоит в том, чтобы обновить это:

import javacard.framework.*; 
import javacard.security.*; 

к чему-то вроде этого:

import javacard.framework.*; 
import javacard.security.*; 
import local.org.bouncycastle.math.ec.ECPoint; 

Поскольку источники находятся в свободном доступе, должен быть способ восстановить некий эмулятор для того, чтобы предоставьте ECPoint поддержку моего апплета. Конечно, все эти действия требуются для тестирования апплета перед загрузкой на карту, у которой есть встроенная поддержка ECPoint.

Итак, вопрос в том, что именно следует исправить, чтобы достичь видимости API-интерфейса bouncycastle внутри запущенного апплета?

+0

На самом деле вопрос здесь? Вы можете изменить все виды вещей в jCardSim, если хотите, как его Java с поддержкой JavaCard API –

+0

@PaulBastian, моя ошибка в том, что вопрос не был указан явно. Обновлено. –

ответ

1

После небольшой работы решение было закончено. Всего несколько уточнений до кода

  1. ECPoint из BouncyCastle не могут быть импортированы «как есть»: есть два оберток требуются. Первый - выполнять задачи высокого уровня, такие как умножение и добавление точек (см. Класс ECOperation). Второй - некоторый чистый класс JavaCard, необходимый для того, чтобы обернуть высокоуровневую конструкцию для использования на низком уровне (см. Класс JCECC).
  2. Это интегрированное решение не может быть более чем тестовой средой в эмуляторе jcardsim. Чтобы создать резервную копию ECPoint для аппаратного устройства, необходимо заменить все импортные jcardsim импортными товарами (например, import com.licel.jcardsim.SESPAKE.JCECC;, например import com.gemalto.javacard.gostservices.math.ECMathFp;), и обеспечить, чтобы все API-функции были правильно привязаны в апплете. Файл .exp необходим для компиляции файла .cap для соответствующего устройства.

Как это работает:

  1. Для того, чтобы применить IDE патча должен быть установлен this пути и последний jcardsim исходного кода версия должна быть вытащена из repo.
  2. ECOperations класс следует добавить в пакет jcardsim. Я использовал crypto пакет в моих источниках.
  3. JCECC класс следует добавить в пакет jcardsim. В моих источниках я использовал отдельный пакет samples.SESPAKE.
  4. Добавьте тестирование конструкции в апплет просто проверить все операции в порядке:

private JCECC jcecc = new JCECC((short) 32);, а затем где-то в process()

jcecc.generatePointData(); 
jcecc.multiplyBasepoint(); 
byte[] Qpwx = { (byte) 0x9d,(byte) 0x33,(byte) 0x9b,(byte) 0x33,(byte) 0x96,(byte) 0xae,(byte) 0x4a, 
        (byte) 0x81,(byte) 0x63,(byte) 0x88,(byte) 0xa1,(byte) 0x4c,(byte) 0x79,(byte) 0xab, 
        (byte) 0x3a,(byte) 0x8d,(byte) 0xd4,(byte) 0x95,(byte) 0xfa,(byte) 0x4c,(byte) 0x53, 
        (byte) 0xf0,(byte) 0xd4,(byte) 0x07,(byte) 0x65,(byte) 0x79,(byte) 0x02,(byte) 0x2e, 
        (byte) 0xf2,(byte) 0xaa,(byte) 0xeb,(byte) 0x68 }; 
byte[] Qpwy = { (byte) 0xda,(byte) 0xd9,(byte) 0x14,(byte) 0x82,(byte) 0xe2,(byte) 0x08,(byte) 0x59, 
        (byte) 0x0f,(byte) 0xd3,(byte) 0x16,(byte) 0xbf,(byte) 0x95,(byte) 0x94,(byte) 0x80, 
        (byte) 0xf5, (byte)0xec,(byte) 0x2c,(byte) 0x17,(byte) 0x46,(byte) 0x3e,(byte) 0xc8, 
        (byte) 0xfc,(byte) 0x8f,(byte) 0x63,(byte) 0x03,(byte) 0x06,(byte) 0x49,(byte) 0xb4, 
        (byte) 0x52,(byte) 0xcd,(byte) 0xdd,(byte) 0xa8 }; 
jcecc.addPoints(jcecc.Qx, jcecc.Qy, Qpwx, Qpwy); 
Qpwx = jcecc.getRx(); 
Qpwy = jcecc.getRy(); 

Sidenote

Все эти усилия могли бы выглядят действительно чрезмерно: кто бы ни нуждался в этом, когда есть поддержка ECDH на карте? К сожалению, иногда прямая манипуляция с EC poitns - единственный способ реализовать такие протоколы, как SESPAKE в JavaCard.


Любая обратная связь приветствуется.

1

Вы не должны этого делать. Даже если это возможно, вы ожидаете, что ваша Java-карта не будет обрабатывать базовый тип int. Кроме того, Bouncy API вполне может создавать объекты, ожидать параметры byte[] и делать всевозможные вещи, которые несовместимы с идеей Java Card (классика).

Вместо этого вы должны реализовать или расширить API-интерфейс Java для требуемых функций, а затем использовать Bouncy Castle для его резервного копирования.

+0

Ничего не пропало из моего ответа im_infamous? –

+0

Проблема решена. Thnx для вдохновения, я пытался реализовать все, что вы написали. –

1

В состав библиотекиреализована реализация ECPoint с открытым исходным кодом, основанная только на общедоступном API-интерфейсе javacard (без API-интерфейса поставщика) (вместе с Bignat и (Big-) Integer). JCMathLib работает как на реальных картах (требуется встроенная поддержка EC KeyPair.ALG_EC_FP), так и непосредственно в симуляторе JCardSim (так как не требуется нестандартный API).

Потенциальный недостаток является более низкой производительностью для некоторых операций по сравнению с фирменным API-интерфейсом поставщика и меньшей устойчивостью к боковым каналам и атак с ошибкой.

Преимущество переносимости между картами разных поставщиков и возможность использования имитатора JCardSim вместо запатентованного.