История Stiger
Как я придумал Stiger.
ЧАСТЬ I: Появление идеи
Говорят, когда начинаешь делать свой проект, надо отталкиваться от реальной необходимости. Делать что-то, что пригодится самому; чем бы ты сам пользовался, если бы оно существовало или было достаточно удобным (если уже существует неудобное).
Как и многие в 2025-2026 я сидел перед экраном ноутбука и думал. Энтропии везло: я не нуждался ни в AI обёртке, ни в трекере финансов, ни в таймере медитации. Но что меня привлекает? В чём я испытываю необходимость?..
наступает время для лирического отступления
Дело в том, что четыре года назад я стал эмигрантом. В России, откуда я родом, содержимое телефона может иметь значение. Грубо говоря, если при проверке телефона находят лишнее, у тебя могут быть проблемы: ключ доступа, сохранённая статья, подписка не на тот канал, не то приложение…
Окей, можно было бы отталкиваться от этого, но что я могу сделать?..
Ещё в юности мне запала в душу идея стеганографии.
Стеганогра́фия (от греч. στεγανός — скрытый + γράφω — пишу; дословно — «тайнопись») — способ передачи или хранения информации с учётом сохранения в тайне самого факта такой передачи (хранения). Этот термин ввёл в 1499 году аббат бенедиктинского монастыря Святого Мартина в Шпонгейме Иоганн Тритемий в своём трактате «Стеганография» (лат. Steganographia), зашифрованном под магическую книгу.
—https://ru.wikipedia.org/wiki/Стеганография
Думаю, я узнал о ней из журнала “Хакер”. Позже, помню, была на слуху чудесная утилита, объединявшая rar архив и jpeg изображение, которая делала возможным такой сценарий:
- Скачиваешь файл-картинку на компьютер, скажем, “cat.jpeg”. Просто обычная картинка кота из интернета.
- Переименовываешь “cat.jpeg” в “cat.rar” и… распаковываешь содержимое как архив!
Красиво? Красиво!
Отдельная красота решения для меня заключалась в том, что от принимающей стороны не требовалось никаких дополнительных технических средств: достаточно было иметь популярный архиватор, чтобы быть готовым к получению информации. Можно было раскладывать пасхалки по интернету (тогда хостеры картинок часто не делали рекомпрессию), веселиться и… И, в общем-то, больше ничего.
Для простых пользователей стеганография массово не существует, для пользователей более продвинутых остаётся на уровне академической концепции: читаешь описание, запускаешь утилиту пару раз, восторгаешься элегантностью и кладёшь на полку. Потому что для полноценного обмена информацией надо, чтобы другие люди были в курсе, что существует такой способ общения. Более того, нужно, чтобы они имели достаточный технический навык, чтобы этим решением воспользоваться.
Беглый поиск по категории не даст соврать: вдохновлённые академической красотой разработчики сосредоточены на алгоритмах в большей степени, чем на хорошем интерфейсе и пользовательских сценариях. Стеганографические утилиты это как правило самостоятельные приложения, которые никак (или почти никак) не встраиваются в повседневную жизнь человека: пользователю в большинстве случаев предлагается установить приложение, импортировать фотографию, добавить секретное сообщение, экспортировать это изображение и отправить как вложение. Зачастую как файл, а не как изображение: то есть без превью, чтобы не потерять секрет в результате компрессии. Чтобы прочитать секрет, надо повторить всё в обратном порядке: скачать вложение, установить приложение, импортировать изображение…
На стеганографическом рынке есть другой тип утилит, которые прячут сообщения не в картинках, а через невидимые пробельные символы. Но иметь сообщение “Привет!”, нашпигованное пробельными символами, — это всё равно что расписаться в использовании стеганографии. Это заметно и при простом копировании, и при самом поверхностном анализе с показом специальных символов. Также все эти скрытые пробелы и другие специальные символы потенциально будут индексироваться текстовым поиском устройства (наравне с обычными текстами и сообщениями, в отличие от бинарных файлов изображений).
Возможно, всё это подходит для шифропанков, но не подходит для масс. Не подходит для того, чтобы общаться с друзьями или родителями.
И это обидно, потому что… ну… понимаешь, ЭТО КРАСИВО.
Но программисты не были бы программистами, если бы так легко сдавались! Надо делать эмпирические тесты и держать в голове образ пользователя.
ЧАСТЬ II: Проверка гипотезы
Итак, какие вводные я получил к этому моменту:
- Главное — это UI/UX и простая история, которой будет следовать пользователь. Без этого приложение сразу после публикации отправляется прямиком в софтомогильник ко всем прочим утилитам с приставкой Steg-.
- Технические подробности нужны (и важны, и должны быть доступны) для гиков, но для нормальных людей нужен увлекательный и понятный фасад, нормальная юзерстори с ответом на вопрос “зачем мне это?”. А ещё лучше, если этот вопрос даже не возникнет, лучше, если человек просто подумает “ха, прикольно!”.
Какие проблемы вероятно встанут перед человеком, который захочет пользоваться (вернее, он ещё даже и не знает, что захочет) стеганографией?
- Какую картинку выбрать
- Как это встроено в процесс общения
- …всё!
Простому пользователю не нужно ни сложных утилит, ни технических подробностей протокола встраивания секрета. Это должна быть стеганография на кончиках пальцев. Как можно ближе к клавиатуре. Получается, нужен прототип клавиатуры со встроенным поиском изображений и интеграцией пользовательского секрета. Ещё проще: галерея изображений и текстовое поле ввода.
Окей, чем мы обмениваемся из клавиатуры?
В Твиттере/X.com есть органично встроенный поиск анимированных гифок. Им особо никто не пользуется, но звучит близко к тому, что нам нужно. Только вот стеганография в gif… хм. Чем ещё обмениваются люди? Мемами? (Ещё ведь обмениваются? Или это уже как анекдоты, которые никто больше не рассказывает?) Окей, можно сделать в качестве прототипа каталог мемов. Формат? Наверное, для качественной графики подойдёт png. Делаем обзор способов встраивания секрета в png, берём подходящее решение, создаём на коленке кастомную клавиатуру-галерею, которая вставляет тестовое изображение с секретом, смотрим…
…И видим, что успеха нет ни в Telegram, ни в WhatsApp: png не переживает пересылку в неизменном виде, мессенджеры нормализуют изображение и наше секретное сообщение теряется. Попутно выясняется, что если твой проект это клавиатура-галерея, но тебе надо ввести свой текст (текст секретного сообщения), то ты не можешь вызвать из неё системную клавиатуру (что логично), а значит… надо создавать настоящую клавиатуру!
И как итог: Proof of Concept не работает! Фиксируем причины:
- Из кастомной клавиатуры-галереи нельзя вызвать диалог ввода с системной клавиатурой, а это критично для ввода секрета. Это в свою очередь означает, что разработка “клавиатуры-галереи” превращается в разработку “клавиатуры + галереи”. Последнее само по себе ужасно, учитывая объём работы (представь количество языков и типов раскладок!). К тому же, пристойного качества кастомных клавиатур на iOS добиться практически невозможно, каждый, кто хоть раз пользовался сторонней клавиатурой, понимает, о чём я.
- Кастомной клавиатуре нужно давать “полный доступ”, что автоматически вызывает вопросы о безопасности данных.
- Но главное — изображение, png с секретом, та самая стеганография, не работает в самых популярных мессенджерах! И даже если где-то заработает, как объяснить пользователю “здесь работает, а здесь нет”?.. Ситуацию утяжеляет то, что Telegram, WhatsApp и многие другие потенциальные способы доставки (которые я даже не стал проверять: Discord, Viber, Skype for Business, MS Teams, Snapchat, Threema, WeChat, Signal, Facebook Messenger etc, you name it) заблокированы или ограничены в стране исхода.
К концу этой фазы наступает понимание, что вместо клавиатуры для всего на свете нужно встроиться куда-то конкретно, в какой-то конкретный мессенджер, чтобы иметь понятный транспорт.
Но куда и как?
ЧАСТЬ III: iMessage
Всю свою карьеру, все 15+ лет я занимался веб-разработкой, разработка под iOS — новая для меня область. Swift в целом напоминает мой родной язык TypeScript, мобильные экраны мне знакомы по мобильному вебу, но экосистему изнутри я не наблюдал, только снаружи, как пользователь.
Размышляя над безутешными результатами, я увидел Xcode target “iMessage extension”…
Дело в том, что популярный в англоязычных странах iMessage совершенно не популярен в России. Настолько непопулярен, что по состоянию на середину 2026 года его не блокировали. Возможная причина (это моя догадка): блокировка iMessage на сетевом уровне может нарушить работу всего iPhone. Как бы там ни было, я попробовал отправить png через iMessage и — о, чудо! — отправленное изображение успешно пережило пересылку, я смог прочитать свой секрет!
С этого момента я сосредоточился на iMessage, в нём было всё, что нужно для решения поставленной в Части I задачи:
- Транспорт, который позволяет передавать png без потери секрета (даёт зелёный свет для стеганографии);
- Повсеместная доступность (есть на каждом iPhone, хоть пользователи иногда этого и не подозревают);
- Эксклюзивность. iMessage extension, в отличие от кастомной клавиатуры, работает ТОЛЬКО в приложении Messages (Сообщения). Нет риска, что пользователь будет пытаться отправить стеганографическое изображение через неподдерживаемый транспорт, как в случае с кастомной клавиатурой;
- И, наконец, iMessage extension предоставляет все нужные нам интерфейсные возможности: понятно как сделать галерею стикеров, понятно как сделать поле ввода. Используется стандартная клавиатура, не нужно предоставлять сомнительный “полный доступ” в настройках.
Вот собственно и вся история появления Stiger. Дальше были прототипы, проработка MVP, тестирование. Несколько кругов доработок. То, что получилось, можно посмотреть, если твой айфон поддерживает iOS 15+.
После установки тебе доступны все основные функции, но без шифрования. Этого достаточно не только для ознакомления, если твои задачи не требуют обязательного шифрования, можешь чувствовать себя свободно: пересылать шутки, общаться с друзьями. Нет никакого trial или ограничения по времени, просто знай, что без шифрования любой другой пользователь Stiger может прочитать твои стикеры. Шифрование, как и некоторые другие расширенные возможности, предоставляется по подписке. Подписка, а также магазин стикеров — это и есть моя модель монетизации.
От идеи универсальной клавиатуры с мемами через несколько итераций я пришёл к идее iMessage Extension со стикерами. От идеи копипастить стикеры со временем пришёл к более дружелюбному drag’n’drop.
Признаюсь, порой было сложно перестать думать как программист и сохранять пользовательский интерфейс простым и чистым. Но в итоге у меня получилось создать несколько смысловых слоёв, идущих от простого к сложному, которые позволили соблюсти баланс:
- Простой и дружелюбный iMessage Extension. Стеганография происходит здесь, но максимальный уровень сложности, с которой может столкнуться пользователь, — это поле ввода пароля и концепция drag’n’drop.
- Само приложение Stiger.app не участвует в процессе стеганографии, но содержит продвинутые настройки безопасности и интерактивный виджет, который я назвал paranoia guide — он объясняет каждый пункт настроек и позволяет выбрать подходящую стратегию использования, чтобы защитить твои секреты.
- Наконец, THREAT_MODEL.md и открытое описание протокола на гитхабе: github.com/axlerk/stiger-protocol — с примерами реализации на Python и TypeScript. Всё это должно помочь специалистам принять решение, можно ли доверять Stiger данные.
Таким образом, интерфейс Stiger нацелен на широкую аудиторию, иконка приложения намеренно следует паттерну “security through obscurity by design”, но за интерфейсом и дизайном есть также privacy tool архитектура и идеи, которые позволяют мне надеяться, что твои и мои сообщения достаточно хорошо защищены. Шифрование, встраивание и чтение секретов происходят на твоём устройстве, аналитика не собирается.
Учитывая, что в России многие мессенджеры ограничены, а также принципиальную невозможность оплаты покупок в AppStore, я принял решение предоставлять бесплатное шифрование всем, кто использует русский язык в качестве языка устройства. Надеюсь, это поможет людям в России получать информацию и общаться со своими близкими.