2013-06-06 2 views
0

В теории должно быть возможно проверить подпись части данных, если в наличии открытого ключа, подписи и данных, которые были подписаны, и алгоритм хеширования известен.Как я могу проверить подпись ECDSA, используя подписанные данные, подпись и открытый ключ ECDSA подписывающего лица?

У меня есть все эти компоненты в двоичном формате. Кто-нибудь имеет представление о самом простом способе подтверждения этой подписи? OpenSSL? Python? Пример был бы замечательным. Можно ли это сделать без написания кода?

ответ

1

Вот как вы можете это сделать в Ruby.

require 'openssl' 

signature = File.read('/path/to/sig.der') 
data = File.read('/path/to/data') 
pub_key = File.read('/path/to/ecdsa_pub_key') 
key = OpenSSL::PKey::EC.new(pub_key) 
if key.dsa_verify_asn1(data, signature) == true 
    puts 'verified' 
end 

Этот код требует, чтобы OpenSSL, связанный с Ruby, был скомпилирован с поддержкой эллиптической кривой. (Дистрибутивы Linux с Red Hat не удовлетворяют этому требованию)

Если вам интересно: dsa_verify_asn1 использует функцию ECSDA_verify в API OpenSSL.

+0

Я получаю «в' начальных ize ': неизвестное имя кривой "с использованием OpenSSL 1.0.1c на Ubuntu 12.10 По-видимому, это можно сделать из командной строки, используя openssl" dgst -hashfunction -verify public.key -signature file.sig file ". Я просто не понимаю, как преобразовать открытый ключ EC из шестнадцатеричного в формат PEM. –

+0

@DrewLex Попробуйте это преобразовать двоичный ключ в pem: openssl ec -in key.der -inform DER -pubin -out keyout.pem -outform PEM – gtrig

1

Вы можете использовать OpenSSL, чтобы подписать сообщение с подписью ECDSA, а затем вы можете использовать OpenSSL для проверки подписи:

Чтобы подписать сообщение (используя SHA256 хеширование, учитывая сообщение и ЕС секретный ключ подписывающего):

openssl dgst -sha256 -sign ec-privatekey.pem message.txt > signature.der 

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

openssl dgst -sha256 -verify ec-publickey.pem -signature signature.der message.txt 
Смежные вопросы