Как мне зашифровать данные для Couchbase-Lite для Android?
Я работаю над проектом Android, который использует Couchbase-Lite (1.1.0) и требует, чтобы все данные (сами документы и любые вложения Couchbase) были зашифрованы перед хранением.
Первоначально я предполагал зашифровать весь файл базы данных, используя что-то вроде SQLCipher, но я не смог найти прямую реализацию для этого (я знаю, что реализация Couchbase-Lite для iOS использует этот подход, но сборка Android немного позади), поэтому вместо этого я планирую зашифровать документы (представление JSON) и вложения (поток) перед сохранением их в базе данных Couchbase-Lite.
Мои вопросы: Каковы рекомендации для этого вида шифрования? Какая методология / библиотеки? Я предполагаю, что AES-256, но я должен собрать его сам или использовать стороннюю библиотеку (какие-либо предложения)?
Каков наилучший способ сохранить парольную фразу в устройстве, которая является более безопасной, чем жесткое ее кодирование в приложении (что действительно очень плохо)?
Кто-нибудь видел что-то похожее на это (моя способность к гуглингу оставила меня в покое и сухости), которое могло бы указать мне на подобный вариант использования?
Спасибо!
1 ответ
Используйте существующую библиотеку AES. Либо используйте режим CBC с HMAC для проверки подлинности, либо режим самопроверки, такой как GCM. Не все библиотеки имеют GCM, так как он более поздний.
Напишите парольную фразу на листе бумаги и храните ее в закрытом ящике. Это неумолимо. Введите его при необходимости. Очистите память сразу после того, как вы закончили ее использовать. Либо сохраните его на карте памяти и зафиксируйте в ящике. Вам все равно нужно будет очистить память. Регулярно меняйте пароль. Да, это означает дешифрование всей базы данных старым ключом и повторное шифрование новым ключом. Дайте время в вашем ежедневном / еженедельном / ежемесячном / любом графике, чтобы сделать это. Непосредственно перед резервным копированием это хорошо. Держите старую парольную фразу надежно в автономном режиме, возможно в сейфе, на случай, если вам понадобится повторно извлечь ключ для восстановления старой резервной копии.
Посмотрите на хорошую функцию получения ключа, такую как HKDF (из RFC 5869), чтобы получить фактический ключ из вашей парольной фразы.
Это крипто, и это сложно. Все это было сделано раньше, поэтому вам нужно придерживаться проверенных и проверенных методов.