Что такое подписание кода?
Подпись кода — это процесс цифровой подписи исполняемых файлов и скриптов с помощью средства подписи и цифрового сертификата. Этот процесс основан на технологии, которая называется инфраструктурой открытых ключей (PKI).
Для подписания кода требуется специальное средство подписи, например SignTool от Microsoft, Jarsigner от Java или даже OpenSSL, в зависимости от типа подписываемого файла. Само подписание является криптографической операцией, которая связывает содержимое файла с цифровым сертификатом.
Подпись кода защищает вашу компанию, партнеров и конечных пользователей от подделки программного обеспечения при загрузке исполняемых программных файлов, особенно из незащищенных каналов, например из Интернета. Как поставщик решений для подписи кода компания Entrust помогает внедрять эффективные и высоконадежные системы, которые защищают ваш бизнес и клиентов от атак, направленных на подделку или модификацию приложений.
Какова цель цифровой подписи кода?
Существует две основные цели цифровой подписи кода:
- Предоставить пользователям идентификационные данные организации, публикующей подписанный файл.
- Дать возможность проверить целостность файла и убедиться в том, что он не был поврежден или злонамеренно изменен с момента его подписи.
Что такое сертификаты подписи кода?
Сертификаты подписи кода используются разработчиками программного обеспечения для цифровой подписи приложений, драйверов, исполняемых файлов и программ. Таким образом, конечные пользователи могут быть уверены в том, что код не был скомпрометирован или взломан третьей стороной. Для связывания открытого ключа с пользователем (владельцем закрытого ключа) в инфраструктурах открытых ключей (PKI) используются цифровые сертификаты.
Лучшие методы подписания кода
Ниже перечислены передовые методы работы с сертификатами подписи кода.
- Контроль доступа к закрытым ключам.
- Защита закрытых ключей с помощью аппаратного модуля безопасности (HSM) FIPS-140-2 уровня 3.
- Код метки времени.
- Понимание разницы между подписью при испытании и подписью при выпуске.
- Аутентификация подписываемого кода.
- Распределение рисков среди нескольких сертификатов.
- Отзыв скомпрометированных сертификатов.
Entrust предлагает полный спектр сертификатов подписи кода и комплексный метод управления ими, включая сертификаты TLS/SSL, защищенные сертификаты электронной почты, сертификаты подписи документов и сертификаты для мобильных устройств.
Как работает подпись кода?
Чтобы реализовать подпись кода, издателю программного обеспечения необходимо сгенерировать пару из закрытого и открытого ключей и передать открытый ключ в центр сертификации вместе с запросом на выдачу сертификата подписи кода. Центр сертификации проверяет личность издателя программного обеспечения и подтверждает подлинность запроса издателя на сертификат с цифровой подписью. После успешного завершения контроля и проверки ключей центр сертификации связывает идентификатор издателя с открытым ключом и подписывает пакет. Так создается сертификат подписи кода.
Узнайте подробнее о внедрении Code Signing в этой технической документации.
Способы цифровой подписи
Различные платформы приложений поддерживают подпись кода и предоставляют различные инструменты для выполнения подписи. Ниже приведен список наиболее распространенных типов подписей кода.
- Adobe AIR.
- Библиотека разработчиков Apple Mac OS X.
- Firefox XPI.
- Java.
- Интеграция с Microsoft.
Шаги для конечных пользователей
Существует пять простых шагов, которые следует предпринять пользователям, чтобы определить, можно ли доверять программному обеспечению.
- Проверьте, планировали ли вы устанавливать программное обеспечение.
- Проверьте имя файла: в нем должно быть указано программное обеспечение, которое вы планируете установить. В предыдущем примере пользователь устанавливает Adobe Reader 10, что и указано в имени.
- Проверьте, совпадает ли имя издателя с именем того, кто, по вашему мнению, написал программу. Это может быть непросто, поскольку сайт загрузки программного обеспечения может отличаться от сайта издателя.
- Проверьте сертификат подписи кода, чтобы убедиться в том, что имя издателя указано в сертификате.
- Проверьте, был ли сертификат выдан общедоступным доверенным центром сертификации.
Особенности подписи кода
В сертификатах проверки организации (OV) указывается организация и местоположение. Они не поддерживают подпись в режиме ядра Windows. В сертификатах расширенной проверки (EV) помимо организации и местоположения указывается юрисдикция и тип организации. Сертификаты EV также облегчают подпись в режиме ядра Windows для Vista, Windows 7, Windows 8, Windows 8.1 и Windows 10. Выбор решения для сертификатов подписи кода, которое лучше всего подходит для нужд организации, является сложным, но в компании Entrust всегда готовы помочь.
Решения для подписи кода
Портфолио решений для подписи кода Entrust сочетает в себе устойчивые ко взлому аппаратные модули безопасности (HSM) nShield со шлюзом подписи кода от Entrust Professional Services. Шлюз подписи кода управляет рабочим процессом авторизации, принимает запросы, уведомляет утверждающих лиц по электронной почте, управляет превышением лимита времени, проверяет утверждения, регистрирует действия и доставляет подписанный код в область подготовленных файлов. В решении используются модули Entrust nShield HSM и корень доверия для защиты всех ключей подписи в модуле HSM, сертифицированном по стандартам FIPS 140-2. Это предотвращает потенциальную утерю ценных ключей подписи, от которых зависит подлинность и целостность кода. Таким образом, клиенты могут подписывать собственный программный код. Ниже перечислены доступные функции.
- Фильтр Microsoft Smartscreen.
- Интеграция со сторонними решениями.
- Неограниченное количество интеграций.
- Установка меток времени
- Статус идентифицированного издателя.
- Меньше предупреждений.
Решения для подписи кодов основаны на нашем обширном опыте и передовых методах подписи кода и стандартах безопасности.
Как подпись кода обеспечивает идентификацию организации, публикующей подписанный файл?
Цифровая подпись создает криптографическую связь между файлом и цифровым сертификатом, представляющим организацию. Сертификат можно считать оцифрованным штампом: он содержит сведения об организации, в том числе ее юридическое название, адрес электронной почты, физический адрес и страну. Таким образом, код подписи соответствует нанесению на код цифрового штампа, содержащий сведения об организации.
Сведения о подписи кода можно проверять каждый раз при открытии подписанного файла. В большинстве случаев это делается автоматически операционными системами: при этом отображается название организации, указанной в сертификате, который используется для подписи.
Как подпись кода служит для проверки целостности файла?
Каждая подпись кода создается на основе содержимого файла. Если не вдаваться в технические подробности, процесс выглядит так: инструмент подписи вычисляет сжатую версию подписываемого файла (мы называем ее хешем) и подписывает эту сжатую версию, используя предоставленный цифровой сертификат. Этот подписанный хеш затем встраивается в файл в месте, предназначенном для размещения цифровых подписей.
Как только вы начнете распространять подписанный файл, операционные системы и соответствующие приложения будут обнаруживать наличие подписи. Они автоматически вычисляют хеш файла (не включая в вычисление подписанный хеш) и сравнивают его с подписанным хешем, который встроен в файл. Если они одинаковые, проверка проходит успешно. Если рассчитанный хеш отличается от подписанного, проверка завершается неудачей. Сбой проверки означает, что содержимое файла было изменено после добавления подписи (в результате ошибки или злонамеренного действия).
Надежность этого механизма зависит от надежности алгоритма, используемого для расчета хеша: чем длиннее хеш, тем лучше. Одним из используемых в настоящее время стандартов является SHA-256 — алгоритм, который производит 256-битные хеши.
В чем преимущества подписи кода?
Цифровая подпись кода обеспечивает несколько преимуществ.
- Вы повышаете степень доверия пользователей к вашему программному обеспечению. Подписанный код доказывает, что файл не только принадлежит соответствующей организации, но и гарантирует, что он не был подделан (например, для внедрения вредоносных программ).
- Вы укрепляете свою репутацию разработчика программного обеспечения. Чем больше подписанного программного обеспечения вы публикуете, тем лучше будет ваша репутация. Например, компания Microsoft подписывает свое программное обеспечение, чтобы гарантировать, что клиенты скачивают нужные файлы. Подписанное программное обеспечение также помогает антивирусам и системам обнаружения вредоносных программ. Если вы подпишете свое программное обеспечение, они смогут выявить подозрительные, неподписанные версии программ.
- Вы избегаете предупреждений и блокировок от операционных систем. В них действительно предусмотрено требование, согласно которому все издатели программного обеспечения должны подписывать исполняемые файлы. Если вы публикуете неподписанное программное обеспечение и ваши пользователи его запускают, высока вероятность того, что они увидят предупреждение от операционной системы. Система MacOS известна тем, что отказывается запускать неподписанные файлы, заставляя пользователя продолжать установку в обход средств защиты.
Предупреждающее сообщение об установке неподписанного программного обеспечения на Microsoft Windows 10.
Сообщение о блокировке установки неподписанного программного обеспечения на MacOS.
Для устройств IoT, в которых используется прошивка, один из лучших способов обеспечить безопасность обновлений — при создании прошивки установить требование принимать только те обновляемые файлы, которые подписываются с использованием внутренних (частных) сертификатов подписи кода.
В чем разница между публичной подписью кода и частной подписью кода?
Сертификаты подписи кода выдаются центрами сертификации (ЦС), которые являются системами выдачи сертификатов. Большинство организаций владеют одним или несколькими «частными» (внутренними) ЦС и могут выдавать различного рода цифровые сертификаты, включая сертификаты подписи кода. Однако подписи, созданные с помощью этих сертификатов, являются доверенными только во внутренней среде организации.
Хотя это идеально подходит при работе с внутренними приложениями и интернетом вещей, использование частного ЦС неприемлемо, когда вы планируете распространять код вне этой среды, т. е. там, где ваш ЦС не распознается.
Сертификаты подписи кода, выданные доверенными ЦС, например центрами Entrust, генерируют подписи, которые будут распознаваться и считаться надежными всеми основными операционными системами и приложениями по всему миру. Организации — публичные ЦС (также называемые просто публичными ЦС), такие как Entrust, следуют строгим стандартам выдачи сертификатов, должны проходить регулярные аудиты и подать заявку для того, чтобы считаться доверенными каждой крупной операционной системой или поставщиком приложений, таким как Microsoft, Apple, Google или Mozilla.
При обработке подписанного кода операционные системы и приложения проверяют ЦС, который выдал используемый для подписи сертификат. Если ЦС, выдавший сертификат, не находится в «списке доверия» (также называемом корневым хранилищем) системы или приложения, подпись не будет считаться доверенной и проверка завершится ошибкой. Именно поэтому при публикации программного обеспечения в Интернете важно получать публично доверенные сертификаты подписи кода.
В чем разница между подписью кода OV и подписью кода EV?
Организации могут свободно указывать в своих частных сертификатах подписи кода любые сведения, однако публичные сертификаты должны содержать только информацию, которая была тщательно проверена публичным ЦС до выдачи сертификата.
Публичный ЦС может выдавать публично доверенные сертификаты подписи кода двух категорий: OV и EV. Эти категории соответствуют уровню проверки вашей организации, которую проводит публичный ЦС до выдачи сертификата, а также требованию к хранению сертификата (в частности, его закрытого ключа).
- OV (проверка организации). Это стандартный метод проверки организации, которую проводят центры сертификации. Она включает в себя проверку компании (существует ли компания, обладает ли она надлежащим правовым статусом, где находится) и проверку лица, запрашивающего сертификат от имени организации (действительно ли лицо является ее сотрудником).
- EV (расширенная проверка). Как следует из названия, это расширенный процесс проверки, который требует дальнейшего подтверждения сведений об организации, а также о лице, запрашивающем сертификат. ЦС потребует больше информации и документов и перед выдачей сертификата совершит один или несколько звонков в организацию и запрашивающему лицу. Безопасное хранение является обязательным для сертификатов подписи кода EV: это означает, что для хранения сертификата и его закрытого ключа потребуется либо защищенный USB-токен, либо аппаратный модуль безопасности (HSM).
Entrust может предоставлять USB-токены или модули nShield HSM для всех заказов на подпись кода, независимо от того, являются ли они сертификатами OV или EV.
Как работает добавление меток времени с сертификатом подписи кода?
В контексте подписи кода добавление меток времени — это процесс добавления в подпись кода цифровых меток времени, содержащих точную дату и время.
Метки времени являются критически важным элементом подписи кода, о котором тем не менее часто забывают. Подписи действительно имеют дату истечения срока действия, которая соответствует дате истечения срока действия используемого сертификата подписи кода. При запуске подписанного кода проверка подписи с истекшим сроком действия завершится ошибкой, что приведет к отображению предупреждающих сообщений и даже к невозможности запускать код.
При необходимости частные сертификаты могут иметь очень продолжительный срок действия (более 10 лет), чего часто бывает достаточно, поскольку подписанный код может больше не использоваться после такого длительного периода. Но публичные сертификаты подписи кода в настоящее время действительны максимум три года, и к концу этого периода ваш код, скорее всего, все еще будет доступен. При добавлении в подпись кода метки времени срок его действия продлится еще на 9–10 лет (в зависимости от срока действия используемого сертификата метки времени). И когда срок действия текущей метки времени будет подходить к концу, можно будет добавить новую, чтобы дополнительно продлить срок действия подписи кода и избежать каких-либо предупреждений и блокировок.
Метки времени также удобны в том случае, если вам нужно отозвать сертификат подписи кода, если он был скомпрометирован. Для отзыва сертификата можно задать дату и время, когда, по вашему мнению, сертификат был скомпрометирован. Если метки времени были добавлены ко всем подписям, то действительными останутся только те, которые были созданы до даты отзыва. Любая подпись кода без метки времени становится недействительной по истечении срока действия сертификата или в случае его отзыва.
Метки времени можно добавлять с помощью частных сертификатов меток времени от внутреннего ЦС. Но для кода, который подлежит распространению за пределами организации, необходимо использовать общедоступную службу меток времени, которая будет распознаваться и считаться доверенной всеми основными операционными системами и приложениями. Большинство, если не все общедоступные ЦС, включая Entrust, предлагают публичную службу меток времени, доступную по выделенному URL-адресу.