Цифровая подпись

18 комментариев

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

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

  1. мы берем публичный ключ того кому хотим отправить сообщение;
  2. шифруем сообщение с помощью ключа;
  3. передаем сообщение по открытому каналу;
  4. адресат расшифровывает сообщение своим приватным ключом.

Представим что Боб получил зашифрованное сообщение от Алисы. Но от Алисы ли? Да, в конце письма может быть написано «С любовью, Алиса», но откуда нам знать, что это не подлая Ева представляется чужим именем? Но впрочем с любовными письмами это может показаться не такой большой проблемой, не так ли? Тогда представьте себе более серьезную организацию — банк. Банк у которого есть множество филиалов по всему миру с головным офисом, который выполняет и отвечает за все банковские операции по переводу денег. Откуда головному офису знать, что пришедшее письмо с просьбой перевести миллиард долларов на некий счет, пришло действительно от филиала как написано в письме, а не от злоумышленника, который хочет перевести эти деньги на свой счет?

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

Подпись документа

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

sign_short

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

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

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

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

Передача конфиденциального письма

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

sign
  1. Алиса шифрует сообщение своим приватным ключом;
  2. шифрует еще раз публичным ключом Боба;
  3. передает сообщение по открытому каналу;
  4. Боб расшифровывает шифротекст своим приватным ключом;
  5. расшифровывает еще раз публичным ключом Алисы.

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

Заключение

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

Я решил публиковать отдельные статьи о определенных аспектах криптографии, вместо целой и связанной статьи. Почему отдельные? Потому что написание огромной статьи я постоянно откладывал на потом. А так глядишь — по чуть-чуть и напишу все то что хотел :)

В дальнейшем ждите статей на тему MiTM и сертификатов, проблеме глобального наблюдателя и о том почему конфиденциальности нет в принципе :)

      1. Аноним

        Доброго времени. Дмитрий, в сети почти нет инфы по установке таинственной dnscrypt.org/ два русскоязычных сайта описывают установку, но либо я не понимаю, или там, что не так. Может у Вас найдётся время написать инструкцию по установке для людей, Меня интересует win xp и win7

  1. Странник

    Что вы думаете о том, что через 10-20 лет появятся квантовые компьютеры, которые похоронят асимметричное шифрование?

    1. Дмитрий Амиров Автор

      Борьба меча и щита… Квантовые компьютеры могут похоронить асимметричное шифрование в нынешнем виде, основанное на модульной арифметике. Но к тому времени, я больше чем уверен, будет придумано что-то другое, на порядки более стойкое.

  2. Андрей

    Спасибо большое за эту и за предыдущую статью, теперь начинаю понимать принцип работы биткоина)

    1. Дмитрий Амиров Автор

      Ну до биткоина тут конечно еще далеко, разве что только его фундаментальные основы)

  3. Андрей

    Спасибо большое! Очень доступно изложили материал, самая лучшая русскоязычная статья на эту тему, что мне попадалсь.

  4. Андрей

    Здравствуйте!
    Спасибо! Отличные статьи! Теперь все понятно))

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

    Под авторизацией наверное имелось ввиду аутентификация?

    1. Дмитрий Амиров Автор

      Здравствуйте Андрей. Спасибо за отзыв. Да, конечно аутентификация. Стыд и позор мне) Спасибо что обратили на это мое внимание)

  5. Даниил

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

  6. Артур

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

  7. Медет

    Приветствую Дмитрий! Благодарю за прекрасную статью. Думаю, если бы вы занялись преподаванием курсов, то пользовались бы огромной популярностью. Материал изложен: коротко и ясно. Всего вам хорошего!

  8. Serg

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

  9. Константин

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

  10. Павел

    Большое спасибо автору! Полно статей на просторах интернета, где рассказываться про ассиметричное шифрование/расшифрования , а вот именно тот момент, что можно еще и подписывать данные ассиметрично, ни где не натыкался. Теперь понял, как работает асимметричное шифрование в JWT, и как происходит проверка SSL сертификата на стороне клиента! Дай Бог здоровья тем людям, которые так же, как автор, разъясняют суть, а не просто копируют статьи, в лучшем случае дополняя картинками и не задумываются над тем, что из статьи выпала целая тема.
    А попутно хотелось бы уточнение. Для шифрования/расшифрования и для подписи/проверки подписи, может ли использоваться одна пара ключей? Или же это разные алгоритмы составления ключей? В абзаце «Передача конфиденциального письма», первое что на ум пришло, что это одна и та же пара ключей.

Добавить комментарий

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

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