Группа компаний

«Инрэко ЛАН»

О важности цифровой подписи программных разработок

4 июня 2010 года

Немного теории

Цифровая подпись базируется на понятии методов двухключевого шифрования и подписи. На предварительном этапе, владелец электронных данных создает пару ключей (открытый и закрытый) и подписывает их персональным (закрытым) ключом, который есть только у него. Все остальные потребители этих данных могут удостовериться в оригинальности данных, непосредственно с использованием открытого ключа. Централизованный интернациональный ресурс по всем версиям утилит двухключевого шифрования доступен по этой ссылке.

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

Альтернативный способ персонификации данных заключается в использовании сертификатов и услуг сертифицирующей организации. Идея все та же, но роль ключей выполняет сертификат, выдаваемый сертифицирующей организацией.  В задачи такой организации входят обеспечение конфедециальности данных компании, обратившейся за сертификатом, обеспечение услуг по выдачи и поддержке актуального состояния базы сертификатов и т.п. Но, как получается, эти услуги не бесплатны. Среди наиболее известных можно перечислить: VeriSign, Thawte Consulting, GTE CyberTrust, EuroSign и другие. На мой взгляд, использование сертифицирующих организаций это более удобный способ, хотя и более дорогой. При выборе организации, прежде всего, необходимо обратить внимание на то, чтобы выдаваемые сертификаты автоматически поддерживались используемыми средствами. Например, точно могу сказать, что сертификаты VeriSign поддерживаются многими Интернет-обозревателями и операционными системами. Именно второй путь и был выбран для подписывания кода Staffery 2009.

Получение сертификата


Итак, с целью тестирования Staffery  2009 перед нами стояла задача получения цифрового сертификата. Так как тестирование проводилось по программе «Compatible with Windows 7», то выбор сертифицирующей организации был предопределен условиями программы. В общем случае это не важно, так как процедуры везде одинаковые. Цена вопроса $499, но в рамках проходящих промоакций в действительности он обошелся в $99. Мелочь, а приятно.

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

С момента подачи заявки и до момента окончательного получения сертификата прошло чуть более двух календарных недель. За это время VeriSign сначала запросила от нас документы о регистрации юридической организации, затем выставленные счета за обслуживание нашей компании третьими лицами (в частности, от телефонной компании). Как вы понимаете все это лишь для того, чтобы убедиться, что мы не мошенники. Процедура длительная, но надо потерпеть. Кстати, они честно об этом предупреждают. А мой совет тем, кто еще только собирается сотрудничать с ними, – старайтесь распланировать эту деятельность.

Но что особо отмечаю во всем этом – это качество работы online-службы поддержки, к которой можно обратиться в любое время и получить максимально быстро ответ на интересующий вопрос. Я несколько раз обращался с просьбой подтвердить статус нашей заявки на сертификат - служба работала четко, ответы были оперативны.

Спустя две недели через соответствующие online-службы VeriSign сертификат устанавливался в операционную систему компьютера, откуда происходило взаимодействие. В моем случае это был мой рабочий компьютер. Посмотреть информацию о сертификате можно в свойствах Internet Explorer (кнопка 1 на картинке).

Обращаю внимание (!) на то, что сертификат можно экспортировать (кнопка 2 на рисунке). Настоятельно рекомендую сделать это сразу и убрать подальше в архив, так как переустановка операционной системы как обычно наступит неожиданно и о сертификате к тому времени все благополучно забудут.

Теперь не хватает самого малого - утилиты подписывания (signtool.exe). Эта консольная программа входит в состав Windows 7 SDK. Загрузить его можно по этой ссылке. Утилита имеет несколько базовых опций. Для подписи кода важна опция «sign». Также следует иметь в виду, что в VeriSign можно получить ключ для разного класса задач, которые имеют свои ограничения (соответственно и стоимость у них тоже будет разная). Тот ключ, который был куплен в рамках упоминавшейся программы тестирования, годен только для подписывания кода, сборок, приложений и т.п.

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

После подписания можно обратить внимание, что в свойствах модуля (в нашем случае инсталлятора Staffery 2009) появилась новая закладка «Цифровые подписи». Если посмотреть внимательнее на содержимое этой вкладки, то можно обнаружить полную информацию о том, кому принадлежит цифровой сертификат и прочую дополнительную информацию.

За что боролись


Теперь собственно ради чего все это затевалось изначально. Как известно, начиная с Windows Vista, в операционные системы встроен контроль учетных записей пользователей (UAC). А это означает, что система будет по-разному оповещать пользователя при попытке запуска подписанных и не подписанных приложений.

Так система предупреждает пользователя, при попытке запустить «неподписанный» модуль Staffery 2009

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

И уже вот так, в случае, когда Staffery 2009 был подписан.

Конечно, можно возразить, что UAC можно отключить и никогда подобных окон не увидеть. Так-то оно так, но кроме этих нюансов есть еще-таки второстепенные понятия, такие как имиджевая политика фирмы, и тут вы понимаете, что уверенность в разработчике в глазах потребителя растет, если фирма заботится о своих продуктах, подписывая их ключами сертифицирующих организаций. Второй момент (и вероятно далеко не последний) – подписка есть некий корпоративный пропуск на рынок ПО, где все ведущие производители ПО уделяют этому внимание. А это значит, что мы играем по единым правилам наравне с ведущими разработчиками.

Послесловие


В заключении хочу сказать еще один нюанс, с которым мне пришлось однажды столкнуться, правда, в рамках другой задачи. История такова, что когда-то давно мы делали поставку разработанных программных модулей для заказчика. Спустя некоторое время заказчик, владея исходными кодами разработки, посчитал, что его квалификации будет достаточно для самостоятельно улучшения системы и  решил сделать это своими силами. Все бы ничего, но те модули обслуживали учет выпускаемой продукции для реального производства. И случись что с программой после этого, все шишки посыпались бы на нас. Естественно мы готовы отвечать за свои ошибки, но не за чужие. Как быть? Вы понимаете, что подписка сертификатами модулей позволяет избежать этой проблемы. И если вдруг софт «забарахлил», то первое что нужно сделать, это проверить оригинальность исходных программных модулей, работающих у заказчика. Технически это решается просто (см. выше). А вот для руководителей проектов подобную ситуацию надо заранее предусмотреть и отразить в договоре на разработку ПО.

Ну и последнее, что я бы хотел упомянуть в контексте этой истории. Если же вы все-таки хотите сэкономить на покупке ключей и в тоже время подумать, как обезопасить себя от модификации программ со стороны заказчика, то можно воспользоваться самыми простыми и бесплатными средствами (что мы тогда и сделали). Для этого мы посчитали контрольные суммы всех модулей и точно так же прикрепили из в качестве приложения к акту сдачи ПО. Изменение хотя бы одного бита в модуле повлечет за собой изменение контрольных сумм, что говорит о явном изменении содержимого модуля. Вот, например, как это выглядит для мифического модуля Barcode.dll

File: E:DLL для QtexDLLS Barcode.dll
MD5        C6DC19F9FF0EE0299FA0EFCB363C39DE
SHA        07ADC087E881FB51381B0C4E65FE5167333DA7E0

Информация о контрольных суммах получена утилитой «Sha verify», которую бесплатно можно скачать. А вообще таких утилит много.

P.S. Когда материал данной статьи был закончен, мой коллега совершенно случайно натолкнул меня на мысль использования Strong Name Utility для тех же целей. Утилита входит в состав уже известной нам Windows 7 SDK. С учетом того, что практики работы с ней у меня никакой, можно пока что почитать про нее тут.

Теги: цифровая подпись | ЭЦП | VeriSign | Staffery 2009

Имя: 
  Текст на картинке слева: