Interested Article - Криптосистема с открытым ключом

Криптографическая система с открытым ключом (разновидность асимметричного шифрования , асимметричного шифра ) — система шифрования и/или электронной подписи (ЭП), при которой открытый ключ передаётся по открытому (то есть незащищённому, доступному для наблюдения) каналу и используется для проверки ЭП и для шифрования сообщения. Для генерации ЭП и для расшифровки сообщения используется закрытый ключ . Криптографические системы с открытым ключом в настоящее время широко применяются в различных сетевых протоколах , в частности, в протоколах TLS и его предшественнике SSL (лежащих в основе HTTPS ), в SSH . Также используется в PGP , S/MIME .

Идея криптосистемы с открытым ключом

Общие принципы

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

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

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

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

Этот принцип можно объяснить через бытовую аналогию «замо́к — ключ от замка́» для отправки посылки. У участника A есть личный замок и ключ от него. Если участник А хочет получить секретную посылку от участника Б, то он публично передаёт ему свой замок. Участник Б защёлкивает замок на секретной посылке и отправляет её участнику А. Получив посылку, участник А открывает ключом замок и получает посылку.

Знание о передаче замка и перехват посылки ничего не дадут потенциальному злоумышленнику: ключ от замка есть только у участника А, поэтому посылка не может быть вскрыта.

Реализация через одностороннюю функцию

Идея криптографии с открытым ключом очень тесно связана с идеей односторонних функций , то есть таких функций f ( x ) {\displaystyle f(x)} , что по известному x {\displaystyle x} довольно просто найти значение f ( x ) {\displaystyle f(x)} , тогда как определение x {\displaystyle x} из f ( x ) {\displaystyle f(x)} невозможно за разумный срок.

Но сама односторонняя функция бесполезна в применении: ею можно зашифровать сообщение, но расшифровать нельзя. Поэтому криптография с открытым ключом использует односторонние функции с лазейкой. Лазейка — это некий секрет, который помогает расшифровать. То есть существует такой y {\displaystyle y} , что, зная f ( x ) {\displaystyle f(x)} и y {\displaystyle y} , можно вычислить x {\displaystyle x} . Например, если разобрать часы на множество составных частей, то очень сложно собрать вновь работающие часы. Но если есть инструкция по сборке (лазейка), то можно легко решить эту проблему.

Получатель информации формирует открытый ключ и «лазейку» (другими словами, открытую и закрытую часть ключа), затем передает открытый ключ отправителю, а «лазейку» оставляет у себя. Отправитель шифрует информацию на основе открытого ключа: такую зашифрованную информацию просто расшифровать, лишь имея одновременно и открытый ключ, и «лазейку». В терминах функции, получатель формирует f ( ) {\displaystyle f()} с лазейкой y {\displaystyle y} , затем передает информацию о параметрах функции f ( ) {\displaystyle f()} отправителю (при этом, даже зная параметры функции f ( ) {\displaystyle f()} , невозможно обнаружить «лазейку» за разумный срок). После этого отправитель формирует шифрованное сообщение f ( x ) {\displaystyle f(x)} , а получатель извлекает x {\displaystyle x} из f ( x ) {\displaystyle f(x)} , зная y {\displaystyle y} (где x {\displaystyle x} - исходное нешифрованное сообщение).

Примеры

Понять идеи и методы криптографии с открытым ключом помогает следующий пример — хранение паролей в удалённом компьютере, к которому должны подключаться пользователи. Каждый пользователь в сети имеет свой пароль. При входе он указывает имя и вводит секретный пароль. Но если хранить пароль на диске удалённого компьютера, то кто-нибудь его может считать (особенно легко это сделать администратору этого компьютера) и получить доступ к секретной информации. Для решения задачи используется односторонняя функция. При создании секретного пароля в компьютере сохраняется не сам пароль, а результат вычисления функции от этого пароля и имени пользователя. Например, пользователь Алиса придумала пароль «Гладиолус». При сохранении этих данных вычисляется результат функции f {\displaystyle f} ( АЛИСА_ГЛАДИОЛУС ), пусть результатом будет строка РОМАШКА , которая и будет сохранена в системе. В результате файл паролей примет следующий вид:

Имя f {\displaystyle f} (имя_пароль)
АЛИСА РОМАШКА
БОБ НАРЦИСС

Вход в систему теперь выглядит так:

Имя: АЛИСА
Пароль: ГЛАДИОЛУС

Когда Алиса вводит «секретный» пароль, компьютер проверяет, даёт или нет функция, применяемая к АЛИСА_ГЛАДИОЛУС , правильный результат РОМАШКА , хранящийся на диске компьютера. Стоит изменить хотя бы одну букву в имени или в пароле, и результат функции будет совершенно другим. «Секретный» пароль не хранится в компьютере ни в каком виде. Файл паролей может быть теперь просмотрен другими пользователями без потери секретности, так как функция практически необратимая.

В предыдущем примере используется односторонняя функция без лазейки, поскольку не требуется по зашифрованному сообщению получить исходное. В следующем примере рассматривается схема с возможностью восстановить исходное сообщение с помощью «лазейки», то есть труднодоступной информации. Для шифрования текста можно взять большой абонентский справочник, состоящий из нескольких толстых томов (по нему очень легко найти номер любого жителя города, но почти невозможно по известному номеру найти абонента). Для каждой буквы из шифруемого сообщения выбирается имя, начинающееся на ту же букву. Таким образом букве ставится в соответствие номер телефона абонента. Отправляемое сообщение, например « КОРОБКА », будет зашифровано следующим образом:

Сообщение Выбранное имя Криптотекст
К Королёв 5643452
О Орехов 3572651
Р Рузаева 4673956
O Осипов 3517289
Б Батурин 7755628
К Кирсанова 1235267
А Арсеньева 8492746

коробка 89296500297 Фарида

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

Примеры таких криптотекстов:

Криптотекст 1 Криптотекст 2 Криптотекст 3
1235267 5643452 1235267
3572651 3517289 3517289
4673956 4673956 4673956
3517289 3572651 3572651
7755628 7755628 7755628
5643452 1235267 5643452
8492746 8492746 8492746

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

Схема шифрования с открытым ключом

Пусть K {\displaystyle K} — пространство ключей, а e {\displaystyle e} и d {\displaystyle d} — ключи шифрования и расшифрования соответственно. E e {\displaystyle E_{e}} — функция шифрования для произвольного ключа e K {\displaystyle e\in K} такая, что E e ( m ) = c {\displaystyle E_{e}(m)=c} . Здесь c C {\displaystyle c\in C} , где C {\displaystyle C} — пространство шифротекстов, а m M {\displaystyle m\in M} , где M {\displaystyle M} — пространство сообщений.

D d {\displaystyle D_{d}} — функция расшифрования, с помощью которой можно найти исходное сообщение m {\displaystyle m} , зная шифротекст c {\displaystyle c} : D d ( c ) = m {\displaystyle D_{d}(c)=m} , { E e : e K } {\displaystyle \{E_{e}:e\in K\}} — набор шифрования, а { D d : d K } {\displaystyle \{D_{d}:d\in K\}} — соответствующий набор для расшифрования. Каждая пара ( E , D ) {\displaystyle (E,D)} имеет свойство: зная E e {\displaystyle E_{e}} , невозможно решить уравнение E e ( m ) = c {\displaystyle E_{e}(m)=c} , то есть для данного произвольного шифротекста c C {\displaystyle c\in C} невозможно найти сообщение m M {\displaystyle m\in M} . Это значит, что по данному e {\displaystyle e} невозможно определить соответствующий ключ расшифрования d {\displaystyle d} . E e {\displaystyle E_{e}} является односторонней функцией, а d {\displaystyle d} .

Ниже показана схема передачи информации лицом А лицу В. Они могут быть как физическими лицами, так и организациями и так далее. Но для более лёгкого восприятия принято участников передачи отождествлять с людьми, чаще всего именуемыми Алиса и Боб. Участника, который стремится перехватить и расшифровать сообщения Алисы и Боба, чаще всего называют Евой.

  1. Боб выбирает пару ( e , d ) {\displaystyle (e,d)} и шлёт ключ шифрования e {\displaystyle e} (открытый ключ) Алисе по открытому каналу, а ключ расшифрования d {\displaystyle d} (закрытый ключ) защищён и секретен (он не должен передаваться по открытому каналу).
  2. Чтобы послать сообщение m {\displaystyle m} Бобу, Алиса применяет функцию шифрования, определённую открытым ключом e {\displaystyle e} : E e ( m ) = c {\displaystyle E_{e}(m)=c} , c {\displaystyle c} — полученный шифротекст.
  3. Боб расшифровывает шифротекст c {\displaystyle c} , применяя обратное преобразование D d {\displaystyle D_{d}} , однозначно определённое значением d {\displaystyle d} .

Научная основа

Начало асимметричным шифрам было положено в работе «Новые направления в современной криптографии» Уитфилда Диффи и Мартина Хеллмана , опубликованной в 1976 году . Находясь под влиянием работы Ральфа Меркла о распространении открытого ключа, они предложили метод получения секретных ключей, используя открытый канал. Этот метод экспоненциального обмена ключей, который стал известен как обмен ключами Диффи — Хеллмана , был первым опубликованным практичным методом для установления разделения секретного ключа между заверенными пользователями канала. В 2002 году Хеллман предложил называть данный алгоритм «Диффи — Хеллмана — Меркле», признавая вклад Меркле в изобретение криптографии с открытым ключом. Эта же схема была разработана ( англ. ) в 1970-х, но держалась в секрете до 1997 года . Метод Меркле по распространению открытого ключа был изобретён в 1974 и опубликован в 1978 году , его также называют загадкой Меркле.

В 1977 году учёными Рональдом Ривестом , Ади Шамиром и Леонардом Адлеманом из Массачусетского технологического института был разработан алгоритм шифрования, основанный на проблеме разложения на множители. Система была названа по первым буквам их фамилий ( RSA — Rivest, Shamir, Adleman). Эта же система была изобретена в 1973 году ( англ. ), работавшим в центре правительственной связи ( GCHQ ), но эта работа хранилась лишь во внутренних документах центра, поэтому о её существовании не было известно до 1977 года . RSA стал первым алгоритмом, пригодным и для шифрования, и для цифровой подписи.

Вообще, в основу известных асимметричных криптосистем кладётся одна из сложных математических проблем, которая позволяет строить односторонние функции и функции-лазейки. Например, криптосистемы Меркля — Хеллмана и опираются на так называемую задачу об укладке рюкзака .

Основные принципы построения криптосистем с открытым ключом

  1. Начинаем с трудной задачи P {\displaystyle P} . Она должна решаться сложно в смысле теории: не должно быть алгоритма, с помощью которого можно было бы перебрать все варианты решения задачи P {\displaystyle P} за полиномиальное время относительно размера задачи. Более правильно сказать: не должно быть известного полиномиального алгоритма, решающего данную задачу — так как ни для одной задачи ещё пока не доказано, что для неё подходящего алгоритма нет в принципе.
  2. Можно выделить легкую подзадачу P {\displaystyle P'} из P {\displaystyle P} . Она должна решаться за полиномиальное время и лучше, если за линейное.
  3. «Перетасовываем и взбалтываем» P {\displaystyle P'} , чтобы получить задачу P {\displaystyle P''} , совершенно не похожую на первоначальную. Задача P {\displaystyle P''} должна по крайней мере выглядеть как оригинальная труднорешаемая задача P {\displaystyle P} .
  4. P {\displaystyle P''} открывается с описанием, как она может быть использована в роли ключа зашифрования. Как из P {\displaystyle P''} получить P {\displaystyle P'} , держится в секрете как секретная лазейка.
  5. Криптосистема организована так, что алгоритмы расшифрования для легального пользователя и криптоаналитика существенно различны. В то время как второй решает P {\displaystyle P''} -задачу, первый использует секретную лазейку и решает P {\displaystyle P'} -задачу.

Криптография с несколькими открытыми ключами

  • В следующем примере показана схема, в которой Алиса шифрует сообщение так, что только Боб может прочитать его, и наоборот, Боб шифрует сообщение так, что только Алиса может расшифровать его.

Пусть есть 3 ключа K A {\displaystyle K_{A}} , K B {\displaystyle K_{B}} , K C {\displaystyle K_{C}} , распределенные так, как показано в таблице.

Лицо Ключ
Алиса K A {\displaystyle K_{A}}
Боб K B {\displaystyle K_{B}}
Кэрол K C {\displaystyle K_{C}}
Дэйв K A {\displaystyle K_{A}} , K B {\displaystyle K_{B}}
Эллен K B {\displaystyle K_{B}} , K C {\displaystyle K_{C}}
Франк K A {\displaystyle K_{A}} , K C {\displaystyle K_{C}}

Тогда Алиса может зашифровать сообщение ключом K A {\displaystyle K_{A}} , а Эллен расшифровать ключами K B {\displaystyle K_{B}} , K C {\displaystyle K_{C}} , Кэрол — зашифровать ключом K C {\displaystyle K_{C}} , а Дэйв расшифровать ключами K A {\displaystyle K_{A}} , K B {\displaystyle K_{B}} . Если Дэйв зашифрует сообщение ключом K A {\displaystyle K_{A}} , то сообщение сможет прочитать Эллен, если ключом K B {\displaystyle K_{B}} , то его сможет прочитать Франк, если же обоими ключами K A {\displaystyle K_{A}} и K B {\displaystyle K_{B}} , то сообщение прочитает Кэрол. По аналогии действуют и другие участники. Таким образом, если используется одно подмножество ключей для шифрования, то для расшифрования требуются оставшиеся ключи множества. Такую схему можно использовать для n ключей.

Шифруется ключом Расшифровывается ключом
K B {\displaystyle K_{B}} и K C {\displaystyle K_{C}} K A {\displaystyle K_{A}}
K A {\displaystyle K_{A}} и K C {\displaystyle K_{C}} K B {\displaystyle K_{B}}
K A {\displaystyle K_{A}} и K B {\displaystyle K_{B}} K C {\displaystyle K_{C}}
K C {\displaystyle K_{C}} K A {\displaystyle K_{A}} , K B {\displaystyle K_{B}}
K A {\displaystyle K_{A}} K B {\displaystyle K_{B}} , K C {\displaystyle K_{C}}
K B {\displaystyle K_{B}} K A {\displaystyle K_{A}} , K C {\displaystyle K_{C}}
  • Теперь можно посылать сообщения группам агентов, не зная заранее состав группы.

Рассмотрим для начала множество, состоящее из трех агентов: Алисы, Боба и Кэрол. Алисе выдаются ключи K A {\displaystyle K_{A}} и K B {\displaystyle K_{B}} , Бобу — K B {\displaystyle K_{B}} и K C {\displaystyle K_{C}} , Кэрол — K A {\displaystyle K_{A}} и K C {\displaystyle K_{C}} . Теперь, если отправляемое сообщение зашифровано ключом K C {\displaystyle K_{C}} , то его сможет прочитать только Алиса, последовательно применяя ключи K A {\displaystyle K_{A}} и K B {\displaystyle K_{B}} . Если нужно отправить сообщение Бобу, сообщение шифруется ключом K A {\displaystyle K_{A}} , Кэрол — ключом K B {\displaystyle K_{B}} . Если нужно отправить сообщение и Алисе и Кэрол, то для шифрования используются ключи K B {\displaystyle K_{B}} и K C {\displaystyle K_{C}} .

Преимущество этой схемы заключается в том, что для её реализации нужно только одно сообщение и n ключей (в схеме с n агентами). Если передаются индивидуальные сообщения, то есть используются отдельные ключи для каждого агента (всего n ключей) и каждого сообщения, то для передачи сообщений всем различным подмножествам требуется 2 n 2 {\displaystyle 2^{n}-2} ключей.

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

Криптоанализ алгоритмов с открытым ключом

Казалось бы, что криптосистема с открытым ключом — идеальная система, не требующая безопасного канала для передачи ключа шифрования. Это подразумевало бы, что два легальных пользователя могли бы общаться по открытому каналу, не встречаясь, чтобы обменяться ключами. К сожалению, это не так. Рисунок иллюстрирует, как Ева, выполняющая роль активного перехватчика, может захватить систему (расшифровать сообщение, предназначенное Бобу) без взламывания системы шифрования.

В этой модели Ева перехватывает открытый ключ e {\displaystyle e} , посланный Бобом Алисе. Затем создает пару ключей e {\displaystyle e'} и d {\displaystyle d'} , «маскируется» под Боба, посылая Алисе открытый ключ e {\displaystyle e'} , который, как думает Алиса, открытый ключ, посланный ей Бобом. Ева перехватывает зашифрованные сообщения от Алисы к Бобу, расшифровывает их с помощью секретного ключа d {\displaystyle d'} , заново зашифровывает открытым ключом e {\displaystyle e} Боба и отправляет сообщение Бобу. Таким образом, никто из участников не догадывается, что есть третье лицо, которое может как просто перехватить сообщение m {\displaystyle m} , так и подменить его на ложное сообщение m {\displaystyle m'} . Это подчеркивает необходимость аутентификации открытых ключей. Для этого обычно используют сертификаты . Распределённое управление ключами в PGP решает возникшую проблему с помощью поручителей [ неавторитетный источник ] [ источник не указан 3780 дней ] .

Ещё одна форма атаки — вычисление закрытого ключа, зная открытый (рисунок ниже). Криптоаналитик знает алгоритм шифрования E e {\displaystyle E_{e}} , анализируя его, пытается найти D d {\displaystyle D_{d}} . Этот процесс упрощается, если криптоаналитик перехватил несколько криптотекстов с, посланных лицом A лицу B.

Большинство криптосистем с открытым ключом основано на проблеме факторизации больших чисел. К примеру, RSA использует в качестве открытого ключа n произведение двух больших простых чисел. Сложность взлома такого алгоритма состоит в трудности разложения числа n на простые множители. Но эту задачу решить реально. И с каждым годом процесс разложения становится все быстрее. Ниже приведены данные разложения на множители с помощью алгоритма «Квадратичное решето».

Год Число десятичных разрядов
в разложенном числе
Во сколько раз сложнее разложить
на множители 512-битовое число
1983 71 > 20 млн
1985 80 > 2 млн
1988 90 250 тыс.
1989 100 30 тыс.
1993 120 500
1994 129 100

Также задачу разложения потенциально можно решить с помощью алгоритма Шора при использовании достаточно мощного квантового компьютера .

Для многих методов несимметричного шифрования криптостойкость, полученная в результате криптоанализа, существенно отличается от величин, заявляемых разработчиками алгоритмов на основании теоретических оценок. Поэтому во многих странах вопрос применения алгоритмов шифрования данных находится в поле законодательного регулирования. В частности, в России к использованию в государственных и коммерческих организациях разрешены только те программные средства шифрования данных, которые прошли государственную сертификацию в административных органах, в частности, в ФСБ , ФСТЭК .

Особенности системы

Применение

Алгоритмы криптосистемы с открытым ключом можно использовать :

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

Преимущества

Преимущества асимметричных шифров перед симметричными :

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

Недостатки

Недостатки алгоритма несимметричного шифрования в сравнении с симметричным:

  • в алгоритм сложнее внести изменения;
  • более длинные ключи — ниже приведена таблица, сопоставляющая длину ключа симметричного алгоритма с длиной ключа RSA с аналогичной криптостойкостью:
Длина симметричного ключа, бит Длина ключа RSA, бит
56 384
64 512
80 768
112 1792
128 2304
  • шифрование-расшифровывание с использованием пары ключей проходит на два-три порядка медленнее, чем шифрование-расшифрование того же текста симметричным алгоритмом;
  • требуются существенно бо́льшие вычислительные ресурсы, поэтому на практике асимметричные криптосистемы используются в сочетании с другими алгоритмами:
    1. для ЭЦП сообщение предварительно подвергается хешированию, а с помощью асимметричного ключа подписывается лишь относительно небольшой результат хеш-функции ;
    2. для шифрования они используются в форме гибридных криптосистем , где большие объёмы данных шифруются симметричным шифром на сеансовом ключе, а с помощью асимметричного шифра передаётся только сам сеансовый ключ.

Виды асимметричных шифров

См. также

Примечания

  1. Брюс Шнайер. Прикладная криптография. 2-е изд. Протоколы, алгоритмы и исходные тексты на языке Си. Глава 2.7 Цифровые подписи и шифрование.
  2. Саломаа А. Криптография с открытым ключом. с. 74-75
  3. Handbook of Applied Cryptography, Menezes A.J., Oorschot P.C., Vanstone S.A. С. 25—26
  4. Брюс Шнайер. Прикладная криптография. 2-е изд. Протоколы, алгоритмы и исходные тексты на языке Си. Глава 3.5
  5. (неопр.) 26 июля 2013 года.
  6. (неопр.) . Дата обращения: 4 декабря 2008. Архивировано из 24 мая 2010 года.
  7. Баричев С. Криптография без секретов. с. 20

Литература

  • Саломаа А. Криптография с открытым ключом. — М. : Мир, 1995. — 318 с. — ISBN 5-03-001991-X .
  • A. J. Menezes, P. C. van Oorschot, S. A. Vanstone. . — 1997. — ISBN 0-8493-8523-7 .
  • Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C. — М. : Триумф, 2002. — 816 с. — 3000 экз. — ISBN 5-89392-055-4 .

Ссылки

  • (рус.)

Same as Криптосистема с открытым ключом