Форум сайта python.su
Никак не могу подобрать правильный способ проверки подписей с использованием ключей и RSA в M2Crypto.
Имеется: мои priv & pub ключи и pub клиента.
Подпись формируется правильно
private_key = RSA.load_key('./my_rsa.priv')
private_key.sign(sha(data).digest())
their_public = RSA.load_pub_key('./their_rsa.pub')
their_public.verify(data, sig)
openssl dgst -sha1 -verify their_rsa.pub -signature /tmp/sig /tmp/data
mysig = priv.sign(sha(data).digest())
pub.verify(data, mysig)
Отредактировано (Ноя. 7, 2007 19:09:16)
Офлайн
Стандартная практика, - сделано для того, что бы противостоять “blinding”-атакам.
Просто заберите “лишние” байты в расшифрованном хеше.
Офлайн
Тоесть метод verify у ключа m2crypto фактически нерабочий и надо делать свой?
Офлайн
А разве не так должно быть?
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, а для проверки ша1.
Подпись работает правильно.
Офлайн
Ferromanкаким образом можно это сделать?
Просто заберите “лишние” байты в расшифрованном хеше.
Офлайн