2016-11-09 3 views
1

Я делаю программу на C, которая позволяет пользователю зарегистрироваться и войти. Когда пользователь регистрируется, я хочу сохранить его имя пользователя и пароль в файле.

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

Мой вопрос: если я локально храню имя пользователя, хеш и соль в текстовом файле, что мешает злоумышленнику просто изменить хэш и соль в файле на свой собственный хэш SHA-1 со своей солью, а затем записать в использовании его нового пароля?
Спасибо.Безопасное хранение пароля локально

+0

Если злоумышленник уже имеет такой уровень доступа, то зачем им нужно входить в систему, когда они могут просто вытащить все данные, которые они хотят напрямую? –

+0

Ну, это именно то, что я хочу предотвратить. Как запретить злоумышленнику доступ к данным, хранящимся локально? – Matan

+0

Я думаю, что одна возможность шифрования вашего текстового файла. Тем не менее, ваша двоичная программа имеет информацию о том, как ее расшифровать, поэтому злоумышленник не может понять это, но это может быть очень сложно, если вы достаточно затмеваете все. – Milack27

ответ

1

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

В первом случае, по можно использовать HMAC проверить сохраненный хэш:

  1. Вашего приложение будет содержать секретный ключ сильного, и вычисляющую HMAC хэша с этим ключом.
  2. Этот HMAC может храниться вместе с хэшем пароля в файле.
  3. При чтении хэша для проверки программное обеспечение снова вычисляет HMAC и может сравнивать его с сохраненным.

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

P.S. Пожалуйста, не используйте SHA- для хранения паролей, вместо этого используйте хеш-функцию с таким коэффициентом затрат, как BCrypt, PBKDF2 или SCrypt.*

1

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

Однако, вы можете попробовать, чтобы иметь хорошие характеристики:

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

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

  • Нет связанных вопросов^_^