289 lines
15 KiB
Markdown
289 lines
15 KiB
Markdown
|
|
# Техническая спецификация: Прямая дистрибуция приложений ТБанк
|
|||
|
|
|
|||
|
|
**Для:** IT-команда ТБанк Холдинг
|
|||
|
|
**От:** Alejandro Montana
|
|||
|
|
**Дата:** 24.01.2026
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Проблема
|
|||
|
|
|
|||
|
|
App Store удалил приложения российских банков. Клиенты вынуждены:
|
|||
|
|
- Искать APK/IPA на сторонних сайтах (риск малвари)
|
|||
|
|
- Использовать веб-версии (ограниченный функционал)
|
|||
|
|
- Терять доступ к push-уведомлениям и биометрии
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Решение: LazyShop-модель (уже работает)
|
|||
|
|
|
|||
|
|
Референс: **https://lazyshop.app** — сервис, который уже делает это для тысяч пользователей.
|
|||
|
|
|
|||
|
|
### Как это работает (проверено)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. Клиент заходит на сайт через Safari на iPhone
|
|||
|
|
2. Сайт определяет устройство автоматически
|
|||
|
|
3. Клиент скачивает профиль → он появляется в Настройках iOS
|
|||
|
|
4. Клиент заходит в Настройки → подтверждает установку профиля
|
|||
|
|
5. Профиль собирает UDID и данные устройства
|
|||
|
|
6. Через ~24 часа сертификат готов
|
|||
|
|
7. Клиент получает ссылку на почту или переходит на сайт для скачивания
|
|||
|
|
8. Приложение устанавливается напрямую
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Почему Apple не может это закрыть
|
|||
|
|
|
|||
|
|
Это **их собственный механизм** для масштабирования технологий:
|
|||
|
|
- Enterprise Distribution Program
|
|||
|
|
- Ad-Hoc Distribution
|
|||
|
|
- Developer Certificates
|
|||
|
|
|
|||
|
|
Apple использует это для корпоративных клиентов, бета-тестирования, внутренних приложений. Закрыть = сломать свою же экосистему.
|
|||
|
|
|
|||
|
|
### Если сертификат отзывают
|
|||
|
|
|
|||
|
|
Процедура повторяется:
|
|||
|
|
- Клиент заново устанавливает профиль
|
|||
|
|
- Получает новый сертификат
|
|||
|
|
- Скачивает приложение
|
|||
|
|
|
|||
|
|
**Это неудобно, но работает.** ТБанк может автоматизировать это через свою инфраструктуру.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Что делает ТБанк vs. что делает LazyShop
|
|||
|
|
|
|||
|
|
| Компонент | LazyShop (сейчас) | ТБанк (своё решение) |
|
|||
|
|
|-----------|-------------------|----------------------|
|
|||
|
|
| Профиль | Их сервер | Сервер ТБанк |
|
|||
|
|
| Сертификаты | Их Apple Developer Account | Apple Developer Account ТБанк |
|
|||
|
|
| Доверие клиента | "Какой-то сайт" | "Мой банк" |
|
|||
|
|
| Время выпуска | ~24 часа | Можно быстрее (своя инфраструктура) |
|
|||
|
|
| Стоимость для клиента | Платно | Бесплатно (за счёт банка) |
|
|||
|
|
| Лимит приложений | 3 шт | Все приложения холдинга |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Архитектура для ТБанк
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|||
|
|
│ КЛИЕНТ (iPhone) │
|
|||
|
|
├─────────────────────────────────────────────────────────────────┤
|
|||
|
|
│ │
|
|||
|
|
│ 1. Safari → tbank.ru/ios │
|
|||
|
|
│ 2. Скачать профиль → Настройки │
|
|||
|
|
│ 3. Подтвердить установку профиля │
|
|||
|
|
│ 4. Подождать (автоматически или ~24ч) │
|
|||
|
|
│ 5. Получить ссылку → Скачать приложение │
|
|||
|
|
│ │
|
|||
|
|
│ Результат: │
|
|||
|
|
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
|||
|
|
│ │ ТБанк App │ │ Т-Мобайл │ │ Т-Страхование│ │
|
|||
|
|
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
└─────────────────────────────────────────────────────────────────┘
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|||
|
|
│ СЕРВЕР ТБанк │
|
|||
|
|
├─────────────────────────────────────────────────────────────────┤
|
|||
|
|
│ │
|
|||
|
|
│ ┌─────────────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ Profile Server │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ • Генерация .mobileconfig для каждого клиента │ │
|
|||
|
|
│ │ • Сбор UDID через профиль │ │
|
|||
|
|
│ │ • Привязка к аккаунту клиента в банке │ │
|
|||
|
|
│ └─────────────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ ┌─────────────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ Signing Service │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ • Apple Developer Enterprise Program ($299/год) │ │
|
|||
|
|
│ │ • Подписание IPA под конкретный UDID │ │
|
|||
|
|
│ │ • Автоматизация через Apple API │ │
|
|||
|
|
│ └─────────────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
│ ┌─────────────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ Distribution │ │
|
|||
|
|
│ │ │ │
|
|||
|
|
│ │ • itms-services:// manifest для установки │ │
|
|||
|
|
│ │ • Push-уведомление "Ваше приложение готово" │ │
|
|||
|
|
│ │ • Ссылка в личном кабинете / на почту │ │
|
|||
|
|
│ └─────────────────────────────────────────────────────────┘ │
|
|||
|
|
│ │
|
|||
|
|
└─────────────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Процесс для клиента (как на LazyShop, но от банка)
|
|||
|
|
|
|||
|
|
### Шаг 1: Вход
|
|||
|
|
```
|
|||
|
|
Клиент заходит на tbank.ru/ios через Safari на iPhone
|
|||
|
|
→ Сайт автоматически определяет устройство
|
|||
|
|
→ Кнопка "Установить приложения ТБанк"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Шаг 2: Профиль
|
|||
|
|
```
|
|||
|
|
Клиент нажимает кнопку
|
|||
|
|
→ Safari предлагает скачать профиль (.mobileconfig)
|
|||
|
|
→ Клиент переходит в Настройки → Основные → VPN и управление устройством
|
|||
|
|
→ Видит "Профиль ТБанк" → Нажимает "Установить"
|
|||
|
|
→ Подтверждает паролем устройства
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Шаг 3: Ожидание (~24 часа или быстрее)
|
|||
|
|
```
|
|||
|
|
Профиль отправляет UDID на сервер ТБанк
|
|||
|
|
→ Сервер регистрирует устройство в Apple Developer Portal
|
|||
|
|
→ Apple выпускает provisioning profile для этого UDID
|
|||
|
|
→ ~24 часа (или быстрее при автоматизации)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Шаг 4: Установка
|
|||
|
|
```
|
|||
|
|
Клиент получает push/SMS/email: "Приложения готовы"
|
|||
|
|
→ Заходит на tbank.ru/ios
|
|||
|
|
→ Нажимает "Скачать ТБанк" / "Скачать Т-Мобайл" / ...
|
|||
|
|
→ iOS устанавливает приложение
|
|||
|
|
→ Готово
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Если сертификат отозван Apple
|
|||
|
|
```
|
|||
|
|
Приложение перестаёт открываться
|
|||
|
|
→ Клиент заходит на tbank.ru/ios
|
|||
|
|
→ Повторяет процедуру (новый профиль → новый сертификат)
|
|||
|
|
→ Скачивает приложения заново
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Это минус**, но Apple не может закрыть сам механизм — это их инфраструктура.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Масштабирование на все приложения
|
|||
|
|
|
|||
|
|
| Приложение | Bundle ID | Отдельный сертификат |
|
|||
|
|
|------------|-----------|---------------------|
|
|||
|
|
| ТБанк | ru.tbank.app | Да |
|
|||
|
|
| Т-Мобайл | ru.tbank.mobile | Да |
|
|||
|
|
| Т-Страхование | ru.tbank.insurance | Да |
|
|||
|
|
| Т-Бизнес | ru.tbank.business | Да |
|
|||
|
|
| Т-Инвестиции | ru.tbank.invest | Да |
|
|||
|
|
| ... | ... | Да |
|
|||
|
|
|
|||
|
|
**Каждое приложение** = отдельный сертификат на устройстве клиента.
|
|||
|
|
|
|||
|
|
**Преимущество:** Отзыв одного сертификата не влияет на другие приложения.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Безопасность
|
|||
|
|
|
|||
|
|
### Защита от компрометации
|
|||
|
|
```
|
|||
|
|
1. Certificate Pinning — приложение проверяет свой сертификат
|
|||
|
|
2. HSM — приватные ключи в аппаратном модуле
|
|||
|
|
3. Audit Log — все операции с сертификатами логируются
|
|||
|
|
4. Revocation — мгновенный отзыв при подозрении
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Согласие клиента (GDPR/152-ФЗ)
|
|||
|
|
```
|
|||
|
|
- Явное согласие перед регистрацией устройства
|
|||
|
|
- Право отзыва в любой момент
|
|||
|
|
- Данные UDID хранятся зашифрованно
|
|||
|
|
- Привязка к уже верифицированному клиенту банка
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Стоимость для ТБанк
|
|||
|
|
|
|||
|
|
| Компонент | Стоимость |
|
|||
|
|
|-----------|-----------|
|
|||
|
|
| Apple Developer Enterprise Program | $299/год |
|
|||
|
|
| Разработка Profile Server + Signing | Внутренняя команда или ~$30-50k |
|
|||
|
|
| Инфраструктура | Уже есть у ТБанк |
|
|||
|
|
| Поддержка | Внутренняя команда |
|
|||
|
|
|
|||
|
|
**Итого:** Минимальные затраты. Основная работа — разработка автоматизации.
|
|||
|
|
|
|||
|
|
**LazyShop берёт с пользователей деньги.** ТБанк делает бесплатно для своих клиентов → конкурентное преимущество.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Альтернатива: Android (APK)
|
|||
|
|
|
|||
|
|
Для Android проще:
|
|||
|
|
```
|
|||
|
|
1. APK подписывается ключом ТБанк
|
|||
|
|
2. Раздаётся с сайта tbank.ru/android
|
|||
|
|
3. Клиент разрешает "Установка из неизвестных источников"
|
|||
|
|
4. Готово
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Но риски:**
|
|||
|
|
- Фишинговые сайты с поддельными APK
|
|||
|
|
- Клиенты привыкают устанавливать "откуда угодно"
|
|||
|
|
|
|||
|
|
**Решение:** QR-код в отделении / в веб-банке с TOTP-верификацией
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Интеграция с Montana Protocol (опционально)
|
|||
|
|
|
|||
|
|
Montana Protocol добавляет:
|
|||
|
|
1. **Постквантовые подписи ML-DSA-65** — защита от квантовых компьютеров
|
|||
|
|
2. **Доказательство присутствия** — клиент доказывает владение устройством
|
|||
|
|
3. **Временные метки** — неизменяемый лог всех операций
|
|||
|
|
|
|||
|
|
Это можно интегрировать позже или отдельно от Lazy Tool.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Референс: LazyShop
|
|||
|
|
|
|||
|
|
**https://lazyshop.app** — уже работает, тысячи пользователей.
|
|||
|
|
|
|||
|
|
Посмотрите как они это делают:
|
|||
|
|
1. Зайдите с iPhone через Safari
|
|||
|
|
2. Пройдите процесс установки профиля
|
|||
|
|
3. Увидите как это работает изнутри
|
|||
|
|
|
|||
|
|
ТБанк может сделать то же самое, но:
|
|||
|
|
- Бесплатно для клиентов
|
|||
|
|
- Под своим брендом
|
|||
|
|
- С интеграцией в существующую инфраструктуру
|
|||
|
|
- Для всех приложений холдинга
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Готовность
|
|||
|
|
|
|||
|
|
Я сейчас разрабатываю iOS-приложение Montana с этим механизмом.
|
|||
|
|
|
|||
|
|
Могу:
|
|||
|
|
1. Показать как работает профиль + сертификат
|
|||
|
|
2. Поделиться архитектурой
|
|||
|
|
3. Помочь адаптировать под масштаб ТБанк
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Следующий шаг
|
|||
|
|
|
|||
|
|
30-минутный звонок:
|
|||
|
|
1. Демо механизма
|
|||
|
|
2. Ответы на технические вопросы
|
|||
|
|
3. Обсуждение интеграции
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
*Alejandro Montana*
|
|||
|
|
*24.01.2026*
|