Как стать автором
Обновить

Комментарии 87

Be sure to drink your Ovaltine
Son of a Bitch!
Краткое изложение:

У нас есть мессенджер с блекджеком крутыми алгоритмами и генератором случайных чисел, но нет людей и денег. Мы не хотим выиграть $200К у телеграма (несмотря на то, что он «секунды не продержится в боевых условиях»), потому что RSA авно и мессенджер на нем тоже авно. Поэтому дайте нам денег, нарисуйте дизайн и напишите хороший код. Viva la Opensource!
НЛО прилетело и опубликовало эту надпись здесь
куда еще и самому писать можно.

В том-то и дело. Нельзя.

очень хотел два раза упомянуть про NSA

Просто это единственный бэкдор в рандоме, про который люди хоть что-то слышали, вот и всё. Мне не показалось, что это была попытка напугать людей страшным NSA.
НЛО прилетело и опубликовало эту надпись здесь
Процитирую свой же комментарий:

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

Понимаете? Качество протокола — это отдельный вопрос. А вопрос, который предлагается обсуждать — это то, что данный конкурс призван неоправданно убедить людей, что протокол надёжен. Да что я говорю, он это уже сделал. «200 тысяч долларов! Это же супер защита!»
НЛО прилетело и опубликовало эту надпись здесь
Тут тонкий момент: лучше плохая безопасность, но о которой все знают, что она плохая (как Skype), чем средняя безопасность, которая пропагандируется как феноменальная.
Чем лучше?
Тем, что пользователи будут понимать, что любое их сообщение может быть перехвачено, и не станут пересылать критичные данные. А если станут, то сами себе злобные буратины, их предупреждали.
Ну они же не из сферического коня в вакууме их посылают. А реальность такова что атаковать конечное устройство как правило гораздо проще чем протокол. Любое их сообщение может быть перехвачено, чтобы они не использовали.
чем средняя безоопасность
Только почему-то автор совершенно случайно забыл упомянуть, что его приложение (redphone версии 0.9.5 и предыдущие) само оказалось уязвимо для критической ошибки в рандоме, и ему в августе в срочном порядке пришлось выпускать фикс. А в Телеграме протокол построен таким образом, что чисто клиентский рандом в критических местах не используется, и этой уязвимости не было. Ну не говоря уже о том, что второе приложение, textsecure, лично мне не удалось заставить работать в защищённом режиме. В одну сторону сообщения пересылаются, а в другую пишется «Сообщение зашифровано для несуществующей сессии».
Кроме того, вот здесь перечислен один очень интересный признак некачественного программного криптообеспечения — заявления типа «Algorithm or product X is insecure», не подкреплённые никакими реальными атаками или их описаниями. Чисто маркетинговый ход в защиту своего приложения, попытка использовать своё имя, для того, чтобы с ходу очернить конкурента. Не очень красиво, учитывая, что Телеграм открыт для фидбека со стороны сообщества, и это не последний конкурс, который проводится.
Кстати, а кто вообще сказал, что нельзя писать? Или это личное мнение? Зачем тогда даны номера телефонов? Вот здесь написано, что можно даже модифицировать пакеты и отсылать их серверу, хоть и самостоятельно.
Просто наудачу отсылать пакеты серверу, исходники которого даже не открыты — это всё-таки немного не то.
Так вот кто пишет краткие изложения книг на разных сайтах для ленивых школьников! А я-то думал, учителя подрабатывают в свободное время.

Вот альтернативное изложение с элементами анализа: $200K у Телеграма выиграть невозможно, потому что их условия отсекают девять возможных атак из десяти; в боевых условиях секунды не продержится протокол, описываемый Мокси, а телеграмный может и дольше продержаться; cуть поста была в том, что факт проведения конкурса ничего не значит, так как практически сколь угодно плохой протокол в условиях конкурса покажет себя так же; а ещё автору неприятно, что такой простой уловкой можно заставить людей почувствовать себя в безопасности; наконец, обидно, когда кто-то переизобретает то, что сделано тобой, да ещё и хуже.

Кстати, «vive».
Я не подвергаю не окрепшую детскую психику подобным испытаниям по этическим соображениям. Впрочем, судя по реакции сообщества, психику гигов тоже следует поберечь.

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

Кстати, команданте Че завещал гуглить viva la revolución
А, так вы по-испански. Прошу прощения, думал, французский.
Думаю и на испанском тоже будет vive, ибо код — мужик, а революция — нет.
Конкурс телеграма дает полный доступ к трафику. Что еще может сделать злоумышленник?

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

Телеграм славится именно феноменальной работоспособностью при плохом коннекте.

Так бы и сказали. Если мне понадобится феноменальная работоспособность при плохом коннекте, я непременно попробую воспользоваться Телеграмом. Только вот он не совсем этим славится, если судить по главной странице: слоган — «taking back our right to privacy».

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

Нет. Если я вам сейчас напишу все свои пароли, кроме одного, мне бы не хотелось, чтобы вы могли узнать и тот один пароль. Если абсолютно все мои сообщения попадут в чужие руки, я хочу быть по крайней мере спокойным за будущие сообщения. Это один из важнейших постулатов шифрования: предполагайте, что враг знает всё.
Так бы и сказали. Если мне понадобится феноменальная работоспособность при плохом коннекте, я непременно попробую воспользоваться Телеграмом. Только вот он не совсем этим славится, если судить по главной странице: слоган — «taking back our right to privacy».
Об этом давно говорят, только за пределами хаба «информационная безопасность». Но так уж повелось, что здесь мало интересуются не политическими делами в России. Видимо, поэтому информация прошла мимо. Слоган придуман для того, чтоб вывести мессенджер в топ на фоне обострившейся паранойи на западе и разубедить их в том, что теперь бесценную переписку будут читать еще и злые русские.

Нет. Если я вам сейчас напишу все свои пароли, кроме одного, мне бы не хотелось, чтобы вы могли узнать и тот один пароль. Если абсолютно все мои сообщения попадут в чужие руки, я хочу быть по крайней мере спокойным за будущие сообщения. Это один из важнейших постулатов шифрования: предполагайте, что враг знает всё.
Изначально мое высказывание относилось к Вашему мнению о том, что автор сделал крутую штуку, выложил ее в опенсорс и теперь обижается, что кто-то «сделал хуже» и пользуется.

Чего только не может сделать злоумышленник. Если шифрование можно взломать, имея только доступ к логам трафика, это очень и очень плохое шифрование. К сожалению, злоумышленники немного хитрее.
Напомню, что топик и изначальное обсуждение к нему имеют весьма посредственное отношение к криптографии, поэтому (чтобы не дойти до истории с хакером и солонкой) предлагаю провести суровый технический конкурс по взлому. Пусть сообщество хабракриптографов предложит условия действительно честного конкурса, или сделаем попроще: Вы дадите «тот один» пароль в зашифрованном виде и выложите все остальные (чтобы усложнить задачу можно просто выложить дампы). Конкурсантам необходимо будет узнать его по Вашим ссылкам или получить доступ к запароленным данным другими методами. Готов поспорить, что даже самого простого шифрования будет достаточно и сработает социальная инженерия. Так как по сумме с Дуровым конкурировать нереально, готов предложить в качестве приза вещи сугубо идеологические: дать инвайт на хабр и наплюсовать в карму.
Слоган придуман для того, чтоб вывести мессенджер в топ на фоне обострившейся паранойи на западе

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

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

Тогда непонятно, что значит фраза «что-то, что не должно быть использовано другими». Думаю, автор был бы рад, если бы «другие» пользовались.

Вы дадите «тот один» пароль в зашифрованном виде и выложите все остальные

У меня есть три четыре пять мыслей по этому поводу: а) не буду я выкладывать все свои пароли в открытый доступ; б) похоже, пора лечь спать, а не то плохо соображается; в) мне предлагают поучаствовать в конкурсе! люблю конкурсы; г) какое забавное слово, «конкурс»; д) точно пора спать.
условия действительно честного конкурса
Самое честное — дать аналитику этот ваш Телеграм с исходными кодами. С таким набором на руках можно провести, емнип, все или почти все атаки.
>Телеграм славится именно феноменальной работоспособностью при плохом коннекте

Можно подумать он один этим славится. Тот же BBM тоже отлично работает при плохом коннекте. Вот уже много лет как.
Я не фанат разработчиков телеграмма, но даже на моем ноутбуке средней паршивости скрипт на Python, набросанный за 10 минут, получит расшифрованное содержимое сообщения самое большее через 22 часа. В чем тогда смысл?
Собственно, автор совершил ошибку, использовав textbook RSA и 32-битное целое вместе, поэтому super_secret можно просто сбрутить — перебирать все возможные super_secret-ы и шифровать их предоставленным открытым ключом, пока результат не совпадет с тем, что отправила Алиса. Если бы использовался паддинг, или секрет был бы хотя бы 64 бита, этот сценарий бы уже не сработал.
Это не автор совершил ошибку. Это я совершил ошибку :( 32-байтное число, конечно же.

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

В принципе, раз сбрутить секрет не вариант, можно попробовать факторизировать открытый ключ — не на ноутбуке, конечно же.
Можно в домашних условиях собрать квантовый компьютер, на них как раз есть полиномиальные алгоритмы.
Ну да. И да пребудет с Вами Шор
Всего-то нужен сильный холодильник и немного воображения.
Для расшифровки нужен же не сам секрет, а message_key. В нём «всего лишь» 16 байт.

Кстати, Боб передал Алисе не 896 бит, а все 1144, непонятно почему.

Разложение первых 896 бит сообщения Боба (Wolfram Alpha): 2^8×3^3×67×1193×183299×27023881×28481850985512989099675452471459912028539
Ох, пардон, обрезалось число до 52 цифр.
Боб передал Алисе публичный ключ в формате ASN.1 DER, вот сюда можно вставить дамп из примера и посмотреть, как это выглядит.

Так что факторизировать нужно следующее число —
356527243659966548693033457464923716516539456_
319730960454335082893872317336655556619514752_
052654033163046749556804944585554927982098217_
315985406413478394848605180442422330065661415_
504642348309789041002870095790088186364384614_
356226611862292009565904103583804420207453441
Для расшифровки нужен же не сам секрет, а message_key. В нём «всего лишь» 16 байт.
Вот только незадача в том, что по шифротексту невозможно определить, какой message_key верен, т.е. для проверки таки придется искать 2**256 preimage-й для MD2, а его вроде еще не взломали так, чтобы атака имела практический смысл.
Если б сообщение хоть подлиннее было, или их несколько было — взломать бы было проще, да.

Про формат такой не знал даже, спасибо за наводку.
Это, собственно, основной используемый формат для хранения/обмена приватными, публичными и симметричными ключами, который может хранить кучу всяческой сопроводительной информации, относящейся к криптографии. Можно вообще извратиться и использовать его в качестве контейнера общего назначения, вместо binary1 plist или ebml.
Смысл как раз таки в том, что несмотря на насквозь дырявый протокол, уязвимый как к активным, так и к пассивным атакам вам всё равно надо использовать рессурсоемкий брут-форс для взлома. И все это из-за того, что задача изначально была поставлена на невыгодных условиях.
Алексей, почему Вы тогда не приступили к написанию ключа и расшифровке трафика? 200k.у.е. за 22 часа — достаточно хорошие деньги.
Алексей имел в виду, что автор оригинального поста совершил ошибку, приведя в пример «плохого, но настолько же «невзламываемого» протокола» на самом деле вполне себе взламываемый протокол (оказалось, я просто перепутал биты с байтами). За взлом приведённого насквозь дырявого протокола денег никто не предлагал.
Согласен с автором.
Дуров действительно сморозил какую-то фигню. В криптографии есть такое понятие, как «Ханаанский бальзам», шарлатанское снадобье выдаваемое за абсолютную панацею.
В качестве одного из признаков «Ханаанского бальзама» Брюс Шнайер указывает наличие награды за взлом и пишет следующее:
Объявление приза за взлом системы защиты вовсе не дает гарантии ее невзламываемости, и, как правило, означает, что разработчики не понимают, что следует сделать, чтобы показать, что система хорошо защищена.

Тем не менее, это как минимум означает, что с очень высокой вероятностью системе можно доверить сообщения стоимостью не более $200k. Кроме того, авторы известного алгоритма twofish, одного из претендентов на роль будущего AES, тоже проводили конкурс, он, по такой логике, тоже шарлатанство?

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

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

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

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

Пример(хотя и не мобильного клиента):
adium + secure chat через OTR. Все прекрасно, но логи лежат ввиде файлов.
Промазал. Мой ответ выше.
Вот многие противятся-противятся, а делом никто не доказал дырявость. И тут возникает вопрос: а не балаболы ли те, кто не верит в протокол?

P.S. Понимаю, что они там все гении, но всё же. Говорите же, что дыряво, криво и всё такое — так сломайте! Нет, одно лишь бла бла бла
«Не верить — это право, а верить — привилегия». Так написал бы я, если бы хотел напустить тумана. А если серьезно, то нет ничего предосудительного в недоверии заявлениям о криптостойкости. На этом криптография и держится, а не на «привилегии» быть наивным.
Даже если что-то не сломали сейчас, это совсем не значит что алгоритм криптостойкий и его не взломают завтра. Если бы криптостойкость зависела от взломов, ее бы так и проверяли, взломами.
«Делом доказать дырявость», а что авторы самого Телеграмма не доказали делом? Мне кажется было бы логичней, если речь идет о криптографических алгоритмах, не на публику работать получая недоверие специалистов, а наоборот, заручится поддержкой именно специалистов? Ведь не простой кодер будет принимать решение об использовании этих протоколов в дальнейшем.
Дело в том, что условия поставлены так, чтобы никто не выиграл. А для тех, кому нужно будет прочитать переписку, такие условия отменят. Читай: избранным дадут особые права, позволяющие дешифровать сообщения
Говорите же, что дыряво, криво и всё такое — так сломайте! Нет, одно лишь бла бла бла

А вы на досуге попробуйте доказать, что бога не существует.
То, что это невозможно доказать, еще не доказывает, что бог есть.
Также и с криптографией. Все зависит от постановки задачи.
Never implement crypto by yourself © Dan Boneh
Я вроде бы не дурак, но не понял статью с первого раза. Понял только почитав комментарии и перечитав еще раз и догадавшись о чем писал автор. Перевод получился ужасный, лучше вообще не переводить, чем переводить вот так.
«Как заметил Брюс Шнайер, такие вещи ничего хорошего не сулят.»
А какие сулят? Какие вещи? Что? Вы о чем? Я простой челябинский программист, когда я в последний раз читал Б.Ш.? В переводе фраза воспринимается как бессмысленный литературный оборот, фраза для связки текста. Внимание не заостряется на фразе. Но в исходной статье каждая фраза наполнена смыслом. Эту фразу нужно понять. И так по всему тексту. Какого черта вы переводите статью просторечными оборотами таким образом полностью маскируя исходный смысл статьи?
Сравните с оригиналом статьи:
The Fallacy Of The Crypto Contest
As always, these things are a bad sign.
Имеют признаки! И никто никому ничего не сулит…
И я не один такой, кто не понял этот перевод с первого раза, читайте комментарии.
> Какого черта вы переводите статью просторечными оборотами таким образом полностью маскируя исходный смысл статьи?

thoughtcrime.org/blog/telegram-crypto-challenge/#comment-1170836002

Artyom Kazak> Sorry for not asking for a permission beforehand! The reason is that somebody else could publish it before me and I just couldn't miss the opportunity.

Очевидно, статье не уделилось достаточно внимания, чтобы успеть «забить» новость — горячий пирожок же.
Именно. Восприятие текста переводчиком довольно сильно отличается от восприятия человеком, который не читал оригинал; обычно переводу надо дать «отстояться» хотя бы день, чтобы ляпы и неточности стали заметны. Каюсь, я этого не сделал.

В ближайшие пару часов — лучше поздно, чем никогда! — постараюсь отредактировать перевод.
> В ближайшие пару часов — лучше поздно, чем никогда! — постараюсь отредактировать перевод.

Ну что ж, теперь-то вам не отвертеться :)
Так что дерзайте.
Дерзнул. Вот changelog, если кому интересно.

Скрытый текст
  • выкинул отсебятину про «называемый так же»
  • questions and concerns
  • instead of engaging in a more reasonable dialog ≠ вместо ответа
  • у galaxy «ловушка конкурсов по взлому», у меня — «что не так...». Нестыковочка. Стоит исправить, чтобы было понятно, что здесь идёт речь именно о Шнайеровской ловушке.
  • «как заметил Брюс Шнайер», «такие вещи», м-да. На месте aplic я тоже не был бы в восторге. Исправил, пояснил (так как до Warning Sign #9 ещё надо было доскроллить — я, например, не заметил).
  • плюс одно предложение о бессмысленности конкурса
  • «криптографический» — «защищённый». Опять отсебятина.
  • сделал предложение про непередаваемо ужасный протокол более понятным (так как оно ключевое, можно чуть-чуть отойти от буквы текста ради понятности)
  • вернул на место название Dual_EC_DRBG
  • восклицательный знак в описании дырявого протокола не к месту
  • как бы так перевести «aged to perfection», надо бы погуглить. Ага, есть фильм с таким названием. Кликаю на первую ссылку… «genre of adult film-making known as 'granny porn,' in which women in their 50s and above take part in the action». Чёрт, кто бы мог подумать. Даже если автор ничего такого не имел в виду, нормальный вариант перевода в голову уже не лезет.
  • не знаю, какой устоявшийся термин для «key derivation function». В статье на Википедии про scrypt упоминается «функция формирования ключа» — хорошо, пусть так и будет.
  • что-то незаметно, чтобы Мокси публиковал логи переписки «каждый день». Часть предложения про это выкинул.
  • да здравствует «бред собачий»
  • уточнил про любопытную систему BitHub
  • «деньги» — «средства». Жалко, что у слова «конкурс» не нашлось короткого синонима — не хочется лепить «соревнование».
  • «чуть не забыл» — отсебятина

Может кто ответит на вопрос? Я так понимаю, что алгоритм шифрования Telegram является закрытым, но в то же время объвляется, что он черезвычайно надежен. С другой стороны существует практика, по которой криптографические алгоритмы делают открытыми, что позволяет проводить публичную проверку. Вопрос: почему Дуров не хочет открывать алгоритмы? Может он это уже объяснял где-то?
Тогда я не понимаю, почему Moxie Marlinspike приводит в пример
непередаваемо ужасный «криптографический» протокол
, а не разбирает конкретные алгоритмы Telegram, если они в открыты.
Вот именно. Непонятно. Но это из за перевода.
А на самом деле этот пример нестойкого алгоритма был приведен что бы пояснить несостоятельность конкурса, таких его условий, по которым даже такой дырявый алгоритм будет выглядеть стойким. И еще раз обратить внимание, что не конкурсами нужно доказывать стойкость алгоритма.
Ответ Дурова в комментах к оригинальному посту:

As mentioned at core.telegram.org/contestfaq if more tools to interact with the traffic are needed for the contestants to crack Telegram, they will be provided in the next contest right after 1 March, 2014. The current contest has an important practical task of deciphering traffic that is being intercepted in real time. This is the basic concern of regular users like myself (me and lots of other people in Russia had to stop using WhatsApp because of easily decipherable intercepted traffic). If Telegram proves to be robust in this respect, more tools to manipulate traffic and wider contests with similar prizes are to follow. Like all startups, this contest by Telegram starts from solving a basic but most important problem, then gradually gets more complicated in functionality and scope.

Telegram will always be interested in creating incentives for the crypto-community to check its security and provide feedback. So if you are waiting for tools to try, e.g., a MITM on Telegram and get your $200К, please stay tuned – it won't take long.


До 1 марта конкурс идет на таких вот условиях, далее они предоставят больше возможностей — возможность провести атаку MITM, например.
.
Активный MitM, когда атакующий не просто может слушать трафик, но и вмешиваться в него, проводится в реальном времени, например через ARP spoofing и подмену публичной точки WiFi. Более того, это вполне реальные атаки, с которыми приходится сталкиваться in-the-wild.
Конкурс в $200k по взлому, я думаю, должен показать, что если информация, которая передается стоит < $200k, то телеграм вряд ли взломают.

Ну за $100 то точно никто не будет возиться.
Неверно рассуждаешь. Надо учитывать, что эти 200к — примерно 0,1% от того, что имеет Дуров. Для него эта сумма ничего не значит и её можно вложить в пиар, раскрутку протокола
должен показать

Это ключевая часть фразы. Большая сумма должна создать иллюзию.
А есть ли описание протокола шифрования этого телеграма? А то столько новостей про него на хабре, и ни одной ссылки на описание самого протокола я так и не увидел.
На данный момент все кулхацкеры, кто кричит про нелепости конкурса в сетевых дискуссиях — всего лишь зарабатывают себе рейтинги, ровно так же, как и обвиняемые ими организаторы соревнования (не имею в виду автора этой статьи на хабре). Хозяева конкурса, надо заметить, поступили довольно дальновидно — публикуют уточнения и открывают дополнительные сведения уже по ходу конкурса, после ожесточенных дискуссий, ставя оппонентов не в самое завидное положение, когда им приходится исправлять свои мнения под давлением обстоятельств. На птичьих правах автора одной из новостей про пресловутый конкурс Телеграма, позволю себе добавить и сюда свежеопубликованный FAQ по конкурсу:

1. Зачем конкурс?
Чтобы выявить уязвимости алгоритма или получить косвенное доказательство его стойкости.

2. Что будет, если кто-то все же победит?
Если у нас будет победитель текущего соревнования, мы начнём новое с большим призом, но сначала исправим протокол.

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

4. Какова структура трафика?
Структура такая:
Unixtime Length-in-bytes Direction (in/out) ServerIP:Port Hexdump.
Для вашего удобства, показаны только высокие байты TCP потока, игнорируя границы IP пакетов, а также пропущены заголовки TCP/IP

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

6. Можете дать пример сообщения?
Конечно. Оно может выглядеть так: Привет Коля, вот секретный емэйл для охотников за наживой — {тут адрес емэйла}.

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

8. Что если я не доверяю биткоинам, и не хочу их в качестве приза?
Если победитель предпочитает обычную валюту, мы с радостью перечислим ему 200000 долларов вместо BTC.

9. Осталось всего 2,5 месяца, мне нужно больше времени!
Конкурс на взлом зашифрованного протокола Телеграма — постоянное свойство нашего проекта. Теперь мы всегда будем запускать новый конкурс сразу после предыдущего, и каждый раз сумма приза будет вырастать. Так что первый кто взломает протокол — сможет потребовать приз, даже если текущее соревнование будет завершено.

НЛО прилетело и опубликовало эту надпись здесь
Какой туман? Условия весьма конкретны: вот трафик, если расшифруете — получите пирожок. Если нет — то дальше мы ослабим условия и сделаем их более близкими к реальным.
Интересно было бы посмотреть на условия конкурса в вашем варианте. Если я подойду, отберу телефон и прочитаю сообщения — это будет атакой? Что считать атакой? И как вы собираетесь считать «количество вычисления»? Я думаю когда вы начнёте уточнять все эти вопросы, то у вас появится такой же «туман».
НЛО прилетело и опубликовало эту надпись здесь
Я согласен с тем, что доказывать надёжность алгоритма с помощью конкурса — плохая идея. Но в целом условия конкурса мне больше нравятся у Телеграмма. «Лучшие негативные комментарии» — вообще субъективное понятие. Понятно, что Шнайер личность весьма известная и уважаемая и его мнению будут доверять. Но если какие-то неизвестные до сего времени личности устроят конкурс в котором будут на своё усмотрение выбирать лучшие решения, но мне кажется негатива будет куда больше, даже пускай они будут абсолютно честные, никого это не волнует. ИМХО в этом случае лучше иметь чёткие правила с объективным критерием победы.
Вот по ссылке адекватный разбор www.cryptofails.com/post/70546720222/telegrams-cryptanalysis-contest

Автор конкретно и предметно говорит о недостатках алгоритма и делает такой вывод: If their protocol is secure, it is so by accident, not because of good design. They claim the protocol was designed by “six ACM champions” and “Ph.Ds in math.” Quite frankly, the protocol looks like it was made by an amateur. The tight coupling between primitives suggests the designer was not familiar with basic constructs, like authenticated encryption, that you can find in any cryptography textbook.

Мой перевод: Если даже их протокол безопасен, то лишь по случайности, а не из-за хорошего дизайна. Они заявляют, что дизайном протокола занимались «шесть чемпионов ACM» и к.ф.-м.н. Но, честно говоря, протокол как будто сделан дилетантом. Тесно связанные между собой примитивы намекают, что дизайнер незнаком с базисными конструкциями типа authenticated encryption, о которых можно прочитать в любом учебнике по криптографии.
Наши ребята пошли по ставшему классикой русскому подходу в программировании, разрабатывая свои вещи в изоляции от профессионального сообщества. И повелись от «эффективного менеджера» с этим маркетинговым конкурсом. Если у них с математикой все в порядке, они конечно свой алгоритм защитят от критики, но даже если так, осадочек останется и общее отношение к продукту непонятно как они будут исправлять. Основного потребителя продукта они же противопоставили себе этим подходом. Кроме того, что они сейчас получат плюшек, это ведь и неэффективно по своему, заранее отказываться от сотрудничества с западными разработчиками.
Проблема в том, что в криптографии одной математикой не обойдёшься, я когда курс криптографии Dan Boneh слушал, поражался, как много я не знал. Там огромное значение имеют всякие мелочи, на первый взгляд кажущиеся несущественными. Зачем нужно было в этом вопросе заниматься изобретением велосипеда, я не очень представляю.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Итак, господа разработчики Telegram, у меня тоже есть для вас конкурс. Ниже описан непередаваемо ужасный «защищённый» протокол (который и секунды не продержится в боевых условиях), но который является настолько же «невзламываемым» в условиях вашего конкурса, как и ваш собственный протокол.

Если разработчики Telegram хотят доказать, что их протокол лучше хотя бы этого

Неужели я настолько невнятно написал… [посыпает голову пеплом]
НЛО прилетело и опубликовало эту надпись здесь
но, я правильно понял что в телеграмме всё равно прокатывает man-in-the-middle?

В посте нигде не было сказано, что man-in-the-middle прокатывает или не прокатывает. А вот выдержка из официального FAQ очень настораживает:

Client-Server communication is protected from MiTM-attacks during DH key generation by means of a server RSA public key embedded into client software. After that, if both clients trust the server software, the Secret Chats between them are protected by the server from MiTM attacks.

The interface offers a way of comparing Secret Chat keys for users who do not trust the server. Visualizations of the key are presented in the form of identicons (example here). By comparing key visualizations users can make sure no MITM attack had taken place.

То есть, в обычном режиме вы защищены от всех, кроме сервера (исходники которого, напоминаю, даже ещё не открыты и нет никакой возможности проверить, что сервер за вами не следит), а в режиме «повышенной секретности» вам предлагается сравнить две картинки. Если совпадают — MITM нет. Учитывая, что естественные языки плохо предназначены для описания четырёхцветных пиксельных картинок размером 8 на 8 пикселей, теоретически можно попытаться подобрать достаточно похожие картинки в надежде, что пользователи не станут заморачиваться.

tl;dr: или верить серверу, или полагаться на картинки. Плохо.

и что в США месенджер был бы вне закона и как следствие удалён с американской версии google play и appstore если бы АНБ признала шифр слишком трудным для вскрытия?

А это-то вы откуда взяли?
НЛО прилетело и опубликовало эту надпись здесь
Не «сертификацию». Просто авторы обязаны были послать исходники куда надо и получить «добро» на распространение, вот и всё. А по вашей логике, АНБ считает простыми для вскрытия, например, TrueCrypt и OpenSSL.
Четырехцветную картинку 8 на 8 пикселей (2128 вариантов) можно было бы упаковать в бессмысленную фразу естественного языка. Для формата «AAN,AN,AAN,AN,AAN» (A — adjective, прилагательное, N — noun, существительное) при словаре в 1127 прилагательных и 983 существительных получается (716)*(238)*(9835) вариантов (приблизительно 2130.81).

Реализация упаковщика на Python
#!/usr/bin/env python3
# coding: utf8

class NaturalDigestEncoder(object):
    def __init__(self, nouns, adjectives):
        self.nouns = sorted(nouns)
        self.adjectives = sorted(adjectives)
        
        self.__length_nouns = len(self.nouns)
        self.__length_adjectives = len(self.adjectives)
    
    def __get_adjective(self, index):
        return self.adjectives[index]
    
    def __get_noun(self, index):
        return self.nouns[index]
    
    def encode_bytes(self, bytes):
        return self.encode_number(int.from_bytes(bytes, 'little'))
    
    def encode_number(self, number):
        length_nouns = self.__length_nouns
        length_adjectives = self.__length_adjectives
        get_adjective = self.__get_adjective
        get_noun = self.__get_noun
        
        number, group1adj1 = divmod(number, length_adjectives)
        number, group1adj2 = divmod(number, length_adjectives)
        number, group1noun = divmod(number, length_nouns)
        number, group2adj1 = divmod(number, length_adjectives)
        number, group2noun = divmod(number, length_nouns)
        number, group3adj1 = divmod(number, length_adjectives)
        number, group3adj2 = divmod(number, length_adjectives)
        number, group3noun = divmod(number, length_nouns)
        number, group4adj1 = divmod(number, length_adjectives)
        number, group4noun = divmod(number, length_nouns)
        number, group5adj1 = divmod(number, length_adjectives)
        number, group5adj2 = divmod(number, length_adjectives)
        number, group5noun = divmod(number, length_nouns)
        
        return '%s %s %s, %s %s, %s %s %s, %s %s, %s %s %s' % (
            get_adjective(group1adj1), get_adjective(group1adj2), get_noun(group1noun),
            get_adjective(group2adj1), get_noun(group2noun),
            get_adjective(group3adj1), get_adjective(group3adj2), get_noun(group3noun),
            get_adjective(group4adj1), get_noun(group4noun),
            get_adjective(group5adj1), get_adjective(group5adj2), get_noun(group5noun),
        )

if __name__ == '__main__':
    import binascii
    import io
    import os

    def read_file(filename):
        with io.open(filename, 'r') as fd:
            return set(x.strip() for x in fd)
    
    nde = NaturalDigestEncoder(read_file('nouns.txt'), read_file('adjectives.txt'))
    
    for x in range(32):
        digest = os.urandom(16)
        print('%s — %s' % (str(binascii.hexlify(digest), encoding = 'utf8'), nde.encode_bytes(digest)))

Словарь существительных (nouns.txt)
able account achieve achiever acoustics act action activity actor addition
adjustment advertisement advice aftermath afternoon afterthought agreement air
airplane airport alarm alley amount amusement anger angle animal answer ant
ants apparatus apparel apple apples appliance approval arch argument arithmetic
arm army art attack attempt attention attraction aunt authority babies baby
back badge bag bait balance ball balloon balls banana band base baseball basin
basket basketball bat bath battle bead beam bean bear bears beast bed bedroom
beds bee beef beetle beggar beginner behavior belief believe bell bells berry
bike bikes bird birds birth birthday bit bite blade blood blow board boat boats
body bomb bone book books boot border bottle boundary box boy boys brain brake
branch brass bread breakfast breath brick bridge brother brothers brush bubble
bucket building bulb bun burn burst bushes business butter button cabbage cable
cactus cake cakes calculator calendar camera camp can cannon canvas cap caption
car card care carpenter carriage cars cart cast cat cats cattle cause cave
celery cellar cemetery cent chain chair chairs chalk chance change channel
cheese cherries cherry chess chicken chickens children chin christmas-balls
church circle clam class clock clocks cloth cloud clouds clover club coach coal
coast coat cobweb coil collar color comb comfort committee company comparison
competition condition connection control cook copper copy cord cork corn cough
country cover cow cows crack cracker crate crayon cream creator creature credit
crib crime crook crow crowd crown crush cry cub cup current curtain curve
cushion dad daughter day death debt decision deer degree design desire desk
destruction detail development digestion dime dinner dinosaurs direction dirt
discovery discussion disease disgust distance distribution division dock doctor
dog dogs doll dolls donkey door downtown drain drawer dress drink driving drop
drug drum duck ducks dust ear earth earthquake edge education effect egg eggnog
eggs elbow end engine error event example exchange existence expansion
experience expert eye eyes face fact fairies fall family fan fang farm farmer
father faucet fear feast feather feeling feet fiction field fifth fight finger
fire fireman fish flag flame flavor flesh flight flock floor flower flowers fly
fog fold food foot force fork form fowl frame friction friend friends frog
frogs front fruit fuel furniture galley game garden gate geese ghost giants
giraffe girl girls glass glove glue goat gold goldfish good-bye goose
government governor grade grain grandfather grandmother grape grass grip ground
group growth guide guitar gun hair haircut hall hammer hand hands harbor
harmony hat hate head health hearing heart heat help hen hill history hobbies
hole holiday home honey hook hope horn horse horses hose hospital hot hour
house houses humor hydrant ice icicle idea impulse income increase industry ink
insect instrument insurance interest invention iron island jail jam jar jeans
jelly jellyfish jewel join joke journey judge juice jump kettle key kick kiss
kite kitten kittens kitty knee knife knot knowledge laborer lace ladybug lake
lamp land language laugh lawyer lead leaf learning leather leg legs letter
letters lettuce level library lift light limit line linen lip liquid list
lizards loaf lock locket look loss love low lumber lunch lunchroom machine
magic maid mailbox mailman man manager map marble mark market mask mass match
meal measure meat meeting memory men metal mice middle milk mind mine minister
mint minute mist mitten mom money monkey month moon morning mother motion
mountain mouth move muscle music nail name nation neck need needle nerve nest
net news night noise north nose note notebook number nut oatmeal observation
ocean offer office oil operation opinion orange oranges order organization
ornament oven owl owner page pail pain paint pan pancake paper parcel parent
park part partner party passenger paste patch payment peace pear pen pencil
person pest pet pets pickle picture pie pies pig pigs pin pipe pizzas place
plane planes plant plantation plants plastic plate play playground pleasure
plot plough pocket point poison police polish pollution popcorn porter position
pot potato powder power price print prison process produce profit property
prose protest pull pump punishment purpose push quarter quartz queen question
quicksand quiet quill quilt quince quiver rabbit rabbits rail railway rain
rainstorm rake range rat rate ray reaction reading reason receipt recess record
regret relation religion representative request respect rest reward rhythm rice
riddle rifle ring rings river road robin rock rod roll roof room root rose
route rub rule run sack sail salt sand scale scarecrow scarf scene scent school
science scissors screw sea seashore seat secretary seed selection self sense
servant shade shake shame shape sheep sheet shelf ship shirt shock shoe shoes
shop show side sidewalk sign silk silver sink sister sisters size skate skin
skirt sky slave sleep sleet slip slope smash smell smile smoke snail snails
snake snakes sneeze snow soap society sock soda sofa son song songs sort sound
soup space spade spark spiders sponge spoon spot spring spy square squirrel
stage stamp star start statement station steam steel stem step stew stick
sticks stitch stocking stomach stone stop store story stove stranger straw
stream street stretch string structure substance sugar suggestion suit summer
sun support surprise sweater swim swing system table tail talk tank taste tax
teaching team teeth temper tendency tent territory test texture theory thing
things thought thread thrill throat throne thumb thunder ticket tiger time tin
title toad toe toes tomatoes tongue tooth toothbrush toothpaste top touch town
toy toys trade trail train trains tramp transport tray treatment tree trees
trick trip trouble trousers truck trucks tub turkey turn twig twist umbrella
uncle underwear unit use vacation value van vase vegetable veil vein verse
vessel vest view visitor voice volcano volleyball voyage walk wall war wash
waste watch water wave waves wax way wealth weather week weight wheel whip
whistle wilderness wind window wine wing winter wire wish woman women wood wool
word work worm wound wren wrench wrist writer writing yak yam yard yarn year
yoke zebra zephyr zinc zipper zoo

Словарь прилагательных (adjectives.txt)
aback abaft abandoned abashed aberrant abhorrent abiding abject ablaze able
abnormal aboard aboriginal abortive abounding abrasive abrupt absent absorbed
absorbing abstracted absurd abundant abusive acceptable accessible accidental
accurate acid acidic acoustic acrid actually adamant adaptable addicted
adhesive adjoining adorable adventurous afraid aggressive agonizing agreeable
ahead ajar alcoholic alert alike alive alleged alluring aloof amazing ambiguous
ambitious amuck amused amusing ancient angry animated annoyed annoying anxious
apathetic aquatic aromatic arrogant ashamed aspiring assorted astonishing
attractive auspicious automatic available average awake aware awesome awful
axiomatic bad barbarous bashful bawdy beautiful befitting belligerent
beneficial bent berserk best better bewildered big billowy bite-sized bitter
bizarre black black-and-white bloody blue blue-eyed blushing boiling boorish
bored boring bouncy boundless brainy brash brave brawny breakable breeze breezy
brief bright broad broken brown bumpy burly bustling busy cagey calculating
callous calm capable capricious careful careless caring cautious ceaseless
certain changeable charming cheap cheerful chemical chief childlike chilly
chivalrous christmas-balls chubby chunky clammy classy clean clear clever
cloistered closed cloudy clumsy cluttered coherent cold colorful colossal
combative comfortable common complete complex concerned condemned confused
conscious cooing cool cooperative coordinated courageous cowardly crabby craven
crazy creepy crooked crowded cruel cuddly cultured cumbersome curious curly
curved curvy cut cute cynical daffy daily damaged damaging damp dangerous
dapper dark dashing dazzling dead deadpan deafening dear debonair decisive
decorous deep deeply defeated defective defiant delicate delicious delightful
delirious demonic dependent depressed deranged descriptive deserted detailed
determined devilish didactic different difficult diligent direful dirty
disagreeable disastrous discreet disgusted disgusting disillusioned dispensable
distinct disturbed divergent dizzy domineering doubtful drab draconian dramatic
dreary drunk dry dull dusty dynamic dysfunctional eager early earsplitting
earthy easy eatable economic educated efficacious efficient eight elastic
elated elderly electric elegant elfin elite embarrassed eminent empty enchanted
enchanting encouraging endurable energetic enormous entertaining enthusiastic
envious equable equal erect erratic ethereal evanescent evasive even excellent
excited exciting exclusive exotic expensive extra-large extra-small exuberant
exultant fabulous faded faint fair faithful fallacious false familiar famous
fanatical fancy fantastic far far-flung fascinated fast fat faulty fearful
fearless feeble feigned female fertile festive few fierce filthy fine finicky
first five fixed flagrant flaky flashy flat flawless flimsy flippant flowery
fluffy fluttering foamy foolish foregoing forgetful fortunate four fragile
frail frantic free freezing frequent fresh fretful friendly frightened
frightening full fumbling functional funny furry furtive future futuristic
fuzzy gabby gainful gamy gaping garrulous gaudy general gentle giant giddy
gifted gigantic glamorous gleaming glib glistening glorious glossy godly good
goofy gorgeous graceful grandiose grateful gratis gray greasy great greedy
green grey grieving groovy grotesque grouchy grubby gruesome grumpy guarded
guiltless gullible gusty guttural habitual half hallowed halting handsome
handsomely handy hanging hapless happy hard hard-to-find harmonious harsh
hateful heady healthy heartbreaking heavenly heavy hellish helpful helpless
hesitant hideous high high-pitched highfalutin hilarious hissing historical
holistic hollow homeless homely honorable horrible hospitable hot huge hulking
humdrum humorous hungry hurried hurt hushed husky hypnotic hysterical icky icy
idiotic ignorant ill ill-fated ill-informed illegal illustrious imaginary
immense imminent impartial imperfect impolite important imported impossible
incandescent incompetent inconclusive incredible industrious inexpensive
infamous innate innocent inquisitive insidious instinctive intelligent
interesting internal invincible irate irritating itchy jaded jagged jazzy
jealous jittery jobless jolly joyous judicious juicy jumbled jumpy juvenile
kaput keen kind kindhearted kindly knotty knowing knowledgeable known labored
lackadaisical lacking lame lamentable languid large last late laughable lavish
lazy lean learned left legal lethal level lewd light like likeable limping
literate little lively living lonely long long-term longing loose lopsided loud
loutish lovely loving low lowly lucky ludicrous lumpy lush luxuriant lying
lyrical macabre macho maddening madly magenta magical magnificent majestic
makeshift male malicious mammoth maniacal many marked married marvelous massive
material materialistic mature mean measly meaty medical meek mellow melodic
melted merciful mere messy mighty military milky mindless miniature minor
miscreant misty mixed moaning modern moldy momentous motionless mountainous
muddled mundane murky mushy mute mysterious naive nappy narrow nasty natural
naughty nauseating near neat nebulous necessary needless needy neighborly
nervous new next nice nifty nimble nine nippy noiseless noisy nonchalant
nondescript nonstop normal nostalgic nosy noxious null numberless numerous
nutritious nutty oafish obedient obeisant obese obnoxious obscene obsequious
observant obsolete obtainable oceanic odd offbeat old old-fashioned omniscient
one onerous open opposite optimal orange ordinary organic ossified outgoing
outrageous outstanding oval overconfident overjoyed overrated overt overwrought
painful painstaking pale paltry panicky panoramic parallel parched parsimonious
past pastoral pathetic peaceful penitent perfect periodic permissible perpetual
petite phobic physical picayune pink piquant placid plain plant plastic
plausible pleasant plucky pointless poised polite political poor possessive
possible powerful precious premium present pretty previous pricey prickly
private probable productive profuse protective proud psychedelic psychotic
public puffy pumped puny purple purring pushy puzzled puzzling quack quaint
quarrelsome questionable quick quickest quiet quirky quixotic quizzical rabid
racial ragged rainy rambunctious rampant rapid rare raspy ratty ready real
rebel receptive recondite red redundant reflective regular relieved remarkable
reminiscent repulsive resolute resonant responsible rhetorical rich right
righteous rightful rigid ripe ritzy roasted robust romantic roomy rotten rough
round royal ruddy rude rural rustic ruthless sable sad safe salty same sassy
satisfying savory scandalous scarce scared scary scattered scientific
scintillating scrawny screeching second second-hand secret secretive sedate
seemly selective selfish separate serious shaggy shaky shallow sharp shiny
shivering shocking short shrill shut shy sick silent silky silly simple
simplistic sincere six skillful skinny sleepy slim slimy slippery sloppy slow
small smart smelly smiling smoggy smooth sneaky snobbish snotty soft soggy
solid somber sophisticated sordid sore sour sparkling sparse special
spectacular spicy spiffy spiky spiritual spiteful splendid spooky spotless
spotted spotty spurious squalid square squealing squeamish staking stale
standing statuesque steadfast steady steep stereotyped sticky stiff stimulating
stingy stormy straight strange striped strong stupendous stupid sturdy subdued
subsequent substantial successful succinct sudden sulky super superb
superficial supreme swanky sweet sweltering swift symptomatic synonymous taboo
tacit tacky talented tall tame tan tangible tangy tart tasteful tasteless tasty
tawdry tearful tedious teeny teeny-tiny telling temporary ten tender tense
tenuous terrible terrific tested testy thankful therapeutic thick thin
thinkable third thirsty thoughtful thoughtless threatening three thundering
tidy tight tightfisted tiny tired tiresome toothsome torpid tough towering
tranquil trashy tremendous tricky trite troubled truculent true truthful two
typical ubiquitous ugliest ugly ultra unable unaccountable unadvised unarmed
unbecoming unbiased uncovered understood undesirable unequal unequaled uneven
unhealthy uninterested unique unkempt unknown unnatural unruly unsightly
unsuitable untidy unused unusual unwieldy unwritten upbeat uppity upset uptight
used useful useless utopian utter uttermost vacuous vagabond vague valuable
various vast vengeful venomous verdant versed victorious vigorous violent
violet vivacious voiceless volatile voracious vulgar wacky waggish waiting
wakeful wandering wanting warlike warm wary wasteful watery weak wealthy weary
well-groomed well-made well-off well-to-do wet whimsical whispering white whole
wholesale wicked wide wide-eyed wiggly wild willing windy wiry wise wistful
witty woebegone womanly wonderful wooden woozy workable worried worthless
wrathful wretched wrong wry xenophobic yellow yielding young youthful yummy
zany zealous zesty zippy zonked

Другие примеры результатов
d67ab0bf4d2c1e4d673ab47d147fac64 — disgusting whimsical pain, unwieldy ducks, curly boiling square, addicted interest, eminent awake ball
58d568ff35f9d31ce194e9c5e5215f27 — abaft pleasant ants, sweltering horse, cut frightened banana, helpless year, shaky meek alley
31ebeeb944a1df66c487f18b7607559b — modern stingy sleep, aware news, craven whimsical van, three stop, victorious white believe
184046df766e1d53f6e16ec8e9eb1552 — naughty bewildered cup, unsuitable place, holistic vacuous thunder, vast bedroom, adorable unadvised attention
82b2f57ed5d4ed1b2798fac1108d4a27 — clear bright caption, gabby badge, threatening selfish flock, medical care, deeply limping alley
35693c66a260ab004b259888f6e814dd — elastic good invention, handsomely bun, alike attractive ticket, acidic tin, careless vague breath
678e17c688d38b35712558c5ae9cb9c1 — attractive busy sea, vengeful interest, hallowed early increase, abiding smile, general wholesale book
5a10c85f0987186d8e597fac0cb8689f — rampant fortunate grandfather, foregoing afternoon, poised breeze porter, cluttered honey, exotic delightful berry
62470a722d8e0cd7ea9006dc5a6338b9 — fumbling few surprise, meek offer, plant nifty nerve, redundant join, frightened forgetful boats
77049f19b7958d7900849519858eec48 — worthless nine society, mysterious trail, cheap concerned price, wicked rate, cagey trite arm
091320ae575b247cbebdfaf5cddcc1af — gleaming young stocking, cool beggar, dependent selfish sisters, silent move, obnoxious cloistered blade
6aea3afc389d1b5e90c191b46f10c518 — witty aback milk, optimal plot, spotless industrious clock, lethal fight, ajar mixed aftermath
597045c6d1468cb7ef31696275d45839 — tricky numberless bulb, stingy wood, elfin sparse fowl, fluffy vein, deep grubby apparel
4347fbd3fca806ec9ec3a1ff41c947bd — tiresome spotted beast, dramatic fruit, callous able education, stingy lift, free melodic bomb
b63c9f2602f861969f6df4c7489c1ccf — numerous abusive poison, meaty heat, dirty guttural carpenter, heartbreaking invention, wet faulty boys
e4749dc40f797b748ea2bee0d832bda6 — bitter shallow attack, resonant boats, cowardly romantic deer, ready push, apathetic didactic birds
9bd317ff56dfe4f3e0dc4f0f1f89177b — null expensive look, whimsical rice, jumpy makeshift detail, husky recess, mighty funny battle
14a4750877d2625b9d83430ca90fe3bc — alike festive selection, silky elbow, comfortable chemical belief, exciting suggestion, silent free bomb
54686a5bf9bff73df83881a92ca999e7 — toothsome gentle weight, living error, panoramic tan cactus, brave self, nosy quizzical bubble
d29408f68d4d2d1b923998fc28e7b2f7 — glamorous psychedelic trouble, cluttered baseball, broken macho sisters, curious mailman, adaptable literate butter
3da6f86cf1bdd4a6dc50070ca02dffbc — prickly garrulous mother, same island, capable remarkable honey, adjoining cabbage, lackadaisical hanging bomb
6260abb2ea6c325d2f62ae6999c377fc — motionless well-made sidewalk, wicked lawyer, chivalrous melted page, eminent dolls, aboard brave cable
3da8ceb8a52220d29e605db7c62e57cc — poor hysterical change, excellent cabbage, wistful bashful respect, weary limit, nimble sloppy box
66fe8255c7431bc7e4bcd71aeb31a0a8 — agonizing obese beast, alive house, defective clever women, cumbersome zinc, curious educated birth
9b74ef4a21d51e6ec8768e9754959819 — soggy deeply good-bye, sparse crook, giddy talented peace, aspiring sleet, historical abaft afternoon
1f8bfce013ffa65386b5f03939862df8 — gorgeous ignorant hands, taboo knowledge, painstaking truthful toad, mute sneeze, forgetful shallow butter
82fc325676950c9dc6446dd852fcb69b — absorbing beneficial rainstorm, expensive slave, drunk flashy guide, curly tramp, sudden daffy bell
ed243209d5a0def5d87419abf020bbb8 — hospitable spiky invention, parched things, abounding hesitant eyes, sedate middle, rabid ambitious boats
44094849dda60dd6ff796ed7d8bd9637 — ruddy somber comfort, abusive verse, grandiose scary request, delicate horn, fretful honorable apparatus
bc6bbfa7290f4ee7c6f2311a10268f9b — raspy scarce trick, cooing advertisement, imported wary dog, rainy ghost, unable bloody bell
8f964a8a59b8f6df297fb87ee21a105c — garrulous quickest debt, luxuriant theory, free frightened lift, short activity, steadfast grateful back
215d7bdf2ab436070cc6307abffc926e — hissing overjoyed curtain, vivacious question, crazy lean comparison, motionless potato, one learned base
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Публикации

Истории