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


Чуть-чуть истории, совсем капельку


В 1976 году в США был принят федеральный стандарт на алгоритмы симметричного шифрования — DES. Это был первый публичный и стандартизованный криптографический алгоритм, созданный в ответ на растущие запросы бизнеса на защиту данных.


Бородатый курьез

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


Казалось бы — конец истории, бери, шифруй, дешифруй, при необходимости наращивай длину ключа. Возможно вы совершенно точно знаете, что американцы оставили в нем закладки, тогда для вас существует российский аналог — ГОСТ 28147-89, которому вы впрочем вероятно доверяете еще меньше. Тогда используйте оба, один поверх другого. Если же вы верите что ФБР и ФСБ ради вас обьединились и обменялись своими закладками, то у меня для вас есть хорошая новость — вы не параноик, у вас банальная мания величия.


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


Асимметричная криптография


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


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


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


  • сервер — сервер (или бизнес — бизнес, в этом контексте это одно и тоже): это самая простая классическая схема, для которой вполне достаточно симметричной криптографии, участники знают друг о друге все, включая внесетевые контакты. Однако, обратите внимание — ни о какой анонимности здесь речь даже не идет, а еще число участников строго ограниченно двумя. То есть это почти идеальная схема для крайне ограниченного числа коммуникаций и в общем случае очевидно мало применима.
  • сервер — аноним (или бизнес — клиент): здесь налицо некоторая асимметрия, которая асимметричной криптографией успешно и обслуживается. Ключевой момент здесь — отсутствие аутентикации клиентов, серверу неважно с кем именно он обменивается данными; если вдруг таковая потребуется, сервер проводит вторичную аутентикацию с помощью заранее обговоренного пароля, и тогда все сводится к предыдущему случаю. С другой стороны, клиенту крайне важна аутентикация сервера, он хочет быть уверенным что его данные попадают именно к тому, к кому он их посылал, эта сторона на практике основывается на системе сертификатов. В общем и целом, такая схема достаточно удобно и прозрачно покрывается https:// протоколом, однако возникает пара интересных моментов на стыке криптографии и социологии.
    1. доверие к серверу: даже если я переправил некоторую информацию на север абсолютно безопасным образом, там к ней чисто технически имеют доступ посторонние люди. Эта проблема полностью вне зоны ответственности шифрования, но я прошу запомнить этот момент, он еще всплывет попозже.
    2. доверие к сертификату сервера: иерархия сертификатов основана на том, что существует некий корневой сертификат, достойный абсолютного доверия. Технически, достаточно влиятельный злоумышленник [, прошу считать слово злоумышленник техническим термином, а не клеветой или оскорблением существующей власти] может подменить сертификат любого нижнего уровня, однако предполагается что система сертификации нужна всем в равной мере, т.е. этот сертификатор будет немедленно подвергнут остракизму и все его сертификаты отозваны. Так то оно так, но все таки заметьте, что система основана не на технических средствах, а на некоем социальном контракте.
      Кстати, о горячем
      В рамках ожидаемого конца света окукливания рунета, кто-нибудь анализировал возможное окукливание российского корневого сертификата и последствия? Если кто читал/писал на эту тему, пришлите ссылки, я вставлю, мне кажется тема интересная
    3. косвенная деанонимизация на сервере: тоже больная тема, даже если север не имеет формальной регистрации/аутентикации, есть множество способов собрать информацию о клиенте и в конечном счете идентифицировать его. Как мне кажется, корень проблемы в существующем http:// протоколе и ему подобных, которые ожидаемо не могли предвидеть такого безобразия; и что вполне возможно было бы создать параллельный протокол без этих проколов. Однако, это идет наперекор всем существующим практикам монетизации и поэтому маловероятно. И все равно интересно, а кто-нибудь пытался?
  • аноним — аноним: двое встречаются в сети, (вариант — только что встретились), (вариант — не двое а двое тысяч), и хотят потрещать о своем, но так, чтобы Большой Брат не услышал (вариант — мама не узнала, у каждого свои приоритеты). Возможно, вам слышится ирония в моем голосе, ну так это потому, что это она и есть. Давайте применим к задаче постулат Шнайера (любой алгоритм может быть взломан, если вложить достаточно ресурсов, то есть денег и времени). С такой точки зрения, проникновение в такую группу социальными методами не представляет никакого труда, не говоря уже о деньгах, то есть криптографическая стойкость алгоритма нулевая при самых изощренных методах шифрования.

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


Кстати об ip, вот тут во весь рост встает вышеупомянутое доверие к серверу, уж он то ваш ip знает без сомнения. И тут против вас играет вообще все — от простого человеческого любопытства и тщеславия, до корпоративных политик и той же монетизации. Только учтите, что VPS и VPN — тоже сервера, теоретикам от криптографии эти аббревиатуры как-то побоку; да, и юрисдикция сервера при большой нужде роли не играет. Сюда же попадает и end-to-end шифрование — звучит красиво и солидно, но серверу все равно приходится верить на слово.


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


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


Не убедил? А ведь существует еще та же социальная инженерия, если у вас в группе сто собеседников, вы просто обязаны подразумевать что 50% их них — враги, 49% — либо тщеславны, либо глупы, либо просто неосторожны. Да и оставшийся один процент, как бы вы сильны ни были в методах защиты информации, против хорошего психолога в чате скорее всего вам не устоять.
Единственная кажется защитная стратегия — затеряться среди миллионов подобных групп, но это уже не про нас, опять про каких-то шпионов-террористов, которым ни сетевая слава, ни монетизация ни к чему.


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


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


А можно что-нибудь вообще сделать?


Ну, например, поразмыслить на эту тему, желательно раскрепостив сознание и отбросив предрассудки. Например, давайте временно полностью пожертвуем анонимностью, как бы ужасно это ни звучало. Пусть каждому с рождения выдается уникальный личный публичный ключ, ну и соответствующий ему приватный естественно. Не надо на меня кричать и топать ногами, в идеальном мире это крайне удобно — здесь и паспорт, и ИНН, и даже номер телефона в одном флаконе. Более того, если к этому добавить индивидуальный сертификат, получается универсальный аутентикатор/логин; а еще — карманный нотариус с возможностью заверять любые документы. Можно сделать систему многоуровневой — в общем доступе только публичный ключ и сертификат, для друзей (список ключей которых прилагается здесь же) можно сделать доступным телефон и что там еще друзьям доверяют, могут быть еще более глубокие уровни, но это уже подразумевает ненужное доверие к серверу.


При такой схеме, приватность пересылаемой информации достигается автоматически (хотя с другой стороны, зачем, в идеальном-то мире?), Алиса что-то пишет Бобу, но никто никогда это не прочитает кроме самого Боба. Все мессенджеры автоматически получают end-to-end шифрование, их роль сводится к почтовым ящикам и претензий к контенту в принципе быть не может. Да и сами серверы становятся взаимозаменяемыми, можно послать через один, можно через другой, а можно вообще через цепочку серверов, как емайл. А можно еще послать адресату напрямую, если известен его ip, не связываясь ни с какими посредниками вообще. Правда здорово? Жаль только, жить в эту пору прекрасную уж не придется — ни мне, ни тебе© Нн-да, опять я о грустном.


Дальше, где это все хранить? Ну, навскидку, сделать открытую иерархическую систему, что-нибудь типа нынешнего DNS, только более мощную и разветвленную. Чтобы не грузить админов корневых DNS добавлениями-модификациями можно бы сделать свободную регистрацию, единственная необходимая проверка — на уникальность. Типа >> " Здравствуйте, нас пять человек, семья Ивановых. Вот наши имена/ники, вот публичные ключи. Кто спросит — посылайте пожалуйста к нам. И еще вот, список стапятисот бабушек с нашего района с их ключами, если их будут спрашивать, тоже посылайте к нам."


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


Стоп!, а при чем здесь тогда вообще государство?


А вот теперь можно и осторожненько восстановить анонимность. Если любой может сгенерировать себе личный ключ и подтвердить его индивидуальным сертификатом и установить себе CA сервер нижнего уровня, или к соседу попроситься, или на какой публичный сервер, зачем нужен весь этот официоз? Да и привязываться к реальному персонажу тогда никакой нужды нет, полная приватность, секьюрность и анонимность. Достаточно чтобы в начале иерархии был некто заслуживающий доверия, ну, верим же мы TM или Let's Encrypt, да и известные публичные DNS'ы еще вроде никого еще в степь не отправляли. Со стороны чиновничества тоже вроде бы претензий быть не должно, то есть, претензии разумеется будут, но к чему собственно?


Возможно, когда-нибудь такая система, или что-то подобное, будет создана. И разумеется, рассчитывать нам не на кого, кроме самих себя, ни одно из известных мне государств такую систему строить не станет. К счастью, уже существующие Телеграм, i2p, Tor, и наверняка кого-то еще забыл, показывают что ничего принципиально невозможного нет. Это наша сеть, и нам ее обустраивать если нас не устраивает существующее положение дел.


Бррр, случайно получилось закончить на пафосной ноте. На самом деле, я этого не люблю, мне как-то ближе сарказм.


P.S.: это все разумеется розовые сопли и девичьи мечты.
P.P.S.: но если вдруг кто-то вздумает попробовать — зарезервируйте для меня ник degs пожалуйста, привык я к нему.
P.P.P.S.: а реализация кажется совсем простой между прочим.

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


  1. saipr
    22.04.2019 10:21

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

    Влиятельный злоумышленник — это только владелец закрытого ключа корневого сертификата. И именно он может подменить (переиздать) сертификаты, выданные им. В этом случае никто ничего может и не заметить. Но в этом случае этот "влиятельный злоумышленник" ставит себя вне рамок закона. Хотя Пеньковские были, есть (Скрипали) и, к сожалению, будут. Человеческий фактор. А так вы все сказали сами:


    это все разумеется розовые сопли и девичьи мечты


    1. degs Автор
      22.04.2019 10:24

      Ну да, по обоим пунктам. Именно то и сказал что хотел.