Криптографические методы защиты в языках программирования

Автор работы: Пользователь скрыл имя, 20 Марта 2013 в 13:24, реферат

Краткое описание

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

Содержание

Основные проблемы и способы их решения
Классификация криптографических алгоритмов
Криптография в Java
Алгоритм DSA
Работа отправителя
Генерация ключей
Создание подписи
Сохранение подписи
Работа получателя
Работа с ключом: чтение из файла и преобразование в PrivateKey
Проверка подлинности (верификация)
Исходные программы
Асимметричная криптография в Perl
Алгоритм RSA
Основные методы работы с RSA
Пример использования цифровой подписи
RSA
DSA
Универсальные криптографические интерфейсы
Microsoft CryptoAPI
Использование криптозащиты в других языках
Заключение

Прикрепленные файлы: 1 файл

Криптографические методы защиты в языках программировани1.doc

— 200.00 Кб (Скачать документ)

Криптографические методы защиты в  языках программирования

Виктор Рудометов

Основные проблемы и способы их решения

Классификация криптографических алгоритмов

Криптография в Java   

Алгоритм DSA      

Работа отправителя         

Генерация ключей         

Создание подписи         

Сохранение подписи      

Работа получателя         

Работа с ключом: чтение из файла и преобразование в PrivateKey         

Проверка подлинности (верификация)       

Исходные программы

Асимметричная криптография в Perl      

Алгоритм RSA      

Основные методы работы с RSA      

Пример использования цифровой подписи          

RSA         

DSA      

Универсальные криптографические интерфейсы

Microsoft CryptoAPI

Использование криптозащиты в других языках

Заключение

Основные проблемы и способы  их решения

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

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

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

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

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

Любая современная криптосистема работает по определенной методологии (процедуре) и использует следующие компоненты:

  • алгоритм шифрования (один или более), который можно выразить в виде математических формул;
  • ключи, используемые указанными алгоритмами шифрования;
  • система управления ключами;
  • незашифрованный (открытый) текст;
  • зашифрованный текст (шифротекст).

Пример схемы методологии шифрования с использованием ключей представлен  на рис. 1.


 

Классификация криптографических  алгоритмов

уществует два вида методологии  с использованием ключей: симметричная — с применением секретного ключа  и асимметричная — с открытым ключом. Каждая методология использует собственные процедуры, способы распределения и типы ключей, алгоритмы шифрования и расшифровки.

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

Пример использования симметричной методологии — сеть банкоматов ATM. Эти системы являются оригинальными  разработками владеющих ими банков и не продаются сторонним лицам.

При асимметричной (asymmetric) методологии  с открытым ключом используются два  взаимосвязанных ключа, один из которых  является секретным, а другой публикуется  в открытых источниках. Данные, зашифрованные  одним ключом, могут быть расшифрованы только другим ключом. Главный недостаток — необходимость использования очень больших по размеру ключей для обеспечения безопасности, что негативно отражается на скорости работы алгоритмов шифрования.

Часто обе методологии комбинируются. Например, генерируется симметричный (секретный) ключ, который передается с помощью алгоритмов асимметричной методологии.

К самым распространенным алгоритмам симметричной методологии можно  отнести DES (Data Encryption Standard), 3-DES, RC2, RC4 и RC5. Примеры асимметричной — RSA и ECC. И отдельную позицию занимает один из наиболее популярных алгоритмов цифровой подписи DSA (Digital Signature Algorithm).

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

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

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


 

Криптография в Java

зык Java создан сравнительно недавно  и имеет множество достоинств и немало недостатков. Часто эти  достоинства сводят только к возможности создания машинно-независимых приложений, но существуют и другие, возможно даже более важные в условиях стремительного развития информационного общества. Речь идет, в частности, о сетевой направленности при разработке языка.

В 1993 году компания Sun обратила внимание на рост популярности Интернета и начала дорабатывать Java таким образом, чтобы написанные программы можно было запускать из Web-браузеров (аплеты). Также в язык были встроены расширенные возможности создания приложений типа «клиент-сервер». В связи с явной сетевой направленностью языка Java необходимо было уделить должное внимание средствам защиты. В первую очередь это касалось пересылки важных данных, например между клиентом и сервером, а также запуска программ или аплетов. Такие средства были разработаны и встроены в набор стандартных библиотек (JDK security API).

Необходимость защиты может быть обусловлена  желанием пользователя-получателя иметь  возможность верификации, что дает определенные гарантии подлинности  документа или кода. В качестве подписываемого объекта могут выступать аплеты, которые широко распространены в Интернете. В результате у получателя появляется уверенность, что информация получена именно от нужного отправителя и что она не была изменена в процессе пересылки. Для обеспечения такого рода безопасности служат цифровые подписи и сертификаты.


 

Алгоритм DSA

Основная идея цифровой подписи (digital signature) заключается в следующем. Допустим, отправитель хочет послать получателю некоторые данные. Он подписывает документ или код посредством специального закрытого ключа (private key), который генерируется с помощью утилиты keytool или средствами API. В данном случае слово «подписывает» означает, что генерируется специальная цифровая подпись с помощью утилиты jarsigner или средствами API.

Диаграмма, иллюстрирующая прохождение  через все этапы подписи jar-архива (работа отправителя), представлена на рис. 3. Следует отметить, что в jar-файле могут быть произвольные данные, например программа, картинка или документ Word.

Диаграмма, представляющая работу получателя jar-архива, дана на рис. 4.

В процессе генерации закрытого  ключа создается и так называемый открытый ключ (public key), который соответствует  закрытому.

Получателю отправляются следующие данные:

  • исходный документ или код;
  • цифровая подпись (отдельно либо в составе jar-файла);
  • открытый ключ.

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

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

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

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

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

Рассмотрим возможность использования Java Security для генерации (рис. 5) и верификации (рис. 6) цифровой подписи.


 

Работа отправителя

Генерация ключей

Для генерации ключей программист, не вникая в математические формулы  и особенности их реализации, может использовать уже готовые алгоритмы и методы криптографии. Они предоставляются определенными организациями, так называемыми провайдерами (provider). По умолчанию встроенные средства Java поставляет провайдер SUN. Таким образом, единственное, что необходимо сделать — это указать собственно алгоритм и провайдера.

В первую очередь нужно сгенерировать  пару ключей — public key и private key, для чего используется класс KeyPairGenerator. С целью  получения конкретного объекта  этого класса необходимо вызвать static factory метод getInstance(). В качестве аргументов передаются строки с указанием алгоритма и провайдера. Например, для использования DSA (Digital Signature Algorithm) и провайдера SUN необходимо писать:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance

(“DSA”,  “SUN”);

Поскольку большинство криптографических  алгоритмов являются вероятностными, необходимо создать вероятностный  источник — объект класса SecureRandom. При  этом существует возможность использовать разные методы, например SHA1PRNG (pseudo-random-number generation algorithm):

Информация о работе Криптографические методы защиты в языках программирования