Лучший способ дать получателю зашифрованный ключ симметрии c? - PullRequest
1 голос
/ 03 февраля 2020

В своем нынешнем виде я написал проект python3 для шифрования файла (используя AES) и систему открытого / секретного ключей (RSA) для шифрования ключа AES.

Мое текущее затруднение заключается в следующем, каков наилучший способ передачи зашифрованного ключа AES получателю? Моя программа НЕ зависит от носителя для отправки файлов, а просто файлы надежно зашифрованы. Другими словами, когда пользователь выбирает открытый ключ c получателя, одноранговая связь отсутствует.

Является ли присвоение файла ключу AES, зашифрованному RSA, плохой идеей?

Я не обладаю обширными знаниями в области криптографии как таковой, поэтому любые предложения приветствуются

1 Ответ

1 голос
/ 03 февраля 2020

Если вы знаете, что получатель публикует c ключ RSA, вы можете использовать RSA-KEM (KEM: механизм инкапсуляции ключей). RSA-KEM для одного получателя с AES-GCM просто следующим образом:

  • Отправитель ;

    1. Сначала сгенерируйте x в [2..n-1] равномерно случайным образом, n - это модуль RSA.
    2. Используйте функцию определения ключа (KDF) в x,

    key= KDF(x)

    для AES 128 192 или 256 бит в зависимости от ваших потребностей. Предпочитаю 256.

  • Шифрование x,

    c = x^c mod n

  • Шифрование сообщения с помощью AES-GCM создает IV и

  • Отправить (c,(IV,ciphertext,tag))
  • Получатель ;

    1. Чтобы получить x, они используют свои частный показатель d,

    x = c^d mod n

  • Использует то же самое (KDF) на x для получения того же ключа AES,
  • Расшифровывает сообщение с помощью AES-GCM

Примечание 1: На самом деле это композиция KEM и DEM (механизм инкапсуляции данных; аутентифицированный шифр служит DEM). Это обеспечивает стандарт IND-CCA2 / NM-CCA2 - неразличимость и несгибаемость зашифрованного текста при адаптивной атаке с использованием выбранного зашифрованного текста. Это минимальное требование для современной криптографии.

Примечание 2: Если вы хотите отправить сам ключ, как вы описали, чтобы предотвратить атаки на учебник RSA, вам понадобится схема заполнения как OAEP или PKCS # v1.5. RSA-KEM устраняет это, используя полный модуль в качестве сообщения.

Примечание 3: Вышеописанный RSA-KEM работает для случая одного пользователя. RSA-KEM для нескольких пользователей попадет в широковещательную атаку Хостада . Вместо этого используйте RSAES-OAEP, это делает его безопасным для нескольких получателей с одинаковым x, зашифрованным для разных получателей. Это сделает очень полезным отправку сообщения нескольким получателям вместо создания нового x для каждого получателя и шифрования сообщения для каждого производного ключа (как это делает PGP / GPG).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...