Является ли использование брелка небезопасным (при получении предметов обратно?) - PullRequest
1 голос
/ 28 февраля 2012

Отказ от ответственности людей SecOps: я осведомленный любитель в этом деле.Возможно, я что-то неправильно понимаю.Если так, пожалуйста, сообщите:)

Я делаю некоторую работу с Keychain / KeychainItemWrapper в моем приложении.Я хочу хранить пароль пользователя безопасным способом, и цепочка для ключей, кажется, способ сделать это.

Однако, я немного запутался.Я думал, что базовая защита паролем (смоделированная после unix crypt()) выглядит примерно так:

  1. Шифрование и сохранение пароля, указанного пользователем, с использованием алгоритма шифрования, который каждый раз будет давать одинаковые результаты (при одинаковыхsalt)
  2. Позже, когда пользователь введет свой пароль, зашифруйте его тоже
  3. Сравните две зашифрованные строки.Они равны?Пароли должны быть одинаковыми

Однако, похоже, что использование KeychainItemWrapper (и, возможно, всего API-интерфейса Keychain?) Предназначено для передачи пароля в виде простого текста обратно в программу.Однако разве это не небезопасно?Незашифрованный пароль просто сидит в памяти и ждет, когда кто-нибудь прочтет его, верно?

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

1 Ответ

3 голосов
/ 28 февраля 2012

Вы путаете две концепции (хеширование и шифрование).

Когда вам нужно проверить, что кто-то знает пароль, вы его хешируете (с солью) и сохраняете этот хеш. Затем, когда кто-то пытается аутентифицироваться как этот пользователь, вы запрашиваете у него пароль, хешируете его с той же солью и сравниваете с сохраненным значением. Это идеально, поскольку хеширование является односторонней / необратимой функцией. Поэтому, если кто-то получит доступ к вашему хранилищу учетных данных, он ничего не получит, поскольку ему потребуется взломать этот хэш (а современные алгоритмы, такие как crypt / bcrypt, специально разработаны для того, чтобы сделать взлом методом «грубой силы» очень трудным).

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

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

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