In python, I am trying to blind and unblind a message. When I unblind the message, I don\'t get the original message. Does anyone know what I might be doing wrong. The follo
Blinding is a sort of encryption with a random element. It is usually used for Blind Signatures which would look like this:
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA256
from random import SystemRandom
# Signing authority (SA) key
priv = RSA.generate(3072)
pub = priv.publickey()
## Protocol: Blind signature ##
# must be guaranteed to be chosen uniformly at random
r = SystemRandom().randrange(pub.n >> 10, pub.n)
msg = "my message" * 50 # large message (larger than the modulus)
# hash message so that messages of arbitrary length can be signed
hash = SHA256.new()
hash.update(msg)
msgDigest = hash.digest()
# user computes
msg_blinded = pub.blind(msgDigest, r)
# SA computes
msg_blinded_signature = priv.sign(msg_blinded, 0)
# user computes
msg_signature = pub.unblind(msg_blinded_signature[0], r)
# Someone verifies
hash = SHA256.new()
hash.update(msg)
msgDigest = hash.digest()
print("Message is authentic: " + str(pub.verify(msgDigest, (msg_signature,))))
This is how it is implemented, so you cannot directly unblind the message, because you don't have d, so the blinded element must be signed first. In order for the blind signature to be secure, you need to randomly generate the blinding factor r in the range of the signing modulus.