Открыть запечатанный ящик чачаполы после удаления и воссоздания симметричного ключа (iOS)?
Я нахожусь в затруднительном положении в моем приложении для iOS (первое приложение для меня), я хочу зашифровать данные, которые отправляю на сервер.
Для этого я создаю симметричный ключ, который храню в цепочке для ключей.
Ключ генерируется следующим образом:
SymmetricKey(data: password)
В этой функции пароль фактически представляет собой вычисленный SHA256, сделанный следующим образом:
SHA256.hash(data: password)
который дает мне дайджест, и из него я извлекаю представление данных для создания своего ключа.
Теперь, когда я шифрую данные, я делаю следующее
var encryptedData: Data = Data()
if let key: SymmetricKey = try? readKey(account: encryptingKeyAccount){
encryptedData = try! ChaChaPoly.seal(rawData, using: key).combined
}
return encryptedData
Это возвращает мне данные, которые я затем отправляю на сервер.
Чтобы расшифровать данные, я делаю следующее:
var decryptedData: Data = Data()
if let key: SymmetricKey = try? readKey(account: encryptingKeyAccount) {
let sealedBox = try! ChaChaPoly.SealedBox(combined: encryptedData)
decryptedData = try! ChaChaPoly.open(sealedBox, using: key)
}
return decryptedData
Теперь моя проблема в том, что если я выйду из системы (что означает удаление ключей с телефона) и снова войду в систему (что, на мой взгляд, воссоздает те же ключи, которые были созданы ранее), я не смогу расшифровать свои данные... У меня есть следующая ошибка, когда я пытаюсь открыть ящик:
Thread 1: Fatal error: 'try!' expression unexpectedly raised an error: CryptoKit.CryptoKitError.authenticationFailure
Я считаю, что это связано с тем, как я создаю ключ, который отличается от того, который был удален ранее...
Как я могу это исправить?
Спасибо!