д.т.н., профессор Тлебаев М.Б.

магистрант Ескенеева М.Г.

преподаватель Маматаева Д.У.

 

Таразский государственный университет им. М.Х.Дулати

 

Использование алгоритмов шифрования для  сокрытия содержимого файла с применением аппаратно-программного комплекса «Криптографические системы» OpenSSL

 

Защита электронной информации  проводится с использованием двух направлений в криптологии – криптографией и криптоанализом.

Криптография - это поиск и исследование методов преобразования информации с целью скрытия ее содержания.

     Криптоанализ ‑ это расшифровка информации без знания ключей путем анализа и исследования. Современные криптографические методы делятся на четыре класса:

     -симметричные криптосистемы;

     -криптосистемы с открытым ключом;

     -системы электронной цифровой подписи (СЭЦП);

     -системы управление ключами.

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

Таким образом криптография преобразует вышеназванные информации и их не возможно прочесть без ключа.

Скрытие информации осуществляется как программно, так и аппаратно.

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

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

Для современных криптографических систем защиты информации сформулированы следующие общепринятые требования:

-зашифрованное сообщение должно поддаваться чтению только при наличии ключа;

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

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

знание алгоритма шифрования не должно влиять на надежность защиты;

-незначительное изменение ключа должно приводить к существенному изменению вида зашифрованного сообщения даже при шифровании одного и того же исходного текста;

-незначительное изменение исходного текста должно приводить к существенному изменению вида зашифрованного сообщения даже при использовании одного и того же ключа;

-структурные элементы алгоритма шифрования должны быть неизменными;

дополнительные биты, вводимые в сообщение в процессе шифрования, должен быть полностью и надежно скрыты в шифрованном тексте;

-длина шифрованного текста не должна превосходить длину исходного текста;

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

       -любой ключ из множества возможных должен обеспечивать надежную защиту информации;

       -алгоритм должен допускать как программную, так и аппаратную реализацию, при этом изменение длины ключа не должно вести к качественному ухудшению алгоритма шифрования [1].

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

На наш взгляд наилучшим методом шифрования являются аппаратно криптографические устройства.

Приведем примеры шифрования с использованием аппаратно-программного комплекса «Криптографические системы».

Этот метод шифрования является наиболее оптимальным для  сокрытия содержимого файла.

Алгоритм шифрования RSA

1.    Выберем два больших простых  p и q.

2.    Определим n=p×q.

3.    Вычисляем функцию Эйлера: φ=(p-1)×(q-1)

4.    Выберем большое случайное число, которое назовем e(<e<(φ)). Это число должно быть взаимно простым с результатом (p-1)×(q-1).

5.    Определим такое число d, для которого является истинным соотношение

(e×d) mod((p-1)×(q-1))=1 .

           6.  Назовем открытым ключом числа {е, n}, а  закрытым ключом  - {d, n} .

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

-   разбить шифруемый текст на блоки, каждый из которых может быть представлен в виде числа М(i)= 0,1,...,n-1;

   - зашифровать текст, рассматриваемый как последовательность чисел M(i)  по формуле:

        C(i) = (M(i)e)mod n;                                            (1)        

     Чтобы расшифровать эти данные, используется секретный ключ {d, n}  и выполняются следующие вычисления:

  M(i) = (C(i)d) mod n.                                               (2)

     В результате получаем исходный текст M(i).

Шифрование с помощью OpenSSL 

OpenSSL — это система защиты и сертификации данных, название SSL переводится, как система безопасных сокетов (secure socket layer).

Сокеты (англ. socket - разъём) - название программного интерфейса для обеспечения обмена данными между процессами. Процессы при таком обмене могут исполняться как на одной ЭВМ, так и на различных ЭВМ, связанных между собой сетью. Сокет - абстрактный объект, представляющий конечную точку соединения. Сокеты позволяют реализовать различные модели межпроцессного взаимодействия:  один с одним, один со многими и многие со многими. Их называют еще двухточечной моделью, широковещанием и групповым вещанием [2].

OpenSSL используется практически всеми сетевыми серверами для защиты передаваемой информацией. Существует программное API SSL (SSLEAY), позволяющее создавать безопасные сокеты с шифрацией передаваемых данных в собственных разработках.

OpenSSL может использоваться во множестве случаев и умеет выполнять следующие задачи:

·   Создавать и управлять ключами RSA и DSA — команды rsa, dsa, dsaparam.

·   Создавать сертификаты формата x509, запросы на сертификацию, восстановление — команды x509,req, verify, ca, crl, pks12, pks7.

·   Зашифровывать данные с помощью симметрического или асимметрического шифрования — команды enc, rsautl.

·   Высчитывать хеши различных типов — команда dgst.

·   Работа с S/MIME — команда s/mime.

·   Проверка работы серверов и клиентов ssl — команды s_client, s_server.

Зашифруем и расшифруем сообщение "САВ" по алгоритму RSA.

1. Выберем p=3 и q=11.

2. Определим n= 3*11=33.

3. Вычислим функцию Эйлера (p-1)*(q-1)=20.

4.  Выберем е=3.

5. Выберем число d по следующей формуле: (d*3) mod 20=1. Значит, d=7.

Представим шифруемое сообщение как последовательность чисел в диапозоне от 0 до           32. Буква А =1, В=2, С=3.

Теперь зашифруем сообщение, используя открытый ключ {7,33}

C1 = (3^7) mod 33 = 2187 mod 33 = 9; 

C2 = (1^7) mod 33 = 1 mod 33 = 1; 

C3 = (2^7) mod 33 = 128 mod 33 = 29; 

Теперь расшифруем данные, используя закрытый ключ {3,33}.

M1=(9^3) mod 33 =729 mod 33 = 3(С); 

M2=(1^3) mod 33 =1 mod 33 = 1(А); 

M3=(29^3) mod 33 = 24389 mod 33 = 2(В);

Создания секретного ключа

1. Установим Visual C++ 2008 Redistributables и OpenSSL на компьтер. Запустим файл openssl.exe из папки bin в директории, куда установился OpenSSL. Должно появиться окно с командной строкой OpenSSL, куда нужно будет вводить последующие команды;

2. Определим используемую версию OpenSSL, с помощью  опции version:

Openssl> version

OpenSSL 1.0.11 15 Jan 2015

3. Расширенная информация о версии:

Openssl> version –а

4. Вывод на экран списка доступных команд с неправильным ключом

OpenSSL> help  или OpenSSL > help –h

5. Вывод на экран списка доступных команд с подкомандами:

openssl>dgsth

6. Вывод списка доступных шифров: команда ciphers

- все доступные шифры
Openssl> ciphers -v
- только шифры TLSv1
Openssl> ciphers -v -tls1
- только шифры длиною больше 128 битов (high ciphers)
Openssl> ciphers -v 'HIGH'
- только шифры длиною больше 128 битов, использующие AES
Openssl> ciphers -v 'AES+HIGH'

 

7. Команда для измерения производительности системы:

                        openssl>speed

8. Создадим в каталоге D папку 1

Генерируем секретный ключ RSA (рис.1).

Для создания ключей алгоритма RSA используется команда genrsa:

openssl genrsa [-out file] [-des | -des3 | -idea] [-rand file] [bits]

Команда genrsa создает секретный ключ длиной bits в формате PEM, шифрует его одним из алгоритмов (des, des3, idea). PEM - текстовый формат, в нём возможно хранение как сертификатов и секретных ключей [2], так и прочей информации. Опция out позволяет указать, в какой файл выполнять вывод данных, т. е. созданного секретного ключа. Опция rand позволяет указать файл, из которого будут считываться значения для установки начального значения генератора случайных чисел.

 

Рис.1. Генерация секретного ключа RSA длиной 1024 бита

 

9. В результате выполнения этой команды на диске D:\1: будет создан файл private_key.pem. Откроим файл private_key.pem, он имеет следующее содержимое:

-----BEGIN RSA PRIVATE KEY-----

Proc-Type: 4,ENCRYPTED

DEK-Info: DES-EDE3-CBC,4F6383315342E1E2

5rOApD/AjTEbg8VtUzXi54zE1iy365Cfr4mjTt8J+rUzNtifdijCJGzw+BYwzG5r

hQlFhDXGKPSMnHXdFR61AFGUN+EtnJmdSCSCLRTgKFE5xKPUP52AN2pIDQwyTkuZ

jkJcEIym9bTUXaSlbpQ9yd3zPz2kDEveODkaqU7Fzj6/65GBu7N2ENM4bJz8Mkhi

02xIEQAqsfEuctq060Wf8scukGdwvSaahFRCCundvs8YshVWQmCrOpc1vk/MM3ZX

g1yPcUX2vEyckFwX3VwGE3DwzVZhsu6udIt2yJhR7MWjhREHJCpmFrFw0dLtI0wC

GmvW6t+hZnBtjb+rmS77yafW1N90j4+VRxK01+P+BIuw5nRS3yQ2MbabJ75YFaa5

CekHtcucJvalE9edn/SEB1y4ig9zJuzIsoIhVxc0GeoQJO8DkT1N1NvL/M9MH2e5

PwaB3udHKFbA1VH9YPJMgW5wcrH2vySZYkjiQRsl/TdJmoEFprbAfeyZLlzcbWLu

cQ4r66wL0o/NVbamgHEK1QV0rKbZPbRbZIUxd2iMUzmxi+vDiyHsypYaQpZzvSRC

H6V7cPxY2Pv6+GXpa4a67buW1dbJaDyxrg24iu3YRLAugpTKTM+PQVjI+or67g6w

AnKRU52tj4KCS4cqF+97LTLjZYV5Bz4EI5d3jy7bkeGTm6D/fliJcaXWA6qIpsLX

ktF6n9tsjUipoBsfWB2+u6AG1wI9tn7s3vxzO1t7BJCs5h+HPCWQBRAIAJWZMPFq

kdZuvckYFE/GAU+JSmUmo/F8E6Rd8GcGeGM7JFfAueIQ4ifWSf4wJA==

-----END RSA PRIVATE KEY-----

10. Генерируем по готовому секретному ключу открытый ключ.

Для создания открытого ключа на основе созданного секретного ключа используется команда rsa [2], которая имеет следующий синтаксис:

openssl rsa –in filename [-out file] [-des | -3des | -idea ] [-check] [-pubout]

Параметр - pubout указывает на необходимость создания открытого ключа (public key) в файле, указанном в параметре –out. Параметр –in указывает на файл с секретным ключом (рис.2).

 

Рис. 2. Создание открытого ключа RSA на основе секретного ключа

 

Содержимое файла c:\public_key.pem

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6EZgBsBmA/FI9ajpsEUd1fEu+

FHbaxRW8E40979gByAsbhop7MJhsWsARCdfhQXXXI514Vywk/bpzgwzFArRFU2Jo

+k9ROUYWW/Xp1DVpQ3SYo3Nc2vPwRHGJr9sdBYOsOepxiDKhOmGManuQmu+/l8Ih

moxMlTzSTCFwz7V0bQIDAQAB

-----END PUBLIC KEY-----

Шифрование данных с использованием открытого ключа RSA:

openssl rsautl –in file –out file.cr –inkey publickey.pem –pubin –encrypt (рис.3)

 

Рис. 3. Шифрование открытым ключом RSA

 

 Расшифрование закрытым ключом RSA:

openssl rsautl –in file.cr –out file –keyin secretkey.pem –decrypt (рис.4)

 

Рис. 4. Расшифрование данных секретным ключом RSA

 

Для симметричного шифрования данных используется команда openssl cipher. Параметр cipher определяет алгоритм шифрования:

-        bf (blowfish)

-        des (Data Encryption Standard)

-        des3 (Triple DES – Тройной DES)

-        idea

Например, шифрование файла алгоритмом des:

openssl des –in file –out file (рис.5)

 

Рис. 5. Шифрование файла алгоритмом DES

 

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

Для дешифрования данных используется ключ –d (рис.6). Например:

 

Рис. 6. Дешифрование данных алгоритмом DES

 

Таким образом, был использован алгоритм шифрования для  сокрытия содержимого файла с применением аппаратно-программного комплекса «Криптографические системы» с OpenSSL и алгоритмами DES и RSA.

 

Литература:

1.    1. Б.Я.Рябко, А.Н. Фионов «Основы современной криптографии для специалистов в информационных технологиях» 2010 г.

2.     Венбо Мао «Современная криптография. Теория и практика» 2013г.