Dies ist eines der vielen Probleme, die durch Hinzufügen einer indirekten Schicht gelöst werden. Generieren Sie einen zufälligen Schlüssel, verwenden Sie diesen Schlüssel zum Verschlüsseln der Daten und speichern Sie den Schlüssel in einer Datei (oder Datenbankspalte oder was auch immer), die selbst mit einem aus einem Kennwort abgeleiteten Schlüssel verschlüsselt ist.
So etwas wie (Vorsicht, ich weiß nicht, Swift):
// Generation of the data keys
let dek = RNCryptor.randomDataOfLength(RNCryptor.FormatV3.keySize)
let dak = RNCryptor.randomDataOfLength(RNCryptor.FormatV3.keySize)
// Use these to work on the data
let encryptor = RNCryptor.EncryptorV3(encryptionKey: dek, hmacKey: dak)
let decryptor = RNCryptor.DecryptorV3(encryptionKey: dek, hmacKey: dak)
// Save the data keys encrypted with the password
let dek_file = RNCryptor.encryptData(dek, password: password)
let dak_file = RNCryptor.encryptData(dek, password: password)
// Store both dek_file and dak_file somewhere
// Next time, load dek_file and dak_file from where you stored them
let dek = RNCryptor.decryptData(dek_file, password: password)
let dak = RNCryptor.decryptData(dek_file, password: password)
Das ist viel besser dank :) – Mat0
Noch besser wäre es, das nicht selbst tun: Verwenden Sie GPG oder andere gut getestete Lösung. –