Поделиться через


Подписывание Authenticode для разработчиков игр

Проверка подлинности данных становится все более важной для разработчиков игр. Windows Vista и Windows 7 имеют ряд функций, таких как родительский контроль, которые требуют правильной подписи игр, чтобы гарантировать, что никто не изменил данные. Microsoft Authenticode позволяет конечным пользователям и операционной системе убедиться, что код программы поступает от правильного владельца и что он не был злонамеренно изменен или случайно поврежден. В этой статье описывается, как приступить к проверке подлинности игры и как интегрировать проверку подлинности в ежедневный процесс сборки.

Примечание.

По состоянию на 1 января 2016 г. Windows 7 и более поздних версий не доверяет любому сертификату подписи кода SHA-1 с датой окончания срока действия 1 января 2016 г. или более поздней версии. Дополнительные сведения см. в статье о применении подписи кода Authenticode и метки времени.

Общие сведения

Цифровые сертификаты используются для установления удостоверения автора. Цифровые сертификаты выдаются доверенным сторонним поставщиком, известным как центр сертификации (ЦС), например VeriSign или Thawte. ЦС отвечает за проверку того, что владелец не утверждает ложное определение. После применения к ЦС для сертификата коммерческие разработчики могут ожидать ответа на свое приложение менее чем за две недели.

После принятия решения о том, что ЦС соответствует его критериям политики, он создает сертификат подписи кода, соответствующий X.509, формат сертификата отраслевых стандартов, созданный Международным телекоммуникационным союзом, с расширениями версии 3. Этот сертификат идентифицирует вас и содержит открытый ключ. Он хранится ЦС для справки, и копия предоставляется вам в электронном виде. В то же время вы также создаете закрытый ключ, который необходимо сохранить в безопасности и который вы не должны делиться с кем-либо, даже ЦС.

После того как у вас есть открытый и закрытый ключ, вы можете начать распространение подписанного программного обеспечения. Корпорация Майкрософт предоставляет средства для этого в пакете SDK для Windows. Средства используют односторонняя хэш-диаграмму, создают дайджест фиксированной длины и создают зашифрованную сигнатуру с закрытым ключом. Затем они объединяют зашифрованную подпись с сертификатом и учетными данными в структуру, известную как блок подписи, и внедряют ее в формат файла исполняемого файла. Любой тип исполняемого двоичного файла можно подписать, включая библиотеки DLL, исполняемые файлы и файлы шкафов.

Подпись может быть проверена несколькими способами. Программы могут вызывать функцию CertVerifyCertificateChainPolicy и SignTool (signtool.exe) можно использовать для проверки подписи из командной строки. В проводнике Windows также есть вкладка "Цифровые подписи" в свойствах файлов, в которых отображается каждый сертификат подписанного двоичного файла. (Вкладка "Цифровые подписи" отображается только в свойствах файла для подписанных файлов.) Кроме того, приложение может самостоятельно проверяться с помощью CertVerifyCertificateChainPolicy.

Подписывание Authenticode полезно не только для проверки подлинности данных конечными пользователями, но и для исправления ограниченных учетных записей пользователей и родительских элементов управления в Windows Vista и Windows 7. Кроме того, для будущих технологий в операционных системах Windows также может потребоваться подпись кода, поэтому настоятельно рекомендуется, чтобы все профессиональные и любительские разработчики приобрели сертификат подписи кода из ЦС. Дополнительные сведения о том, как это сделать, можно найти далее в этой статье в разделе "Использование доверенного центра сертификации".

Код игры, исправления и установщики могут дополнительно использовать подписывание Authenticode, проверяя подлинность файлов в коде. Это можно использовать для защиты от обмана и общей сетевой безопасности. Пример кода для проверки подписывания файла можно найти здесь: Пример программы C: проверка подписи PE-файла, а также пример кода для проверки владения сертификатом подписи в подписанном файле: How To Get Information from Authenticode Signed Исполняемые файлы.

Начало работы

Чтобы приступить к работе, корпорация Майкрософт предоставляет средства с Visual Studio 2005 и Visual Studio 2008, а также в пакете SDK для Windows, чтобы помочь выполнить и проверить процесс подписывания кода. После установки Visual Studio или пакета SDK для Windows средства, описанные в этой технической статье, находятся в подкаталоге установки, которая может включать одно или несколько следующих элементов:

  • %SystemDrive%\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin
  • %SystemDrive%\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Bin
  • %SystemDrive%\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\
  • %SystemDrive%\Program Files\Microsoft SDK\Windows\v6.0A\bin\

Следующие средства наиболее полезны для подписывания кода:

Средство создания сертификатов (MakeCert.exe)

Создает тестовый сертификат X.509 в виде файла .cer, который содержит открытый ключ и закрытый ключ в виде PVK-файла. Этот сертификат предназначен только для внутренних целей тестирования и не может использоваться публично.

pvk2pfx.exe

Создает файл Обмена персональными данными (PFX) из пары .cer и PVK-файлов. PFX-файл содержит открытый и закрытый ключ.

SignTool (SignTool.exe)

Подписывает файл с помощью PFX-файла. SignTool поддерживает подписывание файлов DLL, исполняемых файлов, файлов установщика Windows (.msi) и файлов кабинета (.cab).

Примечание.

При чтении другой документации вы можете найти ссылки на SignCode (SignCode.exe), но это средство устарело и больше не поддерживается — используйте SignTool.

 

Использование доверенного центра сертификации

Чтобы получить доверенный сертификат, необходимо применить к центру сертификации (ЦС), например VeriSign или Thawte. Корпорация Майкрософт не рекомендует использовать ЦС для другого, но если вы хотите интегрироваться в службу отчеты об ошибках Windows (WER), рекомендуется использовать VeriSign для выдачи сертификата, так как для доступа к базе данных WER требуется учетная запись WinQual, для которой требуется идентификатор VeriSign. Полный список доверенных сторонних центров сертификации см. в разделе "Участники программы корневых сертификатов Майкрософт". Дополнительные сведения о регистрации в WER см. в разделе "Введение отчеты об ошибках Windows" в зоне ISV.

После получения сертификата из ЦС вы можете подписать программу с помощью SignTool и освободить программу для общественности. Однако необходимо тщательно защитить закрытый ключ, который содержится в PFX-файлах и PVK-файлах. Не забудьте сохранить эти файлы в безопасном расположении.

Пример использования тестового сертификата

В следующих шагах показано создание сертификата подписи кода для тестирования, а затем подписывание примера программы Direct3D (называемой BasicHLSL.exe) с помощью этого тестового сертификата. Эта процедура создает .cer и PVK-файлы — открытые и закрытые ключи соответственно, которые нельзя использовать для общедоступной сертификации.

В этом примере метка времени также добавляется в сигнатуру. Метка времени предотвращает недопустимость подписи при истечении срока действия сертификата. Код, подписанный, но отсутствует метка времени, не проверяется после истечения срока действия сертификата. Таким образом, весь общедоступный код должен иметь метку времени.

Создание сертификата и подпись программы

  1. Создайте тестовый сертификат и закрытый ключ с помощью средства создания сертификатов (MakeCert.exe).

    Следующий пример командной строки указывает MyPrivateKey в качестве имени файла закрытого ключа (PVK), MyPublicKey в качестве имени файла сертификата (.cer) и MySoftwareCompany в качестве имени сертификата. Он также делает сертификат самозаверяющим, чтобы он не был доверенным корневым центром.

    MakeCert /n CN=MySoftwareCompany /r /h 0 /eku "1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13" /e 12-31-2020 /sv MyPrivateKey.pvk MyPublicKey.cer
    
  2. Создайте файл Exchange персональных данных (PFX) из файла закрытого ключа (PVK) и файла сертификата (.cer) с помощью pvk2pfx.exe.

    PFX-файл объединяет открытые и закрытые ключи в один файл. В следующем примере командной строки используются ФАЙЛЫ PVK и .cer из предыдущего шага, чтобы создать PFX-файл с именем MyPFX с паролем your_password:

    pvk2pfx.exe -pvk MyPrivateKey.pvk -spc MyPublicKey.cer -pfx MyPFX.pfx -po your_password
    
  3. Подписыв программу с помощью файла Exchange для личных данных (PFX) с помощью SignTool.

    Можно указать несколько параметров в командной строке. В следующем примере командной строки используется PFX-файл из предыдущего шага, предоставляет your_password в качестве пароля, указывает BasicHLSL в качестве подписанного файла и извлекает метку времени с указанного сервера:

    signtool.exe sign /fd SHA256 /f MyPFX.pfx /p your_password /v /t URL_to_time_stamp_service BasicHLSL.exe
    

    Примечание.

    URL-адрес службы меток времени предоставляется ЦС и является необязательным для тестирования. Важно, чтобы рабочая подпись включала допустимый центр метки времени, или подпись не сможет проверить, когда срок действия сертификата истекает.

     

  4. Убедитесь, что программа подписана с помощью SignTool.

    В следующем примере командной строки указывается, что SignTool должна попытаться проверить подпись в BasicHLSL.exe с помощью всех доступных методов при предоставлении подробных выходных данных:

    signtool.exe verify /a /v BasicHLSL.exe
    

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

  5. Доверяйте тестовый сертификат.

    Для тестовых сертификатов необходимо доверять сертификату. Этот шаг должен быть пропущен для сертификатов, предоставляемых ЦС, так как они будут доверенными по умолчанию.

    На компьютерах, на которых требуется доверять тестовый сертификат, выполните следующее:

    certmgr.msc
    

    Затем щелкните правой кнопкой мыши доверенные корневые центры сертификации и выберите "Все задачи" | Импорт. Затем перейдите к созданному PFX-файлу и выполните действия мастера, разместив сертификат в доверенных корневых центрах сертификации.

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

Интеграция входа кода в систему ежедневной сборки

Чтобы интегрировать вход кода в проект, можно создать пакетный файл или скрипт для запуска средств командной строки. После создания проекта запустите SignTool с соответствующими параметрами (как показано на шаге 3 нашего примера).

Будьте особенно осторожны в процессе сборки, чтобы убедиться, что доступ к PFX и PVK-файлам ограничен как можно меньше компьютеров и пользователей. Рекомендуется, чтобы разработчики подписывали код только с помощью тестового сертификата, пока они не будут готовы к отправке. Опять же, закрытый ключ (PVK) должен храниться в защищенном расположении, например в безопасном или заблокированном помещении, и в идеале на криптографических устройствах, таких как смарт-карта.

Другой уровень защиты предоставляется с помощью Microsoft Authenticode для подписывания самого пакета установщика Windows (MSI). Это помогает защитить пакет MSI от незаконного изменения и случайного повреждения. Дополнительные сведения о подписи пакетов с помощью Authenticode см. в документации по средству создания MSI.

отзыва

Если безопасность закрытого ключа скомпрометирована или некоторые события, связанные с безопасностью, отрисовывает недопустимый сертификат подписи кода, разработчик должен отозвать сертификат. Это приведет к снижению целостности разработчика и эффективности подписывания кода. ЦС также может выдавать отзыв с определенным временем; код, подписанный меткой времени до времени отзыва, по-прежнему считается допустимым, но код с последующей меткой времени будет недопустим. Отзыв сертификата влияет на код в любых приложениях, подписанных с отозванным сертификатом.

Драйверы подписывания кода

Драйверы могут быть подписанными Authenticode. Драйверы в режиме ядра имеют дополнительные требования: 64-разрядные выпуски Windows Vista и Windows 7 не позволят устанавливать все неподписанные драйверы режима ядра, а все версии Windows будут представлять предупреждение при попытке пользователя установить неподписанный драйвер. Кроме того, администраторы могут задать групповую политику, чтобы предотвратить установку неподписанных драйверов в Microsoft Windows Server 2003, Windows XP Professional x64 Edition и 32-разрядных выпусках Windows Vista и Windows 7.

Многие типы драйверов могут быть подписаны с помощью доверенной подписи Майкрософт ( в рамках программы сертификации Windows для лабораторий качества оборудования Windows (WHQL) или неклассифицированной программы подписи (прежнее название — подпись надежности драйверов), которая позволяет системе полностью доверять этим драйверам и устанавливать их даже без учетных данных администратора.

Как минимум, драйверы должны быть подписаны Authenticode, так как драйверы без знака или самозаверяющие (то есть подписанные с помощью тестового сертификата) не смогут устанавливаться на многих платформах под управлением Windows. Дополнительные сведения о подписи драйверов и кода и связанных функциях см. в разделе "Требования к подписи драйверов" для Windows on Windows Hardware Developer Central.

Итоги

Использование Microsoft Authenticode — это простой процесс. Получив CER и создав закрытый ключ, это простой вопрос использования средств, предоставляемых корпорацией Майкрософт. Затем вы можете включить важные функции в Windows Vista и Windows 7, такие как родительский контроль, и сообщить клиентам, что ваш продукт поставляется непосредственно от своего правого владельца.

Дополнительные сведения

Дополнительные сведения о средствах и процессах, связанных с кодом подписывания, см. в следующих ссылках: