Андрей Калужский
дата публикации 19-03-2003 12:40
Электронный ключ в сети. Обзор технологий защиты программ в локальных сетях.
М П 3 / Лекция_8
Рассмотрим вопрос: каким образом обезопасить себя от несанкционированного копирования лицензионных программ?
Для защиты программного обеспечения от несанционированного копирования необходимо использование некого ключа, который бы разрешал или запрещал работу программы. В процессе запуска или работы программа должна проверять этот ключ и если он совпадает с эталоном, программа продолжает выполнение, если нет — прекращает работу. Несколько лет назад в качестве ключа использовались некопируемая ключевая дискета или уникальные характеристики компьютера. Теперь на смену им пришли электронные ключи.
Основные функции ключей заключаются в следующем:
- пользователи могут создавать неограниченное число резервных копий защищенной программы, но использовать могут только одну, работающую с ключом, установленным в один из портов компьютера;
- данные пользователей защищаются от несанкционированного использования, поскольку без ключа расшифровать их практически невозможно;
- защищенная программа при запуске может проверяться на наличие вирусов или подвергаться контролю на целостность.
- проверяется наличие электронного ключа и считывание из него требуемых параметров;
- проверка «ключевых» условий и выработка решения;
- в случае успешных проверок производится загрузка, расшифровка и передача управления защищенной программе;
- в случае неудачных проверок загрузка и расшифровка тела программы в память не производится, выдается сообщение об ошибке и защищенное приложение заканчивает свое выполнение.
- обеспечивают фоновые проверки ключа в процессе работы защищенного приложения, так что вытащить и перенести ключ на другой компьютер после запуска на нем защищенной программы нельзя;
- установить для программы счетчик запусков;
- задать предельную дату выполнения программы.
- микросхем энергонезависимой электрически перепрограммируемой памяти;
- заказных микросхем с памятью или без памяти;
- на базе микроконтроллеров.
- ключ для параллельного порта HASP;
- микропроцессорная карта ASE (рекомендуется использовать, когда одним компьютером пользуются несколько человек);
- плату PCMCIA (для пользователей портативных компьютеров);
- устройство e-Token — ключ для порта USB (удобен тем, кто уже использует периферийное оборудование, подключаемое к порту USB).
Источник: studfile.net
КАК ЗАЩИТИТЬ СВОЮ ИГРУ?
Public Key Cryptography: осваиваем открытые ключи на практике
В этой статье я покажу, как реализовать основные операции по работе с PKI. Речь идет о подписи, проверке подписи, шифровании и расшифровании в контексте PKI. Теоретически данный код может использоваться с любым CSP (Cryptography Service Provider), поддерживающим интерфейс MS Crypto API. Я пользуюсь бесплатным отечественным CSP. Почему отечественным? Дело в том, что в .NET нет поддержки алгоритмов ГОСТ.
Как защитить свой код на Python от ВЗЛОМА
А если мы работаем с реальными проектами и, следовательно, вынуждены соответствовать требованиям регуляторов в России, то без гостовских алгоритмов нам никак. Но если установить отечественный криптопровайдер, поддерживающий MS Crypto API, то все будет тип-топ, потому что .NET при работе с CMS дергает именно MS Crypto API.
Картина мира
Перед погружением в код давай разберем немного терминологии. PKI — инфраструктура открытых ключей. Как несложно догадаться, PKI основана на асимметричном шифровании. В симметричных шифрах для шифрования и расшифрования используется один ключ. В асимметричных для шифрования используется один ключ, а для расшифрования — другой.
Вместе они образуют ключевую пару.
Информация, необходимая для работы PKI, содержится в сертификате X.509. В PKI участвуют как минимум три стороны: Алиса, Боб и удостоверяющий центр (УЦ). У Алисы и Боба есть сертификаты с закрытым ключом, подписанные так называемым корневым сертификатом УЦ. У Алисы есть сертификат Боба с открытым ключом, а у Боба — сертификат Алисы с открытым ключом. Алиса и Боб доверяют УЦ и благодаря этому могут доверять друг другу.
Другие статьи в выпуске:
Xakep #206. Ключ от всех дверей
- Содержание выпуска
- Подписка на «Хакер» -60%
Сертификаты X.509
Так повелось, что основным «активом» в PKI является сертификат X.509. Сертификат — это что-то вроде паспорта, он содержит информацию, позволяющую идентифицировать субъект, которому выдан сертификат (поле Subject), указывает, кем он был выпущен (поле Issuer), серийный номер сертификата и многое другое. В Windows управлять сертификатами можно с помощью оснастки «Сертификаты» ( run->certmgr.msc ).
Сертификаты хранятся в хранилищах («Личное», «Доверенные центры сертификации», «Доверенные лица». ).
При получении сертификата важно установить его в правильное хранилище. Так, сертификаты, которые ты хочешь использовать для электронной подписи, должны быть установлены в хранилище «Личное», а сертификаты получателей, которым нужно будет отправлять зашифрованные сообщения, — в хранилище «Доверенные лица».
Сертификаты удостоверяющих центров (УЦ) должны быть установлены в хранилище «Доверенные корневые центры сертификации». При установке сертификата система предлагает два варианта: выбрать хранилище автоматически либо указать вручную. Рекомендую использовать второй вариант, так как автоматика иногда устанавливает сертификат не в то хранилище. Сертификат, которым мы хотим подписывать сообщения, должен иметь закрытый ключ. О наличии закрытого ключа можно узнать, посмотрев на свойства сертификата, где русским по белому будет написано: «есть закрытый ключ для этого сертификата».
Самое интересное о сертификате мы можем узнать на вкладке «Состав».
Обрати внимание на поля «Алгоритм подписи», «Алгоритм хеширования подписи» и «Открытый ключ». Если хочешь использовать сертификат для осуществления транзакций в России, во всех этих полях ты должен видеть слово «ГОСТ».
Также следует обратить внимание на значение поля «Использование ключа» и поля «Действителен с» и «Действителен по»: первое позволит понять, возможно ли использование сертификата для выполнения нужной нам операции (шифрование, подпись), а второе и третье — возможно ли использовать данный сертификат в указанный момент времени. В дополнение к этому следует убедиться, что сертификат действителен. В этом нам поможет вкладка «Путь сертификации». Если с сертификатом все хорошо, мы увидим надпись: «Этот сертификат действителен».
WARNING
Приведенный ниже код предназначен исключительно для ознакомления с PKI. Не следует без оглядки использовать его в реальной работе.
Цифровая подпись
Представь, дорогой читатель, что ты занимаешься некой очень ответственной работой. И результаты своей работы отправляешь в виде отчетов, от которых в конечном итоге зависят чьи-то конкретные судьбы и жизни. Получатели твоих отчетов принимают на их основе очень важные решения, и, если ты напортачишь, вполне можешь получить срок.
Так вот, в таких ответственных организациях без электронной подписи никуда. Она позволяет тебе подписать тот самый суперважный секретный отчет своим сертификатом с закрытым ключом. Закрытый ключ, в идеале, может храниться на токене — специальном съемном устройстве, похожем на флешку, которое ты в редкие моменты достаешь из сейфа. Подпись гарантирует, что твой отчет отправлен именно тобой, а не уборщицей или сторожем. С другой стороны, ты не сможешь отказаться от авторства (это называется «неотрекаемость») и, если накосячишь в своем суперважном документе, на сторожа свалить вину не получится.
Электронная подпись применяется не только в спецслужбах и органах, но и в бизнесе. Например, для перевода пенсионных накоплений в НПФ: мы генерируем запрос на сертификат, отправляем его в удостоверяющий центр (УЦ). УЦ выпускает сертификат, мы подписываем сертификатом заявление на перевод пенсионных накоплений, отправляем — и вуаля. Подпись также позволяет осуществлять контроль целостности подписываемых данных. Если данные будут изменены, подпись не пройдет проверку.
Для программирования подписи необходимо ознакомиться с несколькими классами .NET Framework:
- X509Certificate2 — представляет собой сертификат X.509. Имя класса, оканчивающееся на 2, говорит о том, что класс является усовершенствованным аналогом класса X509Certificate.
- X509Chain.aspx) — позволяет строить и проверять цепочку сертификатов. Необходима для того, чтобы убедиться в действительности сертификата.
- SignedCms.aspx) — позволяет подписывать и проверять сообщения PKCS#7.
Перед тем как заюзать наш сертификат, необходимо его проверить. Процедура включает в себя проверку цепочки сертификации, проверку срока действия и проверку, не отозван ли сертификат. Если мы подпишем файл недействительным сертификатом, подпись будет недействительной.
X509Chain certificateChain = new X509Chain < ChainPolicy = < RevocationMode = X509RevocationMode.Online, VerificationFlags = X509VerificationFlags.IgnoreNotTimeValid, RevocationFlag = X509RevocationFlag.ExcludeRoot >>; bool chainOk = certificateChain.Build(certificate); bool certNotExpired = (certificate.NotAfter >= DateTime.Now) (certificate.NotBefore