# RDP FIDO для Android — пребета 0.9.0

**Открытое пребета-тестирование перед публикацией в Google Play.**
Приложение бесплатно, работает с любым шлюзом RDP-FIDO-GATE 1.15 и новее
(Windows или Linux, редакции Free достаточно). Присоединиться может каждый —
ниже написано, что нужно, как установить и что нам прислать.

English: [README.en.md](README.en.md)

| Файл | Что это |
|---|---|
| `RdpFido-0.9.0-prebeta.apk` | приложение, подписано ключом разработчика Imobile |
| `SHA256SUMS` | контрольные суммы |

Отпечаток SHA-256 сертификата подписи APK:
`BF:FD:EA:D2:45:2E:D2:BD:1A:AD:02:E6:9A:0A:F9:5B:2C:A1:58:85:5A:AE:4F:CB:62:55:CA:0E:48:C2:60:BA`

## Что это

Тот же ключ, тот же шлюз — теперь с телефона. Приложение подключается к
Windows- и Linux-машинам, защищённым шлюзом RDP-FIDO-GATE: порт по-прежнему
закрыт для всех, пока вы не подтвердите вход ключом FIDO2, — только теперь
ключом может быть сам телефон. На хосте ничего менять не нужно: шлюз
принимает телефон как обычный клиент.

**Три способа подтвердить вход**

- **Телефон как ключ.** Ключ P-256 создаётся в защищённом хранилище телефона
  (StrongBox или TEE) и подписывает только после отпечатка или блокировки
  экрана. Для шлюза это тот же аппаратный ключ, что Windows Hello: закрытый
  ключ не покидает чип, счётчик подписей растёт при каждом входе.
- **Ключ безопасности по NFC.** YubiKey или любой ключ FIDO2 — приложите к
  задней крышке телефона. PIN ключа спрашивается, только если шлюз требует
  подтверждение пользователя.
- **Ключ безопасности по USB** через OTG-переходник — для телефонов без NFC.

**FIDO Stream — для игр.** Тот же протокол с низкой задержкой, что у
настольного клиента: UDP с AES-256-GCM, коррекция потерь Рида–Соломона,
H.264, HEVC или AV1 прямо в аппаратный декодер телефона, панели 90 и 120 Гц,
звук в обе стороны. Управление: физические геймпады по Bluetooth и USB
(на хосте видны как Xbox 360, вибрация возвращается), экранный геймпад с
перетаскиваемой раскладкой, мышь по Bluetooth с захватом указателя, тачпад,
прямое касание, клавиатура и панель быстрых клавиш, Ctrl+Alt+Del на хост.

**RDP — для работы.** Касание ключа открывает порт RDP на 90 секунд, и
приложение передаёт подключение установленному RDP-клиенту (например,
Microsoft Remote Desktop) по ссылке `rdp://` — ровно так, как настольный
клиент запускает mstsc. Пароль сессии кладётся в буфер обмена. Хосты Windows
и Linux с xrdp поддерживаются одинаково.

## Что нужно

- Android 9 или новее. Для «телефона как ключа» — отпечаток или блокировка
  экрана; для ключа по NFC — модуль NFC; для USB-ключа — OTG.
- Хост с RDP-FIDO-GATE 1.15 или новее — Windows или Linux
  (пакеты: https://new-imobile.com/download/rdp-fido-gate/linux/README.ru.md ,
  установщик Windows: https://accounts.new-imobile.com/updates/RdpFido-Setup.exe).
- Для FIDO Stream из интернета — проброс 7440/TCP и 7441/UDP на роутере
  хоста, как и для настольного клиента. Для RDP — 7440/TCP и 3389/TCP.
- Для режима RDP — любой RDP-клиент на телефоне, зарегистрировавший схему
  `rdp://` (Microsoft Remote Desktop подходит).

## Установка

1. Скачайте `RdpFido-0.9.0-prebeta.apk` и откройте его. Android спросит
   разрешение на установку из этого источника (браузера или файлового
   менеджера) — разрешите. Google Play Protect может предупредить о
   приложении не из магазина — это ожидаемо для пребеты.
2. При желании сверьте контрольную сумму с `SHA256SUMS`.
3. Откройте приложение. Данных оно никуда не отправляет, кроме вашего шлюза.

## Первый запуск

1. На целевой машине получите одноразовый код регистрации ключа:
   `RdpFidoGate.exe code` (Windows, от администратора) или
   `sudo rdpfido-gate code` (Linux). Код действует 15 минут.
2. В приложении: «+» → адрес машины (для шлюза в другой сети — публичный
   адрес или DDNS), имя пользователя → протокол (FIDO Stream или RDP) →
   «Зарегистрировать ключ» → выберите ключ (телефон / NFC / USB) → введите
   код. Сертификат шлюза запоминается по отпечатку при первом обращении.
3. Нажмите на плитку → выберите ключ → подтвердите отпечатком или касанием
   ключа. Для FIDO Stream откроется экран потока; для RDP запустится внешний
   RDP-клиент.

На экране потока тонкая полоска сверху открывает панель: клавиатура,
быстрые клавиши, режимы управления (тачпад / касание / геймпад), правка
раскладки геймпада, статистика, Ctrl+Alt+Del, запрос ключевого кадра,
отключение. С физической клавиатуры — те же сочетания, что в настольном
вьювере: Ctrl+Alt+Shift+Q отключиться, Ctrl+Alt+Shift+Z захват мыши,
Ctrl+Alt+Shift+D Ctrl+Alt+Del, Ctrl+Alt+Shift+M панель, Ctrl+Alt+Shift+O
статистика.

## Как участвовать в тестировании

Пока приложение проверено на одном телефоне (Mi Max 3, Snapdragon 636,
Android 10) со шлюзом на Linux и Windows. Нам нужны другие устройства и
сценарии. Особенно ценно:

- телефоны и планшеты на **других чипах** (Exynos, MediaTek, Tensor, новые
  Snapdragon) и **других версиях Android** (11–16);
- экраны **90 и 120 Гц**, декодеры **HEVC и AV1**;
- **ключи по NFC и USB** (YubiKey, Feitian, Рутокен MFA и другие FIDO2);
- **физические геймпады** (Xbox, DualShock/DualSense, 8BitDo), Bluetooth-мышь
  и клавиатура;
- подключение **через мобильный интернет** и из-за NAT, через реле;
- режим **RDP** с разными RDP-клиентами на телефоне;
- хосты **Windows** (NVENC, Quick Sync, AMF) и **Linux** (xrdp, стрим).

Что прислать: модель телефона и версию Android, версию шлюза и ОС хоста,
что работало, что нет, и **журнал из приложения** — экран «Журнал»
(кнопка в списке сессий) → «Поделиться»: в текст автоматически добавляются
версия приложения и модель телефона. Куда:

- форма обратной связи на сайте: https://new-imobile.com/contact
- почта: support@new-imobile.com

Хотите попасть в **закрытое тестирование в Google Play**, когда оно
откроется, — укажите в письме адрес своего Google-аккаунта.

## Что важно знать про пребету

- **Подпись.** Пребета подписана нашим ключом разработчика. Сборка из
  Google Play будет подписана иначе, поэтому перед её установкой пребету
  придётся удалить (ключ и сессии — зарегистрировать заново).
- **Ключ в телефоне** привязан к приложению и к устройству: при удалении
  приложения или переносе на другой телефон ключ пропадает; на шлюзе его
  можно удалить командой `RdpFidoGate.exe keys` / `rdpfido-gate remove-key`.
- **Приложение бесплатно** и не требует активации; лицензия Free/Pro
  относится только к шлюзу.

## Известные ограничения 0.9.0

- RDP-транспорт не встроен: используется внешний RDP-клиент, как mstsc у
  настольного клиента. Если RDP-клиента на телефоне нет, приложение
  сообщит об этом и назовёт адрес и порт — грант всё равно открыт.
- Opus через MediaCodec на проверенном телефоне отвергает пакеты, поэтому по
  умолчанию выключен — хост шлёт ADPCM. Микрофон передаётся в ADPCM.
- Реле и сложные NAT-сценарии реализованы по протоколу, но проверены только
  логически — это одна из главных целей пребеты.
- Старые аппаратные декодеры (OMX на Android 10) отдают кадр с задержкой
  около двух кадров.
- Совместный доступ к сеансу FIDO Stream (1.22) и передача файлов в
  Android-клиенте ещё не реализованы.

## Что дальше

По итогам пребеты — исправления, затем закрытое тестирование в Google Play и
публикация в магазине. Что нового в шлюзе и настольном клиенте — в
https://new-imobile.com/download/rdp-fido-gate/CHANGELOG.ru.md .
