Core-Datenverschlüsselung
Ich habe eine Frage zur Core Data-Verschlüsselung. Ich speichere einige vertrauliche Benutzerdaten in einer Core Data SQLite-Datenbank. Die kritischen Werte sind alle umwandelbar und ich verwende AES256, um sie "on the fly" zu verschlüsseln und zu entschlüsseln, einschließlich einer individuellen IV für jeden Wert. Der Verschlüsselungsschlüssel ist der SHA512-Hash des vom Benutzer gewählten Passworts. Das funktioniert soweit sehr gut.
Nun zum Benutzerpasswort. Wenn der Benutzer die App startet, wird er nach seinem Passwort gefragt. Das Passwort wird mit SHA512 gehasht und im iOS-Schlüsselbund gespeichert. Für jeden Schreib- oder Lesevorgang erhält der NSValueTransformer das Kennwort aus dem Schlüsselbund. Wenn die App geschlossen wird, lösche ich den Passwort-Hash aus dem Schlüsselbund.
In meiner Core Data-Datenbank habe ich eine spezielle Entität mit einer Zufallszahl! = 0 als einzigem Wert. Um zu testen, ob der Benutzer das richtige Passwort eingegeben hat, hole ich diese Entität und lese die Nummer. Wenn es ist =! 0, ich weiß, dass das Passwort korrekt war, da der NSValueTransformer immer 0 zurückgibt, wenn die Entschlüsselung fehlschlägt.
Nun meine eigentlichen Fragen: Würden Sie dies als einen guten Ansatz zur Verschlüsselung betrachten? Wie würden Sie sonst testen, ob das eingegebene Passwort korrekt ist?
Ich bin ein wenig besorgt, dass das Speichern des Kennwort-Hashs im Schlüsselbund während der Ausführung der App alles langsamer macht, da der NSValueTransformer die ganze Zeit auf den Schlüsselbund zugreifen muss. Wäre es ausreichend sicher, nur den Passwort-Hash im Speicher zu behalten, damit er gelöscht wird, wenn die App geschlossen wird?