Новый подход при реализации доставки ключей в симметричном алгоритме шифрования с закрытыми ключами
Аннотация статьи
Разработан алгоритм генерации ключей шифрования в симметричных криптографических системах с закрытыми ключами, без использования передачи ключей по сетям связи.
An algorithm has been developed for generating encryption keys in symmetric cryptographic systems with private keys, without using key transmission over communication networks.
Ключевые слова: шифрование, симметричные криптографические системы, одноразовые блокноты, алгоритм генерации ключей, интернет вещи, (IoT), приемно-контрольные приборы.
Введение
В настоящее время существует три основных подхода при построении криптографической системы:
- алгоритмы с открытыми ключами;
- симметричные алгоритмы с закрытыми ключами (блочные шифры);
- «одноразовые блокноты» (данный алгоритм стоит отдельным классом);
- различные комбинации перечисленных выше алгоритмов.
Алгоритмы с открытыми ключами требуют больших вычислительных возможностей процессора (практически не реализуемы на PIC-процессорах) и не обеспечивают гарантированной криптостойкости.
Симметричные алгоритмы с закрытыми ключами (блочные шифры) требуют доставки этих ключей для потребителя, что возможно осуществлять только физически (носитель ключа может быть любым, бумага, флешь или перфокарта и .т.д.). В этом заключается основная проблема симметричных алгоритмов с закрытыми ключами.
Зато симметричные алгоритмы не требуют больших вычислительных возможностей процессора и обеспечивают гарантийную криптостойкость. Примером симметричные алгоритмов являются такие алгоритмы как "AES-128" или отечественный ГОСТ Р 34.12 2015 «Кузнечик».
Одноразовые блокноты расшифровать невозможно, они просты по реализации, но длина ключа (блокнота) равна количеству переданной информации, что делает их мало пригодными для автоматической передачи информации.
Насколько известно авторам, других основных алгоритмов шифрования для применения в реальной практике пока не реализовано.
Идеальным решением является симметричный алгоритм шифрования, если решить вопросы доставки ключа потребителю.
Решение задачи
При решении данной задачи исходили из двух предпосылок:
1) Значение показательной функции (у=ах) резко возрастает при росте её "х", см. рис.1
Рис.1
Пояснение. Наша десятичная система счисления является типичной показательной функцией. На примере её дальше и будет производиться анализ.
Для примера десятичная система счисления была выбрана с целью простоты восприятия.
Все полученныё выводы будут верны для любой системы счисления: двоичной, шестнадцатеричной, или хоть троичной. Всё они построены на принципе работы показательной функции, только в основу десятичной системы положено основания 10n, а в двоичную 2n и т.д.
2) Исключающие "ИЛИ" ("XOR") случайного числа со случайным числом даст случайное число.
Данная предпосылка выводится из таблицы истинности "XOR" см. рис.2
Рис.2
Если вместо "х" и "у" подставить случайные числа то после преобразования тоже получим случайное число.
Кроме того данный тезис проверен на примере реализации распределения ключей во времени при реализации алгоритма см. Приложение.
Значение распределения проанализирована на примере генерации 9999 ключей см. Приложение таблицу 1 .
В таблице 2 Приложения значение ключей сгенерированы для 99999 ключей.
Алгоритм работы генерации ключей.
Из центра управления (центральный сервер, ведущее устройство) адресно генерируется команда управления о передаче порядкового номера ключа и затем передается сам номер ключа. Предварительно в центре управления проводится операция "XOR" номера ключа с псевдослучайной константой, которая известна и прошита в памяти приемного устройства. Данная константа не меняется в процессе работы, но у каждого ведомого устройства своя. Для извлечения на приемной стороне номера ключа проводится операция "XOR" с этой константой.
Примечание. Несмотря на то, что в порядковом номере ключа нет сведений о значении ключа, лучше в явной форме эту информацию не передавать.
Далее, приемное устройство определяет разряды порядкового номера ключа.
Допусти мы предали порядковый номер 0785.
Если мы используем десятичную систему счисления, то для создания ключа нам надо 4 массива глубиной 10 ячеек. В каждой из ячеек массивов прописаны псевдослучайные числа. Массивы A(10), B(10), C(10), D(10).
Производим операцию генерации ключа путем A(0) XOR B(7) XOR C(8) XOR D(5), индексы массивов разряды числа 0785.
Для того чтобы скрыть операцию XOR с массивами производим ещё одну операцию XOR с псевдослучайной константой С1.
Полная операция генерации ключа Z будет следующей:
Z = A(0) XOR B(7) XOR C(8) XOR D(5) XOR C1
Далее это ключ используем для шифрования по алгоритму "АES-128".
Примечание в данной программе для простоты реализации длина ключа лежит в диапазоне от 0 до 9999 в десятичном счислении.
Необходимый объем памяти для хранения ключей под алгоритм
"АES-128" (практическая реализация)
Исходные данные:
- Размер порядковых номеров ключей шифрования - FFFFFFFF (8 шестнадцитиричных разрядов - в десятичном счислении 4 294 967 295). Если менять ключ десять раз за сутки то цикл повторения составит 1 176 703 лет.
- Система счисления - шестнадцатиричная, т.е. глубина массива -16 ячеек;
- Длина ключа 128 бит или 16 байт.
Итого объем памяти на приемном устройстве:
8 (разрядов номера ключа) х 16 (ячеек массива) х 16 (байт, длина ключа) = 2048 байт.
Объем памяти на центре управления для 1 048 575 ведомых устройств (FFFFF)
Итого 1 048 575 х 2048 байт = 2 147 481 600 байт т.е. 2,2 Гбайта. (Приемлемо даже для обычного ПК).
Необходимый объем памяти для хранения ключей под алгоритм «одноразовый блокнот»
Исходные данные:
- Длина ключа шифрования - 128 бит;
- Размер порядковых номеров ключей шифрования - FFFFFFFFFFFFFFFF (16 шестнадцитиричных разрядов);
- количество ведомых устройств - 1 048 575 (FFFFF) штук;
- цикл повторения 100 лет. В секундах = 100 лет х 365 суток х 24 часа х 60 минут х 60 секунд - 3 153 600 000 сек.
Определим максимальную теоретическую скорость передачи информации (бит/сек) при использовании алгоритма шифрования "одноразовый блокнот".
Скорость передачи = (Количество ключей х Длину ключей)/ (на количество секунд за 100 лет = (FFFFFFFFFFFFFFFF х 128)/3 153 600 000=
= (18446744073709551615 х 128) /3 153 600 000=748 726 294 214 бит/с.
Результат роста показательной функции (больше чем надо).
Итого объем памяти на приемном устройстве:
16 (разрядов номера ключа) х 16 (ячеек массива) х 16 (байт) = 4096 байт.
Объем памяти на центре управления для 1 048 575 ведомых устройств (FFFFF)
Итого 1 048 575 х 4096 байт = 4 294 963 200 байт т.е. 4,3 Гбайта. (Приемлемо даже для обычного ПК).
Достоинство данного метода шифрования.
Возможность получить практически неограниченное количество комбинаций ключей при ограниченном объеме памяти в устройствах (основано на резком возрастании числа "у" показательной функции с ростом значения "х").
Простота реализации, всего одна стандартная математическая операция XOR, которая в большинстве процессоров реализована на начальном уровне программирования.
Автоматическая синхронизация кода. Порядковый номер извещения в явной форме указывает, какие блоки надо объединять с помощью XOR.
Малый объем ключей как на центре управления, так и на управляемом устройстве .
Предполагаемая высокая стойкость кода к криптоанализу, поскольку XOR случайного числа со случайным числом будет давать случайное число и при использовании его в симметричных алгоритмах шифрования извлечь ключ из переданного текста невозможно.
При использовании в режиме "одноразового блокнота" предполагаю высокую стойкость, поскольку XOR со случайным числом происходит 17 раз (16 раз в массивах и 1 раз с константой С1) и длина ключа в массиве 128 бит.
При анализе простым перебором получаем количество вариантов 12817 (6,65 e+35). При необходимости, количество вариантов можно увеличить будем введения фиксированных констант С2…С16.
Использование данного алгоритма шифрования наиболее актуально для охранных приемно-контрольных приборов и устройств разряда "Интерет вещей" (IoT), (однако это не исключает его использование для других устройств и случаев информации).
Недостатком данного алгоритма шифрования является необходимость иметь таблицу ключей (хоть и ограниченную по объему) как на центре управления, так и на приемных устройствах.
Заполнение данной базы ключей возможно следующим образом:
1. На заводе производителе при выпуске или продаже изделий. При этом конфиденциальность ключей обеспечивается стандартными процедурами передачи конфиденциальной информации, например: создание базы данных в момент продажи и закрытия доступа к базе данных с использованием ключа шифрования и т.д.;
2. Создание базы ключей самим пользователем. При этом каждое новое ведомое устройство физически доставляется для создании базы ключей к центру управления. (Поскольку ключи долговременные данная процедура может осуществляться однократно, перед вводом ведомого устройства в эксплуатацию, поэтому данная процедура не должна вызывать больших сложностей).
3. Доставка для перезаписи ключей на ведомом устройстве по криптографически закрытым каналам связи. (Поскольку объем ключей незначителен и их хватает на весь срок эксплуатации, то эта процедура не должна вызывать больших сложностей).
4. Доставка ключей фельдъегерской связью. (Поскольку объем ключей незначителен и их смена будет происходить только после физической компрометации ключей , то и эта процедура не должна вызывать больших сложностей).
Примечание. На ведомом устройстве ключи должны храниться в защищенной области памяти (недоступной стандартным процедурам считывания информации).
Информация о авторе:
Ф.И.О. - Михайлов Алексей Алексеевич
e-mail: vh48905@yandex.ru
дата 18.10.2022
тел. 8 9160311498
Приложение
Рис.1
Программа на QBasic, реализации алгоритма генерации ключей в диапазоне 9999 ключей.
Расшифровка программы
100 CLS
110 OPEN "d:\prob.txt" FOR OUTPUT AS #1 (открываем файл для вывода данных)
120 C1 = 362 (вводим постоянную константу)
130 DIM A(10): DIM B(10): DIM C(10): DIM D(10) (создаем массивы и записываем в них случайные числа)
140 A(0) = 767: A(1) = 332: A(2) = 850: A(3) = 604: A(4) = 125: A(5) = 939: A(6) = 581: A(7) = 503: A(8) = 453: A(9) = 954
145 B(0) = 250: B(1) = 684: B(2) = 247: B(3) = 783: B(4) = 957: B(5) = 742: B(6) = 140: B(7) = 232: B(8) = 364: B(9) = 520
150 C(0) = 46: C(1) = 360: C(2) = 800: C(3) = 478: C(4) = 445: C(5) = 398: C(6) = 328: C(7) = 867: C(8) = 434: C(9) = 757
160 D(0) = 591: D(1) = 710: D(2) = 764: D(3) = 216: D(4) = 707: D(5) = 422: D(6) = 163: D(7) = 876: D(8) = 442: D(9) = 191
170 FOR n = 0 TO 9999 STEP 1 (создаем цикл генерации ключей)
180 GOTO 250 (если убрать этот оператор, то получим печать порядкового номера ключа на экране)
200 PRINT "n="; n; (печать на экране порядкового номера ключа)
250 d4 = FIX(n / 1000) (определение значение числа в 4 разряде)
270 k = n - d4 * 1000 (уменьшение числа на количество 1000)
300 d3 = FIX(k / 100) (определение значение числа в 3 разряде)
350 k = k - d3 * 100 (уменьшение числа на количество 100)
400 d2 = FIX(k / 10) (определение значение числа во 2 разряде)
450 k = k - d2 * 10(уменьшение числа на количество 10)
500 d1 = k (определение значение числа в 1 разряде)
550 GOTO 1200 (если убрать этот оператор, то получим печать на экране: порядковые номера индекса массивов, значение числа в массивах под этим индексом)
600 PRINT "d4="; d4; "d3="; d3; "d2="; d2; "d1="; d1;
700 PRINT "A(d4)="; A(d4); "B(d3)="; B(d3); "C(d2)="; C(d2); "D(d1)="; D(d1)
1200 Z = A(d4) XOR B(d3) XOR C(d2) XOR D(d1) XOR C1 (операция XOR с массивами и константой)
1250 PRINT #1, Z (печать значения ключа в файл)
1280 GOTO 1340 (если убрать этот оператор, то получим печать на экране значения ключа)
1300 PRINT "Z="; Z; " ";
1340 NEXT (конец цикла генерации ключей)
1400 CLOSE #1(закрыли файл)
1500 END
Рис. 2
Пояснение операторов приведенной программы (дано красным цветом).
Рис. 3
Пространственное распределение ключей (9999 штук).
Можно отметить равномерное распределение значений ключей в пространстве, что говорит о работоспособности алгоритма генерации ключей.
(ось "У"- значение ключа, ось "Х"- порядковый номер ключа).
Рис.4
Ключи после упорядочения значения ключей в массиве. Количество повторений ключей в массиве примерно одинаково, поэтому функция имеет линейную зависимость. Если бы значение ключей было неравномерно в массиве, то линия бы имела бы изломы.
Рис.5
Распределение ключей, масштаб увеличен (количество ключей - 155 штук).
Рис.6
Распределение ключей, масштаб увеличен ( значение соединено линями количество ключей - 130 штук).
Рис.7
Если рассматривать данную функцию со спектральной точки зрения, то она имеет спектр без значительных выбросов функции на частотной плоскости, что говорит о псевдослучайном распределении ключей во времени.
Здесь по ось "X" - частотная ось, о ось "Y" - амплитудное значение частоты.
Количество проанализированных ключей- первые 64 шт.
Рис.8
Программа на QBasic, реализации алгоритма генерации ключей в диапазоне 99999 ключей. (Ниже расшифровка программы)
100 CLS
110 OPEN "d:\prob3.txt" FOR OUTPUT AS #1(открываем файл для вывода данных)
120 C1 = 362: C2 = 280 (вводим две постоянные константы)
130 DIM A(10): DIM B(10): DIM C(10): DIM D(10) (создаем массивы и записываем в них случайные числа)
140 A(0) = 767: A(1) = 332: A(2) = 850: A(3) = 604: A(4) = 125: A(5) = 939: A(6) = 581: A(7) = 503: A(8) = 453: A(9) = 954
145 B(0) = 250: B(1) = 684: B(2) = 247: B(3) = 783: B(4) = 957: B(5) = 742: B(6) = 140: B(7) = 232: B(8) = 364: B(9) = 520
150 C(0) = 46: C(1) = 360: C(2) = 800: C(3) = 478: C(4) = 445: C(5) = 398: C(6) = 328: C(7) = 867: C(8) = 434: C(9) = 757
160 D(0) = 591: D(1) = 710: D(2) = 764: D(3) = 216: D(4) = 707: D(5) = 422: D(6) = 163: D(7) = 876: D(8) = 442: D(9) = 191
165 E(0) = 171: E(1) = 423: E(2) = 311: E(3) = 814: E(4) = 640: E(5) = 871: E(6) = 29: E(7) = 639: E(8) = 983: E(9) = 99
170 FOR n = 0 TO 99999 STEP 1 (создаем цикл генерации ключей до 99999)
175 n = n XOR C2 (имитируем передачу номера ключа с XOR C2)
176 n = n XOR C2 (дешифрируем порядковый номер ключа)
230 d5 = FIX(n / 10000) (определение значение числа в 5 разряде)
240 k = n - d5 * 10000 (уменьшение числа на количество 10000)
250 d4 = FIX(k / 1000) (определение значение числа в 4 разряде)
270 k = k - d4 * 1000 (уменьшение числа на количество 1000)
300 d3 = FIX(k / 100) (определение значение числа в 3 разряде)
350 k = k - d3 * 100 (уменьшение числа на количество 100)
400 d2 = FIX(k / 10) (определение значение числа во 2 разряде)
450 k = k - d2 * 10 (уменьшение числа на количество 10)
500 d1 = k (определение значение числа в 1 разряде)
1200 Z = A(d5) XOR B(d4) XOR C(d3) XOR D(d2) XOR E(d1) XOR C1 (операция XOR с массивами и константой)
1250 PRINT #1, Z; (печать значения ключа в файл)
1340 NEXT (конец цикла генерации ключей)
1400 CLOSE #1 (закрыли файл)
1500 END
Рис. 8 Пояснение операторов приведенной программы (дано красным цветом).
Комментарии
Я постараюсь записать то, что я узнаю здесь. Спасибо большое!
basket random
Great blog! Do you have any helpful hints for aspiring writers? I’m planning to start my own blog soon but I’m a little lost on everything. Who are ya
В этом заключается основная проблема симметричных алгоритмов с закрытыми ключами. auto window repair near me
Я также использую симметричные символы при шифровании. легко запомнить, что происходит.
basketball legends unblocked
Я очень интересуюсь шифрованием. Я применяю шифрование к некоторой хранящейся у меня информации.
basketrandom.org
Эта игра затягивает, не могу дождаться, чтобы увидеть, что они добавят vampire survivors