Объяснение принципов современной криптографии на базе PKI на простом примере

Эльвира Трифонова · 25 окт 2021 · 3570 · Поделиться

Если вы работаете в сфере кибербезопасности или в любой другой области, где рабочее место сотрудника — компьютер, рано или поздно вам придется объяснять принципы криптографии с открытыми ключами и основы цифровой подписи нетехническим специалистам. С недавним ростом перехода на удаленную работу и историями о нарушениях в системе, компьютерная безопасность стала темой обсуждения даже среди непрофессионалов.

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

Именно тогда я наткнулся на статью Панайотиса Вриониса «Криптография с открытым ключом для не-гиков». Это и стало моей аналогией, пока мой профессор информатики доктор Робин Доус не указал на ее недостаток. Воспользовавшись его помощью и предложением Мэтью Эрнеста, я улучшил ее и вот что у меня получилось. Я надеюсь, вы сочтете ее полезной, когда будете пытаться кому-либо объяснить эти концепции.

Коробка

Представьте себе коробку со специальным замком, как на картинке ниже:

 

Замок имеет три положения:

  1. Когда замок находится в положении «9:00», ящик заблокирован, и его содержимое недоступно.
  2. Когда замок находится в положении «12:00», ящик разблокирован, что означает, что вы можете открыть его и просмотреть его содержимое.
  3. Когда замок находится в положении «3:00», ящик заблокирован, и его содержимое недоступно.

Чтобы не заблудиться в бесконечных «А что, если ...?» касаемо, предположим, что взломать замок или сломать коробку непомерно дорого.

Ключи

Есть два типа ключей, которые работают с замком ящика.

Закрытый ключ

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

 

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

 

Открытый ключ

Совсем другое отношение ко второму типу ключей. В отличие от первого ключа, вы сделали много-много копий этих ключей. Вы дали их всем, кого знаете, и даже людям, которых не знаете. Вы оставили их в максимально возможном количестве общественных мест: в ресторанах, магазинах, оживленных улицах, темных переулках и в любом другом месте, через которое вам довелось пройти. Вы даже оставили их в других городах и даже в других странах! Из-за того, как вы с ним обращаетесь, он называется открытым ключом.

 

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

 

Как они работают вместе

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

  • Если ящик заблокирован открытым ключом, разблокировать его может только закрытый ключ.
  • Если ящик заблокирован закрытым ключом, только открытый ключ может разблокировать его.

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

Можно использовать коробку и ключи, чтобы создать два полезных вида защищенной связи:

  1. Я могу отправить вам секретное сообщение.
  2. Вы можете отправить мне сообщение с доказательством того, что вы (а не какой-то самозванец) отправили его и что оно не было изменено в пути.

Давайте подробнее рассмотрим каждый из этих видов защищенной связи.

Отправка секретных сообщений

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

У каждого из нас есть группа миньонов*, которые доставляют наши сообщения. Мы им доверяем... до определенной степени. Нашим противникам было бы слишком легко перехватить эти сообщения с помощью подкупа или силой.

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

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

Я помещаю свое сообщение в открытый ящик. Поскольку он открыт, он разблокирован, значит, замок находится в положении «12:00».

Я использую ту копию открытого ключа, что у меня есть, чтобы заблокировать его, поворачивая против часовой стрелки из разблокированного положения «12:00» в положение «9:00».

 

Теперь сообщение готово к тому, чтобы быть доставленным вам миньоном.

Я не волнуюсь, что мой миньон или кто-либо еще, кроме вас, сможет прочитать сообщение, пока оно находится в пути. Хотя любой может легко найти открытый ключ, он не может использовать его для разблокировки ящика. Только закрытый ключ может разблокировать ящик, заблокированный открытым ключом.

Получив коробку, вы используете закрытый ключ, чтобы открыть ее, повернув ключ по часовой стрелке из положения «3:00» в положение «12:00».

 

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

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

Подписание сообщений

Сценарий использования «секретных сообщений» для ящика и закрытого и открытого ключей интуитивно понятен: любой, у кого есть открытый ключ, может заблокировать сообщение, но только владелец закрытого ключа может его разблокировать.

Есть еще один способ использовать ящик и ключи: вы можете заблокировать сообщение с помощью закрытого ключа, который может разблокировать любой, у кого есть открытый ключ. Каким же образом можно использовать систему, в которой каждый может разблокировать коробку?

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

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

Такой способ есть: коробка!

В этом сценарии вы помещаете свое сообщение в поле открытой коробки. Поскольку она открыта, это означает, что замок разблокирован, то есть находится в положении «12:00».

Используя закрытый ключ, вы «подписываете» сообщение, другими словами, блокируете его, поворачивая ключ против часовой стрелки из положения «12:00» в положение «9:00».

 

Один из ваших миньонов доставляет мне коробку.

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

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

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

Можно запереть ящик. Придется сделать это с помощью открытого ключа, а это значит, что только закрытый ключ может разблокировать его. Я не смог бы разблокировать ящик с помощью единственного ключа, который у меня был — открытого ключа, что привело бы меня к выводу, что кто-то открыл ящик раньше меня.

Итак, если коробка окажется на моем пороге и…

  • она закрыта
  • я могу разблокировать его открытым ключом

… тогда я могу быть уверен, что сообщение пришло от вас и не было изменено в пути.

 

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

Это общая идея цифровых подписей: подписать закрытым ключом, проверить открытым ключом.

Как насчет отправки секретного и подписанного сообщения?

Вы можете подумать, что отправка сообщения, которое является одновременно секретным и подписанным, это паранойя. Я бы сказал: «Паранойя — это ошибочное впечатление, будто люди хотят тебя достать».

Предположим, я хочу отправить вам секретное подписанное сообщение. Я могу сделать это при помощи двух коробок:

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

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

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

Это не ключи и коробки, а числа и алгоритмы.

Конечно, мы на самом деле не имеем дела с ящиками, ключами (по крайней мере, теми, которые входят в замки) или миньонами. Вот список элементов этих историй и их эквивалентов в реальном мире:

Сообщение: все, что вы хотите отправить, что вы можете просматривать или редактировать на компьютере. Это может быть текст, одно или несколько изображений, аудио- или видеозапись, база данных или даже приложение. Что касается компьютера, сообщения представляют собой просто длинный ряд цифр.

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

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

*Миньоны: способ отправки сообщения. Это может быть интернет, но с такой же легкостью он может оказаться настоящим миньоном, например, ничего не подозревающим летним практикантом с USB-ключом.

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

Переведено со статьи, полный текст доступен по ссылке.

Вернуться к списку новостей

Подпишитесь и получайте новые статьи по почте

Заполните поле Подписаться

Подписываясь, вы соглашаетесь на получение информационных сообщений от компании
ООО «Цифровые технологии» на условиях Политики конфиденциальности

Спасибо, что подписались
на нашу рассылку!

Узнавайте новости первыми —
подпишитесь на нашу новостную рассылку

Заполните поле
Подписаться

Подписываясь, вы соглашаетесь на получение информационных сообщений от компании
ООО «Цифровые технологии» на условиях Политики конфиденциальности

Спасибо, что подписались
на нашу рассылку!