RSA с AES 128 - PullRequest
       57

RSA с AES 128

0 голосов
/ 02 ноября 2018

Это мой протокол:

Шифрование и подпись - пользователь A

  1. шифр с использованием открытого ключа от пользователя B
  2. подписать зашифрованное сообщение закрытым ключом A

Проверка и дешифрование - пользователь B

  1. проверить подпись открытым ключом A
  2. расшифровать сообщение с помощью закрытого ключа B

Частные ключи A и B одинаковы (128 бит)

Я хочу отправить текст с использованием этого протокола с AES в режиме CBC, поэтому я создаю этот код, но он не работает, apperar в подписи:

bytes object has no attribute n

код следующий:

    def firmar(self, datos):

        try:
            h = SHA256.new(datos)

            signature = pss.new(self.keyprivada).sign(h)
            return signature
        except (ValueError, TypeError):
            return None

    def comprobar(self, text, signature):

        h = SHA256.new(text)

        print(h.hexdigest())
        verifier = pss.new(self.keypublica)
        try:
            verifier.verify(h, signature)
            return True
        except (ValueError, TypeError):
            return False

1 Ответ

0 голосов
/ 02 ноября 2018

Этот раздел больше не актуален, так как код изменился

Во-первых, , вы используете ECB, это небезопасно из-за постоянной связи между текстом и его выводом.

Во-вторых , CBC требует IV, следовательно, потребуется другая реализация.

И, наконец, самое важное:

AES НЕ алгоритм асимметричного шифрования

означает, что он должен быть зашифрован и расшифрован одним и тем же ключом. Вы используете открытый и закрытый ключи, как если бы вы использовали асимметричные методы шифрования.

Альтернатива:

Если вы хотите правильно реализовать RSA , вы можете сгенерировать случайный байтовый массив и использовать его в качестве ключа, затем отправить его в зашифрованном виде получателю для его расшифровки и использовать его в качестве ключа для расшифровки как бы то же самое.

Сейчас:

Вы используете закрытый ключ для подписи данных ... RSA требует, чтобы вы использовали открытый ключ (теперь закрытый - не распространяется) для его шифрования, однако вы не можете расшифровать что-то, зашифрованное с помощью закрытого ключа, с открытым ключом. Вместо этого вы распространяете «закрытый ключ» для расшифровки и сохраняете «открытый ключ» для шифрования, чтобы никто другой не мог зашифровать или подписать данные.

Что ты делаешь!

Существует связь между открытым и закрытым ключами! Вы не можете просто использовать произвольные байтовые массивы.

Прочтите статью в Википедии.

...