Перейти к содержимому

Глоссарий

Подпись кода

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

Подпись кода это подпись на программе, которая называет издателя и показывает, что байты файла не менялись.

Что говорит подпись

Подпись связывает файл с сертификатом, а сертификат называет того, кто получил его в удостоверяющем центре, которому система уже доверяет. Изменится хоть один байт, и подпись перестанет сходиться.

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

Как файл получает подпись

Порядок здесь важнее средств, и на каждой системе с собственными воротами он один и тот же.

Каждый шаг оставляет то, что машина потом проверит сама, ни у кого не спрашивая, и поэтому проверка работает даже с выдернутой сетью.

  1. 1

    Издатель получает сертификат

    Удостоверяющий центр проверяет компанию или человека и выдаёт сертификат, связанный с закрытым ключом.

  2. 2

    Ключ лежит в железе

    Ключи публично доверенной подписи с 2023 года живут на аппаратных носителях или внутри службы подписи.

  3. 3

    Файл подписывают и ставят метку времени

    Метка времени от доверенного источника оставляет подпись проверяемой и после того, как сертификат кончился.

  4. 4

    Система проверяет это при запуске

    Она проходит цепочку доверия, а потом сверяет записанные свёртки с тем файлом, который перед ней.

Что видно при первом запуске

Ворота у каждой системы свои, и работа, которую они перекладывают на открывающего файл, тоже везде разная.

Слова в окне переезжают от одного выпуска системы к другому, а устройство ответа остаётся на месте.

СистемаПодписано и знакомоБез подписи
macOSОткрывается после проверки скачанногоОтказ, а дальше руками разрешить в разделе про безопасность
WindowsИмя издателя прямо в окне вопросаСиний экран про репутацию, а кнопка спрятана за строкой подробнее
LinuxПакеты из хранилища проверяет сам менеджер пакетовУ скачанного образа или архива таких ворот нет вовсе

Какие ворота встретит эта машина

Эти две строки прочитаны в вашем браузере прямо здесь и называют систему под ним.

Ворота, которые встретят вас при первом запуске, принадлежат этой системе, а не скачанному файлу.

Ваша машина прямо сейчас

Платформа
измеряем на вашей машине
Строка браузера
измеряем на вашей машине

Прочитано в вашем браузере и показано здесь. Никуда не отправляется.

Подписано не значит безопасно

Сертификаты крали у настоящих издателей и покупали, заведя фирму ради одной этой покупки. Подписанные зловреды это давний и устойчивый жанр.

Подпись покупает не безопасность, а возможность спросить с виноватого. Сертификат можно отозвать, и всё подписанное под ним разом перестаёт быть доверенным на любой машине.

Часто путают с этим

Три соседних понятия стоят к этому так близко, что слова в разговоре подменяют одно другим, и делают это обычно продавцы.

  • Шифрование

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

  • Свёртка на странице загрузки

    Свёртка доказывает, что файл совпал с той страницей. Подпись едет внутри файла и называет издателя, которого проверил центр.

  • Нотаризация

    Шаг, который Apple делает уже после подписи, и у него здесь есть своя отдельная страница.

Чего это не делает

  • Это не говорит, что программа безопасна. Подпись называет издателя и ничего не утверждает о том, что код делает во время работы.
  • Это не переживает правку. Один изменённый байт, и проверка не сходится: в этом весь смысл, и поэтому же изменённая копия чего угодно теряет подпись.
  • Это не держится само по себе. Сертификат кончается, и только метка времени, снятая в миг подписи, оставляет старые файлы проверяемыми.
  • Это не выглядит одинаково везде. Linux опирается на подпись целого хранилища, а не на подпись внутри каждого файла.

Проверить

Каждая строка здесь это команда, которую вы запустите у себя, на любой уже установленной программе.

Что macOS говорит про уже установленную программу
codesign --display --verbose=2 /Applications/<любая программа>
Что отвечают про неё сами ворота
spctl --assess --type execute --verbose /Applications/<любая программа>
Где видна пометка карантина на скачанном файле
xattr -l ~/Downloads/<скачанный файл>
Тот же вопрос в Windows
Get-AuthenticodeSignature <файл> | Format-List

Вопросы

Подписанную программу можно запускать спокойно?
Её можно проследить, а спокойствие это другое. Подпись говорит, какого издателя проверил центр, и ничего не говорит о поведении кода.
Почему неподписанная программа иногда всё же открывается на Mac?
Ворота встречают файлы, пришедшие с пометкой карантина от браузера или почты. Файл, собранный на самой машине, такой пометки не получает.
Что такое Authenticode?
Так подпись кода устроена в Windows. Подпись лежит внутри исполняемого файла, и имя издателя в окне вопроса читается из неё.
Подпись стоит денег?
Да, и заметных денег. Сертификат покупают в удостоверяющем центре и продлевают по сроку, а закрытый ключ держат в железе или в службе подписи.
Подпись можно забрать обратно?
Можно, и это делается не так уж редко. Центр отзывает сертификат, и системы перестают доверять подписанному под ним, включая файлы, которые уже лежат у людей на диске.

Шаг macOS, который идёт следом

Apple смотрит на подписанную сборку прежде, чем машина, впервые её увидевшая, откроет её без вопросов.