Открыть запечатанный ящик чачаполы после удаления и воссоздания симметричного ключа (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

Я считаю, что это связано с тем, как я создаю ключ, который отличается от того, который был удален ранее...

Как я могу это исправить?

Спасибо!

0 ответов

Другие вопросы по тегам