2013-09-09 4 views
1

Я пытаюсь реализовать действительно простой алгоритм RSA в C++, и я не использовал функцию openSSL. У меня есть 3 функции, generateParameter, шифрование и дешифрование. Задача каждой функции:RSA Шифрование и дешифрование на разных машинах

  1. generateParameter функция будет генерировать два простых чисел (р, д), модуль упругости (п), открытый показатель степени (е), и частные экспоненты (г), а затем записать n, e и d в файл.
  2. encryption Функция будет считывать параметры n и e, шифровать сообщение и затем записывать в файл.
  3. Функция дешифрования будет считывать параметры n и d, читать зашифрованное сообщение и затем расшифровывать его.

Все эти функции работают хорошо, если я запускаю его на одной машине, но что, если я хочу запустить его на двух разных виртуальных машинах? Запустите шифрование на VM1, отправьте зашифрованное сообщение (например, с помощью функции send()), а затем расшифруйте его на VM2.

Как VM2 расшифровывает сообщение, если параметры n и d не отправляются на VM2? Эти 2 параметра генерируются путем вычисления математики на простых числах (p и q), но я знаю, что я не могу отправить простые числа.

Это мои вопросы, я ценю любые подсказки.

С уважением,

dulipat

ответ

2

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

Партнеры должны создавать свою собственную пару открытого и закрытого ключей. Впоследствии вы делитесь общедоступными ключами (то есть M1 отправляет свой открытый ключ на M2 и наоборот). На самом деле проблема с распространением ключей и аутентификацией, то есть, как я узнаю, что публичный ключ, который говорит, что он принадлежит Джону, действительно принадлежит Джону? Но для вашего небольшого примера вы можете сначала проигнорировать это.

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

Таким образом, вам никогда не придется делиться никакими основными факторами или частными ключами (как вы правильно заметили, это полностью нарушит безопасность процесса).

+0

О, мой, да, вы правы, я должен был подумать об этом, спасибо – dulipat