Нам нужен метод для подписи сообщений с использованием как можно более коротких подписей, встречающихся в схеме BLS, которая обещает довольно короткие подписи.При использовании реализации JPBC примеры просты в настройке и запуске, но в них отсутствует довольно важная часть: хранение и загрузка секретных ключей.
- Пример с текущего веб-сайта JPBC BLS 1 не содержит никакого хранилища, он просто проверяет сообщение, используя экземпляры в ОЗУ.
- Более старый пример с того же сайта 2 , который больше не связан с сайтомно можно найти, используя поисковые системы, относится к
store
методу, который, похоже, с тех пор был удален из библиотеки в пользу реализации, которая не содержит никаких возможностей хранения. - Экземпляры
AsymmetricCipherKeyPair
(которыекоторые я получаю из keygen) сами по себе не сериализуемы, также как и экземпляры BLS01PublicKeyParameters
или BLS01PrivateKeyParameters
, причем поля, содержащие ключи (sk
и pk
), являются закрытыми и вводятся только для *Интерфейс 1018 *, который мало что говорит о содержимом.
В качестве обходного пути я реализовал storЭтот метод (без обработки всех исключений) выглядит примерно так:
public static void storePrivateKey(AsymmetricCipherKeyPair key, String filename)
throws FileNotFoundException, IOException {
Field f = null;
f = key.getPrivate().getClass().getDeclaredField("sk");
if (f != null) {
f.setAccessible(true);
Object fieldContent = null;
fieldContent = f.get(key.getPrivate());
if (fieldContent != null) {
byte[] data = null;
if (fieldContent instanceof ImmutableZrElement) {
ImmutableZrElement izr = (ImmutableZrElement)fieldContent;
data = izr.toBytes();
}
try (FileOutputStream fos = new FileOutputStream(filename)) {
fos.write(data);
}
}
}
}
С аналогичным подходом для открытых ключей.Это означает, что теперь я использую рефлексию для извлечения содержимого частного поля, чтобы сохранить его где-нибудь.Это решение, очевидно, представляет собой хакерскую коллекцию всевозможных неприятных запахов, но это пока лучшее, что я придумал.Я знаю, что запись некоторых байтов на диск не должна быть такой сложной, но я действительно не могу найти правильный способ сделать это.Кроме того, чтобы быть грубым, я не зашифрован: я хочу применить эту схему для подписи и проверки некоторых сообщений, вот и все.Я понимаю, что мне следует углубиться в математику всего подхода, но время ограничено - вот почему я выбрал библиотеку.