Вопрос или проблема
В настоящее время я разрабатываю приложение, которое отправляет данные, зашифрованные на сервер, потому что важным моментом приложения является то, что сервер никогда не должен знать, какие данные там находятся, только клиент должен расшифровать эти данные.
Я уже много искал в интернете и размышлял об этом сам, и мне пришла в голову идея, что вы генерируете ключ, а затем просто сканируете его с помощью QR-кода на другом устройстве, и тогда у вас тоже есть этот ключ для расшифровки.
Но теперь я спрашиваю себя, возможно ли как-то лучше и можете ли вы отправить ключ как-то иначе или есть ли лучший способ реализовать этот сценарий.
Потому что дело с QR-кодом плохо с точки зрения пользовательского опыта, и если пользователь удалит приложение на всех устройствах и установит его снова, скажем, через месяц, он никогда не сможет использовать приложение снова, потому что ключ навсегда потерян.
Одним из таких механизмов было бы зашифровать ключ локально и отправить его для хранения на сервере.
Например:
Используйте PBKDF2 с выбранным пользователем паролем для восстановления, чтобы сгенерировать ключ. Используйте полученный ключ для шифрования долгосрочного ключа. Как только пользователь войдет на новом устройстве, обернутый ключ может быть загружен, и пользователь будет запрошен ввести свой ключ восстановления. Если пользователь забудет свой ключ восстановления, он будет потерян навсегда. Но если речь идет о безопасности пользователей, это должно быть понято и принято.
Ответ или решение
Защита данных на стороне клиента для пользователей с несколькими устройствами: подходы и решения
В современном мире, где конфиденциальность и безопасность данных становятся всё более актуальными, использование клиентского шифрования представляет собой важный аспект разработки приложений. Если ваша цель состоит в том, чтобы сервер не имел доступа к содержимому данных, хранимых пользователями, необходимо продумать механизмы управления шифровальными ключами. Ниже описаны подходы и рекомендации для эффективного управления шифрованием на стороне клиента, особенно в случае, когда пользователи используют несколько устройств.
1. Проблематика пользовательского опыта
Вы подняли важную тему: использование QR-кода для передачи шифровального ключа может негативно сказаться на пользовательском опыте. При удалении приложения пользователем на одном из устройств, он рискует потерять доступ к своим данным на всех остальных устройствах. Это не только затрудняет использование приложения, но и может вызвать недовольство со стороны пользователей.
2. Стратегия управления шифровальными ключами
Ключ к решению этой проблемы заключается в эффективном управлении шифровальными ключами. Один из возможных механизмов — это использование пароля, создаваемого пользователем, для шифрования и хранения ключа на сервере.
Шаги реализации:
-
Генерация шифровального ключа: При первом запуске приложения пользователь выбирает пароль. С помощью алгоритма PBKDF2 (Password-Based Key Derivation Function 2) на основании этого пароля генерируется длинный шифровальный ключ.
-
Шифрование данных: Основной шифровальный ключ используется для шифрования конфиденциальных данных пользователя перед их отправкой на сервер.
-
Хранение зашифрованного ключа: Зашифрованный ключ хранится на сервере вместе с данными пользователя. Это позволяет обеспечить доступ к ключу на всех устройствах, где пользователь войдет в свой аккаунт.
-
Доступ к зашифрованному ключу: При входе в приложение на новом устройстве пользователь будет запрашивать свой пароль, который используется для расшифровки ключа, хранящегося на сервере.
-
Справедливость потери пароля: Важно понимать, что при использовании данной схемы, если пользователь забудет свой пароль, восстановить доступ к данным не получится. Это строгое, но необходимое условие для обеспечения безопасности пользователя.
3. Большая безопасность и удобство
Для улучшения безопасности приложения рассмотрите внедрение следующих дополнительных методов:
-
Двухфакторная аутентификация (2FA): Добавление 2FA обеспечивает дополнительный уровень защиты при входе в приложение.
-
Резервное копирование шифровальных ключей: Рассмотрите возможность создания локальной резервной копии шифровального ключа на устройстве пользователя, с соблюдением условий безопасности. Это поможет сохранить доступ к данным даже при потере доступа к серверу.
-
Уведомления о безопасности: Информируйте пользователей о том, как важно хранить и защищать их пароли и ключи шифрования.
Заключение
Современный подход к обработке данных требует от разработчиков высоких стандартов безопасности, даже когда дело касается удобства пользователей. Реализация клиентского шифрования с использованием описанного метода управления шифровальными ключами поможет улучшить как безопасность, так и пользовательский опыт. Будьте готовы к тому, что безопасность всегда потребует определённых жертв в плане удобства, но с правильным подходом можно найти баланс между безопасностью и простотой использования вашего приложения.