Всем привет! Меня зовут Николай, я Android-разработчик, и в этой статье я хочу рассказать про свой первый pet-project под названием SmallKey. В первую очередь идея создать еще один менеджер паролей родилась из-за потребности в удобном хранении паролей на смартфоне, и без привязки его к облаку. После продолжительного поиска, я так и не смог найти готовое решение, которое меня смогло бы устроить. И тут я решил создать такое приложение самостоятельно… Ниже я расскажу о главных фишках приложения.
1. Встречают по одежке, провожают по уму.
Одной из отличительных фишек SmallKey является тематизация на основе обоев – или перехват цвета, как ее называет Google, приносит сочетания ярких чистых цветов в каждый элемент ОС. Такой подход позволяет подогнать цветовую палитру вашего дизайна под пользователя и привнести гораздо больше личного в пользовательский опыт. Единственное ограничение - это версия Android. Для Material You необходимо иметь версию 12 или выше, для всех остальных цвета будут статичными.
Еще SmallKey поддерживает темную тему, которая тоже адаптируется к вашим обоям.
2. Что же может SmallKey ?
2.1 Пароли
В этой группе вы можете сохранять, редактировать, копировать, удалять, делиться своими паролями. При добавлении нового пароля индикатор поможет вам проверить уровень безопасности вашего пароля, если же пароль будет слишком простым, вы сможете сгенерировать новый более безопасный в разделе "Генератор паролей". Еще стоит упомянуть, что к каждому паролю вы можете добавить описание, что может быть удобно, как метка контекста.
2.2 Банковские карты
В SmallKey вы можете сохранять информацию про свои банковские карты. Также, можете редактировать, удалять, делиться, копировать ваши данные.
2.3 Emails
Если вам требуется сохранять электронную почту, то эта группа для вас. Весь базовый функционал тут такой же, но дополнительно вы можете сразу написать на сохраненную почту, через кнопку быстрого сообщения.
2.4 Номера телефонов
Группа позволяет сохранить номер телефона, а потом быстро перейти к его вызову.
2.5 Заметки
В SmallKey есть группа для ваших заметок с простеньким редактором и поддержкой Emoji.
2.6 Генератор паролей
Генератор, который пока имеет только настройку по количеству символов. Подбор пароля идет из ряда целых чисел, прописных букв, заглавных и спецсимволов.
2.7 Поддержка
В этом разделе находится вся информация о проекте, контакты поддержки, контакты технической и обычной почты автора проекта, а еще текущая версия приложения.
3. Дальнейшие задачи.
SmallKey разрабатывалась, как авторский проект и бесплатная альтернатива существующих решений от гигантов индустрии. Хочу сразу оговориться, что проект полностью создается руками одного человека-оркестра, так что пока планирую выпускать каждый месяц релизы с мелкими правками и минорными функциями, а мажорные функции потребуют нескольких месяцев. Краткий и неполный список мажорных функций, которые я планирую внедрить:
Категория "Избранные". Туда будут попадать записи для быстрого доступа.
Категория "QR-codes". Сканируй, сохраняй, властвуй!
Категория "NFC-метки", которая позволит записывать, редактировать, считывать метки.
Импорт/Экспорт данных Пользователя.
Сортировка записей.
Глобальный поиск.
Расширить возможности редактора в категории "Заметки".
Автодополнение паролей из SmallKey.
Категория "Рисунки".
Категория "Файлы".
Выложить проект в Open Source.
Еще в планах выпуск статьей о разных технических аспектах и трудностях, которые у меня возникли в процессе разработки, а их было немало. Мне хотелось бы развивать проект совместно с пользователями и учитывать их опыт, я буду признателен любой обратной связи и дельным предложениям. На данный момент приложение доступно в Rustore и AppGallery, буду рад любой поддержке и отзывам! Если же вы хотите получать самые последние новости проекта, то призываю вас вступать в телеграмм канал SmallKey. Спасибо всем, кто прочитал статью и всего хорошего!
Комментарии (41)
ku4in
13.11.2023 09:42+3Хотелось бы, конечно, понять, в каком виде хранятся пароли?
kooo9058 Автор
13.11.2023 09:42+1Добрый день! Хранение осуществляется в виде строк зашифрованной AES с промежуточными слоями для большой защиты данных.
ku4in
13.11.2023 09:42Спасибо за ответ! Тогда, наверное, было бы неплохо иметь какой-то мастер пароль и возможность по нему восстановить импортированные пароли из другого такого же приложения.
kooo9058 Автор
13.11.2023 09:42+1Да, на данный момент мастер пароль - это пароль от акк. Импорт/Экспорт будет точно реализован, а статья про детали защиты приложения выйдет через неделю-две.
Спасибо за конструктивный вопрос!
dtmse
13.11.2023 09:42+7Вообще, самая важная фишка любого менеджера паролей - безопасность. Но о ней в статье нет ни слова. Как хранятся пароли, как обеспечивается их сохранность - не понятно. Может быть, стоит дополнить статью?
kooo9058 Автор
13.11.2023 09:42Добрый день! В качестве алгоритма шифрования использую AES с промежуточными слоями для большой защиты данных. Вы правы, стоит дополнить статью пояснением за сохранение данных, в ближайшее время допишу раздел!
FreeNickname
13.11.2023 09:42Извините, а что такое промежуточные слои? Не встречал этот термин (спрашиваю без подкола, правда просто не встречал).
kooo9058 Автор
13.11.2023 09:42Дополнительные шифрование после обработки AES алгоритма. Я позже напишу подробную статью о том, как SmallKey шифрует данные. Спасибо за комментарий!
FreeNickname
13.11.2023 09:42Вот чего-то подобного я и опасался. В целом, "дополнительно шифровать данные" (например, шифровать два раза) обычно не рекомендуется, этим проще навредить чем помочь. Надеюсь, Вы знаете, что делаете.
kooo9058 Автор
13.11.2023 09:42Спасибо за комментарий! Если вы знаете, то укажите или опишите лучший способ шифрования для мобильных устройств, это поможет проекту и будет интересно всем.
FreeNickname
13.11.2023 09:42+1К сожалению, не знаю, что нынче самое актуальное, но общие принцип таковы:,
1. Современные криптографические алгоритмы подвергаются очень тщательному анализу, используя вектора атаки, которые порой даже в голову не придут. И если алгоритм считается безопасным, то, вопреки всем усилиям, уязвимостей в нём на данный момент не найдено. Соответственно, если Вы используете считающийся безопасным алгоритм, со считающимися безопасными настройками, причём используете существующую реализацию, а не придумываете свою собственно (это важно), то Вам не нужна никакая дополнительная защита.
2. В то же время криптографические алгоритмы, как Вы знаете, весьма тщательно тасуют биты, чтобы результат был, в идеале, неотличим от белого шума. И вот этот самый процесс, помимо прочего, и верифицируют – можно ли из этих перемешанных битов извлечь какую-то информацию. Из этого следует:
- если Вы применяете свои "доп. алгоритмы" до шифрования, то, учитывая, что алгоритм шифрования должен работать на любых входных данных, по идее, проблем быть не должно, но, во-первых, смотри пункт 1, а во-вторых, алгоритмы несовершенны, и лучше не нужно пытаться "улучшить" то, что работает. Потому что может оказаться, что вариант из пункта 1, проверенный тысячами, если не миллионами человекочасов исследователей, работает, но пункт 1 плюс Ваша вундервафля проявляет какие-то свойства, которые позволяют её взломать.
- если Вы применяете свои "доп. алгоритмы" после шифрования, то можно только напортить результат, улучшить его точно не получится. Преобразование может внести какие-то закономерности, не предусмотренные создателями изначального алгоритма. По идее, опять же, не должно, потому что в идеальном мире результат работы "стандартного" алгоритма – "белый шум", но, как мы уже говорили, мир не идеален.
3. Не знаю, применимо ли это к Вашему случаю, но "security through obscurity" не работает. Если замысел в том, чтобы сделать "нестандартную" реализацию, чтобы "стандартные инструменты взлома" на ней не работали, то это бессмысленно, т.к. стандартные инструменты и так на ней не работают (см. пункт 1). При этом если безопасность Вашего алгоритма полагается на то, что атакующий не знает, как он (алгоритм) работает, то это плохой алгоритм. Безопасность всех современных криптографических алгоритмов доказывается из предположения, что у атакующего есть не только полное знание алгоритма шифрования, но даже готовые примеры "текст-шифротекст" и возможность шифровать произвольные сообщения и смотреть результат. Возможно, даже ещё что-то, уже не помню за давностью лет.
Я очень рекомендую посмотреть Стэндфордский курс, к тому же, он реально очень увлекательный и легко слушается: https://www.coursera.org/learn/crypto
Единственный его недостаток – что вторая часть, похоже, не выйдет никогда (её ждут уже больше 10 лет): https://www.coursera.org/learn/crypto2
TL;DR: если использовать надёжное шифрование, свои "улучшения" могут только навредить, т.к. улучшить они ничего не могут, а при этом ухудшить – теоретически, с небольшой вероятностью – могут. Поэтому в курсах криптографии обычно советуют так не делать. А какой алгоритм лучше использовать – это нужно разбираться, что сейчас считается безопасным.FreeNickname
13.11.2023 09:42P.S. Вариант "стандартный AES, зашифрованный второй раз стандартным AES" (или любые другие комбинации стандартных алгоритмов) не рекомендуется по тем же самым причинам – такие комбинации никто не проверял, и в пункте 2 может что-нибудь пойти не так. Не должно. Но может. Плюс, опять же, см. пункт 1 – одного надёжного алгоритма должно быть достаточно.
LeshaRB
13.11.2023 09:42Выложить проект в Open Source.
На FDroid потом нет в планах публиковаться?kooo9058 Автор
13.11.2023 09:42Добрый день! Да, я очень хочу выложить приложение на FDroid! На данный момент собираю всю обратную связь для доработки приложения.
LeshaRB
13.11.2023 09:42Вы не могли б выложить АПК где-то... Я не хочу ставить русторе и аппсторе... В том же телеграмм канале
Телеграмм канал, в группу сделать, чтоб замечания писать или предложения, если я правильно понял, на гитхабе нет проекта
kooo9058 Автор
13.11.2023 09:42Телеграмм канал https://t.me/smallkeyofficial
EPIDEMIASH
13.11.2023 09:42Комментарии подключите.
А вообще считаю, проще пароли хранить в голове.
polearnik
13.11.2023 09:42как вы планируете хранить в голове пару сотен паролей из случайных данных? Только не надо мне тут про уникальный алгоритм по которому генерируются пароли.
EPIDEMIASH
13.11.2023 09:42Вопрос хороший, если будет такая нужда (хранить больше 10ти сложных и разных паролей), я буду думать над идеей. На скорую мысль могу только подумать про менеджер паролей у себя на NAS, но явно не в приложении на телефоне.
ogost
13.11.2023 09:42+1Ставить не буду, ибо пользуюсь passwordstore.org, но позвольте внести свои пожелания:
Обои это разумеется важно, но лучше таки в ознакомительной статье описать о главные фичи приложения хотя бы вкратце, например
где хранятся пароли (увидел в комментариях)?
шифруются ли они (тоже из комментариев узнал)?
есть ли синхронизация (это не то же самое, что импорт/экспорт)?
поддерживается ли OTP а-ля Google Authenticator?
Кроме того карты, заметки email и номера телефонов мне кажутся излишним функционалом. Если вы только не шифруете содержимое email и голосовые звонки.
aol-nnov
13.11.2023 09:42+2А чем не угодил, например, keepass2android? Добавьте в него немного тематизации на основе обоев или "перехват цвета, как ее называет Google, приносит сочетания ярких чистых цветов в каждый элемент ОС" и дело в шляпе.
по крайней мере, он проходил уже security audit и имеет обширную пользовательскую базу...
kooo9058 Автор
13.11.2023 09:421) Не устраивает UI\UX приложения.
2) В заметках нет возможности сделать текст жирным, курсивом, выделенным и прочее.
3) Темная тема бьёт ярким зелёным цветом в глаза. Хотелось бы сохранять номера телефонов и иметь возможность быстрого вызова из приложения.
4) Кредитная карта не имеет поля "Платёжные системы" как и не имеет наглядного представления самой карты.
Это самые значимые пункты, которые оттолкнули меня от использования этого приложения.aol-nnov
13.11.2023 09:42но это всё графические рюшечки.. в чем профит написания приложения такого класса именно с нуля?
мой предыдущий комментарий был робким намёком, почему не объединить силы с уже существующими проектами? дух опенсорса же, все дела...
kooo9058 Автор
13.11.2023 09:42Скажу честно, я про такой вариант не думал. Наверное, главная причина в степени свободы в рамках личного проекта. Пускай я словлю критику или дискарму, но не ошибается тот, кто ничего не делает. За эти пол года я получил много опыта и знаний, плюс создал что-то своё и полностью сам.
aol-nnov
13.11.2023 09:42+1как уже написали все отметившиеся выше, первостепенный вопрос в программах класса "менеджер паролей" - это безопасность и сохранность данных (отчасти поэтому keepass2android выглядит, как гадкий утёнок) и именно на этот аспект нужно сильнее всего налегать, а не на модные цветовые акценты и прочее.
ну, а если цель проекта прокачать какие-то свои навыки (в чем нет совершенно ничего зазорного), это тоже надо явно отметить. не "хей, смарите, какой клёвый менеджер пороле получаиццо!", а "вот мой путь от А до Б, было интересно"
ни в коем случае не пытаюсь обесценить полученный опыт, но в этом плане гораздо безопаснее написать стопятисотый аудиоплеер с нескучными обоями. по крайней мере, об него никто не поранится, когда там обнаружится дырка в безопасности.
такие дела. успехов.
kooo9058 Автор
13.11.2023 09:42Спасибо за отзыв) Это мой первый опыт разработки от идеи до полной реализации и публикации, и я уже заметил основные ошибки. Что касается безопасности, то я уже собираю мысли в кучу для написания максимально детальной статьи про шифрование внутри SmallKey. Если основной претензией к проекту является шифрование, то я постараюсь в ближайшее время внести максимальную ясность. Еще раз спасибо вам за конструктивный отзыв!
aol-nnov
13.11.2023 09:42Если основной претензией к проекту является шифрование
совершенно верно!
Если не являешься экспертом в шифровании, не стоит придумывать какие-то свои шифры или комбинировать уже имеющиеся по своему усмотрению. Это, внезапно, может привести к совершенно любым последствиям от ослабления криптостойкости до багов в собственной реализации и последующей утечке данных - обо всём этом уже писали выше...
hyperwolf
Надеюсь, вся информация внутри не лежит в обычном нешифрованном sqlite на смартфоне?
Автозаполнение форм в планах есть? Как у bitwarden.
kooo9058 Автор
Привет! Да, всё зашифровано. Автозаполнение планирую:)