Перейти к основному содержимому

Подход к безопасности

Создано ради доверия, а не ради показухи

Мы не security-компания, но ConKarma имеет дело с данными — детьми, партнёрами, ежедневными ритуалами — которые требуют честных ответов о том, как мы их защищаем. Эта страница — нерафинированная версия.

Последняя проверка:

Как работает вход

Мы относимся к вашему паролю как к секрету, который никогда не видим в открытом виде, храним самый сильный хеш, какой даёт спецификация, и ротируем refresh-токены, чтобы украденная cookie не пережила сессию, из которой пришла.

  • Пароли хешируются argon2id (профиль RFC 9106 m=19 MiB). Старые bcrypt-хеши обновляются прозрачно при следующем входе — без принудительных сбросов.
  • Сессии используют ротируемые семейства refresh-токенов. Если украденный токен повторят, всё семейство инвалидируется, и легитимное устройство должно переавторизоваться — никакой тихой компрометации.
  • Настраиваемая блокировка аккаунта после повторных неудач. Снимается автоматически при первом успешном входе — опечатка вас не запрёт.
  • «Вход с Apple» и «Вход с Google» используют прямой протокол OpenID Connect — goia_api подключается к Apple и Google напрямую, без стороннего брокера аутентификации в цепочке. Мы получаем только идентификатор пользователя от вышестоящего провайдера, ваш адрес электронной почты и флаг подтверждения — никогда ваш пароль от провайдера.

Безопасность входа

Каждый вход проходит через второй фактор. О каждом входе с нового устройства приходит уведомление. Родители остаются в курсе для несовершеннолетних, и ничего лишнего не проникает.

  • Двухфакторная аутентификация при каждом входе: 6-значный код на почту, окно 30 дней для доверенных устройств.
  • Мгновенное email-уведомление, когда в аккаунт заходят с нового устройства: тип, приблизительные город и страна, время. Одно нажатие отзывает устройство и принудительно меняет пароль.
  • Входы несовершеннолетних с новых устройств также оповещают родителей в их ячейке. Прозрачно: несовершеннолетние видят в Настройках, кто из родителей подключён.
  • Резервные коды: 8 одноразовых при первой настройке, доступны из Настроек → Безопасность, перегенерируются по запросу. Путь восстановления, когда потерян доступ к почте.
  • Хранение паролей: argon2id, отраслевой стандарт memory-hard. Токены доверенных устройств отделены от токенов сессии.
  • Проверка с лимитом: 5 неудачных кодов вызывают блокировку на 15 минут.

Когда что-то выглядит странно

Если вход поступает из страны, которую мы не видели на вашем аккаунте за последние 30 дней, мы пишем письмо. В письме одна кнопка «это был не я», которая отзывает сессию и сразу ведёт к смене пароля.

  • Email-уведомления о неизвестной локации (одно на страну за 30-дневное окно — отпуск вас не спамит).
  • Список активных сессий с отзывом по устройству из приложения. Можно разлогинить потерянный телефон без смены пароля.
  • Детали неудачных входов (timestamp и код страны — не сырой IP) видны в журнале безопасности приложения.

Только настоящие приложения

Мобильный трафик подтверждён как пришедший из настоящей установки ConKarma на настоящем устройстве. Попытки curl-к-API мягко отклоняются — это то, что должна делать честная API-поверхность.

  • Firebase App Check на iOS и Android. Токен обязателен на каждом API-вызове с мобильного.
  • Мобильный TLS-pinning через подписанный манифест в /.well-known/mobile-pins.json. Новые пины подписываются офлайн-ключом и ротируются с шестинедельным окном перекрытия — обновление никого не запрёт.

Взрослые функции под запретом для аналитики

В ConKarma две зоны: зона Serene (всё семейное) и зона Ember (18+ функции). Страницы Ember намеренно не отправляют события аналитики третьих сторон. Мы собираем агрегированные Prometheus-счётчики на сервере для capacity и uptime; и больше ничего.

  • Взрослые поверхности (вызовы, желания, фантазии, интимные дневники, личное хранилище) никогда не загружают Google Analytics.
  • Биометрическая разблокировка обязательна для входа в Ember-поверхности приложения. Система истекает и блокируется снова, если переключаетесь на другое приложение.
  • Защита от скриншотов скрывает Ember-контент в OS-переключателе приложений и в любых оверлеях записи экрана.
  • Включение зоны для взрослых по устройству: по умолчанию ВКЛ на вашем основном устройстве, ВЫКЛ на каждом другом. Вы явно включаете её на каждом устройстве, и серверная проверка fail-closed.
  • Повторный запрос при бездействии: биометрическая защёлка снимается после 5 минут бездействия внутри Ember или 30 секунд пребывания в фоне. Оба параметра настраиваются в Настройки → Конфиденциальность.
  • Обнуление кэша в памяти: когда вы переходите из Ember обратно в Serene (или сворачиваете приложение), каждое кэшированное изображение сбрасывается из памяти — эшелонированная защита против инструментов инспекции памяти.
  • Исключение из Spotlight, Apple Intelligence и AppIntents: взрослый контент никогда не передаётся в Spotlight, локальную LLM на устройстве, AppIntents, Smart Stack или виджеты экрана блокировки.
  • Админ-доступ в четыре глаза: ни один человек в XTZ Group не может в одиночку читать контент зоны для взрослых — любое переопределение требует подписанного одобрения второго администратора, записанного в неизменяемом аудит-логе.
  • Настраиваемое хранение для взрослых на 3 года: строки зоны для взрослых автоматически удаляются через 3 года по умолчанию. Окно настраивается пользователем (от 90 дней до 10 лет) в Настройки → Конфиденциальность. Жёсткое удаление по истечении окна.
  • Контроль резервного копирования iCloud и экспорта GDPR: два opt-in переключателя в Настройки → Конфиденциальность по умолчанию не дают взрослому контенту попасть в резервные копии устройства и в экспорт ваших данных — так что случайно переданные бэкапы или экспорт его не раскроют.

Прочитать полные гарантии изоляции зон →

Инфраструктура согласия + инструменты конфликта

Трудные разговоры и согласие в зоне для взрослых проходят через структурированные, курируемые поверхности — никогда через ИИ-конвейер. Данные за ними остаются локальными или приватными для пары.

  • Инструменты конфликта — ИИ-конвейер исключён: каждый поток примирения между братьями и сёстрами, парами и поколениями — это курированный контент + структурированные формы.
  • Инфраструктура согласия — Ember: документ ограничений, привязка стоп-слова и чек-ины aftercare живут на E2E-примитивах Ember. Документ ограничений никогда не достигает нашего ИИ-конвейера.
  • Персональное скрытие + контроль на уровне ячейки: BE не удаляет базовые данные. Любая операция постоянного флага требует ворот двух администраторов.

Инфраструктура согласия Ember

Поверхности уровня взрослых не поставляются с общим флажком «Согласен» и не называют это согласием. Ember структурирован вокруг трёх несущих примитивов — документа об ограничениях, безопасного слова и проверок после — которые живут на той же паре E2E-ключей, что и остальная зона взрослых. Зрелое обрамление; свобода выбора, а не патернализм.

  • Документ об ограничениях: каждый партнёр создаёт и редактирует свой собственный, видимый только другому партнёру в той же ячейке пары. Никогда не попадает в наш аналитический конвейер; никогда не читается ИИ; никогда не реплицируется на стороне сервера помимо зашифрованного блоба.
  • Привязка безопасного слова: одна фраза безопасного слова, общая для пары, немедленно возвращающая все поверхности Ember в Serene + записывающая строку журнала приватного для пары. Активации видны только обоим партнёрам; операторы XTZ Group не могут их читать.
  • Проверки после: запланированные любым партнёром после сессии Ember, добровольные для каждого партнёра, ответы остаются приватными для пары. Без счётчика вовлечённости, без серии, без назойливости.
  • Зрелое обрамление: текст и подсказки обращаются к взрослым читателям как к взрослым. Мы не инфантилизируем поверхности эвфемизмами; мы также не опираемся на шокирующую ценность, чтобы казаться трансгрессивными.

Согласование согласия с двойной слепотой

Когда два партнёра исследуют, какие категории фантазий пересекаются, согласование выполняется полностью на устройстве с двумя структурными инвариантами, которые мы не нарушим: никогда-не-раскрывать-нет (если любой партнёр нажимает «нет», ни один не видит этого факта) и ИИ-без-исходящего-трафика (никакая модель нигде в цепочке вывода).

  • Инвариант «никогда не раскрывать нет»: пара да/да появляется в общем списке совпадений. Любая другая комбинация (да/нет, нет/да, нет/нет) не возвращает ничего — ни один партнёр не видит, кто сказал «нет», и ни один не видит, что другому вообще показывали подсказку. Это антидавление структурный замысел, а не настройка, которую можно отключить.
  • Инвариант ИИ-без-исходящего-трафика: вычисление согласования — это локальное пересечение множеств. Никакого вывода модели, никакого поиска вложений, никакой ИИ-оценки категорий или пар. Сам набор категорий — кураторский редакторский контент, а не сгенерированный.
  • Результаты приватные для пары: список совпадений зашифрован end-to-end на общей паре ключей пары. На стороне сервера мы видим счётчики (планирование мощности), но никогда не сами категории.
  • Проверяемые инварианты: два вышеуказанных инварианта применяются в цепочке кода на устройстве без переключателей и без переопределения администратором. Оператор платформы не может включить пару в телеметрию на этой поверхности — телеметрии нет возможности включить.

Соответствие Take It Down Act — публичный канал уведомлений

Федеральный закон TAKE IT DOWN Act (2025) обязывает платформы, размещающие пользовательский контент, реагировать на запросы об удалении интимных изображений без согласия в течение 48 часов. Публичный канал уведомлений и процедура ConKarma опубликованы на /legal/takedown-notice; этот раздел является резюме позиции безопасности.

  • Канал: legal@conkarma.app (тема письма: Take It Down notice / DMCA notice / Urgent — CSAM report).
  • Обязательство: SLA 48 часов с момента получения действительного запроса до удаления или отключения доступа.
  • Охват: NCII (реальные или ИИ-сгенерированные дипфейки), авторское право DMCA, CSAM (повышенный приоритет + отчёт NCMEC) и более широкие отчёты о незаконном контенте.
  • Встречное уведомление: путь встречного уведомления DMCA через тот же канал; предусмотренное законом окно восстановления 10–14 рабочих дней при отсутствии судебного приказа.
  • Аудит: каждое уведомление + каждое предпринятое действие регистрируется и хранится в течение периодов, требуемых законом. Недобросовестные уведомления могут подвергнуть отправителя гражданской ответственности по Закону, DMCA §512(f) и нашим Условиям.

Диал регулирования по штатам

Там, где штаты США или другие юрисдикции принимают законы, ограничивающие то, что может предлагать платформа (режимы верификации возраста, ограничения категорий контента, обязательства по ведению записей), мы корректируем поведение регионально, а не уходим с рынка. Честный компромисс: закон штата формирует то, как выглядит поверхность для пользователей в этом штате, а не то, что мы считаем правильным продуктовым дизайном.

  • Определение региона: на основе указанной пользователем страны + (для США) штата, настроенного в Настройках, а не только IP-геолокации. Пользователи могут переопределить определённый регион, если он неверный.
  • Что корректируется: потоки верификации возраста (штаты с KOSA-стилем), ограждение контента для взрослых, периоды хранения там, где закон штата их диктует, и копия раскрытия информации там, где штат требует конкретных формулировок.
  • Что НЕ корректируется: позиция end-to-end шифрования, инварианты ИИ-без-исходящего-трафика, COPPA-совместимые настройки по умолчанию для детей до 13 лет и инвариант таблицы «никогда не смешивать строки контента для взрослых». Они не подлежат переговорам в разных юрисдикциях.
  • Прозрачность: региональная конфигурация, применённая к твоему аккаунту, видна в Настройки → Конфиденциальность → Региональная позиция. Если ты считаешь её неверной для твоей юрисдикции, подай уведомление Take It Down или напиши на legal@conkarma.app.

Дети — не рычаг роста

Аккаунты до 13 лет проходят верифицируемый процесс родительского согласия до своего создания. Реклама на детских аккаунтах не показывается, точка. Мы не продаём детские данные, не делимся ими для рекламы и не используем для таргетинга.

  • Верифицируемое родительское согласие по COPPA §312.5 (подписанная проверка владельца кредитной карты, с альтернативным путём для семей без карты).
  • Никакой сторонней рекламы любого вида на аккаунтах до 13 лет.
  • Родители могут просматривать, экспортировать и удалять данные аккаунта своего ребёнка в любой момент из приложения.

Доверие приходит из Ячейки, а не от нас

ConKarma — продукт замкнутого круга. Нет публичных профилей, нет графа подписчиков, нет способа находить незнакомцев. Большая часть модерации происходит потому, что вы и люди в вашей Ячейке уже знаете и доверяете друг другу. Там, где модели нужна помощь, у нас есть форма жалобы и очередь модерации с человеком внутри.

  • Ячейки закрыты по умолчанию. Никакого публичного обнаружения, никакого публичного профиля, никаких рекомендаций «друзей друзей».
  • Форма жалобы пользователя на каждой контентной поверхности, маршрутизируется в очередь модерации, обрабатываемую людьми.
  • Хеш-сканирование известного CSAM отслеживается как известная-и-предстоящая реализация, с явными триггерами повторного рассмотрения, когда перейдём к профилю медиа-хранилища, который этого требует. Мы не заявим этого до того, как это станет реальностью.

Что храним, где и как вернуть

Мы избыточно документируем это на /privacy и /legal/subprocessors, но коротко по части безопасности: зашифровано в покое, хранится там, где это покрывают SCC-документы, экспортируется и удаляется по запросу — и больше необходимого мы не храним.

  • Контролы экспорта и удаления GDPR, CCPA и Quebec-25 живут внутри приложения — не за тикетом поддержки. У удаления 30-дневное soft-delete-льготное окно на случай, если передумаете.
  • Шифрование в покое в базе Postgres и в объектном хранилище (инфраструктура под управлением Supabase).
  • Сырые IP-адреса не хранятся ни на одной пользовательской поверхности. Список активных сессий показывает только 2-буквенный код страны; сырые IP кратко существуют в строках событий безопасности для криминалистики при коротком сроке хранения.

Если что-то нашли — расскажите нам

У нас пока нет платной bug-bounty — это реальный пробел, и мы займёмся им, когда он окупит операторское время, которое требует. Пока приветствуем сообщения добросовестных исследователей и подтверждаем их в пределах пяти рабочих дней.

Эл. почта: security@conkarma.app

  • Пишите на security@conkarma.app с деталями. PGP-ключ по запросу.
  • Обещаем подтвердить за 5 рабочих дней и содержательный ответ за 30 дней.
  • Координированное раскрытие: окно по умолчанию 90 дней до публичного раскрытия, продлевается по взаимному согласию.
  • Мы не будем предъявлять иски против добросовестного security-исследования, следующего ответственному раскрытию.