Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 7, 2007 18:51:35

wiz
От:
Зарегистрирован: 2007-11-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

RSA Sign/Verify

Никак не могу подобрать правильный способ проверки подписей с использованием ключей и RSA в M2Crypto.

Имеется: мои priv & pub ключи и pub клиента.

Подпись формируется правильно

private_key = RSA.load_key('./my_rsa.priv')
private_key.sign(sha(data).digest())
и успешно съедается на другой стороне.

Но когда моя очередь проверять - RSAError: bad signature.

their_public = RSA.load_pub_key('./their_rsa.pub')
their_public.verify(data, sig)
При этом сам openssl подтверждает правильность:
openssl dgst -sha1 -verify their_rsa.pub -signature /tmp/sig /tmp/data
upd:
При чём bad signature выскакивает даже при проверке своей же подписи.

mysig = priv.sign(sha(data).digest())
pub.verify(data, mysig)
-> M2Crypto.RSA.RSAError: bad signature

При проверке вручную - через расшифровку подписи, обнаружил, что в расшифрованом хэше оказалось “лишних” 15 байт перед, собственно, хэшом, который совпадает с правильным.

Кому писать? Кого пинать?



Отредактировано (Ноя. 7, 2007 19:09:16)

Офлайн

#2 Ноя. 8, 2007 11:03:37

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

RSA Sign/Verify

Стандартная практика, - сделано для того, что бы противостоять “blinding”-атакам.
Просто заберите “лишние” байты в расшифрованном хеше.

Офлайн

#3 Ноя. 8, 2007 11:08:03

wiz
От:
Зарегистрирован: 2007-11-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

RSA Sign/Verify

Тоесть метод verify у ключа m2crypto фактически нерабочий и надо делать свой?



Офлайн

#4 Ноя. 8, 2007 11:27:18

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

RSA Sign/Verify

А разве не так должно быть?

private_key = RSA.load_key('./my_rsa.priv')
private_key.sign(data)?
Просто я метод посмотрел, а он там:
def sign(self, digest, algo='sha1'):
        """
        Signs a digest with the private key
        @type digest: str
        @param digest: A digest created by using the digest method
        @type algo: str
        @param algo: The method that created the digest.
        Legal values are 'sha1','sha224', 'sha256', 'ripemd160', 
        and 'md5'.
        
        @return: a string which is the signature
        """
        digest_type = getattr(m2, 'NID_' + algo, None) 
        if digest_type is None:
            raise ValueError, ('unknown algorithm', algo)
Правда я не пробовал, сегодня попробую, скажу.

Офлайн

#5 Ноя. 8, 2007 12:13:33

wiz
От:
Зарегистрирован: 2007-11-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

RSA Sign/Verify

Неа. Подписывать надо хэш. Я тоже сначала данные пытался подписать. Тип хэша там указывается чтобы при верификации проверять, что хэшировалось именно этим алгоритмом. Он рычит, если сигн был на мд5, а для проверки ша1.

Подпись работает правильно.



Офлайн

#6 Авг. 1, 2012 15:32:19

llolla
От:
Зарегистрирован: 2011-06-24
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

RSA Sign/Verify

Ferroman
Просто заберите “лишние” байты в расшифрованном хеше.
каким образом можно это сделать?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version