Проверка подписи с использованием криптографии на эллиптических кривых - PullRequest
1 голос
/ 12 сентября 2011

Мне нужно проверить подпись сообщения, которое содержит несколько значений.Единственные параметры, которые у меня есть, это подпись, открытый ключ и сами значения.Алгоритм, используемый для создания сигнатуры, представляет собой криптографию с эллиптической кривой с 192 битами.Я уже пытался найти примеры кода в сети, но ничего не нашел для этого случая.

Кто-нибудь сталкивался с этим алгоритмом, использующим Java для проверки?Не могли бы вы предоставить код или ссылку на пример?

Спасибо за помощь!

Ответы [ 2 ]

5 голосов
/ 13 сентября 2011

Вам немного не хватает информации ...

Существует несколько схем подписей, в которых используются эллиптические кривые, но наиболее распространенным (на сегодняшний день) является ECDSA .Затем вы должны заботиться о следующих моментах:

  • Подпись работает с последовательностью битов.Каждый бит данных должен быть правильным.Здесь у вас есть «значения», поэтому необходимо кодировать эти значения в последовательность битов (или байтов).Чтобы проверить подпись, вы должны использовать ту же кодировку, что и для генерации подписи.

  • ECDSA начинается с хеширования входных данных с помощью криптографической хеш-функции ,Там снова вы должны использовать тот же, что был использован для генерации подписи.Как дикое предположение, я бы сказал, что хэш-функция, вероятно, имеет вид SHA-1 .

  • ECDSA работает по эллиптической кривой .Кривая size недостаточна для определения кривой: существует много 192-битных кривых.Однако, поскольку определить собственную кривую сложно, большинство людей используют одну кривую среди 15 кривых, определенных в FIPS 186-3 .Одна из этих 15 кривых имеет «192-битный размер» (он называется «P-192»), поэтому есть вероятность, что сигнатура использует эту кривую.

  • Открытый ключ ECDSAкодирование точки кривой.Точка кривой номинально представляет собой пару целых чисел (X, Y) (это «координаты» точки).Эти целые числа взяты из базового поля, в котором живет кривая;для кривой P-192 координаты являются 192-битными целыми числами.«Нормальным» кодированием для такого открытого ключа является 49-байтовая строка: первый байт будет 0x02, за которым следует кодирование без знака с прямым порядком байтов X (24 байта), затем кодирование без знака Y (24 байта).Возможны другие кодировки.

  • Сигнатура ECDSA формально состоит из двух целочисленных значений, обычно называемых r и s (тоже 192-разрядные целые числа)).Снова, у вас есть подпись, вероятно, последовательность байтов, которая является кодировкой двух целых чисел.Существует два общих кодирования, одно из которых представляет собой необработанную кодировку без знака с прямым порядком байтов для обоих значений (отсюда и 48-байтовую сигнатуру), другое использует ASN.1 (для сигнатуры длиной 53 или 54 байта или около того).

Использование Bouncy Castle , как предполагает @Ashkan, хорошая идея.Но, как вы видите, в вашей ситуации достаточно много предположений.Если вы хотите получить полное представление о том, что происходит, купите копию ANSI X9.62: 2005 (стандарт ECDSA).Имейте в виду, что математическое содержание довольно тяжелое.

0 голосов
/ 12 сентября 2011

Вы, вероятно, можете использовать библиотеку Bouncy Castle .

См. http://www.bouncycastle.org/wiki/display/JA1/Using+Elliptic+Curve

...