image

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

Этот пост — перевод статьи.

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

Алиса, Боб и… голуби?


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

Представим это вместо электронных сигналов, данные переносят почтовые голуби. И они точно знаю куда им надо лететь. Разница только в скорости передачи.
Представим что есть Алиса, Боб и они решили на початится.

Первое сообщение


Если Алиса решила написать сообщение Бобу, то она прикрепляет сообщение к ножке почтового голубя и отправляет Бобу. Боб получает сообщение, читает его. Как бы всё круто. Так работает HTTP. Написали сообщение, отправили, адресат получил.

Но представим ситуацию, Света перехватывает голубя Алисы, меняет сообщение и отправляет его Бобу. У Боба нет механизма узнать, было ли сообщение перехвачено и изменено.
Это явный минус HTTP. Его можно перехватить и изменить в процессе передачи.

Секретный код


Но что если Алиса и Боб узнали про перехваты и решили защититься с помощью секретного кода. Они условились, что будут сдвигать каждую букву из сообщения на три позиции. К примеру А > Г, В > E. Тогда сообщение “Я тебя люблю” превратится в “В хздв обдоб”.

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

Круто!

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

Как передать ключ?


Симметричное шифрование — крутая и защищённая штука, если ключ шифрования знаю только отправитель или получатель. В нашем случае Алиса и Боб.

В шифре, которой выбрали Алиса и Боб, ключ это смещение букв. Ключ может быть равен и трём и десяти и двадцати.

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

Вот такой метод перехвата, дешифровки, чтения, изменения, и отправки вновь зашифрованного сообщения называется Man in the Middle Attack или атака “Человек посередине”.

Голуби и шкатулки


Боб и Алиса придумали новую и более лучшую систему.

  1. Когда Алиса хочет отправить сообщение, она отправляет пустого голубя без сообщения. Чтобы Боб узнал о начале переписки.
  2. Боб отправляет в ответ настоящий ключ и шкатулку
  3. Алиса пишет сообщение, кладёт в шкатулку, закрывает ключом и отправляет только шкатулку
  4. Боб открывает шкатулку своим дубликатом ключа.

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

Но проблема осталась. Света может просто раздолбать шкатулку, посмотреть сообщение и отправить новое сообщение в новой шкатулке.

Как обезопасить шкатулку?


Для защиты от подделок шкатулок, Боб и Алиса договорились их подписывать и ставить на них печать. Проблема только в том, что Алиса и Боб никогда не виделись и не знаю печатей и подписей друг друга. Тогда они обратились в Ивану.

Иван — это очень уважаемый авторитетный, честный мужик. Он получает деньги за установку свой печати и подписи на шкатулки. Он только лично, при адресате ставит печать, лично убеждаясь, что Боб этот Боб, а Алиса это Алиса. Он бережет свой авторитет и на уговоры Светы поставить печать, что шкатулка как бы от Алисы, откажется. В реальной жизни Иван называется Certification Authority или Центр сертификации.
Теперь Алиса и Боб переписываются таким образом:

  1. Алиса отправляет пустого голубя
  2. Боб в ответ отправляет ключ и подписанную шкатулку Иваном
  3. В ответ Алиса пишет на листочке бумаги ключ для шифрования сообщений, закрывает его ключом и отправляет Бобу.
  4. Боб проверяет печать и подпись Боба
  5. Дальше они отправляют сообщения без шкатулок, просто шифруя сообщения
  6. Время от времени меняю ключи, с помощью шкатулок

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

Комментарии (53)


  1. darjke
    16.01.2018 14:25

    Очень просто и понятно, спасибо!


  1. korj000
    16.01.2018 14:54
    +1

    При чем тут HTTPS? Пост можно было назвать «Объяснение асимметричного шифрования на почтовых голубях»


    1. justmara
      17.01.2018 09:56

      "ассиметричное шифрование" — это два слова, 24 буквы и слишком заумно звучит. а про https сейчас даже в телевизоре говорят!


    1. saboteur_kiev
      18.01.2018 14:00

      IMHO до асимметричного шифрования тут не дошло. Дошло только до trusted certificates.


  1. dkukushkin
    16.01.2018 15:07

    Боб в ответ отправляет ключ и подписанную шкатулку Иваном

    Светлана же сможет сделать дубликат ключа, о чем вы сделали оговорку:

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


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

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


    1. Ryder95
      16.01.2018 21:59

      Ну тут вроде как перевод, так что к автору претензий нет)


      1. martin_wanderer
        17.01.2018 11:30

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


      1. linuxover
        17.01.2018 13:57

        алиса, боб + света и иван


        непохоже на перевод


        или это современный тренд нехороших русскими делать (света)


        тогда иван непонятно почему


        в общем думаю что это не перевод :)


        1. alix_ginger
          17.01.2018 14:01

          Хорошая попытка, но
          image


  1. Arty_K
    16.01.2018 15:20

    Довольно наглядно, но русский язык подтянуть не помешало бы :)


    Можно сколько угодно закидывать меня тапками, но читать "Боб и Алиса придумали новую и более ЛУЧШУЮ систему." без слёз сложно.


    1. alemiks
      16.01.2018 15:59
      +1

      так вы не в курсе про Свету из Иваново? Это ж от неё пошло это «правило» :)



  1. atomAltera
    16.01.2018 16:09

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


  1. Juma
    16.01.2018 16:34

    Интересно получилось Алиса, Боб, Света и вдруг, Иван.


    1. hdfan2
      16.01.2018 18:07

      Да уж, хотя бы Боба на Бориса заменили бы.


      1. tyomitch
        16.01.2018 20:13

        А Алису — на Аню?


        1. StjarnornasFred
          16.01.2018 22:56

          В школьных задачах обычно бывали Петя и Вася, если нужно — Тима.


          1. alix_ginger
            17.01.2018 13:53

            С Алисой и Бобом прелесь в том, что они начинаются с A и B. Петя и Вася не так хороши для этого. Ну и интрига — интереснее учиться на примере тайн Алисы и Боба. А Петя и Вася — что они интересного могут скрывать?


            1. buggykey
              17.01.2018 15:34

              Да, почти как в том анекдоте:
              Преподаватель:
              — Возьмем коэффициент «K»… Нет, «K» — мало, возьмем «N».


            1. trawl
              17.01.2018 19:04

              Если они собираются шифровать «Я тебя люблю» (как в тексте), то они скрывают чуть больше, чем Алиса и Боб :)


            1. StjarnornasFred
              18.01.2018 00:04

              Первый и второй


          1. Temych
            19.01.2018 21:34

            Это тогда, теперь в тренде Вова и Лёша (если нужно — Дима).


    1. Temych
      19.01.2018 21:32

      Т.е. появление Светы вас не смутило? )


      1. Juma
        19.01.2018 21:50

        Немного смутило, но предположил что автор заменил Кэрол, Карлос или Чарли (Carol, Carlos or Charlie) Светой.


  1. System12
    16.01.2018 16:44

    Криптография для детей. Полезно.


    1. tyomitch
      16.01.2018 17:21

      В детской книжке, изданной в СССР в 1988 г., такое объяснение асимметричного шифрования «на шкатулках с ключиками» уже было. Только голубей там не было.
      (Скан нужной страницы я найти не смог; может быть, сообщество поможет?)


      1. eyeless_watcher
        16.01.2018 18:13
        +2

        Там оно на четырех страницах
        image
        image
        image
        image


  1. odissey_nemo
    16.01.2018 17:38

    Что-то с этими шкатулками не так.

    Что же мешает любопытной шпионке Свете, будучи посередине, перехватить шкатулку Бобика, отослать Але свою шкатулку со своим ключом, получить от Али обратное сообщение в своей шкатулке, которую открыть ей как два байта переслать, прочесть, изменить, если нужно, положить уже в шкатулку Боба и отослать наивному Бобу его собственную шкатулку с прочтённым/изменённым письмом Али.
    А?


    1. Serge78rus
      16.01.2018 17:53
      +1

      Мешает то, что шкатулка Боба подписана Иваном именно, как шкатулка Боба. Поэтому Алиса в состоянии обнаружить подмену.


      1. odissey_nemo
        16.01.2018 18:30
        +1

        Тогда Свете надо встать ещё и между Бобом и Иваном, да?


        1. lorc
          16.01.2018 21:11

          Потому что в реальности сам Иван не подписывает сообщения от Алисы и Боба. Иван подписывает «подписывалку» Алисы и «подписывалку» Боба. А саму подпись Ивана Алиса с Бобом получили заранее.

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


          1. odissey_nemo
            17.01.2018 10:09

            Чёрт, этой Свете тогда придётся встать между всеми возможными участниками конфликта писанины? И мы даже знаем такую Свету. Например, ею легко может оказаться Микрософт :o) И что тогда?


            1. lorc
              17.01.2018 15:24

              Свете придется или стать Иваном, или убедить Ивана что она Алиса, или подменить публичный ключ Ивана на машинах Алисы и Боба.


    1. martin_wanderer
      17.01.2018 11:27

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

      Alice sends the pigeon back carrying a box with an open lock, but keeping the key.

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


  1. MetaDone
    16.01.2018 18:01
    +1

    На втором шаге можно обойтись и без Ивана — когда сертификат самоподписаный. Только ему наверно приходится говорить «Верь мне, я Боб, все будет хорошо». Тут уже Алиса может и не поверить, сказав что без контроля Ивана ничего не получится


  1. JTG
    16.01.2018 18:20
    +1

    Ещё баянистых видео

    Обмен ключами по протоколу Диффи-Хеллмана


  1. el777
    16.01.2018 23:44

    представим ситуацию, Света перехватывает голубя Алисы,

    Стойте-стойте! Этим же всегда Ева занималась! :)
    У нее появилась конкурентка? )


    1. vlreshet
      17.01.2018 10:46

      Может Света у неё стажируется. Интернет всё растёт, вот Ева и расширяет штат сотрудников :)


  1. ooprizrakoo
    17.01.2018 01:49

    Так работает HTTP. Написали сообщение, отправили, адресат получил.

    В вашей реализации это больше UDP напоминает :) Ведь адресат не подтвердил получение :)
    А вдруг голубя сожрал хищный птиц? :)


    1. alexxisr
      17.01.2018 12:24

      а разве http требует именно tcp под собой? можно же и поверх udp слать http запросы/ответы


      1. ooprizrakoo
        17.01.2018 12:48

        можно конечно, реализаций «http over XXX» много.
        Просто, по стандарту, протокол хттп всё равно работает по принципу «запрос+ответ», и в ответ на полученную информацию получатель все равно должен отправить код подтверждения-выполнения (ну, или ошибки).


  1. hiwent
    17.01.2018 02:17

    Спасибо за перевод статьи!
    Пытался разобраться с принципом работы сертификатов, но не понимаю один из этапов в разделе Обезопасить шкатулку (в оригинальном тексте не нашёл его).
    Вот этот:

    Боб проверяет печать и подпись Боба

    Разве на этом этапе Боб проверяет свой сертификат? Или от Certification Authority?


    1. trusted
      17.01.2018 16:37

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


      это ошибка в тексте. Видимо имеется ввиду, что Алиса отправляет в сообщении свой клиентский сертификат Бобу и Боб проверяет его.


      1. hiwent
        19.01.2018 01:37

        Спасибо, а Боб в состоянии проверить его, потому что её сертификат подписан CA?


        1. trusted
          19.01.2018 09:09

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

          Если на практике то с помощью утилиты openssl подлинность серверного сертификата (server.crt) можно проверить с помощью CA (cacert.pem) так:

          $ openssl verify -verbose -CAfile cacert.pem server.crt
          server.crt: OK


  1. trusted
    17.01.2018 09:57

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

    Но представим ситуацию, Света перехватывает голубя Алисы, меняет сообщение и отправляет его Бобу. У Боба нет механизма узнать, было ли сообщение перехвачено и изменено.
    Это явный минус HTTP. Его можно перехватить и изменить в процессе передачи.


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

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

    Вот такой метод перехвата, дешифровки, чтения, изменения, и отправки вновь зашифрованного сообщения называется Man in the Middle Attack или атака “Человек посередине”.


    Вот такой описанный метод перехвата не называется атакой Man in the Middle. Ключ передается в зашифрованном виде поэтому Света не может его прочитать. Света вступает в диалог с А и Б, представляясь от их лица, это дает ай возможность в расшифровке ключей

    Боб и Алиса придумали новую и более лучшую систему.
    1. Когда Алиса хочет отправить сообщение, она отправляет пустого голубя без сообщения. Чтобы Боб узнал о начале переписки.
    2. Боб отправляет в ответ настоящий ключ и шкатулку
    3. Алиса пишет сообщение, кладёт в шкатулку, закрывает ключом и отправляет только шкатулку
    4. Боб открывает шкатулку своим дубликатом ключа.

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

    Для защиты от подделок шкатулок, Боб и Алиса договорились их подписывать и ставить на них печать


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


  1. ildarz
    17.01.2018 13:12

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


    1. myrslok
      17.01.2018 16:33

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


      1. ildarz
        17.01.2018 16:46

        Если вы соберетесь "обед философов" использовать в качестве базы для аналогии, это внезапно станет важным. Если, конечно, цель — найти общий язык с собеседником, а не выпендриться.


        1. myrslok
          17.01.2018 16:52

          Станет важным, как в реальности обедали философы? Вроде того, что Кант не пил пива?
          Не могу с этим согласиться!


  1. gro
    17.01.2018 13:51
    +1

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


  1. Loreweil
    19.01.2018 05:20

    Еще одно наглядное видео по теме.