При использовании шифрования Botan с botansqlite3, каковы оптимальные параметры конфигурации для производительности?
ИЛИ ЖЕ
Как я могу настроить Botansqlite3 для использования CAST5?
Я в настоящее время использую AES, и это слишком медленно. Мой вариант использования — игра.
Я ищу слабое или умеренное шифрование для защиты данных моей игры (не данных конечного пользователя), поэтому безопасность является менее важным фактором, чем производительностью.
Вот мой текущий BotanSqlite3 codec.h
/*These constants can be used to tweak the codec behavior as follows */
//BLOCK_CIPHER_STR: Cipher and mode used for encrypting the database
//make sure to add "/NoPadding" for modes that use padding schemes
const string BLOCK_CIPHER_STR = "Twofish/XTS";
//PBKDF_STR: Key derivation function used to derive both the encryption
//and IV derivation keys from the given database passphrase
const string PBKDF_STR = "PBKDF2(SHA-160)";
//SALT_STR: Hard coded salt used to derive the key from the passphrase.
const string SALT_STR = "&g#nB'9]";
//SALT_SIZE: Size of the salt in bytes (as given in SALT_STR)
const int SALT_SIZE = 64/8; //64 bit, 8 byte salt
//MAC_STR: CMAC used to derive the IV that is used for db page
//encryption
const string MAC_STR = "CMAC(Twofish)";
//PBKDF_ITERATIONS: Number of hash iterations used in the key derivation
//process.
const int PBKDF_ITERATIONS = 10000;
//KEY_SIZE: Size of the encryption key. Note that XTS splits the key
//between two ciphers, so if you're using XTS, double the intended key
//size. (ie, "AES-128/XTS" should have a 256 bit KEY_SIZE)
const int KEY_SIZE = 512/8; //512 bit, 64 byte key. (256 bit XTS key)
//IV_DERIVATION_KEY_SIZE: Size of the key used with the CMAC (MAC_STR)
//above.
const int IV_DERIVATION_KEY_SIZE = 256/8; //256 bit, 32 byte key
//This is definited in sqlite.h and very unlikely to change
#define SQLITE_MAX_PAGE_SIZE 32768
Я считаю, что мне нужно найти замены для BLOCK_CIPHER_STR, PBKDF_STR, MAC_STR, KEY_SIZE и IV_DERIVATION_KEY_SIZE, чтобы перенастроить BotanSqlite3 для использования другого кодека.
Я нашел обширный сравнительный тест производительности кодека Botan здесь:
http://panthema.net/2008/0714-cryptography-speedtest-comparison/crypto-speedtest-0.1/results/cpu-sidebyside-comparison-3×2.pdf#page=5
Тем не менее, тестирование было проведено непосредственно с Botan, а не с botansqlite3, как я собираюсь его использовать. Глядя на графики, хорошим кандидатом кажется CAST5 с точки зрения производительности.
Я настраиваю Botan в соответствии с предложением OlivierJG о славе botansqlite3, используя объединение
‘./configure.py —no-autoload —enable-modules = twofish, xts, pbkdf2, cmac, sha1 —gen-amalgamation —cc = msvc —os = win32 —cpu = x86 —disable- расшарил —disable-asm ‘
Рекомендации:
http://github.com/OlivierJG/botansqlite3 — botansqlite3 — кодек шифрования для SQLite3, который может использовать любые алгоритмы в Botan для шифрования
http://www.sqlite.org — sqlite3 — кроссплатформенная база данных SQL
http://botan.randombit.net/ — botan — это библиотека шифрования C ++ с поддержкой нескольких кодеков.
Вы можете заставить CAST-128 (или, как я его назвал, CAST5) работать, это блочный шифр.
Лучшая ставка — выше с различной конфигурацией размера ключа.
Twofish довольно быстро.
Спасибо Olivier JG за отличный код.
Других решений пока нет …