Приложение для тех, у кого есть секреты
Выношу на народный суд свой не коммерческий pet-проект: Моя теневая галерея.
Хочу собрать фидбек, что требуется исправить, что добавить.
Целью этого pet-проекта было создать приложение - хранилище изображений с максимальным приоритетом на конфиденциальность данных. При этом позволить пользователю выбрать тонкий баланс между удобством и защитой. Если у вас паранойя, что за вами слежка, а ваше устройство хранит по меньшей мере интимные фотографии Байдена (старшего!) – вкручиваем защиту на максимум. Если вам нужно просто спрятать важные документы от случайного человека, которому попал в руки ваш телефон – делаем меньше защиты.
Я сперва опишу общие особенности, а ниже подробно по пунктам как всё устроено.
1. Изображения недоступны для галереи и других приложений, хранятся во внутренней директории приложения с измененными именами и расширениями.
2. Вход в приложение защищен паролем и маскировочным функционалом под музыкальное приложение, да-да, приложение в приложении. Дополнительная мера безопасности для защиты от несанкционированного доступа – после 30 попыток неверного ввода приложение очищает хранилище и все данные.
3. Приложение снимает и хранит фотографии в зашифрованном виде по средствам Advanced Encryption Standard.
Концепция безопасности: все данные хранятся только на устройстве пользователя, серверная архитектура хранения пользовательских изображений, превью, ключей, паролей не применяется. Тем не менее, сам пользователь может делиться изображениями как в зашифрованном, так и дешифрованном виде (на свой страх и риск). Получать изображения от других пользователей и дешифровать их, используя аналогичный ключ шифрования.
Особенности хранения данных.
1. Превью хранятся во внутреннем каталоге приложения с расширением .p и не шифруются. Масштаб превью в пикселях от 1х1 px (ничего не увидеть) до 100х100 px (в общих чертах различимо содержание изображения) можно выбрать в Настройках.
2. Оригиналы изображений хранятся во внутреннем каталоге приложения. В случае, когда используется шифрование, файл сохраняется с расширением .kk. Если же пользователь выбрал опцию не использовать шифрование, файл сохраняется с расширением .o. Когда пользователь делится расшифрованным изображением, создается временный файл с расширением .peekaboo. В таком виде файл можно отправить любым доступным устройству способом. Как только пользователь закрывает окно просмотра этого изображения - расшифрованный экземпляр удаляется с устройства. То есть, зашифрованные изображения хранятся только в зашифрованном виде. Изменить настройки использования шифрования пользователь может через меню Настройки.
3. Ключ шифрования и пароль хранятся на устройстве в защищенной форме. В целях безопасности не предусмотрена возможность восстановления ключа и пароля. Если вы забыли пароль для входа в приложение, лучшим решением будет удалить приложение и установить вновь. В случае утраты ключа шифрования вы можете создать другой ключ без переустановки приложения, однако изображения, сохраненные со старым ключом, будут недоступны к просмотру. Очистить хранилище изображений, сменить ключ или пароль можно через меню Настройки.
Особенности работы системы шифрования.
У приложения имеется три режима для шифрования:
1. БЕЗ ШИФРОВАНИЯ. Сохранение файлов без ввода ключа шифрования – файлы сохраняются на устройстве в недоступном другим приложениям и галерее формате, однако злоумышленник сможет извлечь и считать их, если завладеет устройством. Получив отправленный с устройства файл, он сможет считать содержимое.
2. ПОСТОЯННЫЙ КЛЮЧ ШИФРОВАНИЯ (баланс между удобством и защитой). Пользователь придумывает, либо генерирует ключ шифрования, который сохраняется на устройстве. Ключ используется для шифрования файла в соответствии с Advanced Encryption Standard. Файл хранится на устройстве в зашифрованном виде и, даже получив доступ к памяти устройства (или получив отправленный с устройства зашифрованный файл), злоумышленник не сможет считать содержимое без ключа шифрования. Ключ хранится в приложении в защищенном хэш-функцией виде. Пользователь может создать и хранить в приложении до трех ключей.
3. ПЕРЕМЕННЫЙ КЛЮЧ ШИФРОВАНИЯ. Если пользователь введёт ключ и выставит галочку "Не сохранять ключ шифрования", ключ не будет храниться в приложении, а будет запрашиваться каждый раз при входе. Ключ существует в приложении пока оно открыто. Самый высокий уровень безопасности, однако, если вы забыли старый ключ, сохраненные ранее этим ключом файлы не будут доступны для просмотра. В меню Настроек вы всегда можете изменить опции безопасности.
AES (ADVANCED ENCRYPTION STANDARD)
Функция приложения реализует алгоритм шифрования для изображений, используя Advanced Encryption Standard (AES). Этот алгоритм применяет симметричный ключ и стандарт AES для обеспечения безопасности изображения в процессе передачи или хранения.
Общий процесс:
• Создание и извлечение мастер-ключа из приложения для использования в качестве основы для формирования ключа шифрования.
• Применение хеш-функции SHA к мастер-ключу для получения фиксированной длины ключа.
• Инициализация объекта шифра с использованием алгоритма AES с использованием полученного ключа.
• Шифрование данных из исходного потока при помощи AES.
• Запись зашифрованных данных в выходной файл.
• Закрытие потоков.
SHA (Secure Hash Algorithm)
Хеш-функция обладает следующими ключевыми характеристиками:
• Длина хеша. SHA производит хеш-значение фиксированной длины (длина хеш-значения не раскрывается из соображений безопасности).
• Устойчивость к коллизиям. SHA обеспечивает высокий уровень устойчивости к коллизиям, предотвращая появление одинаковых хеш-значений для различных входных сообщений. Теоретически возможны коллизии для SHA, но их появление требует огромного объема вычислительных ресурсов.
Мастер-ключ приложения служит основой для формирования ключа шифрования. С использованием SHA мастер-ключ приводится к фиксированной длине, гарантируя получение хеша фиксированной длины, который затем используется в качестве ключа шифрования.
в приложении есть паскалка с котиками)
Android
857 постов7.6K подписчиков
Правила сообщества
Сообщество посвящено обсуждению и обмену опытом использования устройств, работающих под управлением ОС Android/Linux, а также программного обеспечения для них. Обсуждение других операционных систем (в том числе GNU/Linux) - только в рамках их взаимодействия с Android.
В сообществе запрещены:
* заведомо деструктивные рекомендации
* бессодержательная переписка, особенно с переходом на личности собеседников
* обсуждение нужности рутового доступа (он нужен, и если у вас его нет - мы вам искренне посочувствуем, но искать другие способы решения вашей проблемы не будем)
* обсуждение нужности ПО от Google (необходимости в нем нет, и если вам этот функционал не нужен - смело запускайте pm disable-user или даже pm uninstall, только не забудьте предварительно сделать полную резервную копию)
Если вы просите о помощи, обязательно укажите максимально полную информацию об используемом вами устройстве, чего вы хотите добиться и какие шаги для этого предпринимали - это существенно ускорит получение ответа, так как из обсуждения будут исключены диалоги вида "попробуй вот так - пробовал, не помогает". Соответственно, и при ответе следует давать рекомендации, подходящие для любого устройства. Если вы не уверены в универсальности решения, напишите об этом явно: "у меня %s и мне помогло %s".
Данная редакция правил действует с момента ее публикации: 2022-01-27 22:00:00 +03:00