Максим Солохин (palaman) wrote,
Максим Солохин
palaman

Роскомпозор, коза и капуста

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

Итак.

Вот задача, с которой всё началось.

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

Эту задачу никто не мог решить тысячелетиями. Во время войны британцы читали немецкие шифровки, потому что как-то узнали ключ к шифру. (Считается, что раскрыли с помощью протокомпьютера, но скорее всего просто нашпионили, как и подобает пиратам.) Если бы немцы умели делать то, что сейчас расскажу, то Вторая мировая война могла бы пойти по-другому. (Хотя кончилась бы так же; шансов на победу против Британии+США+России у Гитлера не было.)

Представьте себе: тысячу лет никто никому не приходило в голову, как это сделать. А в XX веке, в 60-е годы, математики придумали! Я считаю, это одно из главных достижений человечества в XX веке, наряду с атомной бомбой и полетом в космос.
Если бы этого не было, то не было бы и Интернета, потому что в Сети все происходит у всех на глазах, и без шифров тут можно было бы говорить только о погоде. Ничего серьезного сделать было бы невозможно. А значит, не вкладывались бы большие деньги. А значит, всё это не развивалось бы так быстро и бодро.

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

Решение задачи, как и все гениальное, просто.
Помните задачу про волка, козу и капусту? Как их перевести на другой берег, если в лодке только есть место лишь для чего-то одного? при этом волк съест козу, а коза - капусту, если оставить их без присмотра.
Решение знают все!
Сначала везем козу, потом везем капусту, потом забираем козу назад (чтобы она не съела капусту), потом везем волка, потом наконец везем козу. Семь раз придется переплыть реку, зато никто не пострадает.

Так вот, решение Проблемы шифра очень похоже на решение этой задачки!

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

Профит!

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

Примерно так и работает современный интернет.

Понравилось? Или я зря занялся не своим делом (популяризацией)?

UpDated:
Если понравилось, читайте продолжение
Сеанс чёрной магии с полным разоблачением
а также (внимание, много цифр!)
Шифрование методом квантовой телепортации:)
15
и в каком месте тут позор рос-комп?
Бедный Роскомнадзор сейчас мучится, пытаясь преодолеть непреодолимый барьер, который создали математики. Я популярно описываю суть проблемы.
РКН обосрался совершенно в другом - он повёл атаку против системы, которую изначально проектировали как распределённую систему, которая должна выжить в случае массированной атомной атаки.

Это даже у китая, с его бездной ресурсов, получается не очень.
В противостоянии меча и щита мы можем сделать довольно точный прогноз, посмотрев на опыт далеко продвинувшегося на этом пути Китая. Китайцы вполне успешно блокируют все сайты, которые им мешают, отодвигая их за психологически важную границу «трёх кликов». Напомню, исследования показывают, что если обычный пользователь не может достичь нужного ресурса за три клика мышью, он обычно принимает решение отказаться от дальнейших попыток обойти преграду. (Фицморген)
а коза и капуста не совсем верны. Тут скорее камера хранения на вокзале
Самое оригинальное описание работы пары открытый-закрытый ключей.

Но я не уверен, что оно верное.

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

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

Но ! Это не безопасно - т.к. все хранится на том самом сервере незашифровано (точнее, зашифровано, но ключи в явном виде есть у компании-разработчика).
А шифрованные чаты точка-точка, они, конечно, безопасные. Да только вот ни хрена не удобные.

Так что весь этот пафос Дурова о том, что у него нет ключей и быть не может - это было обычное враньё. Просили-то у него общие ключи, которые у него есть.
> Самое оригинальное описание работы пары открытый-закрытый ключей.

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

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

Так что я про другое. Не про открытый и закрытый ключ!
>Мне кажется, я о другом.

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

Раз его до сих пор не поставили на широкую ногу - видать, всё не так просто.
ага, не вполне верное описание.

на самом деле дело так: я делаю парю ключей: свой (храню дома) и общий (каждый может его себе скопировать, вешаю его тасскать на базаре на дерево). вы берете общий ключ и закрываете им свое сообщение. сообщение можно открыть только моим (частным) ключом, обратно открыть его общим нельзя. так работает схема public/private key.

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

Вы послали первым, я зашифровал ещё больше и послал Вам? Так?
согласно описалову симметричного шифрования ключ дешифровки (алгоритм) подбирается обоими сторонами ДО обмена сообщением. "Симметричные_криптосистемы" в википедии. проблема в том, что если перехват алгоритма произошел - шифровка будет расшифрована 3-ей стороной.

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

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

Например, Вы хотите передать мне число А. Вы передаете мне А*В (В - Ваш ключ!). Я передаю Вам обратно А*В*С (С - мой ключ!), Вы делите это на В и получаете А*С, пересылаете мне. Я делю это на С и получаю А. Что и требовалось.

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

А(В)С = (АС)В
Я правильно понимаю, что это число в идеале должно быть простым? Или это не играет роли?
Да, эти вычисления строятся на основе простых чисел. Если число имеет делители, то у него появляются разные нехорошие свойства, и исчезают хорошие свойства, которыми обладают простые числа.
https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BB%D0%B0%D1%8F_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A4%D0%B5%D1%80%D0%BC%D0%B0

mindfactor

May 1 2018, 18:39:31 UTC 1 year ago Edited:  May 1 2018, 18:43:05 UTC

>использует ли телеграм такую схему?

Да, но только в секретных чатах.
Коими пользуются примерно 0,1% народу, потому что они ОЧЕНЬ неудобны.

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

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

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

А именно.

Каждый публичный чат хранится на сервере в зашифрованном виде. Чтобы его прочитать, надо быть участником чата - то есть, иметь доступ к ключу, которым он зашифрован. Не знаешь ключа - можешь читать сколько угодно: ничего понять невозможно. К тебе на устройство история чата передается в зашифрованном виде, расшифровывается только у тебя на устройстве.
А где хранится этот ключ? (Особый для каждого чата.)
Ключ хранится на сервере, но тоже в зашифрованном виде, в моем индивидуальном списке - списке ключей ко всем моим чатам и каналам. Этот список зашифрован моим индивидуальным ключом, и он передается мне сразу после того, когда я вхожу в свой аккаунт. Передается тоже в зашифрованном виде, причем никому не известен мой индивидуальный ключ, пользуясь которым можно этот список прочесть.
Хорошо, а где же хранится мой индивидуальный ключ?
А он тоже хранится на сервере, и зашифрован! И передается мне в тот момент, когда я вхожу в свой аккаунт в зашифрованном виде. Чтобы его расшифровать, нужно знать мой пароль, который я должен хранить в тайне, это уже моя забота.

Итак.

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

Профит!

Не знаешь моего пароля - не может узнать ничего! Хотя все хранится на публичном сервере, в общем доступе, и может быть передано хоть в ФСБ, хоть куда. Никто ничего не поймет и не прочитает.
Не думаю, что Дуров глупее меня и не мог придумать той же схемы. А скорее всего, он придумал кое-что и похитрее. Я-то любитель и размышляю обо всем этом часами, а он профессионал - и размышляет годами. Большая разница!
>Чтобы его прочитать, надо быть участником чата - то есть, иметь доступ к ключу, которым он зашифрован.

Ключ один для всего чата ? На самом деле это пара ключей - открытый, для зашифровки, и закрытый, для расшифровки, и мы говорим именно про закрытый ключ ? Я правильно понимаю, что эта пара генерируется на сервере ?


>Итак.
>...
>Профит!

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

ВСЁ !
> Ключ один для всего чата ? На самом деле это пара ключей - открытый, для зашифровки, и закрытый, для расшифровки, и мы говорим именно про закрытый ключ ?

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

> Я правильно понимаю, что эта пара генерируется на сервере ?

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

> требуют изготовить копию вашей сим-карты, а вашу симкарту тем временем заблокировать

Если они не знают мой личный пароль, то ничего у них не выйдет.

> сотрудники ФСБ запросят с сервера телеграмм восстановление пароля на ваш номер, получат его

Да, это проблема. Я думаю, самое правильное её решение - это невозможность восстановления пароля. Как с биткойнами. Нет пароля - нет денег, и точка.

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


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

palaman

May 1 2018, 18:40:55 UTC 1 year ago Edited:  May 1 2018, 18:42:29 UTC

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

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

Мне легче поверить что я ничего не понимаю.
Изучу матчасть)

Ну вот! считайте, что как популяризатор я уже достиг своей цели. Человеку стало интересно и захотелось разобраться в деле по-настоящему.

Спасибо!

Вам спасибо.
Я с детства болею криптографией на самом деле, даже иногда жалею что не пошел в эту сферу профессионально)

Да! Это штука ужасно увлекательная.
И всё-таки Вы правы. Я использовал негодную метафору. Действительно, в том виде, в каком я её представил читателю, задача пока не решена.

Плохой из меня популяризатор :)
о!
значит, надо эту задачу решать.
нобелевка точно будет)))
Найти функции, который были бы коммутативными (AB=BA) и обладали бы свойством АА=1 - и вместе с тем такие, что даже зная много пар x и y, таких что Ах=у нельзя было бы восстановить конкретную функцию А. Даже если имеешь открытый код, по которому они вычисляются.
наверное эту задачу рано или поздно решат с помощью каких-нибудь супер-алгоритмов. одной гениальной догадки будет мало.

Да, вы правы, конечно.


Однако такой протокол можно атаковать - перехвати все три сообщения и все. Можно расшифповать.

palaman

May 1 2018, 20:11:53 UTC 1 year ago Edited:  May 1 2018, 20:15:51 UTC

Если Вы знаете, что знаете x и y и знаете, что x=f(y) - этого ещё не достаточно, чтобы понять, что такое f. Если речь идет всего лишь об умножении на число, f(x)=a*x, то все просто, конечно. Но бывают же и более хитрые функции, для определения которых ничего не даст ни знание пары примеров её действия, ни даже даже сотни таких примеров.

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

А тот, что не может сходу поддержать разговор об эллиптических кривых и Г-функции, просто ничего не поймёт. Для обывателя - там сложная мозговзрывающая математика, упрощённое описание которой (про открытый и закрытый ключи) много раз написано на любом заборе.
Здравствуйте! Ваша запись попала в топ-25 популярных записей LiveJournal центрального региона. Подробнее о рейтинге читайте в Справке.
Я как-то изобрёл оригинальную шифровку вунтеанит. Попытайтесь расшифровать текст Гласность

Смею предположить что это слоговое письмо типа корейского хангыля. Выглялит очень иниересно)

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

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

Так что ИБ-специалисты заняты поиском баланса между удобством и безопасностью.

Ваше описание доставило большое удовольствие : ) Хотелось бы почитать еще.

Спасибо! :)
Значит, как популяризатор я не безнадежен.
По поводу матчасти добавить нечего, ибо некомпетентен. А по сути события выскажусь.
Некоторые галковскманы (Каин) полагают, что блокировка Телеграмма - это шаг на пути создания европейской информационной инфраструктуры, полностью независимой от США. Даже Макрон там сидел до недавнего времени.
Эта тема активно обсуждается в соцсетях. Несколько цитат оттуда:

- Если из-за РGP применённого в Телеграме и разгорелся сыр-бор, тогда ещё на "взлёте" надо было отстреливать, а не после того, когда распространился.

- Зачем "на взлёте"? Скорее всего, борьба с Телеграмом ведется не с целью его ликвидации, но рекламы и распространения. Если уж "всемогущие русские хакеры" не смогли одолеть Телегу, значит, Телега воистину непобедима! Если уж великое и ужасное ФСБ обломалось и не смогло прочесть переписку террористов - значит, Телега машина в впрямь серьезная! Записывайтесь все на Телегу! и Ваша приватность будет Вам всячески гарантирована, ага.

- Да. Ужасно похоже на рекламу. Но исторический опыт подсказывает, что "хотели как лучше а получилось как всегда". То есть тупость и жадность противников раскрутили Пашу, как когда-то Беню.

- Тупость и жадность на уровне сознания - это всегда проявление умный и острожной игры Бессознательного. Люди, которые работают в ФСБ, не знают, НА КОГО они работают. Знать это им по чину не положено. Они работают БЕССОЗНАТЕЛЬНО

- Пришла мне в голову странная мысль.
А что, если все мы наивны, и те-кто-надо давно уже владеют ключами от Телеги, и смысл интриги с её блокировкой в том, чтобы убедить тех-кого-надо в том, что Телега свята и непорочна, и пользоваться ею можно безо всякого стеснения и опаски? 😶
Я говорю не столько о презренных террористах, которых и так переловили бы, если бы хотели. Но соцсетями ведь пользуются не только террористы....
Подумал, и решил, что нет, это перебор. Люди там таки не глупее меня. Если я подумал в эту сторону, то они тем более подумают... но террористы-то вполне могут оказаться глупее меня, почему бы и нет?

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

Можно. Тут вариантов много.

Но тут вступают в силу соображения экономии.

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

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

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

palaman

May 3 2018, 12:12:08 UTC 1 year ago Edited:  May 3 2018, 12:13:25 UTC

В моей схеме вся информация шифруется и дешифруется у меня на устройстве. По каналам передается только шифрованная информация. Её можно читать невозбранно.

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

Недостаток этой схемы - невозможность восстановить пароль. Никак. Забыл пароль - всё. Теряешь аккаунт вместе со всем, что там хранится.
Ой простите. Я позабыл контекст разговора. Я думал, мы обсуждаем вот эту идею: https://palaman.livejournal.com/365021.html?thread=4164829#t4164829

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

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