Рейтинг:1

Безопасно ли хранить хэш простого текста?

флаг us

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

kelalaka avatar
флаг in
Добро пожаловать в Cryptography.SE Пароли не хэшируются стандартными устойчивыми к коллизиям хэшами, такими как SHA256 или SHA3-512, они хэшируются с помощью специальных алгоритмов хеширования паролей, таких как PBKDF2, Scrypt или более совершенный Argon2. Хотя есть действительно хорошие [менеджеры паролей с открытым исходным кодом] (https://www.wizcase.com/blog/most-secure-open-source-password-managers/), такие как Keepass, этот вопрос связан с отсутствием фундаментальных исследований должен сделать разработчик менеджера паролей; **поиск того, что делают другие**!
kelalaka avatar
флаг in
Кроме того, пароли не хранятся в виде хэша в менеджере паролей, они хранятся в зашифрованном виде, чтобы менеджер паролей мог их расшифровать при необходимости. хеширование — это односторонний процесс, который уничтожает исходные данные. Хэширование != шифрование. вам нужно создать ключ шифрования из пароля пользователя, чтобы этот ключ мог расшифровать фактический ключ, который шифрует пароли.
kelalaka avatar
флаг in
Как ваши пользователи вводят ключи к вашей программе? Как они это запоминают? Им нужно ввести пароль, обычно сгенерированный с помощью хорошего пароля, такого как dicewire.
Luqus avatar
флаг us
Пароли хранятся в зашифрованном виде. Но когда я использую свою функцию шифрования, я не могу сказать, правильно ли она расшифрована. Если я вызову функцию с неправильным **мастер-ключом**, она все равно выдаст результат. Я хеширую открытый текст, чтобы определить, был ли введен правильный ключ. После этого я покажу пользовательский интерфейс с открытым текстом, иначе я бы сказал пользователю, что он ввел неправильный мастер-ключ.
Luqus avatar
флаг us
Я не пытаюсь копировать лучший менеджер паролей, я хочу найти способ, который не имеет больших недостатков безопасности. Кстати, я хеширую не пароль, а открытый текст, как указано в моем вопросе.
Рейтинг:1
флаг in

Как указывали другие, такая схема не будет соответствовать передовой практике. Учитывая, что вы задаете этот вопрос, я настоятельно рекомендую использовать ваш код только для практики.

В принципе, вы можете хэшировать данные, а затем зашифровать их. Поскольку хэш остается конфиденциальным до тех пор, пока не будет найден ключ, это учитывается, когда речь идет о защите хэша и открытого текстового сообщения. Однако обратите внимание, что hash-then-encrypt само по себе может быть небезопасным; мы обычно предпочитают такие методы, как шифрование, затем MAC. Лично я бы попытался использовать функцию получения ключа на основе пароля и аутентифицированный режим шифрования, такой как EAX / encrypt-then-HMAC (также позаботившись о IV).

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

Luqus avatar
флаг us
Я не пытаюсь хэшировать свои данные и затем шифровать их, я пытаюсь определить правильность расшифровки. Это единственная причина, по которой я вычисляю хэш; чтобы узнать, ввел ли пользователь правильный мастер-ключ.
Luqus avatar
флаг us
Я добавил графику к своему вопросу, которая показывает, чего я хотел бы достичь.
Maarten Bodewes avatar
флаг in
Это все та же схема, которую я описываю. Если вы не хотите проверять данные на целостность, вам вообще не нужно их хешировать. Честно говоря, я хотел бы знать, не напортачил ли кто-нибудь с базой данных.
Рейтинг:1
флаг in

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

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

Есть лучшие способы аутентификации шифрования. Мы можем шифровать, а затем использовать Mac, мы можем использовать комбинированные методы, такие как GCM. Оба лучше, чем простой текстовый хеш.

Ответить или комментировать

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