Баланс между быстрым и безопасным: чувствительный ко времени алгоритм шифрования пароля - PullRequest
0 голосов
/ 27 октября 2009

Я работаю над клиентской <> серверной многопользовательской игрой. Аутентификация выполняется на том же сервере, что и вся игровая логика и т. Д. Это означает, что мой алгоритм шифрования пароля для аутентификации не может занимать слишком много времени на вычисление, поскольку он задержит все остальные необходимые действия. Если много людей будут входить в систему одновременно, это вызовет заметную задержку при использовании с очень сильными алгоритмами шифрования, которые обрабатывают много времени.

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

Ответы [ 2 ]

7 голосов
/ 27 октября 2009

Прежде всего, для аутентификации вам не нужен «зашифрованный» пароль; хранение зашифрованного пароля подвергает ваших пользователей риску, и я настоятельно не рекомендую его. Поскольку пользователи не знают, они могут использовать один и тот же пароль для своего банковского счета и вашей игры. Помогите им оставаться в безопасности, заботясь об этом пароле.

Вместо этого сохраните необратимый «хэш» пароля и случайную «соль». Есть много вопросов о том, как это сделать в StackOverflow, и пара их ответов почти верна.

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

Алгоритм, который я рекомендую для защиты паролей, на самом деле является алгоритмом деривации ключей, называемым PBKDF2 (PBKDF1 также будет работать), который описан в PKCS # 5. Одним из параметров настройки этих алгоритмов является количество итераций. Вы можете профилировать алгоритм на своем сервере и корректировать количество итераций, пока не найдете число, соответствующее вашим требованиям к производительности. Даже мой ноутбук может выполнять тысячи итераций в секунду, поэтому я, вероятно, начну с 2000 и продолжу работать.

Если вы на самом деле говорите о шифровании всего трафика между клиентом и сервером, используйте AES. Он был выбран из-за его скорости, хотя некоторые другие шифры в конкурсе, вероятно, более безопасны. В частности, используйте набор шифрования AES в соединении SSL.

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

1 голос
/ 27 октября 2009

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

Сравнение скорости популярных алгоритмов шифрования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...