Dota 2 Mod Manager

Политика подписи кода

Это перевод code-signing-policy.md. Английский текст правится первым, поэтому если они в чём-то разошлись, верен он.

Что подписано, кем, и что может проверить сам тот, кто скачивает программу.

Установщик для Windows

Сейчас у установщика нет подписи Authenticode, и Windows SmartScreen предупреждает о нём при первом запуске. Сертификат стоит денег, а проект их не получает. Проект подал заявку в SignPath Foundation, которая бесплатно подписывает программы с открытым кодом. Когда сертификат будет выдан, установщик и portable-сборка будут подписываться через SignPath, а на этой странице появится строка, которую просит эта программа: «Free code signing provided by SignPath.io, certificate by SignPath Foundation».

На подпись уходят только файлы, которые собирает из своего кода релизный workflow этого репозитория. Ничего собранного на чьём-то компьютере и ничего написанного кем-то другим под именем проекта не подписывается.

Роли в команде

Роль Кто Что делает
Авторы изменений @TheFleece, @Nersaa Пишут изменения. В main изменение попадает только через pull request, в том числе от самих мейнтейнеров
Ревьюеры @TheFleece, @Nersaa Одобряют pull request. Одобрение автора не считается, а новый пуш снимает одобрение, данное до него. Изменение со стороны проверяет мейнтейнер
Утверждающие @TheFleece, @Nersaa Ставят тег релиза на коммит main, а когда подпись заработает, утверждают каждый запрос на подпись

Оба владеют организацией dota2modmanager, и она требует двухфакторную аутентификацию от каждого участника. Оба включили её на всех сервисах, через которые можно что-то опубликовать. Кто что решает, написано в GOVERNANCE.md.

Как собирается релиз

Релизы собирает только GitHub Actions, из тега на коммите main, и никогда не на чьём-то компьютере. Коммит должен пройти все проверки из .github/required-checks.json, тот же список, который нужен pull request для слияния. Релиз открывается черновиком, который никто вне проекта не видит. Установщик и AppImage из него CI устанавливает на Windows и Linux и ставит ими мод, и только потом релиз публикуется, а опубликованный релиз изменить уже нельзя. Вся процедура описана в RELEASING.md.

Что подписано уже сейчас

Каждый опубликованный файл, самой сборкой. В каждом релизе есть SHA256SUMS, SHA-256 каждого файла, и подписанное через Sigstore свидетельство о происхождении этого списка, которое делает релизный workflow на коммите из тега. Закрытого ключа нет ни у кого на компьютере: Sigstore выдаёт workflow короткоживущий сертификат и записывает подпись в публичный журнал прозрачности.

gh attestation verify Dota-2-Mod-Manager-Setup.exe --repo dota2modmanager/dota2-mod-manager

Каталог, который читает приложение, его автором. Данные модов подписаны ed25519 ключом самого автора каталога, а открытый ключ зашит в приложение. Архив сверяется с SHA-256 из этого подписанного списка до того, как попадёт в папку игры.

Файл, которым можно изменить приложение после релиза, этим проектом. config/app.json выключает функцию, показывает уведомление, перечисляет бета-тестеров и может добавить зеркало для загрузок. Он подписан ed25519 ключом, который хранит @TheFleece, а открытый ключ зашит в приложение. Копия, которая не прошла проверку, игнорируется так же, как недоступная.

Приватность

Программа не отправляет никаких сведений о тебе, твоём компьютере или твоих играх. Телеметрии и аккаунта нет. Она обращается к каталогу модов и к ленте обновлений; каждый адрес, к которому она может обратиться, зачем и когда, перечислен в PRIVACY.ru.md.

Что программа делает на компьютере

Она пишет в два места: в свою папку данных и в папку Dota 2, где добавляет архивы модов в языковую папку, которую монтирует игра, может записать отдельные шрифты и курсоры и может пропатчить один текстовый файл. Всё, что она заменяет, сначала копируется и при удалении возвращается байт в байт. Перед первым изменением папки игры она спрашивает, а деинсталлятор спрашивает, что удалить вместе с ней.

Никакого стороннего софта в комплекте нет. Что программа обещает и чего обещать отказывается, написано в SECURITY.md; доводы за эти обещания собраны в docs/assurance-case.md.

Сторонние компоненты

Приложение поставляется с двумя зависимостями из npm, React, собранным в его окно, и тремя шрифтами, все они с лицензиями перечислены в NOTICE, а рядом с установщиком публикуется SBOM в формате CycloneDX с составом каждого релиза. Один внешний инструмент, Source2Viewer-CLI (MIT), скачивается только когда он нужен функции, закреплён по версии и SHA-256 и в комплект не входит.