Я пытаюсь реализовать Mixnet на Python. Рассмотрим пример на связанной вики-странице — A
шифрует сообщение с помощью открытого ключа A
, а затем шифрует полученный зашифрованный текст вместе с адресом B
с помощью открытого ключа M
.
Когда я запускаю свой код, который пытается сделать вышеперечисленное, я получаю ValueError: Plaintext is too long.
, потому что я неправильно добавляю адрес B
и превышаю размер 1024 RSA. Как мне добиться этого с помощью RSA?
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto import Random
def create_rsa():
random_generator = Random.new().read
key = RSA.generate(1024, random_generator) #generate pub and priv key
publickey = key.publickey() # pub key export for exchange
return key, publickey
def encrypt(message, key):
ciphertext = PKCS1_OAEP.new(key)
return ciphertext.encrypt(message)
message = "chocolate milk"
prA, A = create_rsa()
prB, B = create_rsa()
prM, M = create_rsa()
# A sealing stuff
Kb = encrypt(message, B)
KbAddress = Kb + "B"
Km = encrypt(KbAddress, M)
RSA encryption
(фиксированная длина открытого текста) илиblock/stream cipher encryption with a key, that's passed along RSA encrypted
, что позволяет использовать открытый текст произвольной длины. - person Dima Tisnek   schedule 30.01.2019m^e^d=m (mod n)
, Schnorrg=h^r (mod p)
, EC над конечным полем, модульное мульт Эль-Гамаля. Инверсия), что означает, что элементарная операция выполняется над целым числом< /i> с точностью до модуля. Мы просто используем битовые и байтовые строки как представление таких целых чисел. См. ответы на stackoverflow .com/questions/4371729/ для дальнейших указаний и обсуждения. - person Dima Tisnek   schedule 31.01.2019