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

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

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

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

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

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

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

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

Комментарии (15)


  1. MAXH0
    16.05.2022 12:59
    +3

    Это только маленький шаг к подлинному безумию глубинной паранойи.


    1. wlkr Автор
      16.05.2022 13:01
      +4

      Ну, надо же с чего-то начинать :)


  1. amarao
    16.05.2022 15:55
    +5

    А на выходе оно выглядит менее безопасно, чем, например, использование аппаратного шифрования, потому что пароль на телефоне вводится через приложение "клавиатура" (да?), за которым присматривают все accessibility-приложения с соотв. правами.

    Вообще, для меня телефон - не зона безопасности. Например, потому что там запущены условно-патогенные программы. А вот компьютер - вполне себе зона безопасности, потому что там "условно-патогенных" программ нет.


    1. wlkr Автор
      16.05.2022 15:58

      Bluetooth или USB клавиатура несколько облегчает жизнь, как и снос/блокировка лишних accessibility приложений с чрезмерными правами. Но не панацея, конечно.


      1. qw1
        16.05.2022 19:14
        +2

        Но это ломает сценарии использования: открыл глаза, ещё не проснулся, но уже начал писать свой сон. Или не можешь заснуть, хочешь что-то записать, но откуда в кровати клавиатура?

        Как по мне, хорошее решение — взять любой старый ненужный смарт, из тех, которые остаются от прошлых апгрейдов, выключить все беспроводные сети, пересобрать ему ROM (удалить гугл-сервисы и пакеты аналитики от производителя), и пиши туда сколько угодно.


  1. teastan0
    16.05.2022 15:58
    +1

    А клавиатура сток? Информация так же хорошо утекает через неё, так как вы с помощью нее пишете данные, которые еще не зашифрованы и какой-нибудь GoogleAd их обрабатывает)

    Можно еще упомянуть микрофоны с ассистентами, которые слушают)

    Счастливой паранойи!


    1. wlkr Автор
      16.05.2022 15:58

      Bluetooth или USB клавиатура несколько облегчает жизнь.


      1. gev
        18.05.2022 22:40

        А там драйвер клавиатуры "подслушивает" =)


  1. anonym0use
    16.05.2022 19:32
    +3

    Ничего лучше записи в обычный блокнот ручкой еще не придумали.


    1. wlkr Автор
      17.05.2022 04:27

      Только искать по нему сложно, увы.


  1. A1EF
    16.05.2022 19:33
    +1

    Хм! Параноик, который пользуется сервисами Google.. Почему Google Play, а не F-Droid?


    1. wlkr Автор
      17.05.2022 04:27

      Жизнь полна компромиссов.


  1. wmgeek
    17.05.2022 05:39
    +1

    Что если совместить запись в обычный блокнот, только специальной ручкой для распознания рукописного ввода? И бекап надежный сразу и возможность обойти клавиатурную аналитику. Там где то рядом прячется аналитика рукописного ввода, но графический режим и особености почерка все же добавляют неоднозначности.


    1. wlkr Автор
      17.05.2022 05:45

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


  1. Dofmen
    17.05.2022 09:58
    -1

    Ага... Один человек по фамилии Дзюба вон тоже как то ".... начал делится секретами с телефоном ...". В результате вышел смешной конфуз.... :-))) Хотя нет худа без добра - вся страна наконец то узнала почему российские футболисты плохо играют и на что в действительности они тратят свои силы, бедолаги... :-)))