Шифрование основных данных
У меня есть вопрос по поводу основного шифрования данных. Я храню некоторые конфиденциальные пользовательские данные в базе данных Core Data SQLite. Все критические значения являются трансформируемыми, и я использую AES256 для шифрования и дешифрования их «на лету», включая отдельные IV для каждого значения. Ключ шифрования - это хэш пароля SHA512, выбранный пользователем. Пока это работает очень хорошо.
Теперь о пароле пользователя. Когда пользователь запускает приложение, его спрашивают его пароль. Пароль хешируется с помощью SHA512 и сохраняется в связке ключей iOS. Для каждой операции записи или чтения NSValueTransformer будет получать пароль из цепочки для ключей. Если приложение закрывается, я удаляю хэш пароля из цепочки для ключей.
В моей базе данных базовых данных у меня есть специальный объект, который имеет случайное число! = 0, поскольку это единственное значение. Чтобы проверить, ввел ли пользователь правильный пароль, я выбираю эту сущность и читаю число. Если это =! 0, я знаю, что пароль был верным, потому что при неудачном дешифровании NSValueTransformer всегда возвращает 0.
Теперь мои актуальные вопросы: считаете ли вы это хорошим подходом к шифрованию? Как еще вы будете проверять правильность введенного пароля?
Я немного обеспокоен тем, что хранение хэша пароля в цепочке для ключей во время работы приложения делает все медленнее, потому что NSValueTransformer должен постоянно обращаться к цепочке для ключей. Будет ли он достаточно безопасным, чтобы просто хранить хэш пароля в памяти, поэтому он будет удален при закрытии приложения?