Шифрование основных данных

У меня есть вопрос по поводу основного шифрования данных. Я'хранение некоторых конфиденциальных пользовательских данных в базе данных Core Data SQLite. Критические значения все трансформируемы, и я 'я использую AES256 для шифрования и дешифрованияна лету', включая индивидуальный IV для каждого значения. Ключ шифрования - это хэш пароля SHA512, выбранный пользователем. Пока это работает очень хорошо.

Теперь о пароле пользователя. Когда пользователь запускает приложение, его спрашивают его пароль. Пароль хешируется с помощью SHA512 и сохраняется в связке ключей iOS. Для каждой операции записи или чтения NSValueTransformer будет получать пароль из цепочки для ключей. Если приложение закрывается, я удаляю хэш пароля из цепочки для ключей.

В моей базе данных базовых данных у меня есть специальный объект, который имеет случайное число! = 0 'Единственное значение. Чтобы проверить, ввел ли пользователь правильный пароль, я выбираю эту сущность и читаю число. Если это =! 0, я знаю, что пароль был верным, потому что при неудачном дешифровании NSValueTransformer всегда возвращает 0.

Теперь мои актуальные вопросы: считаете ли вы это хорошим подходом к шифрованию? Как еще вы можете проверить, правильно ли введен пароль?

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

Ответы на вопрос(2)

Ваш ответ на вопрос