Это сильно зависит от операционной системы, поэтому нет никакого общего ответа.
В Arch Linux пакеты подписываются с использованием PGP - не первоначальным автором (который предоставляет только исходный код), а упаковщиком (который компилирует исходный код в программу и создает подписанный пакет).
Подписи хранятся в базе данных пакета вместе с остальной информацией о пакете. (Для сторонних пакетов - когда вы загружаете только файл .pkg.tar.xz
- подпись будет во втором файле .pkg.tar.xz.sig
.) Сама база данных может быть подписана, но обычно это не так.
pacman
в Arch Linux проверяет подписи против ключей в /etc/pacman/gnupg.d
(управляется с помощью pacman-key
); если у вас еще нет ключа подписавшего, он попросит загрузить ключ с сервера ключей. Не существует центральных "центров сертификации" - PGP использует алгоритм Web of Trust, и действительность чьего-либо ключа зависит от того, какие другие люди подписали этот ключ. (Например, все официальные ключи разработчиков подписаны пятью «мастер-ключами», а мастер-ключи помечены как "доверенные", поэтому всем ключам разработчиков также доверяет менеджер пакетов. Эти ключи поставляются по умолчанию во всех системах Arch, в archlinux-keyring
.)
В PGP, поскольку нет ЦС, ключ может быть отозван только его владельцем. Чтобы узнать о новых подписях или аннулировании, вы должны периодически обновлять кэшированные ключи с сервера ключей; gpg --refresh-keys
делает это для вашего собственного набора ключей , в то время как pacman-key --refresh-keys
обновляет набор ключей, используемый для проверки пакетов.
В Ubuntu также используется PGP, но несколько иначе. Сами пакеты почти никогда не подписываются, они проверяются только по хэш-суммам в базе данных пакетов, которая подписывается автоматическим процессом (используя ключ с именем "Ключ автоматической подписи архива Debian" или "Launchpad PPA for John Smith" или аналогичный),
Сигнатуры также проверяются с использованием локального набора ключей (/etc/apt/trusted.gpg
, поддерживается с помощью apt-key
), но в отличие от Arch менеджер пакетов Ubuntu игнорирует подписи ключей и доверяет всем ключам в этом наборе ключей, поэтому он никогда не загружает ключи автоматически, и никогда не нужно обновлять их. Официальные ключи предустановлены в различных пакетах foo-keyring
(debian-keyring
и аналогичных), и если один из этих ключей отозван, обновленный пакет удаляет его.
В Windows программы могут быть подписаны с использованием "Authenticode", который в основном X.509 используется для подписи кода. Подпись, а также собственный сертификат подписывающего лица встроены в файл .exe
программы. (Сертификат должен быть прикреплен, потому что, в отличие от PGP, X.509 не имеет серверов ключей, несмотря на первоначальные планы X.500.) В отличие от Linux, большинство программ Windows распространяются в скомпилированном виде их авторами, поэтому файл .exe подписывается автором напрямую.
Сертификат издателя сверяется с локальной базой данных доверенных центров сертификации. В Windows вы можете увидеть это в certmgr.msc
- включенные сертификаты определяются Microsoft в соответствии с запросами от CA. (Примечание. Предположительно, Windows 7 может при необходимости загружать необходимые сертификаты CA, поэтому список в диспетчере сертификатов может быть неполным.)
При проверке подписи Windows свяжется с сервером OCSP эмитента, чтобы проверить, был ли сертификат еще не отозван. (Адрес сервера OCSP обычно является частью сертификата издателя.) Другими словами, аннулирования обрабатываются тем же CA, который выдал сертификат в первую очередь. (Примечание: я не уверен, включена ли проверка OCSP по умолчанию. Есть возможность включить / отключить его в Панели управления → Интернет → Дополнительно → Безопасность.) В некоторых случаях Microsoft также помечает известные поддельные сертификаты как "ненадежные" и распространяет их так же, как и регулярные обновления списка CA. В certmgr.msc
вы можете увидеть несколько сертификатов, отозванных таким образом.
Некоторые браузеры (такие как Opera или Firefox) имеют свои собственные базы данных сертификатов CA. Те не используются Windows. Между тем, Internet Explorer и Google Chrome используют одну и ту же базу данных Windows.