2015-06-24 3 views
1

Компания хочет отправить мне цифровую цифру i.e method. У меня есть только открытый ключ . Эта подпись используется для аутентификации, кто пришел от И содержит подробную информацию о пользователе, который мне нужен.Python расшифровывает подписи только с открытым ключом

Что я не понимаю, так это то, как я расшифровываю подпись только с открытым ключом и сигнатурой, которую я отправил. Все, что может сделать из примера, который я могу найти, это проверить подпись. Не зная, что зашифрованная строка, вы не можете расшифровать.

from ecdsa import SigningKey, NIST384p 
sk = SigningKey.generate(curve=NIST384p) 
vk = sk.get_verifying_key() 
signature = sk.sign("message") 
assert vk.verify(signature, "message") 

Я ошибаюсь или есть другой тип цифровой подписи, которую они предлагают?

+1

Да, вы недоразумение. Вы не расшифровываете подписи - проверяйте их. –

+2

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

ответ

2

Во-первых, вам нужно использовать VerificationKey. (смотри также @ J0HN отличный комментарий) что-то вроде (источник: https://github.com/warner/python-ecdsa):

from ecdsa import VerifyingKey, BadSignatureError 
vk = VerifyingKey.from_pem(open("public.pem").read()) 
message = open("message","rb").read() 
sig = open("signature","rb").read() 
try: 
    vk.verify(sig, message) 
    print "good signature" 
except BadSignatureError: 
    print "BAD SIGNATURE" 
+0

Благодарим вас за ответ. Теперь я понимаю. Итак, если моя цель - шифрование данных, было бы лучше, если бы я предложил стандартное симметричное шифрование ключей, где я даю им открытый ключ, они создают знак из этого, и я использовал закрытый ключ для дешифрования? Если это так, в Python для этого есть хороший стандартный lib? – Prometheus

+1

Я настоятельно рекомендую вам взглянуть на определение стандартных криптографических терминов (шифрование с открытым ключом, электронную подпись, симметричное/асимметричное шифрование), а затем поставить вопрос, в котором сначала указывается точная проблема, которую вы хотите решить, и во-вторых, как вы собираетесь ее решить. –