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