Я не эксперт по криптографии, на самом деле у меня совсем немного опыта ее использования. В любом случае, пришло время, когда одно из моих приложений требует, чтобы у меня было настроено шифрование. Обратите внимание, что программа не будет управлять чем-то сверхкритическим, что может нанести большой ущерб.
В любом случае, я просто пытался выяснить, распространена ли эта схема, которую я использую, и есть ли недостатки (из которых может быть совершенно глупый и ужасно ошибочный дизайн, поэтому я и спрашиваю).
Хорошо, у меня есть связь клиент -> сервер. Клиент I может жестко кодировать общедоступную часть 2048-битного ключа RSA. Когда клиент хочет инициировать безопасное соединение, он отправляет свое имя пользователя, md5-хэш своего пароля и хеш случайного UUID, все из которых были зашифрованы с помощью открытого ключа сервера. Сервер получает информацию и расшифровывает ее с помощью своего закрытого ключа. Проверяет базу данных, чтобы убедиться, что его логин + пароль работают, и если они работают, создает новую запись в таблице «Сеансы» в БД. Сюда входят SessionID, UID (идентификатор пользователя) и хэш UUID. Используя UUID соответствующего идентификатора сеанса в качестве ключевой фразы, сервер затем отправит обратно сообщение, содержащее зашифрованное слово Blowfish «Успех!». + случайный UUID (это сообщение имеет цифровую подпись, поэтому мы можем определить, пришло оно с сервера или нет). С этого момента, когда клиент отправляет информацию на сервер, она будет с незашифрованным текстом sess_id и будет включать зашифрованное сообщение Blowfish с использованием секрета blowfish соответствующего идентификатора сеанса (хранящегося в зашифрованном виде в БД) в качестве ключа для шифрования/дешифрования.
В частности, мне любопытно, «должна ли работать» эта система, или кто-нибудь заметит, что явно существует уязвимость, такая как MITM.