Как мне зашифровать данные для 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), чтобы получить фактический ключ из вашей парольной фразы.

Это крипто, и это сложно. Все это было сделано раньше, поэтому вам нужно придерживаться проверенных и проверенных методов.

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