Разместить здесь вашу рекламу


Как я перестал бояться и начал делиться секретами с телефоном

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Не знаю как вы, а я – не могу сказать, что люблю, но вижу очень много пользы в интроспекции, или, по простому, самонаблюдении. Вот, допустим, позавчера я проснулся сам, не слишком рано, съел овсянки, выпил кофе без сахара, и весь мой день был очень продуктивным. А вчера я лёг спать поздно, да ещё и сон плохой снился не буду говорить про что, проснулся только по второму будильнику, не успел позавтракать перед работой, и весь день дальше был наперекосяк. Если такое повторяется несколько раз, наверно это какая-то закономерность, паттерн, и я мог бы подумать, что мне делать или не делать для того, чтобы мой день был продуктивным – но для этого обо всём этом надо помнить.

Помнить у компьютеров получается гораздо лучше, чем у людей. Главное, чтобы запомненное можно было извлечь, когда это нужно. Само собой напрашивается записать это куда-то в телефон, но куда? Казалось бы, есть куча приложений и сервисов, пиши не хочу. Но тут вдруг просыпается внутренний параноик и начинает задавать неудобные вопросы. А какая бизнес модель у этого сервиса? Если я напишу туда подробности про то, что мне приснилось в плохом сне, станут ли социальные сети показывать мне рекламу, напоминающую об этом? Или, допустим, если я страховой компании сказал, что я не пью вообще, а вчера, на самом деле, я не только лёг спать поздно, но ещё и перебрал слегка, узнает ли об этом страховая и подорожает ли моя страховка? Неспокойно, короче.

Да, есть не очень многочисленные приложения, которые работают оффлайн, то есть все данные хранятся на телефоне. Даёт ли это какие-то гарантии приватности? Возможно, но едва ли от производителя ОС или телефона, потому что все данные хранятся в открытом виде. Хорошо, есть ли какие-то оффлайн приложения, которые шифруют хранимые данные (или, как это называют по-английски, “encryption at rest”), и делают это относительно удобным способом? И вот тут меня ожидал большой облом. Ну что же, как говорится, “хочешь что-то сделать хорошо – сделай это сам”. Так возник мой проект “Дневник Параноика” (“Paranoid Diary”). Ну и, поскольку лично я предпочитаю Андроид, проект возник именно на этой платформе.

Небольшое лирическое отступление. Вскоре после того, как я опубликовал приложение в Google Play, я обнаружил, что название, помимо прочего, привлекает и настоящую целевую аудиторию (настоящих параноиков), так что советую быть осторожнее с названиями :)

Приложение начинается с требований. Нереально хранить секреты от АНБ или ФСБ, но можно хотя бы защититься от произвола IT гигантов, неизбирательного дата майнинга и рекламы. А это значит, что необязательно тотально шифровать всё – достаточно шифровать текстовую часть дневника. У зашифрованного текста есть одна проблема – сложно реализовать поиск по нему - нам же надо не только запоминать, но и вспоминать. Поэтому пригодится поиск не по тексту, а по меткам (#тегам). Текст самих меток тоже можно зашифровать, и искать по ничего не говорящему ID. Помимо этого, хотелось бы уметь искать записи по дате (это не секрет), и, если разрешено, по географическим координатам (“о чём я думал, или что я делал в этом месте раньше”).

Дальше всё было просто. Из требований логично образовалось решение – база SQLite, в которой зашифрованы только текстовые поля – текст записей и названия меток. Без ключа можно только увидеть, что во время Т, и, может быть, в точке с координатами широта, долгота была сделана некая запись, которой были присвоены метки 1, 2, 3. Естественно, если все записи просто шифруются одним ключом, то одинаковые записи имели бы одинаковый шифротекст. Если злоумышленник может предположить содержание записи, это могло бы нас скомпрометировать, поэтому каждую запись надо обязательно посолить (“соль”, “salt” – это такой криптографический термин) чем-нибудь случайным, тогда даже для одинаковых записей шифротекст будет разным.

После этого остались мелочи. Естественно, надо вводить пароль для расшифровки, и его нельзя нигде хранить – только в памяти, пока приложение работает, и пользователь активен. Надо предусмотреть создание резервной копии и восстановление из неё – этот вопрос решается созданием зашифрованного zip архива. Ещё есть полезная опция, которая часто используется в банковских приложениях, которая запрещает ОС запоминать превью экрана или делать снимки с экрана (getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE)). Иначе, даже если после неактивности пользователя доступ был закрыт, при пролистывании приложений покажется последний активный экран со всем содержимым.

В результате, так и получился “Дневник Параноика”, которым я, и некоторые другие пользователи, относительно счастливо пользуются уже больше двух лет - и, наверно, уже настало время поделиться этим проектом с широкой публикой. Конечно, ни один параноик не станет доверять неизвестному коду, поэтому весь код полностью открыт для аудита, самостоятельной сборки или кастомизации.

Источник: https://habr.com/ru/post/665888/


Интересные статьи

Интересные статьи

Microsoft — одна из немногих корпораций. основанных десятки лет назад и по-прежнему остающихся одними из крупнейших технологических гигантов. Даже несмотря на множество технологически...
«Если бы не синие коробки, Apple бы не существовало. Я уверен в этом на 100%». — Стив Джобс Хотя «фрикеры» (фанаты телефонных систем) использовали «синие коробки» для доступа к беспл...
Кто бы что ни говорил, но я считаю, что изобретение велосипедов — штука полезная. Использование готовых библиотек и фреймворков, конечно, хорошо, но порой стоит их отложить и создать ...
Бобинники были одним из самых популярных аудиоустройств послевоенного времени и неотъемлемой частью жизни жителей Европы, Америки и СССР. Но вот проблема — заправка ленты и настройка всех механиз...
Те, кто собираются открывать интернет-магазин, предварительно начитавшись в интернете о важности уникального контента, о фильтрах, накладываемых поисковиками за копирование материалов с других ресурсо...