2015-01-16 2 views
2

Я работаю над игровой приставкой, у которой есть интерфейс C# и PHP-сервер для аутентификации, и мне нужно отправить пароль с панели запуска на бэкэнд по незашифрованному соединению. Есть ли способ сделать это безопасно? (Пароли хранятся в виде хешей blowfish в базе данных, начинающихся с $ 2y ...)Отправка пароля по незашифрованному соединению

ответ

4

Establishing an SSL соединение является одним из наиболее часто используемых методов передачи конфиденциальной информации, такой как пароли. Для этого, по крайней мере, вы должны предоставить вашему серверу/серверу пару ключей (сертификат). Его не нужно подписывать veriSign, если ваше приложение будет работать на него, а не на браузер.

Обратите внимание: что вы на самом деле после этого - «конфиденциальность». Это означает, что никто, кроме вас, и ваша предполагаемая сторона не смогут прочитать содержание сообщения. В большинстве случаев это связано с «правильным использованием механизмов шифрования». Вы также хотите быть в безопасности от таких атак, как Man in the Middle Attack.

Очень часто разработчики просто программируют что-то, что работает и думает о безопасности позже; но есть неоспоримая польза, если вы можете подумать об этом раньше времени.

Редактировать: Если вам нужно только отправить пароль надежно, и все, то ответ @ rich.okelly будет ответом. Поскольку вы можете жестко кодировать доверенный открытый ключ сервера в приложении и просто шифровать этот пароль клиентом. Но если вы хотите иметь безопасное соединение для более/всех ваших сеансов, вы можете подумать о решении для SSL.

1

Как я вижу, лучше всего сделать это (предполагая, что соединение ДОЛЖНО быть небезопасным), было бы зашифровать пароль перед его отправкой и расшифровать на бэкэнд - эффективно перевести свое собственное шифрование на уровне сообщений.

Для этого вам понадобится механизм асимметричного шифрования - общедоступный/закрытый ключ, вероятно, самый простой способ для этого.

2

Во всех случаях, ваше требование заключается в следующем:

Начиная с незащищенными, незашифрованными средствами передач данных, как я в конечном итоге с защищенными, зашифрованным средствами передач данных, по крайней мере, достаточно долго, чтобы отправить пароль?

  • Интернет всегда начинается как незащищенное и незашифрованное!

Существует много способов, и rolling your own является наихудшим из них. Варианты включают, но не ограничиваются ими:

  • Используйте C# библиотеки как Bouncy Castle
    • Для создания 1.2 сеанса TLS с использованием шифров AEAD
    • Чтобы использовать асимметричные шифры как RSA, ECDSA или DSA (с ключом> = 2048 бит) для шифрования пароля
  • Использование VPN программное обеспечение, как OpenVPN
  • вызовов OpenSSL
    • Чтобы создать TLS 1.2 сеанса с использованием AEAD шифров
    • Чтобы использовать асимметричные шифры как RSA, ECDSA или DSA (с ключом> = 2048 бит) для шифрования пароля
  • вызов GPG для шифрования пароля с помощью открытого ключа

Во всех случаях вам придется каким-либо образом изменить как задний, так и передний конец, либо напрямую, либо добавить другой слой между ними (VPN).

Смежные вопросы