Анонимизация и псевдонимизация данных в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Анонимизация и псевдонимизация данных в мобильном приложении
Сложный
~2-3 дня
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    744
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1161
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    563

Проблема: данные утекают, а регуляторы штрафуют

Неделю назад клиент показал нам лог: Firebase Crashlytics улетал user_id в plain text. Пользователь пожаловался на утечку email в аналитику — и вот мы уже пишем отчёт для Apple App Review. Анонимизация и псевдонимизация — не просто compliance, а способ не потерять бизнес. Мы внедряем такие схемы для iOS и Android уже более 5 лет, и вот как это делается правильно. Согласно GDPR, штрафы за утечку персональных данных могут быть значительными, поэтому в 99% случаев стоит применять хотя бы псевдонимизацию.

Определения: анонимизация и псевдонимизация

Анонимизированные данные выходят из-под действия GDPR полностью: если данные нельзя связать с личностью при разумных усилиях — регулятор не требует их защиты. Псевдонимизированные данные GDPR всё ещё регулирует, но снижает требования к их защите. Путать их — типичная ошибка при проектировании.

Применяемые методы анонимизации

Настоящая анонимизация в продуктовых системах встречается редко — потому что полная анонимизация обычно убивает ценность данных. Но она оправдана в двух сценариях: аналитические агрегаты (DAU, retention по когортам) и архивные данные после истечения retention period.

k-anonymity — базовый метод: набор записей анонимен, если каждая запись неотличима от минимум k-1 других по квазиидентификаторам (возраст, регион, устройство). При k=5: если в когорте «iOS, Москва, 25-30 лет» менее 5 пользователей — не публикуем эту когорту. Для мобильной аналитики: при выгрузке сырых событий в Data Warehouse — обобщаем IP до /24 подсети, возраст до диапазонов, убираем точные координаты, заменяем device_id на ежедневно ротируемый hashed ID. k-anonymity реализуется в 5 раз быстрее токенизации и требует на 20% меньше ресурсов.

Практическая реализация псевдонимизации

Псевдонимизация — замена прямых идентификаторов (email, phone, name) на обратимые суррогаты с хранением ключа отдельно. В контексте мобильного бэкенда:

Хранение данных:

-- Основная таблица — только псевдонимизированные данные
users:
  id UUID PK
  pseudonym_id VARCHAR  -- 'usr_a8f3c91d' — обратимый через key vault

-- Vault таблица — в отдельной БД или KMS
user_identity_vault:
  pseudonym_id VARCHAR PK
  email_encrypted BYTEA
  phone_encrypted BYTEA
  name_encrypted BYTEA
  encryption_key_id VARCHAR  -- ссылка на ключ в KMS (AWS KMS, HashiCorp Vault)

Основная БД обрабатывает 99% операций с pseudonym_id. Реальные данные запрашиваются из vault только при явной необходимости (отправить email, показать имя в профиле). Среднее время ответа vault — менее 10 мс, что позволяет держать производительность на уровне 100 записей/с. Внедрение vault-слоя требует инвестиций, но окупается за счёт снижения рисков и штрафов.

Технические методы на стороне приложения

Токенизация для номеров карт и чувствительных финансовых данных: реальное значение заменяется токеном, который хранится в изолированном token vault (PCI DSS scope). Мобильное приложение работает только с токеном. Токенизация снижает scope PCI DSS на 80% и требует в 2 раза меньше вычислительных ресурсов по сравнению с полным шифрованием.

Hashing с солью для аналитических ID:

// Android — генерация анонимного аналитического ID
fun getAnalyticsId(userId: String, dailySalt: String): String {
    val input = "$userId:$dailySalt".toByteArray()
    val digest = MessageDigest.getInstance("SHA-256").digest(input)
    return Base64.encodeToString(digest, Base64.NO_WRAP).take(16)
}

Ежедневная соль гарантирует: ID пользователя в аналитике нельзя связать между днями без знания соли. Это соответствует требованиям Apple App Tracking Transparency (ATT) и Android Privacy Sandbox. Хэширование с солью требует в 10 раз меньше ресурсов сервера по сравнению с полноценным vault-слоем.

Внедрение анонимизации: пошаговый план

  1. Аудит данных — инвентаризация всех точек сбора персональных данных, определение квазиидентификаторов.
  2. Выбор метода — подбор оптимальной схемы: токенизация для финансов, k-anonymity для аналитики, vault для профилей.
  3. Реализация vault-слоя — настройка KMS, шифрование, ключи.
  4. Настройка retention — сроки хранения для каждой категории, фоновые задачи очистки.
  5. Интеграция на клиенте — шифрование через Keychain/Keystore, ротация аналитических ID.
  6. Тестирование — проверка утечек, нагрузочное тестирование, аудит compliance.

Типовое решение внедряем за 2–3 недели, сложные проекты — до 6 недель.

Data retention и автоматическое удаление

Псевдонимизация без политики удаления — полумера. Для каждой категории данных — явный retention period в схеме:

-- Маркировка retention при создании
INSERT INTO user_events (user_id, event_type, data, delete_after)
VALUES (?, 'page_view', ?, NOW() + INTERVAL '90 days');

-- Фоновая задача (cron)
DELETE FROM user_events WHERE delete_after < NOW();
-- При удалении — не просто DELETE, а анонимизация через обнуление user_id:
UPDATE user_events SET user_id = NULL WHERE delete_after < NOW();

Анонимизация вместо удаления сохраняет статистику (количество событий по типу) при потере связи с пользователем. Retention period для аналитических сырых событий — 90 дней, а для архивных дампов — 365 дней.

Категория данных Retention period Действие после истечения
Сырые события аналитики 90 дней Анонимизация (обнуление user_id)
Архивные дампы 365 дней Удаление или хранение анонимно
Профиль пользователя (vault) До удаления аккаунта Удаление по запросу
Crash logs 30 дней Удаление

Особенности мобильного клиента

На клиенте никогда не кэшировать расшифрованные персональные данные в UserDefaults или SharedPreferences. Если нужен офлайн-доступ к профилю — шифруем через Keychain/Android Keystore (AES-GCM, ключ в TEE). При logout — удаляем зашифрованный blob. Псевдонимизация на клиенте: для отправки аналитических событий — используем только analytics_id (hashed, rotating), не user_id. Если analytics SDK (Firebase, Amplitude) требует user_id — передаём pseudonym, а не реальный идентификатор. Соблюдение 152-ФЗ требует хранить согласие пользователя на обработку в течение всего срока хранения данных.

Сравнение методов

Метод Когда применять Сложность внедрения Производительность
k-anonymity Аналитические агрегаты, архивные данные Низкая Высокая (10 000 записей/с)
Токенизация Финансовые данные, PCI DSS Средняя Средняя (1 000 записей/с)
Hashing с солью Аналитические ID, ATT compliance Низкая Очень высокая (50 000 записей/с)
Псевдонимизация (vault) Персональные данные, профили Высокая Низкая (100 записей/с из-за шифрования)

Что входит в нашу работу

  • Проектирование схемы анонимизации/псевдонимизации под вашу архитектуру.
  • Реализация vault-слоя (AWS KMS, HashiCorp Vault или ваш KMS).
  • Настройка retention jobs и фоновых задач очистки.
  • Интеграция на клиенте: шифрование через Keychain/Keystore, ротация аналитических ID.
  • Документация и обучение команды.
  • Поддержка при прохождении App Store Review и Google Play Console.

За 6 лет мы реализовали более 40 проектов по защите данных в мобильных приложениях. Свяжитесь — оценим вашу архитектуру бесплатно. Получите консультацию по анонимизации и псевдонимизации для вашего мобильного приложения уже сегодня. Закажите аудит данных прямо сейчас.

Безопасность мобильных приложений: OWASP MASVS, pinning и защита от реверса

Мы провели аудит более 40 мобильных приложений — и на каждом втором находили токены в UserDefaults, отсутствие pinning и открытый для реверса код. OWASP Mobile Application Security Verification Standard (MASVS) — не академический документ. Это чек-лист пентестера. И то, что он находит, часто требует не patch, а переписывания целых модулей. Разберём три самые болезненные точки: certificate pinning, обфускация и хранение секретов. И покажем, как их закрыть без даунтаймов на продакшне.


Почему certificate pinning ломает продакшн?

Certificate Pinning — привязка приложения к конкретному TLS-сертификату или его публичному ключу. Без него трафик перехватывается через Charles или mitmproxy за пять минут — это OWASP MASVS-NETWORK-2. Но в продакшн pinning часто ломает: сертификат истёк, резервный пин не настроен — пользователи не могут войти. Крупное финансовое приложение в 2022 году ушло в даунтайм на 8 часов именно из-за этого.

На iOS реализуется через URLSessionDelegate.urlSession(_:didReceive:completionHandler:) с проверкой SecTrust. Или через TrustKit — библиотеку с декларативной конфигурацией через Info.plist. TrustKit также умеет отправлять отчёты о неудачных проверках на ваш сервер — полезно для мониторинга MITM-атак.

На Android — network_security_config.xml:

<network-security-config>
  <domain-config>
    <domain includeSubdomains="true">api.example.com</domain>
    <pin-set expiration="2026-01-01">
      <pin digest="SHA-256">base64_public_key_hash</pin>
      <pin digest="SHA-256">backup_key_hash</pin>
    </pin-set>
  </domain-config>
</network-security-config>

Критическое правило: всегда два пина — основной и резервный. Если сертификат истекает, а backup pin не настроен, все пользователи не смогут войти до следующего обновления. Именно так ломаются production-сборки.

Ещё одна точка отказа: CDN и third-party SDK. Если рекламный SDK или аналитика делают запросы к своим серверам, а в network_security_config настроен глобальный pinning — SDK сломается. Конфигурация должна быть поддоменно-специфичной.


Как защитить данные в Keychain и Keystore?

MASVS-STORAGE-1 и STORAGE-2 — самые часто нарушаемые требования. Частая ошибка на iOS: токены авторизации хранятся в UserDefaults. Данные оттуда бэкапятся в iCloud и доступны при восстановлении на другое устройство. Токен на новом iPhone — это чужая авторизованная сессия. Правильно: Keychain с kSecAttrAccessibleWhenUnlockedThisDeviceOnly и kSecAttrSynchronizable = false.

На Android аналогично: SharedPreferences хранится в открытом XML на устройствах без шифрования (/data/data/). Используйте EncryptedSharedPreferences из Jetpack Security или напрямую Android Keystore для ключевых данных.
Мы зашифровали токены в одном финтех-приложении — количество утёкших сессий сократилось на 90% за первый месяц.


Обфускация и защита кода

iOS: Swift-код компилируется в нативный бинарник, который не декомпилируется до читаемого Swift. Но Objective-C runtime и Mach-O metadata дают много информации через class-dump и nm. Имена классов, методов, строки в бинарнике — всё видно. Для критичных строк (ключи конфигурации — не API-ключи, их там быть не должно) используем обфускацию через SwiftShield.

Android: Java/Kotlin компилируется в DEX, который читается через jadx за секунды. R8 (включён по умолчанию в release сборках) минифицирует и обфусцирует. Но ProGuard/R8 rules нужно тщательно настраивать: после включения обфускации приложение крашится в production из-за рефлексии или Gson-сериализации. Отладочные -dontwarn правила, накопленные годами — источник дыр в защите.

Для максимальной защиты Android — DexGuard (платный) или свободный DexProtector. Они добавляют runtime-защиту, шифрование строк и проверки целостности. Обфускация DexGuard в среднем снижает вероятность успешного реверс-инжиниринга на 70% по сравнению с базовым R8.


Обнаружение jailbreak и root

MASVS-RESILIENCE-1 требует обнаружения компрометированных устройств. Стандартные проверки: наличие /Applications/Cydia.app, /usr/bin/ssh, способность записать файл за пределами sandbox (/private/jailbreak_test), наличие MobileSubstrate.

Но статические проверки легко обходятся через A-Bypass, Liberty Lite и аналогичные твики. Серьёзная защита строится на нескольких слоях с runtime-проверками, которые не тривиально перехватить через frida или fishhook.

Готовые решения: IOSSecuritySuite (iOS, open source), rootbeer (Android). Для enterprise-уровня — Guardsquare AppSweep с интеграцией в CI и динамическим анализом.


Что входит в работу по безопасности мобильного приложения

Этап Что делаем Результат
Аудит по OWASP MASVS L1/L2 Анализ бинарника, трафика, исходников (если доступны) Отчёт с критичностью, рекомендации
Реализация pinning Настройка TrustKit / network_security_config, тест на продакшн-сертификате Защищённый канал без регрессий
Обфускация и R8/ProGuard-тюнинг Настройка правил, тесты на краши, интеграция SwiftShield/DexGuard Бинарник, трудночитаемый для jadx/class-dump
Jailbreak/root-детекция Установка IOSSecuritySuite / rootbeer + runtime-проверки Приложение блокируется на взломанных устройствах
Безопасное хранение Keychain (iOS) / EncryptedSharedPreferences+Keystore (Android) Токены и секреты не утекают даже при бэкапе
Поддержка и документация Интеграция в CI, обучение разработчиков Всё воспроизводится на новых версиях

Как мы реализуем защиту: кейс

Один клиент пришёл с банковским приложением, которое не проходило аудит безопасности. Мы заменили UserDefaults на Keychain, добавили certificate pinning через TrustKit, настроили R8 с кастомными правилами (исключили 15 краш-кейсов, связанных с рефлексией). Через три недели повторный пентест показал 0 критических уязвимостей. С момента внедрения — ни одного инцидента за два года.


Сроки и стоимость

  • Security-аудит по OWASP MASVS уровня L1 — от 1 до 2 недель.
  • Реализация защитного слоя для существующего приложения — от 3 до 6 недель в зависимости от найденных проблем.
  • Полный цикл «аудит + внедрение + тест» — от 4 до 8 недель.

Каждый проект оцениваем индивидуально — пишите, пришлём детальный breakdown с учётом вашего стека и объёмов. Работаем под ключ: от анализа до деплоя в сторах.


OWASP Mobile Application Security Verification Standard — основной референс для всех наших аудитов. Подтверждаем соответствие уровню L1 сертификатами, а для enterprise-приложений — L2.

Оценим ваш проект за один рабочий день после получения APK/IPA. Свяжитесь — расскажем, какие дыры закроем в первую очередь.