Szyfrowanie danych podstawowych

Mam pytanie dotyczące szyfrowania Core Data. Przechowuję niektóre wrażliwe dane użytkownika w bazie danych Core Data SQLite. Wszystkie wartości krytyczne są transformowalne i używam AES256 do szyfrowania i deszyfrowania ich „w locie”, w tym pojedynczej IV dla każdej wartości. Kluczem szyfrowania jest skrót SHA512 hasła wybranego przez użytkownika. Jak dotąd działa to bardzo dobrze.

Teraz o haśle użytkownika. Gdy użytkownik uruchamia aplikację, jest proszony o podanie hasła. Hasło jest mieszane za pomocą SHA512 i przechowywane w pęku kluczy iOS. Dla każdej operacji zapisu lub odczytu NSValueTransformer otrzyma hasło z pęku kluczy. Jeśli aplikacja jest zamykana, usuwam skrót hasła z pęku kluczy.

W mojej bazie danych Core Data mam specjalną jednostkę, która ma losową liczbę! = 0, ponieważ jest to jedyna wartość. Aby sprawdzić, czy użytkownik wprowadził poprawne hasło, pobieram ten obiekt i czytam numer. Jeśli jest =! 0 Wiem, że hasło było poprawne, ponieważ w przypadku niepowodzenia deszyfrowania NSValueTransformer zawsze zwraca 0.

Teraz moje aktualne pytania: Czy uważasz to za dobre podejście do szyfrowania? Jak inaczej mógłbyś sprawdzić, czy wprowadzone hasło jest poprawne?

Jestem trochę zaniepokojony, że przechowywanie skrótu hasła w pęku kluczy, gdy aplikacja jest uruchomiona, powoduje, że wszystko jest wolniejsze, ponieważ NSValueTransformer musi cały czas mieć dostęp do pęku kluczy. Czy byłoby wystarczająco bezpieczne, aby utrzymać hash w pamięci, więc zostanie on usunięty po zamknięciu aplikacji?

questionAnswers(2)

yourAnswerToTheQuestion