Core Data Encryption
Eu tenho uma pergunta sobre a criptografia de Core Data. Estou armazenando alguns dados confidenciais do usuário em um banco de dados Core Data SQLite. Os valores críticos são todos transformables e estou usando o AES256 para criptografá-los e descriptografá-los 'on the fly', incluindo um IV individual para cada valor. A chave de criptografia é o hash SHA512 da senha que o usuário escolheu. Isso funciona muito bem até agora.
Agora sobre a senha do usuário. Quando o usuário inicia o aplicativo, ele é solicitado a digitar sua senha. A senha está sendo criptografada com SHA512 e armazenada no keychain do iOS. Para cada operação de gravação ou leitura, o NSValueTransformer obterá a senha do conjunto de chaves. Se o aplicativo estiver sendo fechado, excluo o hash da senha do keychain.
No meu banco de dados Core Data eu tenho uma entidade especial que tem um número aleatório! = 0, pois é apenas um valor. Para testar se o usuário digitou a senha correta, busco essa entidade e leio o número. Se for =! 0, eu sei que a senha estava correta porque quando a descriptografia falha o NSValueTransformer sempre retorna 0.
Agora minhas perguntas reais: você consideraria isso uma boa abordagem sobre criptografia? De que outra forma você testaria se a senha digitada está correta?
Estou um pouco preocupado que armazenar o hash de senha no chaveiro enquanto o aplicativo está em execução faz tudo mais lento, porque o NSValueTransformer tem que acessar o chaveiro o tempo todo. Seria suficientemente seguro manter apenas o hash da senha na memória, para que ele seja excluído quando o aplicativo for fechado?