Смешайте сетевую реализацию с RSA в python

Я пытаюсь реализовать 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)

tl;dr Как мне сделать this с RSA?


person captain    schedule 30.01.2019    source источник
comment
Вы должны решить, используете ли вы RSA encryption (фиксированная длина открытого текста) или block/stream cipher encryption with a key, that's passed along RSA encrypted, что позволяет использовать открытый текст произвольной длины.   -  person Dima Tisnek    schedule 30.01.2019
comment
@DimaTisnek какой пример последнего?   -  person captain    schedule 30.01.2019
comment
crypto.stackexchange.com/questions/14/   -  person Dima Tisnek    schedule 30.01.2019
comment
Спасибо, @DimaTisnek. Таким образом, в ссылке решение заключается в передаче зашифрованного симметричного ключа RSA и зашифрованного открытого текста AES. Это нормально делать на производстве? Существуют ли какие-либо алгоритмы криптографии с открытым ключом, которые допускают открытый текст произвольной длины?   -  person captain    schedule 30.01.2019
comment
IANAE, похоже, что большая часть (все?) производственной асимметричной криптографии основана на арифметике по модулю (RSA m^e^d=m (mod n), Schnorr g=h^r (mod p), EC над конечным полем, модульное мульт Эль-Гамаля. Инверсия), что означает, что элементарная операция выполняется над целым числом< /i> с точностью до модуля. Мы просто используем битовые и байтовые строки как представление таких целых чисел. См. ответы на stackoverflow .com/questions/4371729/ для дальнейших указаний и обсуждения.   -  person Dima Tisnek    schedule 31.01.2019
comment
Спасибо @DimaTisnek!   -  person captain    schedule 01.02.2019