Политика подписи кода
Это перевод 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 и в комплект не входит.