Симметричные и асимметричные схемы шифрования. Криптография симметричная и ассиметричная. Различия симметричного и асимметричного шифрования

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

Если быть точным, то правильнее говорить симметричные и асимметричные алгоритмы шифрования.

Криптография (крипто - скрывать, прятать), как наука о сокрытии написанного, наука о сокрытии информации.

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

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

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

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

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

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

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

Например, VPN с шифрованием:

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

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

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

Поэтому ниже мы расскажем, что такое симметричное и асимметричное шифрование простыми словами.

Симметричное шифрование простыми словами

Особенностью симметричного шифрования является наличие одного пароля. По другому его еще именуют ключом.

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

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

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

Необходимо отметить, что несмотря на вышеперечисленные нюансы, симметричное шифрование распространено довольно широко, что обусловлено двумя факторами:

  • Простота понимания;
  • Отсутствие большой технической нагрузки.

Асимметричное шифрование простыми словами

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

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

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

Хранить пароли также проще при асимметричном шифровании из-за того, что отсутствует необходимость передачи секретного ключа кому-либо. Его не нужно никому передавать.

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

Различия симметричного и асимметричного шифрования

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

Так, симметричное шифрование наиболее подходит для передачи больших объемов информации. При аналогичном использовании, ассиметричный алгоритм намного медленнее.

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

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

Генерировать пароли в симметричном алгоритме на много проще в отличие от ассиметричных алгоритмов.

Выводы

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

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

Что такое шифрование

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

Особенностью такого вида передачи данных является использование ключа.

Есть три состояния безопасности:

  • скрытие информации от посторонних;
  • предотвращение изменений;
  • сохранение целостности информации;
  • идентификация отправителя.

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

Бывают два вида шифрования: симметричный и асимметричный.

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

  • отправитель шифрует данные;
  • получатель расшифровывает.

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

Криптостойкость

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

Существует 2 основных типа криптостойкости системы шифрования.

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

    Максимальный размер ключа RSA — 4096 бит.

    Он используется для шифрования и подписи. Криптостойкость можно описать как 2,7.1028 для ключа 1300 Бит. Схема применяется во многих стандартах, принцип шифрования RSA один из первых асимметричных алгоритмов.

    Размер ключа схемы Эль-Гамаля равен RSA — 4096 Бит. Он используется и для шифрования, и для цифровой подписи. Криптостойкость этой системы не отличается от RSA при одинаковом размере ключа.

    В методе DSA используется значительно меньшей ключ — 1024 бита. Применяется он исключительно для цифровой подписи.

    Симметричное и асимметричное шифрование

    Эти два вида шифрования отличаются количеством ключей и уровнем устойчивости к взлому.

    Если для кодирования и раскодирования используется один ключ, то это шифрование симметричное. Асимметричное шифрование подразумевает использование одного ключа для каждого алгоритма.

  • Открытым ключом шифруется некоторый код, который представляет собой определенное послание. Ключ известен обеим сторонам, он передается по незащищенному каналу, может быть перехвачен. Важнейшей задачей сохранения информации является защита ключа от перехвата.
  • Закрытый используется для расшифровывания. Известен только одной стороне. Не может быть перехвачен, так как все время находится у одного собеседника.
  • Цель шифрования определяет метод сохранения конфиденциальности. Одним из первых было симметричное, асиметричное шифрование изобретено позже для обеспечения большей надежности.

    Особенности симметричного шифрования

    Симметричная система защита имеет следующие достоинства.

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

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

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

    Особенности асимметричного шифрования

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

    • самостоятельное средство защиты информации;
    • средство распределения ключей;
    • средства аутентификации пользователей.

    Имеет такие преимущества:

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

    В таких алгоритмах сложно внести какие-либо изменения. Подобная система имеет длинные ключи. Если симметричный ключ имеет размер 128 Бит, то ключ RSA — 2304 Бит. Из-за этого страдает скорость расшифровывания — она в 2-3 раза медленнее. Для расшифровки требуются большие вычислительные ресурсы.

    Существует очень много примеров симметричной и асимметричной систем шифрования.

    Симметричное шифрование — как выглядит?

    Пример симметричного шифрования и схема реализации ниже.

  • Есть два собеседника, которые планируют обменяться конфиденциальной информацией.
  • Первый собеседник генерирует ключ d, алгоритмы шифрования E и дешифрования D. Затем посылает эту информацию второму собеседнику.
  • Сообщение дешифруется ключом d.
  • Главным недостатком является невозможность установить подлинность текста. В случае перехвата ключа злоумышленник расшифрует секретную информацию.

    Существуют классические методы.

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

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

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

    Примеры асимметричного шифрования

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

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

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

  • Шифр Эль-Гамаля.
  • RSA

    RSA — первый криптографический алгоритм, используемый и для шифрования, и для цифровой подписи.

    Описывается так.

  • Выбирается два простых числа, например, 3 и 7.
  • Вычисляется модуль n — произведение двух чисел. Получается 21.
  • Вычисляется функция Эйлера φ=(p-1)×(q-1)=2×6=12.
  • Вычисляется любое простое число e меньше φ и простое с φ. Доступные варианты: 5, 7, 11.
  • Пара чисел e, n (5, 21) — открытый ключ. Теперь вычисляются числа d и n закрытого ключа. Число d удовлетворяет условие (d×е) mod φ=1 и равняется 17. В итоге вторая пара чисел 17 и 21 — закрытый ключ. Шифрование выполняется следующим образом: сообщение возводится в степень e, берется остаток от деления на n, при этом результат должен быть меньше числа n. Получается 10 — это будут закодированные данные. Для раскодировки e возводится в степень d, вычисляется остаток от деления на n.

    DSA

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

  • Выбор криптографической хэш-функции H(x).
  • Битность простого числа q должна равняться значению хэш-функции H(x).
  • Подбор такого простого числа p, чтобы p-1 делился без остатка на q.
  • Вычисление числа g = h (p-1)/q mod p. h должно быть произвольным числом в диапазоне от 1 до p-1.
  • Выбирается случайное число k от 0 до q.
  • Вычисляется r = (gk mod p) mod q.
  • Затем s = k-1(H(m) + xr)) mod q.
  • Если r=0 или s=0, выбирается другое число k.
  • Схема Эль-Гамаля

    Шифрование по схеме Эль-Гамаля используется для цифровых подписей. Является продолжением алгоритма Диффи-Хеллмана.

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

    Генерация ключей происходит следующим образом.

  • Выбирается случайное простое число p.
  • Число g должно быть первообразным корнем p.
  • Число x должно быть больше 1 и меньше p-1. Это будет закрытый ключ.
  • Затем вычисляется открытый ключ y по формуле g^x mod p.
  • При шифровании текста M выбирается системный ключ K. Он больше единицы и меньше p-1. Затем вычисляются числа a и b, которые являются шифротекстом, a = g^k mod p и b = y^k M mod p.

    Существуют две методологии криптографической обработки информации с использованием ключей – симметричная и асимметричная.

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

    Рис. 2.1

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

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

    Из симметричных алгоритмов шифрования широкое использование получил алгоритм шифрования DES (изобретенный фирмой IBM), который рекомендован в открытых секторах экономики США. Этот алгоритм был изначально обречен на лимитированную продолжительность жизни вследствие ограничения длинны ключа до 56 битов.

    В начале 1997 г. алгоритму DES, имеющему ключ в 56 бит, был брошен вызов. 17 июня 1997 г., через 140 дней ключ был расшифрован. Это означало фактическую смерть DES как стандарта шифрования. И действительно, когда в начале 1998 г., следующее соревнование по нахождению ключа DES привело к успеху всего за 39 дней, национальный институт стандартов США (NIST) объявил конкурс на утверждение нового стандарта AES (Advanced Encryption Standard). AES стал полностью открытым симметричным алгоритмом с ключом размером 128, 192, 256 бит.

    Положение усугубляется тем, что по законодательству США к экспорту в качестве программных продуктов разрешены системы шифрования с ключом не более 128 бит. То есть, покупая шифросистему с ключом 1024 или 2048 и более бит, надо знать, что при смене ключа активной (изменяющейся) частью будет часть ключа в 128 бит. Симметричные системы шифрования имеют один общий недостаток, состоящий в сложности рассылки ключей. При перехвате ключа третьей стороной такая система криптозащиты будет скомпроментирована. Так при замене ключа его надо конфиденциально переправить участникам процедур шифрования. Очевидно, что этот метод не годится в том случае, когда нужно установить защищенные соединения с тысячами и более абонентов Интернет. Основная проблема состоит в том, как сгенерировать и безопасно передать ключи участникам взаимодействия. Как установить безопасный канал передачи информации между участниками взаимодействия для передачи ключей по незащищенным каналам связи? Отсутствие безопасного метода обмена ключами ограничивает распространение симметричной методики шифрования в Интернет.

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

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

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

    Рис. 2.2

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

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

    Симметричные и асимметричные системы шифрования имеют каждая свои достоинства и недостатки. Недостатки симметричной системы шифрования заключаются в сложности замены скомпрометированного ключа, а недостатки асимметричной системы – в относительно низкой скорости работы. По криптостойкости длине ключа в 128 бит симметричной системы соответствует ключ в 2304 бита асимметричной.

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

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

    Рис. 2.3

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

    Рис. 2.4

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

    Симметричное шифрование

    Шифрование, в котором как для шифровки, так и для расшифровки, используется один и тот же пароль. В противоположность асимметричному шифрованию, в котором для шифровки и расшифровки используются два разных ключа: «открытый» и «закрытый».

    Основное преимущество симметричного шифрования перед асимметричным: оно гораздо быстрее (в 1000 раз). Часто используются «гибридные схемы шифрования», когда управляющее соединение создаётся асимметричным шифрованием, а уже по этому каналу стороны договариваются друг с другом, какой симметричный алгоритм шифрования выбрать и каким будет ключ шифрования (сеансовый ключ). Симметричный канал в такой схеме обычно пересоздаётся заново через некоторое время во избежание подбора симметричного пароля (если бы симметричный канал существовал, скажем, несколько лет, то при недостаточно надёжном алгоритме шифрования взломщик вполне мог бы подобрать пароль за это время на каком-нибудь кластере суперкомпьютеров).


    Большинство симметричных шифров используют сложную комбинацию большого количества подстановок и перестановок. Многие такие шифры исполняются в несколько (иногда до 80) проходов, используя на каждом проходе «ключ прохода». Множество «ключей прохода» для всех проходов называется «расписанием ключей» (key schedule). Как правило, оно создается из ключа выполнением над ним неких операций, в том числе перестановок и подстановок.

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

    «Блочные» шифры обрабатывают информацию блоками определённой длины (обычно 64, 128 бит), применяя к блоку ключ в установленном порядке, как правило, несколькими циклами перемешивания и подстановки, называемыми «раундами». Результатом повторения «раундов» является «лавинный эффект» — нарастающая потеря соответствия битов между блоками открытых и зашифрованных данных.

    Примеры симметричных алгоритмов шифрования: AES, Twofish.

    Алгоритм Диффи-Хеллмана

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

    Но встречаться лично с каждым, в современном быстронесущемся мире — это физически невозможно.

    Эта задача первоначального обмена секретным ключом оставалась нерешённой, пока Диффи и Хеллман не опубликовали свою статью в 1976 году.

    Понять идею алгоритма Диффи-Хеллмана можно, посмотрев этот ролик:


    Математическое обоснование

    Математическое обоснование алгоритма Диффи-Хеллмана использует два вспомогательных тождества.

    X mod y — это по определению «остаток от деления x на y». Первое тождество: (x mod y)^z mod y = x^z mod y. Это тождество можно доказать, просто разложив x = a * y + b:

    ((a * y + b) mod y)^z mod y = b^z mod y

    X^z mod y = (a * y + b)^z mod y = b^z mod y, так как скобка разложится по биному Ньютона и все остальные слагаемые с y дадут 0 в остатке от деления на y.

    Второе вспомогательное тождество — (x^y)^z = x^(yz) — основано на свойстве перемножения степеней, и легко доказывается простым разложением степени на множители: (x^y)^z = (x, перемноженное y раз), перемноженное z раз = x, перемноженное у*z раз = x^(yz).

    Теперь непосредственно описание алгоритма Диффи-Хеллмана. Предположим, есть два абонента: Алиса и Боб. Они соединяются друг с другом по нешифрованному каналу и пересылают друг друга случайно взятые два числа g и p, которые не являются секретными и могут быть подсмотрены кем угодно. Для того, чтобы теперь создать неизвестный более никому секретный ключ, оба абонента генерируют большие случайные числа: Алиса — число a, Боб — число b. Затем Алиса вычисляет значение A = g^a mod p и пересылает его Бобу, а Боб вычисляет B = g^b mod p и передаёт его Алисе. Эти числа так же передаются по нешифрованному каналу, и могут быть подсмотрены кем угодно.

    Далее Алиса вычисляет значение B^a mod p = (g^b mod p)^a mod p = g^(ab) mod p, а Боб — вычисляет значение A^b mod p = (g^a mod p)^b mod p = g^(ab) mod p, и это и будет их общий секретный ключ K, который можно использовать для создания симметричного шифрованного канала. Даже если злоумышленник перехватит все передаваемые числа (A, B, g, p), то при достаточно больших выбранных числах p, a и b, он не сможет за разумное время вычислить секретный ключ K по A = g^a mod p и B = g^b mod p.

    Требования, предъявляемые к генерируемым числам, таковы (пояснения ниже):

    P — достаточно большое простое число
    (p - 1) / 2 — тоже простое число
    g — первообразный корень по модулю p

    (простое число — это чисто, которое не раскладывается на целые множители)

    "g — первообразный корень по модулю p" означает, что при всевозможных n выражение g^n mod p образует полный набор чисел от 1 до p - 1, и поэтому (секретный) сеансовый ключ, который вычислят Алиса и Боб, может быть каким угодно: от 1 до p - 1, и подслушивающему придётся перебирать все числа от 1 до p - 1, а это по условию задачи нереально сделать за разумный срок.

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

    Требование величины числа p выдвинуто затем, чтобы полный набор чисел от 1 до p - 1 был настолько огромным, чтобы подслушивающий не мог физически их все перебрать в разумный срок.

    Требование "(p - 1) / 2 — тоже простое число" введено для повышения безопасности шифрования, так как существует алгоритм дискретного логарифмирования , позволяющий подслушивающему вычислить (секретный) сеансовый ключ за "полиномиальное" время (то есть, "за разумное время") при условии, что число p - 1 раскладывается на небольшие простые множители. Поэтому введено дополнительное требование, чтобы существовало такое простое число q, что p - 1 = 2q, и тогда q будет очень большим простым числом (того же порядка, что и p), и алгоритм вычисления (секретного) сеансового ключа будет выполняться так же "неразумно долго".

    Обычно секретные ключи a и b имеют порядок 10^100, а число p — порядок 10^300. Число g не обязано быть большим и обычно имеет значение в пределах десяти.

    Стойкость ко взлому алгоритма Диффи-Хеллмана основывается целиком и полностью на не найденности на текущее время разумно быстрого алгоритма .

    Алгоритм Диффи-Хеллмана используется для установки соединения в HTTPS (SSL/TLS), VPN и во многих протоколах. В интернете есть слухи о том, что Агентство Национальной Безопасности США нашло эффективный способ взлома этого алгоритма.

    Уязвимость

    Открытие Диффи и Хеллмана произвело настоящую революцию в криптографии, так как единственная неразрешимая задача была, казалось бы, полностью решена. Однако выяснилось, что такой алгоритм обмена секретным ключом подвержен уязвимости «посредника» (man in the middle): злоумышленник может просто вклиниться в канал передачи данных между Алисой и Бобом и притвориться для Алисы — Бобом, а для Боба — Алисой. При такой схеме злоумышленник создаст два шифрованных канала (с каждым из абонентов), а абоненты будут думать, что есть только один шифрованный канал — между ними двумя. И злоумышленник будет видеть все данные, передаваемые между абонентами, в расшифрованном виде.

    Поэтому в дополнение к алгоритму Диффи-Хеллмана требуется некий способ надёжного подтверждения личности обоих абонентов (Алиса должна удостовериться в том, что она установила соединение именно с Бобом, а Боб, в свою очередь, должен удостовериться в том, что на другом конце провода — именно Алиса). Решается эта уязвимость "алгоритмом подписи RSA" и "центрами сертификации".

    Асимметричное шифрование

    Асимметричным шифрованием называется схема, при которой есть два ключа: один из них «открытый» (он общедоступен), а другой — «закрытый» (он хранится в тайне его обладателем). Например, каждому человеку на Земле, можно выдать личную пару ключей: открытый и закрытый. Открытые ключи всех людей в таком случае будут общедоступны, а свой закрытый ключ каждый человек будет хранить в тайне.

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

    На первый взгляд, какая-то магия. Однако, никакой магии — это просто замечательное математическое открытие.

    Диффи-Хеллман для асимметричного шифрования

    Алгоритм Диффи-Хеллмана можно немного изменить, и получить некое подобие асимметричного алгоритма шифрования данных (но тем не менее, Диффи-Хеллман создавался не для этого, и он не предназначен для асимметричного шифрования данных).

    В этом случае Алиса и Боб не устанавливают канал связи. Вместо этого Алиса выбирает себе значения p и g, вычисляет на их основе своё A, и публикует эти три числа в открытом доступе, называя это своим "открытым ключом". Боб, на основе этих трёх чисел, в точности как в алгоритме Диффи-Хеллмана, вычисляет секретный ключ K, после чего шифрует сообщение любым симметричным алгоритмом, используя K в качестве ключа, и передает шифротекст Алисе вместе со своим значением B. Алиса же, имея B, g и p, также вычисляет секретный ключ K, и может расшифровать и прочесть сообщение, которое ей отправил Боб.

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

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

    Алгоритм асимметричного шифрования RSA был изобретён в 1977-ом году тремя учёными из MIT"а. После работы над более чем 40 возможными вариантами, им удалось найти алгоритм, основанный на различии в том, насколько легко находить большие простые числа и насколько сложно раскладывать на множители произведение двух больших простых чисел.

    Выбираются два больших простых числа p и q (например, по 2048 битов каждое)
    Вычисляется их произведение n = p * q
    Вычисляется функция Эйлера φ(n) = (p - 1)(q - 1)
    Выбирается целое e (1 < e < φ(n)), взаимно простое с φ(n). Обычно в качестве e берут простые числа, содержащие небольшое количество единичных бит в двоичной записи, например, простые числа Ферма 17, 257 или 65537. Такой трюк позволяет возводить любое число в степень e очень быстро в двоичной системе исчисления (n^(2^k) = ((((n^2)^2)^2)^...)
    Вычисляется число d, "мультипликативно обратное" к числу e по модулю φ(n): ed mod φ(n) = 1
    Пара (e, n) — это открытый ключ, а d — это закрытый ключ

    Теперь Алиса может зашифровать сообщение (число) m, предназначенное Бобу, используя открытый ключ Боба (e, n): c = m^e mod n. И только Боб теперь сможет расшифровать это сообщение m, адресованное ему Алисой: c^d mod n = (m^e mod n)^d mod n = m^(ed) mod n = m (математики говорят, что всё сходится).

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

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

    RSA или Диффи-Хеллман

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

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

    По вычислительной сложности оба алгоритма сравнимы друг с другом.

    Цифровая подпись (ЭЦП)

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

    Изменим немного рассмотренную выше схему. Пусть Боб, вместо того, чтобы зашифровать сообщение m, предназначенное Алисе, открытым ключом Алисы, зашифрует это сообщение своим закрытым ключом: s(m) = m^d mod n, и отправит это зашифрованное сообщение Алисе. В этом случае Алиса, воспользовавшись открытым ключом Боба, сможет проверить подлинность полученного от него сообщения: m" = s(m)^e mod n (m" и m должны совпадать). Таким образом Алиса может удостовериться, что сообщение отправлено именно Бобом, и не подделано.

    Алгоритм цифровой подписи RSA используется в протоколе TLS (он же HTTPS, он же SSL) в связке с алгоритмом обмена ключами Диффи-Хеллмана и алгоритмом симметричного шифрования (например, AES). В этой схеме Диффи-Хеллман служит для безопасного обмена секретным ключом симметричного шифрования передаваемых данных (например, AES), а алгоритм подписи RSA служит для удостоверения личности обоих абонентов во время установки соединения.

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

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

    Далее, получатель сообщения берёт от него точно таким же способом "слепок" ("хеш"), и сравнивает свой полученный "слепок" ("хеш") с расшифрованным "слепком" ("хешем"), шифротекст которого он получил вместе с текстом сообщения. Если оба "слепка" ("хеша") совпадают — значит, с вероятностью, стремящейся ко 100%, полученное сообщение подлинное: получено именно от того отправителя, и содержит именно тот текст, который написал отправитель.

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

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

    Хеш — это некоторый массив данных определённой длины, полученной при пропускании исходных данных через алгоритм хеширования. Можно сравнить хеш со слепком или отпечатком информации, с той разницей, что у хеша задача противоположная: чтобы по хешу было невозможно сделать какие-либо выводы о том, какой была исходная информация. Для этого хорошие функции хеширования должны удовлетворять требованию о полной утрате всех статистических закономерностей исходного сообщения. Для этого алгоритм хеширования должен иметь «эффект лавины» — должно происходить сильное изменение хеша при 1-битном изменении входных данных (в идеале должны меняться значения половины всех бит хеша).

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

    Примеры алгоритмов хеширования: SHA, Twofish, Whirlpool.

    Сертификаты

    Когда Алиса соединяется с кем-то по асимметрично шифрованному каналу, ей нужно каким-то образом быть полностью уверенной в том, что вторая сторона — именно та, за какую себя выдаёт. То есть, если Алиса соединяется с Бобом, то ей нужно каким-то образом по открытому ключу, полученному в ответ (от якобы Боба), быть полностью уверенной в том, что этот открытый ключ принадлежит именно Бобу (что он подлинный).

    Такую возможность предоставляет электронная подпись. Есть некое авторитетное лицо, которому все доверяют, и чей открытый ключ у всех где-то изначально записан, и этот записанный ключ точно 100% подлинный и не подвергается сомнению. И далее уже это авторитетное лицо выдаёт «сертификаты» всем желающим, подписывая эти «сертификаты» своим закрытым ключом. Авторитетному лицу все доверяют в том смысле, что оно идеально честное (не обманет), и хранит свой закрытый ключ в идеальной защищённости (и поэтому он не может быть выкран злоумышленниками для подписывания своих "левых" сертификатов).

    Выдаваемый абоненту (и подписанный авторитетным лицом) сертификат (X.509) содержит в себе открытый ключ абонента и подробные данные об абоненте (владельце этого открытого ключа): кто этот абонент такой, его адрес электронной почты, когда ключ создан, для какого алгоритма предназначен ключ, когда истекает срок действия ключа и т.д.). Наряду с подписанным сертификатом, абонент получает в пару свой "закрытый ключ", который он будет использовать для электронной подписи и шифрования передаваемых данных.

    Авторитетные лица в этой системе называются «доверенными центрами сертификации» («удостоверяющими центрами»). Таких доверенных центров на данное время около 60-ти, и их открытые ключи вшиты во все современные операционные системы и обозреватели интернета (для проверки подлинности электронной подписи сертификатов, получаемых при соединении с сайтами).

    Например, когда пользователь соединяется с сайтом https://google.com ("по SSL", он же "TLS"), в ответ ему приходит сертификат ("SSL сертификат"), подписанный каким-либо «доверенным центром сертификации», и полученный сертификат сразу можно проверить на подлинность, проверив его цифровую подпись (обозреватель делает это автоматически). В случае, если сертификат подлинный, и "домен" (google.com), указанный в сертификате, совпадает с тем "доменом" (адресом), на который пользователь пытается зайти, то всё верно, и обозреватель показывает пользователю эту интернет страницу (и в адресной строке появляется значок "защищённого подключения"; обычно это зелёный замок). Если же сертификат не проходит проверку подписи, или если "домен", указанный в сертификате, не совпадает с тем "доменом" (адресом), на который пользователь пытается зайти, то обозреватель не покажет эту интернет страницу, и вместо неё выведет предупреждение о том, что подключение может быть небезопасным, и что возможно злоумышленники пытаются обмануть пользователя.

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

    Стать доверенным центром может любая компания, однако для этого ей придётся ежегодно проходить строгие проверки на безопасность (WebTrust). Основные участники рынка сертификации на ноябрь 2012-ого:

    Symantec (владеющая VeriSign"ом, Thawte и Geotrust"ом) с долей в 42.9% рынка
    Comodo с долей в 26%
    GoDaddy с долей в 14%
    GlobalSign с долей в 7.7%

    Самым первым центром сертификации была «RSA Data Security», основанная изобретателями алгоритма RSA (хорошо заработали, наверное).

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

    Если злоумышленникам удастся завладеть вашим закрытым ключом, то ваш сертификат более не сможет обеспечивать вашу подлинность при установке соединения, и об этом следует уведомить организацию, выдавшую вам сертификат. После уведомления, сертификат будет помещён в список недействительных сертификатов (Certificate Revocation Lists, Authority Revocation Lists). Далее обозреватели каждый раз при соединении с сайтом по протоколу HTTPS делают запрос по протоколу Online Certificate Status Protocol для проверки того, не находится ли этот сертификат в списке недействительных сертификатов. Если обнаружится, что этот сертификат более недействителен, то соединение не будет установлено.

    Hash-based Message Authentication Code — способ цифровой подписи сообщения "для бедных": не требует наличия сертификатов и интенсивных вычислений. Может использоваться в каких-то простейших случаях, когда использование ЭЦП не целесообразно.

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

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

    Шифрование на эллиптических кривых

    Через несколько лет после того, как появились на свет алгоритмы Диффи-Хеллмана и RSA, работающие над пространством целых чисел, математики предложили альтернативное пространство чисел для шифрования — эллиптические кривые .

    Эллиптической кривой (не имеет никакого отношения к "эллипсу") называется множество всех (точек кривой) решений уравнения:

    y^2 + a xy + c y = x^3 + b x^2 + d x + f


    Например, для пространства всех действительных (вещественных) x и y можно ввести операцию сложения точек на эллиптической кривой, согласно которой для любых двух точек эллиптической кривой P и Q существует единственная точка R", которую можно найти, проведя через точки P и Q прямую, и отметив точку R" пересечения этой прямой с эллиптической кривой. Также вводится "точка в бесконечности 0", такая, что P + Q + R" = 0. Точка R, симметричная точке R" относительно оси Ox, и будет искомой суммой P + Q.

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

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

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

    Tor — это способ анонимного доступа к сетевым ресурсам. Можно ходить анонимно в интернет, можно также ходить по ".onion" сайтам, которые анонимно хостятся и доступны только внутри сети Tor"а.

    Распространяется Tor в связке с обозревателем Mozilla Firefox, который можно скачать с официального сайта и установить в операционной системе, после чего вся работа через этот "Tor браузер" будет анонимной (по этой причине не следует пользоваться Tor браузером для раскрытия своей настоящей личности: не следует входить через него в свои настоящие учётные записи в социальных сетях, проверять свою настоящую почту и т.п. — оставляйте своё настоящее Я за пределами Tor браузера).


    Способ достижения анонимности Tor"а таков. Пользователь устанавливает соединение с Tor сетью, и после этого набирает себе цепочку из трёх случайных промежуточных узлов (называемых "нодами"). Цепочка набирается таким образом, что второй узел выбирается уже после установки соединения с первым выбранным узлом, поэтому дальше первого (входного) узла цепочки настоящий IP-адрес пользователя не просачивается. При этом первый (входной) узел цепочки не имеет никакой возможности определить, что он является именно первым (входным): для него пользователь выглядит точно так же, как и любой другой узел сети Tor"а. Поэтому только последний (выходной) узел цепочки знает, что он выходной, а все остальные узлы цепочки — ничего не знают о своём положении в этой цепочке (за исключением того, что они не являются выходными).

    По мере набора цепочки, пользователь и каждый новый узел цепочки генерируют секретный ключ по алгоритму Диффи-Хеллмана. Этот ключ будет использоваться в дальнейшем для симметричного шифрования/расшифровки данных по алгоритму AES на этом узле цепочки. После того, как туннель построен, у пользователя с каждым из узлов цепочки имеется свой секретный ключ симметричного шифрования/расшифровки трафика, который далее я буду называть просто "ключом".

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

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

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

    Даже если первый (входной) узел цепочки смог установить личность пользователя по его настоящему IP-адресу, то у этого узла нет никакой возможности узнать ни какие данные пользователь передаёт в сеть, ни на какой адрес в интернете пользователь заходит. К тому же, поскольку с точки зрения любого узла сети Tor нет никакого способа определить, кто с ним соединяется — пользователь или другой такой же узел — то в этом случае первый (входной) узел сам не может знать, что он является первым (входным) узлом, и что это именно данный пользователь заходит на какой-то веб сайт, а не просто его машина выполняет роль такого же обычного узла цепочки для передачи данных какого-то совсем другого пользователя.

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

    Далее, второй (средний) узел цепочки отправляет данные, с которых снят второй слой шифрования, на последний третий (выходной) узел цепочки. Третий (выходной) узел цепочки полностью расшифровывает трафик, снимая с него последний слой шифрования, и направляет этот трафик на нужный сетевой адрес (в интернете или внутри.onion сети). Получается, что третий (выходной) узел, который ещё называется "exit node", может полностью прослушивать трафик, и видит все данные, которые передаются, но при этом он ничего не знает о настоящем IP-адресе пользователя, поэтому не имеет возможности отследить поток трафика обратно к пользователю.

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

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

    Стать узлом ("node") может любой желающий энтузиаст, увеличивая таким образом скорость работы и качество всей сети Tor. Узел может выполнять работу как просто "relay node" (промежуточного узла), так и "exit node" (выходного узла, который непосредственно взаимодействует с интернетом, и за это теоретически могут посадить , как за соучастие в преступлении). На текущее время в сети Tor имеется около 7 000 узлов , 1 000 из которых являются выходными ("exit node").

    Для тех, кто хочет закопаться глубоко, есть .

    Изначально, концепция "луковой маршрутизации" была придумана в 90-ых годах в лаборатории ВМФ США для обеспечения безопасности сотрудников разведки США, передающих разведданные по интернету. DARPA, явившая миру интернет, тоже впоследствии приложила руку. В начале 2000-ных появилась первая рабочая версия Tor"а, и через пару лет ВМФ США отдали Tor в Open Source, и с тех пор Tor спонсируется всеми желающими как некоммерческая организация (основная часть пожертвований, тем не менее, продолжает идти со стороны правительственных структур США).

    Tor через VPN

    Те пользователи, которые опасаются случайно попасть на такую цепочку промежуточных узлов, каждый из которых запущен полицией (что дало бы полиции возможность видеть весь трафик в расшифрованном виде, а также узнать настоящий IP-адрес пользователя), могут ходить в Tor сеть через VPN. В таком случае всё, что сможет сделать полиция — это видеть весь трафик и узнать IP-адрес VPN сервера. Если VPN сервис подпадает под юрисдикцию полиции (большинство стран), то он обязан по закону хранить информацию о том, кто и когда к нему подключался, и на какие сайты заходил. Если же VPN сервис расположен в одной из немногих стран, где по каким-то причинам не приняты жёсткие законы о содействии следствию, то такой VPN сервис не обязан (и не будет) хранить информацию о том, кто и когда к нему подключался, и на какие сайты заходил. Более того, полиция может просто не иметь возможности по закону чего-то потребовать от такого VPN сервиса, не сможет установить там свою прослушку и т.п..

    Tor hidden services (.onion сайты)

    Любой желающий может запустить свой web-сайт в сети Tor. Такие web-сайты называются "скрытыми сервисами" (hidden service) , по той причине, что владелец web-сайта остаётся анонимным (другими словами, теоретически нет возможности узнать настоящий IP-адрес машины, на которой запущен данный web-сайт; гипотетически можно попробовать как-нибудь угадать, анализируя потоки трафика, но это уже вопрос к специалистам по этой теме).

    Работает это так: машина, на которой запущен web-сайт, периодически соединяется со случайно выбранными узлами (introduction points) через случайные цепочки промежуточных узлов, и передаёт этим узлам (introduction points) открытый ключ данного web-сайта. Таким образом web-сайт заявляет о своём существовании в сети Tor, и далее всё взаимодействие пользователей с этим web-сайтом можно просто пустить через эти временные узлы (introduction points) по построенным временным цепочкам, и никто не сможет узнать ничьего настоящего IP-адреса.

    Как пользователи узнают о существовании web-сайта, и о том, через какие временные узлы (introduction points) можно попасть на этот сайт? В сети Tor запущена распределённая база данных (Distributed Hash Table) , то есть такая общая база данных, которая равномерно размазана по всем узлам сети Tor. В этой базе данных Tor браузер и будет искать, существует ли в сети Tor запрошенный пользователем web-сайт, и если существует, то через какие временные узлы на этот сайт можно попасть.

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

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

    Узел трафика выбирается пользователем случайно, и информация об этом выбранном узле трафика (зашифрованная открытым ключом web-сайта, с добавлением случайно сгенерированного "пароля") пересылается через временные узлы (introduction points) web-сайту. Далее пользователь и web-сайт устанавливают соединение (стандартную цепочку Tor) с этим узлом трафика, и уже потом через него пересылают друг-другу трафик (после проверки пользователем того самого случайно сгенерированного "пароля", отправляемого web-сайтом обратно пользователю — в подтверждение того, что это именно тот web-сайт, а не подделка, потому что расшифровать ранее отправленный пользователем "пароль" может только сам этот web-сайт). В итоге получается объединённая цепочка из 3 + 3 = 6 узлов.

    Можно обратить внимание на то, что у web-сайтов.onion "некрасивые" и странные адреса. Сделано это, как и всё другое в сети Tor, для безопасности пользователя. Для того, чтобы получить DNS имя для сайта, нужно сгенерировать себе пару из открытого и закрытого ключа, и дальше с помощью открытого ключа подписать название сайта. Например, можно взять слово "facebook", подписать его своим открытым ключом, и получится доменное имя "facebookcorewwwi.onion", где "corewwwi" — это подпись слова "facebook" открытым ключом данного сайта.

    Таким образом, любой посетитель сайта, устанавливающий соединение с сайтом "facebookcorewwwi.onion", при получении открытого ключа сайта в ходе установки соединения сможет самостоятельно убедиться в том, что этот сайт — действительно тот самый, "настоящий", не поддельный, и соответствует именно этому.onion адресу. Поэтому для.onion сайтов в сети Tor нет необходимости в каком-то Едином Центре Сертификации (как делается в обычном интернете для сертификатов SSL), что входило бы в противоречие с изначальным замыслом сети Tor — децентрализация и безопасность.

    I2p ("айтупи") — это анонимная сеть, чем-то похожая на Tor. Если основной задачей Tor"а является предоставление анонимного доступа в интернет, то основной задачей i2p является построение полностью независимой от интернета распределённой анонимной сети со своими "скрытыми" сайтами.

    Считается, что уровень анонимности в сети i2p выше уровня анонимности в сети Tor.

    Понравилась статья? Поделиться с друзьями: