Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
inform_bilet.docx
Скачиваний:
12
Добавлен:
27.09.2019
Размер:
360.98 Кб
Скачать

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

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

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

      a0a1, ..., an-1

из n целых чисел удовлетворяющих условиям

       .

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

Выберем модуль m, удовлетворяющий неравенству

      

и определим два числа x и y, которые удовлетворяют равенству xy(mod m) = 1. На основе последовательности a0a1a2, ..., an-1построим последовательность

      b0b1, ... , bn-1,

члены которой определяются выражениями

.

Шифрование информации будет осуществляться с помощью последовательности b0b1, ... , bn-1, а дешифровка с помощью последовательности a0a1, ..., an-1 и чисел my. Таким образом, числа b0b1, ... , bn-1 образуют открытый ключ, а числа a0a1, ...,an-1my закрытый ключ. Данный метод криптографии предполагает следующую процедуру:

  • исходная информация тем или иным способом представляется в двоичной форме и разбивается на n-разрядные двоичные числа;

  • каждому двоичному числу C2=сn-1 сn-2 ... с0 ставится в соответствие десятичное число С10, которое рассчитывается по формуле С10=с0b0+с1b1+ ... + сn-1bn-1;

  • С10 передается получателю сообщения, который определяет числа из последовательности a0a1, ..., an-1, суммой которых является результат умножения переданного числа С10 на y по модулю m;

  • индексы найденных чисел из последовательности a0a1, ...,an-1 указывают на положение единиц в двоичном числе C2 и тем самым позволяют его восстановить.

Возможность использования при шифровании последовательностиb0b1, ... , bn-1, а при дешифровки - a0a1, ... , an-1 доказывается следующей цепочкой равенств:

(b0+b1+ ... +bn-1y (mod m) = (a0+a1+ ... +an-1xy (mod m) = (a0+a1+ ... +an-1) (mod m) = (a0+a1+ ... +an-1).

Стойкость к взлому данного метода криптографии основана на том факте, что алгоритм определения чисел из последовательности a0,a1, ... , an-1, суммой которых является заданное число, более эффективен, чем алгоритм решения подобной задачи для последовательности b0b1, ... , bn-1. В первом случае, необходимо найти первое в последовательности число, которое больше заданного, запомнить его индекс и вычесть из заданного числа. Если результат операции вычитания не равен нулю, то повторить поиск заново. Во втором случае, решение задачи предполагает осуществление поиска методом перебора всех возможных комбинаций, пока не будет найдено подходящее решение.

Например, пусть требуется передать строку 'Ok'. Представим ее в двоичной форме, использую ASCII-коды символов. Получим следующую кодовую комбинацию: 0100111101101011. Определим последовательность a0a1, ... , a15 для n=16 следующим образом:

1, 3, 5, 10, 22, 42, 90, 185, 375, 774, 1605, 3235, 6524, 13936, 28725, 61892.

Модуль выберем равным 135757, а числа x и y равными 47515 и 20 соответственно. Рассчитаем последовательность b0b1, ... , b15. В нашем случае она будет иметь вид:

47515, 6788, 101818, 67879, 95031, 95032, 67883, 101827, 33958, 122220, 101898, 34101, 54629, 82151, 103254, 30246.

Для этой последовательности определим число С10, которое будет равно 680528. Таким образом, получателю вместо строки 'Ok' будет передано число 680528.

Теперь произведем дешифровку полученной информации. Умножим полученное число на 20 по модулю 135757. Получим число 34860, которое является суммой следующих чисел в исходной последовательности: a14a11a10a9a8a6a5a3a1a0. В результате получим кодовую комбинацию 0100111101101011, которая эквивалентна строке 'Ok'.

37. Простейший язык программирования

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

     inc Имя;       dec Имя;

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

Рассматриваемый язык содержит всего одну управляющую структуру, представленную парой операторов while-do, имеющей следующий синтаксис:

while Имя not 0 do {      ...      ...      ...  }

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]