В последнем выпуске SQLCipher 4
представлено множество новых улучшений производительности и безопасности для приложений, использующих SQLCipher
для безопасного локального хранения данных. Однако введение новых алгоритмов по умолчанию, увеличение числа итераций KDF и увеличение размера страницы означают, что SQLCipher 4
не будет открывать старые базы данных по умолчанию.
В этом документе представлены рекомендации по вариантам обновления, доступным для приложений, в которые ранее были интегрированы SQLCipher
версий с 1 по 3.
Вариант 1. Миграция файла базы данных
SQLCipher
предоставляет очень удобный способ выполнить миграцию базы данных SQLCipher
"на месте" с помощью PRAGMA cipher_migrate.
. При этом вся работа по обновлению формата файла базы данных выполняется с помощью одного оператора SQL. После миграции база данных будет использовать все последние настройки по умолчанию, поэтому приложение сразу же сможет воспользоваться улучшенной производительностью и безопасностью.
PRAGMA cipher_migrate
запускать один раз сразу после предоставления ключа (т. е. через sqlite3_key()
или PRAGMA key
для обновления базы данных. Обычно это происходит при первом запуске после обновления приложения для выполнения одноразового диалога.
После завершения миграции приложению больше не нужно будет снова вызывать команду при последующих открытиях.
PRAGMA key = '<key material>';
PRAGMA cipher_migrate;
PRAGMA
вернет одну строку со значением 0 после успешного завершения процесса миграции. В случае сбоя миграции будет возвращено ненулевое значение столбца. В случае успеха перенесенная база данных останется открытой и будет использовать то же имя файла.
Важно! cipher_migrate PRAGMA
потенциально затратен, поскольку ему необходимо пытаться открыть базу данных для каждой версии, чтобы определить соответствующие параметры. Поэтому приложение НЕ должно вызывать PRAGMA
каждый раз, когда открывается база данных. Вместо этого приложение должно использовать процесс, рекомендованный в документации API cipher_migrate.
Примечание. SQLCipher
для пользователей Android Java: при открытии подключения к базе данных для запуска PRAGMA cipher_migrate необходимо включить флаг SQLITE_OPEN_CREATE
, так как в процессе миграции будет временно присоединена новая база данных.
Вариант 2: обратная совместимость
Второй вариант — использовать новую библиотеку SQLCipher 4
, но использовать все настройки SQLCipher 3
(или более ранней версии). Это требует, чтобы приложение выполняло операторы PRAGMA сразу после ввода базы данных, которая будет соответствовать параметрам, первоначально использованным для создания базы данных.
Начиная с SQLCipher 4.0.1
вы можете использовать новую функцию cipher_compatibility. Передача значений 1, 2 или 3 в PRAGMA
приведет к тому, что SQLCipher
будет работать с настройками по умолчанию, соответствующими соответствующему основному номеру версии для текущего соединения. Например, следующее заставит SQLCipher
рассматривать текущую базу данных как базу данных SQLCipher 3.x
:
PRAGMA cipher_compatibility = 3;
Также можно использовать аналогичную совместимость cipher_default PRAGMA
, чтобы установить значение времени жизни процесса до вызова ключевых операций.