Хочу уточнить пару вещей.
Например, мне надо зашифровать некую строку (json) для передачи по клиент-серверной архитектуре. Как я понял, мне надо сгенерировать ключ и IV (вектор) для AES, зашифровать их по 'асимметричному' алгоритму (RSA), и передать при подключении клиента. И у клиента расшифровать RSA ключ, получить AES key и IV и по этому AES ключу и IV расшифровывать строку. И так: Создаю экземпляр AESManaged Генерирую AES ключ и IV (GenerateKey()/GenerateIV()).
Затем создаю экземпляр RSACryptoServiceProvider Дальше для него создаются RSAParameters, Вопрос: что такое Modules и Exponent? Это и есть открытый и закрытый ключ? Т.е. открытый (Modules) я передаю клиенту, и Exponent клиент уже должен знать, так? Допустим...
Дальше, я шифрую AES key и IV через RSA, передаю, клиенту, он расшифровывает это по Exponent'у. И получает AES key и IV.
Все правильно?
Перечитал msdn, кажется я написал фигню... 2ой час ночи уже, башка не варит. Да, и Exponent и Modules - части открытого ключа. А набор D, P, и Q - закрытый ключ.
Т.е. например я могу хранить в структуре и эта структура по сути будет закрытым ключом.
Подтвердите, если это так.
Да, все верно, кроме того, что IV не обязательно шифровать. Его можно передавать в открытую, от этого безопасность не пострадает. Самое важное, что бы IV всегда был разный. Если вы будете использовать GenerateIV(), то об этом можно даже не задумываться.
Пара RSA ключей должна генерироваться на стороне, которая будет проводить расшифровку. Если это сервер, то генерируете пару на нем, открытый ключ отдаете клиенту, он шифрует, вы расшифровуете приватным ключом.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости