Открыть чачаполый запечатанный ящик после удаления и воссоздания симметричного ключа (iOS)? - PullRequest
0 голосов
/ 30 октября 2019

Я немного затруднен в своем приложении для 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

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

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

Спасибо!

...