Пользователь
0,0
рейтинг
20 декабря 2013 в 02:07

Разработка → Ответный вызов разработчикам Telegram перевод

Об авторе: Moxie Marlinspike — хакер-исследователь, придумавший атаку SSL-stripping (и нашедший ещё полдюжины уязвимостей в SSL), разработчик системы Convergence, призванной заменить списки «доверенных сертификатов», а также со-основатель компании Whisper Systems, купленной Twitter в 2011 году. Также стоит почитать обсуждение на Hacker News.



На этой неделе некая компания под названием Telegram анонсировала «защищённый» мессенджер. Насколько защищённый? Если верить их FAQ, «очень защищённый». Мне стало интересно, и я решил почитать описание их протокола. У меня тут же появились некоторые сомнения и опасения (как мягко сказано! а всего-то полчаса назад было «сначала я подумал, что это Томас Пташек решил постебаться» — прим. пер.) Однако, когда из них попытались вытянуть технические подробности, они начали перечислять учёные степени разработчиков вместо того, чтобы вступить в диалог. Кроме того, они отклонили все мои предложения о сотрудничестве.

Но это ещё не всё. Чтобы успокоить крипто-сообщество, они устроили… конкурс по взлому!

Ловушка конкурсов по взлому


Конкурс сам по себе является плохим знаком (а именно, плохим знаком № 9). Правила составлены таким образом, чтобы одурачить людей, заставив их поверить в безопасность Telegram. Разумеется, они не упустили возможность сослаться на него в своём FAQ как на доказательство абсолютной защищённости протокола. На самом деле конкурс бессмысленен.

Итак, господа разработчики Telegram, у меня тоже есть для вас конкурс. Ниже описан непередаваемо ужасный «защищённый» протокол (который и секунды не продержится в боевых условиях), но который является настолько же «невзламываемым» в условиях вашего конкурса, как и ваш собственный протокол.

  1. Алиса генерирует случайное 32-байтное число, super_secret, используя Dual_EC_DRBG — генератор случайных чисел с закладкой NSA.
  2. Алиса посылает сообщение Бобу с запросом его публичного ключа.
  3. Боб шлёт Алисе bob_public, 896-битный ключ RSA. Ничего не подписывается и не проверяется. Мы просто надеемся, что никто не додумается до man-in-the-middle.
  4. Алиса шифрует super_secret с помощью bob_public и посылает Бобу. Реализацию RSA она берёт из учебника — пустое место забивается нулями, а не случайными битами, и e = 65537.
  5. Теперь Боб и Алиса вычисляют message_key = MD2(super_secret) (раз уж вам нравятся устаревшие алгоритмы...)
  6. Алиса посылает своё сообщение Бобу, используя XOR в качестве шифра: ciphertext = message XOR message_key.

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

Условия этого конкурса такие же, как и у Telegram (никакого man-in-the-middle, никакая часть переписки не известна, махинации с трафиком невозможны, и т.д.) Если разработчики Telegram хотят доказать, что их протокол лучше хотя бы этого, я предлагаю им опубликовать расшифрованное сообщение Алисы. А если они не смогут продемонстрировать уязвимость даже в таком насквозь дырявом протоколе, играя по своим же правилам, это докажет, что их правила и конкурс — бред собачий.

А теперь я обращаюсь ко всем остальным


Давайте сделаем всё как положено. TextSecure, открытый мессенджер, который мы разрабатываем в Open WhisperSystems, основан на схеме Axolotl ratchet, которая, по нашему мнению, на данный момент должна лежать в основе любого асинхронного мессенджера. Кстати, наш алгоритм используется «под капотом» CyanogenMod. По сути, у нас уже на десять миллионов пользователей больше, чем у Telegram.

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

Лог трафика Алисы и Боба


Alice: 7075 626c 6963 206b 6579 2070 6c7a   
Bob  : 3081 8c30 0d06 092a 8648 86f7 0d01 0101  
       0500 037b 0030 7802 7100 acc3 ec17 9fea
       0d19 b29d f347 cc62 423c 02d9 e49b ba54
       b9a7 4cea 7c82 0f99 dcf1 c221 fca2 7882
       0b67 4c7e 8d67 b0e5 4a2b 8873 438d ef0b
       f5d1 6862 fecc ae0d 8736 5e69 cb5e 1346
       f612 49d2 e8ce 1463 8be0 8022 8ef2 01d9
       6917 6a03 19fc 2a03 ddad aad4 eb28 d655
       107c 52bf c1ae e800 a501 0203 0100 01	
Alice: 53ce e8e4 f6c4 b330 a6aa 0830 81f2 c5e3
       00b2 c3ac 0e54 7cee c9a6 be0e 7a54 9bf0
       dbf2 11c2 853a 8443 db72 4dcf 96ad bc9a
       9373 5f68 6a33 0f5b ea49 f40b 8324 3f8a
       168a 7d78 3e08 85a1 f774 7c6a 10f9 646c
       a13e d6c3 00b3 670a 2af3 d2d6 b153 20b2
       5b1c 2fd1 6599 989a 1938 2c18 1acf 68a5
Alice: 12a6 077f 4625 5523 c23b 2c43 e60f dd39
Перевод: Moxie Marlinspike
Артём Казак @ArtyomKazak
карма
45,7
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      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.

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

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

          Ну что ж, теперь-то вам не отвертеться :)
          Так что дерзайте.
          • +3
            Дерзнул. Вот 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
            • «деньги» — «средства». Жалко, что у слова «конкурс» не нашлось короткого синонима — не хочется лепить «соревнование».
            • «чуть не забыл» — отсебятина

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

    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, например.
    .
    • +8
      Активный MitM, когда атакующий не просто может слушать трафик, но и вмешиваться в него, проводится в реальном времени, например через ARP spoofing и подмену публичной точки WiFi. Более того, это вполне реальные атаки, с которыми приходится сталкиваться in-the-wild.
  • –3
    Конкурс в $200k по взлому, я думаю, должен показать, что если информация, которая передается стоит < $200k, то телеграм вряд ли взломают.

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

      Это ключевая часть фразы. Большая сумма должна создать иллюзию.
  • 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 месяца, мне нужно больше времени!
    Конкурс на взлом зашифрованного протокола Телеграма — постоянное свойство нашего проекта. Теперь мы всегда будем запускать новый конкурс сразу после предыдущего, и каждый раз сумма приза будет вырастать. Так что первый кто взломает протокол — сможет потребовать приз, даже если текущее соревнование будет завершено.

  • НЛО прилетело и опубликовало эту надпись здесь
    • –1
      Какой туман? Условия весьма конкретны: вот трафик, если расшифруете — получите пирожок. Если нет — то дальше мы ослабим условия и сделаем их более близкими к реальным.
      Интересно было бы посмотреть на условия конкурса в вашем варианте. Если я подойду, отберу телефон и прочитаю сообщения — это будет атакой? Что считать атакой? И как вы собираетесь считать «количество вычисления»? Я думаю когда вы начнёте уточнять все эти вопросы, то у вас появится такой же «туман».
      • НЛО прилетело и опубликовало эту надпись здесь
        • +2
          Я согласен с тем, что доказывать надёжность алгоритма с помощью конкурса — плохая идея. Но в целом условия конкурса мне больше нравятся у Телеграмма. «Лучшие негативные комментарии» — вообще субъективное понятие. Понятно, что Шнайер личность весьма известная и уважаемая и его мнению будут доверять. Но если какие-то неизвестные до сего времени личности устроят конкурс в котором будут на своё усмотрение выбирать лучшие решения, но мне кажется негатива будет куда больше, даже пускай они будут абсолютно честные, никого это не волнует. ИМХО в этом случае лучше иметь чёткие правила с объективным критерием победы.
  • +9
    Вот по ссылке адекватный разбор 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, о которых можно прочитать в любом учебнике по криптографии.
    • –3
      Наши ребята пошли по ставшему классикой русскому подходу в программировании, разрабатывая свои вещи в изоляции от профессионального сообщества. И повелись от «эффективного менеджера» с этим маркетинговым конкурсом. Если у них с математикой все в порядке, они конечно свой алгоритм защитят от критики, но даже если так, осадочек останется и общее отношение к продукту непонятно как они будут исправлять. Основного потребителя продукта они же противопоставили себе этим подходом. Кроме того, что они сейчас получат плюшек, это ведь и неэффективно по своему, заранее отказываться от сотрудничества с западными разработчиками.
      • +8
        Проблема в том, что в криптографии одной математикой не обойдёшься, я когда курс криптографии Dan Boneh слушал, поражался, как много я не знал. Там огромное значение имеют всякие мелочи, на первый взгляд кажущиеся несущественными. Зачем нужно было в этом вопросе заниматься изобретением велосипеда, я не очень представляю.
  • –3
    слив засчитан :)
    • –2
      а чего минусуют то?
      896-битный ключ RSA — маловато.
      man-in-the-middle — на ура. Т.е. государство в курсе всего что касается вас, как и человек который по инструкции может развернуть wifi спот. Но главное сам Дуров способен видеть вашу переписку в открытом виде, может даже сохранит её у себя не заморачиваясь с шифрованием, очень полезная опция для бизнес плана компании. Уже после этого можно удалить приложение с мобилки.
      MD2 — почему не использовали более продвинутый алгоритм хеширования? На википедии написано что алгоритм считается взломанным и не рекомендован к использованию.
      XOR — алгоритм шифрования удел чайников, AES не просто так изобрели.
      Честное слово, для полного счастья осталось только узнать что шифр не блочный.
      Итого, если всю схему рассматривать по отдельности то в ней используются худшие компоненты из возможных. Стоит ли в этом случаи надеяться что система целиком окажется неприступной например для АНБ как заявил товарищ Дуров во время какой-то конференции в США? Этот телеграмм — натуральная криптографическая халтура.
      • 0
        Итак, господа разработчики Telegram, у меня тоже есть для вас конкурс. Ниже описан непередаваемо ужасный «защищённый» протокол (который и секунды не продержится в боевых условиях), но который является настолько же «невзламываемым» в условиях вашего конкурса, как и ваш собственный протокол.

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

        Неужели я настолько невнятно написал… [посыпает голову пеплом]
        • 0
          ух ты ж ёжик.
          но, я правильно понял что в телеграмме всё равно прокатывает man-in-the-middle?
          и что в США месенджер был бы вне закона и как следствие удалён с американской версии google play и appstore если бы АНБ признала шифр слишком трудным для вскрытия?
          • +3
            но, я правильно понял что в телеграмме всё равно прокатывает 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 если бы АНБ признала шифр слишком трудным для вскрытия?

            А это-то вы откуда взяли?
            • 0
              по-моему в каждой стране есть законы касательно сложности шифра и разрешённой длины ключа. по-моему из США нельзя просто взять и экспортировать программу содержащую криптографические алгоритмы, и по-моему телеграмм должен был пройти «сертификацию» в АНБ, прежде чем появиться в каталогах appstor'ах, кто-то об этом писал на «цукерберг позвонит», не помню, может быть это даже говорил один из менеджеров mail.ru, им сейчас по сути принадлежит вконтактик, а от проектов Дурова на стороне они не совсем не в восторге, т.к. Дуров уводит ценных сотрудников, создаёт продукт который частично конкурирует с вконтакте и скорее всего сотрудники начали заниматься месенджером ещё работая во вконтакте.
              • +2
                Не «сертификацию». Просто авторы обязаны были послать исходники куда надо и получить «добро» на распространение, вот и всё. А по вашей логике, АНБ считает простыми для вскрытия, например, TrueCrypt и OpenSSL.
            • +1
              Четырехцветную картинку 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

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.