Главная страница
Навигация по странице:

  • Однонаправленные функции

  • Длина P(в битах) Сложностьопределенияключа x Памятьиспользуемаяалгоритмом(в битах)

  • Время решения задачина компьюре типа 10

  • Длина симметричного ключа(в битах) Длина открытого ключа(в битах)

  • Вопросы с 11 по 20. По принятому алгоритму шифрования выполним необходимые действия При этом зашифрованный текст будет иметь вид 85, 54, 25, 96, 60, 24


    Скачать 0.61 Mb.
    НазваниеПо принятому алгоритму шифрования выполним необходимые действия При этом зашифрованный текст будет иметь вид 85, 54, 25, 96, 60, 24
    Дата01.06.2022
    Размер0.61 Mb.
    Формат файлаdocx
    Имя файлаВопросы с 11 по 20.docx
    ТипДокументы
    #562826
    страница6 из 6
    1   2   3   4   5   6

    18. Концепция криптосистемы с открытым ключом


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

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

    Однонаправленные функции

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

    Пусть X и Y - произвольные множества. Функция

    f(X) -> Y,


    является однонаправленной, если для всех х, входящих в Х, легко вычислить функцию f(x), и в то же время для большинства y, входящих в Y, получить любое значение x, входящее в X, такое что f(x) = y достаточно сложно (при этом полагают, что существует, по крайней мере, одно такое значение x).

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

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

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

    Но вернемся к теме. Вторым важным классом функций, используемых в практике построения систем с открытым ключом, являются так называемые однонаправленные функции с черным ходом (trap door one way function). Для порядка введем определение.

    Функция

    f(X) -> Y


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

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

    19. Система распределения ключей Диффи-Хеллмана


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

    Первой системой такого рода стала система Диффи-Хеллмана, разработанная в 1976 году, построенная на задаче о дискретном логарифмировании.

    Предположим, что два пользователя, Алекс и Юстас, применяющие традиционную криптосистему, желают связаться друг с другом. Это означает, что они должны прийти к соглашению относительно ключа K, которым будут шифроваться сообщения. Давайте посмотрим, как система Диффи-Хелмана позволит обменяться ключом.

    Пусть N - некоторое большое целое число, а G - другое целое, такое что

    1 <= G <= N-1.


    Рассмотрим процедуру обмена ключами по шагам.

    1. Вначале Алекс и Юстас достигают соглашения о значениях N и G (как правило, эти значения являются стандартными для всех пользователей системы).

    2. Затем Алекс выбирает некоторое большое целое число X и вычисляет
            XX = G^X MOD N.
      Аналогичным образом Юстас выбирает число Y и вычисляет
            YY = G^Y MOD N.
      После этого Алекс и Юстас обмениваются значениями XX и YY. (Мы считаем, что все данные, которые передаются по каналу связи, могут быть перехвачены злоумышленником - стариной Мюллером). Числа X и Y Алекс и Юстас хранят в секрете.

    3. Получив от Юстаса число YY, Алекс вычисляет
            K(1) = YY^X MOD N,
      а Юстас -
            K(2) = XX^Y MOD N.

    Но (!)

    YY^X MOD N = G^(X*Y) MOD N = XX^Y MOD N,


    а следовательно,

    K(1) = K(2) = K.


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

    А что же старина Мюллер? Злоумышленник, перехвативший G, N, XX и YY, тоже должен определить значение ключа K. Очевидный путь для решения задачи состоит в вычислении значения X по G, N, XX или, по крайней мере, некоторого X', такого что

    G^X' MOD N = X,


    поскольку в этом случае

    YY^X' MOD N = K.

    Однако это и есть задача дискретного логарифмирования в чистом виде, которая считается неразрешимой.

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

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

    Рассмотрим, как же используются системы с открытым ключом.

    Пользователь Алекс имеет в своем распоряжении два алгоритма: E для шифрования и D для расшифровки сообщений. При этом алгоритм E делается общедоступным, например, через использование каталога ключей, а алгоритм D  хранится Алексом в секрете. Если Юстас или даже старина Мюллер хочет послать Алексу сообщение, он ищет в каталоге ключей алгоритм E  и использует его для шифрования передаваемой информации. А вот расшифровать сообщение сможет только Алекс, поскольку алгоритм D есть только у него. Очевидно, что E и D должны удовлетворять условию:

    D(E(M)) = M,


    для любого сообщения M.

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

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

    20. Система RSA


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

    Под простым числом будем понимать такое число, которое делится только на 1 и на само себя. Взаимно простыми числами будем называть такие числа, которые не имеют ни одного общего делителя, кроме 1.

    Чтобы использовать алгоритм RSA надо сначало сгенерировать открытый и секретный ключи, выполнив следующие шаги:

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

    2. Определим n как результат умножения p на q ( n = p*q ).

    3. Выберем большое случайное число, которое назовем d. Это число должно быть взаимно простым с результатом умножения (p-1) * (q-1).

    4. Определим такое число е, для которого является истинным следующее соотношение: (e * d) mod ((p-1) * (q-1)) = 1.

    5. Назовем открытым ключем числа е и n, а секретным ключем числа d и n.

    Теперь, чтобы зашифровать данные по известному ключу {e,n}, необходимо сделать следующее:

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

    • зашифровать текст, рассматриваемый как последовательность чисел M(i), по формуле:
            С(i) = (M(i)^e) mod n.

    Чтобы расшифровать эти данные используя секретный ключ {d,n}, необходимо выполнить следующие вычисления: M(i) = (C(i)^d) mod n. В результате будет получено множество чисел M(i), которые представляют собой исходный текст.

    Приведем простой пример использования метода RSA для шифрования сообщения "CAB". Для простоты будем использовать очень маленькие числа (на практике используются намного большие числа).

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

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

    3. Найдем (р-1) * (q-1) = 20. Следовательно в качестве d выберем любое число, которое является взаимно простым с 20, например d = 3.

    4. Выберем число e. В качестве такого числа может быть взято любое число, для которого удовлетворяется соотношение (e*3) mod 20 = 1, например 7.

    5. Представим шифруемое сообщение как последовательность целых чисел в диапазоне 0...32. Пусть буква A изображается числом 1, буква B - числом 2, а буква C - числом 3. Тогда сообщение можно представить в виде последовательности чисел 3 1 2.
      Зашифруем сообщение, используя ключ {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.

    6. Попытаемся расшифровать сообщение {9,1,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.
            Таким образом, в результате расшифрования сообщения получено исходное сообщение "CAB".

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

    Оценки сложности задачи ДИСКРЕТНОГО ЛОГАРИФМИРОВАНИЯ в зависимости от длины двоичной записи простого числа P (при правильном его выборе) приведены в таблице:

    Длина P
    (в битах)


    Сложность
    определения
    ключа x


    Память
    используемая
    алгоритмом
    (в битах)


    Время решения задачи
    на компьюре типа 10
    9 оп/c

    128

    2*1012

    7*106

    Несколько минут

    200

    1016

    108

    Несколько месяцев

    256

    9*1017

    109

    Несколько десятков лет

    512

    4*1024

    3*1012

    Более 100 лет непрерывной работы

    1024

    1034

    1017

    1500

    1041

    8*1020

    2000

    7*1047

    1024

    2200

    1050

    1025













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

    Длина симметричного ключа
    (в битах)


    Длина открытого ключа
    (в битах)


    56

    384

    64

    512

    80

    768

    112

    1792

    128

    2304

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

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

    1   2   3   4   5   6


    написать администратору сайта