2013-03-06 4 views
0

У меня есть приложение, которое требует хранения нескольких паролей пользователей с требованием их восстановления.Рекомендуемый метод шифрования для восстанавливаемых паролей

Я подумываю о шифровании паролей с использованием главного пароля + другого механизма шифрования.

Ключ для шифрования будет храниться во внешней системе и может быть получен с использованием API. Дело в том, я не уверен, если:

  1. Этот метод достаточно
  2. которого дополнительный механизм я должен выбрать для шифрования безопасный.

Спасибо.

EDIT -------------- Я знаю, что он закрыт ... но я хочу уточнить - у меня должна быть возможность расшифровать, это большая часть моего приложение ... с этим было сказано, я думаю, что получил свой ответ с AES algo. Мне не нужно хеширование, так как хеширование необратимо.

+1

Попробуйте отправить это еще раз на [Security Stackexchange] (http://security.stackexchange.com/). Они смогут дать вам * звук * совет. – Perception

ответ

5

Переполнение стека - это форум, помогающий вам в вопросах кодирования.

Этот вопрос больше подходит для The security forum.

Тем не менее, существуют некоторые стандартизованные принципы шифрования.

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

Если вы ищете hash пароли, которые являются стандартом для хранения паролей, тогда нет необходимости в ключах. Используйте алгоритм SHA1. Что касается размера вывода, то это более безопасный алгоритм хэширования, который в настоящее время используется. Другие варианты: SHA256 и SHA512

Редактировать: О, они меняются. А также алгоритмы хеширования! Люди переходят из семейства алгоритмов хэширования SHA в Bcrypt, у которого есть несколько других функций, таких как введение фактора стоимости для защиты от радужных таблиц.

0

PHP поддерживает SHA1, руководство: "? Вам нравится зеленый или красное яблоко" http://php.net/manual/en/function.sha1.php

если (sha1 ($ строка) === 'd0be2dc421be4fcd0172e5afceea3970e2f3d940') { эхо; }

И JAVA SHA1 пример: http://www.herongyang.com/Cryptography/SHA1-Message-Digest-in-Java.html

Вы можете комбинировать СОЛЬ + PSK (SHA1) с шифрованием AES.

Я рекомендовал использовать для SYSTEM SALT (сгенерированный ключ SHA512 в системе + SALT на пользователе + PSK SHA512 для входа в систему).

Или лучше использовать PBKDF2, если вы не можете использовать либо bcrypt, либо scrypt с SHA2.

+1

'AES' Я могу понять, но' SHA1'? Как «SHA1» помогает в этом случае? Это алгоритм одностороннего хэша, а не алгоритм шифрования. –

+0

пароли должны * не * быть дешифруемыми! вы должны ввести пароль пользователя и сравнить его с сохраненным хэшем. если они соответствуют паролю, верны. – xero

1

Вот ваш обязательный для чтения: You're Probably Storing Passwords Incorrectly

Теперь, по вопросу о том, как хранить зашифрованные пароли. Не. Храните хэшированные пароли.


Возможно, вы решили решить неполадку. Я подозреваю, что вы хотите создать функцию для восстановления паролей ... в этом случае я пришлю вам to one of my previous answers, если вы не возражаете.


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


В противном случае вы в основном разрабатываете способ, которым все украденные пароли будут украдены. Либо потому, что то, что считается безопасным, теперь уже нельзя считать безопасным завтра или потому, что мы люди (правда?), И мы можем совершать ошибки.

В любом случае, ваша безопасность будет в лучшем случае такой же сильной, как процесс аутентификации вторичного API (я имею в виду, тот, который извлекает ключ для расшифровки паролей). Вы говорите о Java, каковы шансы на то, что ваш код Java будет обратным инженером, чтобы узнать, как получить пароли?

1

я не уверен, если [...] Этот метод является достаточно

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

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

Как уже упоминалось этот вопрос лучше всего подходит для http://security.stackexchange.com, чем здесь, но это уже было предложено много раз, и вы получите более сильно сформулированное поощрений о не делать это таким образом на всех, а не решения.