д.т.н., профессор Тлебаев М.Б.
магистрант
Ескенеева М.Г.
преподаватель Маматаева
Д.У.
Таразский
государственный университет им. М.Х.Дулати
Использование алгоритмов
шифрования для сокрытия содержимого
файла с применением аппаратно-программного комплекса «Криптографические
системы» 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>dgst –h
6.
Вывод списка доступных шифров: команда ciphers
- все доступные шифры
Openssl> ciphers -v
- только шифры TLSv1
Openssl> ciphers -v -tls1
- только шифры длиною больше 128 битов (high ciphers)
Openssl> ciphers -v 'HIGH'
- только шифры длиною больше 128 битов, использующие AES
Openssl> ciphers -v 'AES+HIGH'
8. Создадим в каталоге D папку 1
Рис.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г.