банальный xor

Тема в разделе "WASM.CRYPTO", создана пользователем k0k0s, 10 сен 2006.

  1. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    ХЕ хе да интересно поглядеть как же человек за час все вычеслил.... Ну покрайне мере я с первой парой не ошибься =)))
     
  2. Black_sun

    Black_sun New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    84
    Может такой:


    Код (Text):
    1.   b0=(c1 and c2) xor (a1 and a2)
    2.   b=not(c1 xor a1)
    если б0=б то мы нашли подходящий ключ, подбор пргоном а1 и а2
    Формулу выводил математически.
    Далее просто подстовляем б в:
    a1=c1 xor b
    a2=c2 xor b
     
  3. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Malice

    Разьесни как додумался, ведь алго кодирования неизвестно.
     
  4. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Да препод он небось;)
     
  5. Black_sun

    Black_sun New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    84
    *Вот так преподы знакомятся со студентами*
     
  6. Malice

    Malice New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    10
    Не понял, алго известно - неизвестен только ключ.
    Не буду долго мучать, помог мне "боб дилан" и гугль :) Пробовал по разному, писать не буду -все равно результат нулевой был (выяснил только, что вторая буква и последнии 3 пробелы). Потом начал вручную подбирать текст А, смотрел что получается при этом в тексте Б.
    Последовательность была примерно такая:
    1. А='I ' -> B='An'.
    2. A='And ' -> B='I sh'
    3. гугль "боб дилан тeксты пеcен" или типа того :)
    4. A='I shall be free' -> B='and you, my2qh}'
    5. Опаньки :)
    6. гугль "боб дилан and you, my"
    7. А='And you, my father, there on the sad height' ->B='I shall be telling this with a sigh Somewhe'
    8. Ж) Опять гугль и все.

    Не, я не препод :)
     
  7. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    Black_sun
    Код (Text):
    1. #!/usr/bin/perl
    2. $|=1;
    3. @c1=split / +/,"42 102 120  61  61  67  57  84 117  66  41  33 100 116  15  55  80  \
    4.                 16 120   0  54  78 105 113  96  25  43  69  39  82 125  40  40  24 \
    5.                 120  94  92  37 114  53  64  63 107  19  82  62  99  81  81  69 103  \
    6.                 22 120 123  71   1 113  57   5  50  67  40   2  85  67  11  40  56  \
    7.                 22  89 127  95  59 121  27 121  95 121 114   3   1   5  45 103 112 \
    8.                 127  62  34  39  13  44  30  80  19   2  60  72  80  56  18  93  31  \
    9.                 69  66  45 122  71  33  58 113  12 120  50  63  39   5 110  28  14  \
    10.                 48 109  10  68  95  92  88   0  30 107   4  54  92 104 122   5  95  \
    11.                 15 118  42  93  75  83   9  35 106   8  13  53 101  93  32  60  53  \
    12.                 36  72 101 121 121 121  99  98  89  30  71  87  87  14 107  28  36  \
    13.                 42 108  98  95  99  68   2  60";
    14. @c2=split / +/,"34  40 111 117  37  64  32  88  55  74 112 117 103 121  23  54  91  \
    15.                 5 116  84  42  79 127  35 114  80  48  67  39  71  53  62  97  12 \
    16.                 113  48  47  34 122  57  80  63 122  77  61  93 119  68  71  83 107  \
    17.                 87 116 115   2  19 101 112  86 127  78 109   2  89  81  17  85   5  \
    18.                 21  94 127  84  59 109  13  42  25 116 126   7   7  18 106 118 113  \
    19.                 62  37  63  43 102  69  73  79  14   7 105  70  17  18  25  93  56   \
    20.                 7  27   7  84   8 117  50 123   9  44  42  50  98  76 111   6   4  \
    21.                 48 117   7  86  88  92  75  29  16 121  65  52  80 107  50  19   8  \
    22.                 41  46  10  84  74  95  93  57 106  27  72 125 101  73  97  56  58  \
    23.                 51  89 101 108 125 112  99 114  72  18   9  84  30   7 107  89  34  \
    24.                 39 103  33  86  36   3  74 104";
    25.  
    26. # b0=(c1 and c2) xor (a1 and a2)
    27. # b=not(c1 xor a1)
    28.  
    29. for ($i=0;$i<=$#c1;$i++)
    30. {
    31.   for ($a1=0;$a1<=127;$a1++)
    32.   {
    33.     for ($a2=0;$a2<=127;$a2++)
    34.     {
    35.       $b0=(pack("С",$c1[$i]) & pack("С",$c2[$i])) ^ (pack("С",$a1) & pack("С",$a2));
    36.       $b= ~(pack("С",$c1[$i]) ^ pack("С",$a1));
    37.       if ($b eq $b0)
    38.       {
    39.          if ((pack("C",$c1[$i]) ^ $b eq pack("C",$a1)) && (pack("C",$c2[$i]) ^ $b eq pack("C",$a2)))
    40.          {
    41.            print pack("C",$c2[$i]) ^ $b0;
    42.          };
    43.       };
    44.     };
    45.   };
    46. };
    чёта не прокатило
     
  8. k0k0s

    k0k0s New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    28
    Ну что ж...

    Браво, Malice!

    Но все же, своими глазками подбирать, оно как то надежнее...

    Правда? :)
     
  9. k0k0s

    k0k0s New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    28
    dag

    Конечно не прокатит! :)
    Ведь все наши [мои по крайне мере] первые попытки решить задачу были как раз связаны с решением уравения. Но при этих условиях и данных, которыми мы располагаем это не возможно.

    Плюс ко всему еще в самом начале Stiver написал, что данный тип шифрования является стойким только когда ключики разные. Что как раз идеально вписывается в условия задачи.
     
  10. Black_sun

    Black_sun New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    84
    согласен с k0k0s - ведь ксоринг - обладает таким своиством - получить обратный элемент(1 из 3-х) невозможно зная только один. Например даны а b z
    Код (Text):
    1.  а b z
    2.  1 1 1
    3.  0 0 0
    4.  0 0 1
    5.  1 1 0
    6.  0 1 1
    7.  1 0 0
    8.  1 0 1
    9.  0 1 0
    Проведем a xor z
    b xor z
    и получим с1 и с2

    Код (Text):
    1. с1  с2
    2.  0   0
    3.  0   0
    4.  1   1
    5.  1   1
    6.  1   0
    7.  1   0
    8.  0   1
    9.  0   1
    А теперь попробуйте восстановить по данным битам исходные данные;)
    А те выводы формул, котрые я пытался сделать сводились опять же к тому самому ксорингу. Единственно что можно сдесь будет сделать это при подборе отбрасывать лишнии значения(к примеру значения русских букв).
     
  11. Solo

    Solo New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    131
    Мдя... Только что тему увидел, а то б раньше написал...
    Итак:
    при гаммировании одной и той же гаммой двух разных текстов получается 2 шифртекста банальный ксор которых полностью исключает гамму. В результате ксора имеем просто ксор двух текстов (до этого тут вроде догадались).
    Далее.
    Поскольку один из текстов дополнен символом заполнителем до длины другого, то легкий перебор (128 попыток) этого заполнителя (если он неизвестен) дает читаемый конец второго текста (если длины у них были изначально разные). Далее, по концу текста можно предполагать, какие буквы идут перед ним и параллельно восстанавливать оба текста.
    А общий метод решения - нужно протягивать наиболее вероятные слова по одному из текстов, пытаясь прочитать то, что получается во втором тексте. Если второй текст начинает читаться, то параллельно восстанавливать по одной букве дальше, чтобы оба текста продолжали читаться. Визуально это легко делается, а вот полностью автоматизировать процесс достаточно сложно. Можно приплести всякие биграммы, 3-граммы для конкретного языка, но вряд ли препод хотел чтобы кто-то так глубоко рыл...
     
  12. Black_sun

    Black_sun New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    84
    Забыл кто написал:
    Настоящей безопасности здесь никогда не было. Этот тип шифрования легко вскрывается, даже без компьютера. Его взлом на компьютере занимает несколько секунд. Предположим, что открытый текст использует английский язык. Более того, пусть длина ключа любое небольшое число байт. Ниже описано, как взломать этот шифр:
    1. Определим длину ключа с помощью процедуры, известной как подсчет совпадений. Применим операцию XOR к шифротексту, используя в качестве ключа сам шифротекст с различными смещениями, и подсчитаем совпадающие байты. Если величина смещения кратна длине ключа, то совпадет свыше 6 процентов байтов. Если нет, то будут совпадать меньше чем 0.4 процента (считая, что обычный ASCII текст кодируется случайным ключом, для других типов открытых текстов числа будут другими). Это называется показателем совпадений. Минимальное смещение от одного значения, кратного длине ключа, к другому и есть длина ключа.
    2. Сместим шифротекст на эту длину и проведем операцию XOR для смещенного и оригинального шифротекстов. Результатом операции будет удаления ключа и получение открытого текста, подвергнутого операции XOR с самим собой, смещенным на длину ключа. Так как в английском языке на один байт приходится 1.3 бита действительной информации, существующая значительная избыточность позволяет определить способ шифрования. Несмотря на это, количество поставщиков программного обеспечения, навязывающих этот игрушечный алгоритм в качестве "почти такого же безопасного как DES", впечатляет. Именно этот алгоритм (с 160-битным повторяющимся "ключом") NSA в конце концов разрешило использовать в цифровых телефонных сотовых сетях для закрытия голоса. XOR может защитить ваши файлы от младшей сестры, но настоящего криптоаналитика задержит лишь на считанные секунды.
     
  13. torn

    torn New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2006
    Сообщения:
    1
    по ходу преподы слизали это задание с сайта mala+ (http://3564020356.org), 10ый левел вроде
     
  14. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    В нашем случае, ключ = длинне сообщения !!! =) такчто насчёт этого метода можно расслабиться.
    Былбы он состоящим из коротких повторяющихся блоков => открыть его нет проблем
     
  15. Guest

    Guest Guest

    Публикаций:
    0
    При шифровке xor'ом, его обычно ломают по таблице "частота встречаемости букв в тексте", но:
     
  16. Guest

    Guest Guest

    Публикаций:
    0
    Хотя если знать хоть часть предложения то это можно сделать, при условии что он шифрован ключом в ASCII и ключ один и тот же:

    первый текст: "тест хххххххххххххххххххххххххххх" - знаем начало "тест " (текст все же "xxxx...xxxx", просто мы знаем начало).
    второй текст "ххххххххххххххххххххххх" - расшируем первые байты (путем ("тест " xor text_1"xxxxx") xor text_2"xxxxx".
    Дальше мы знаем что слово идет после "тест " и знаем часть ключа: 1. пытаемся додумать продолжение ключа, 2. расшифровываем 1 текст пока не получим более-менее понятное следующее слово и паралельно проверяем расшифруется ли 2 текст, то есть если в первом предложении слово удалось открыть и во втором тоже, значит мы открыли следующую часть ключа (возможно, но не факт). Повторяем пока не удастся открыть все.
    Все это можно вынести в код: проверяем на расшифрованные слова на допустимость символов (а-я, 0-1 и пр. без кодов типа ↓), проверяем на допустимость последовательности букв (такого быть не может "sdfккк"). Все это не дает гарантии, но попробовать стоит, хотя бы из-за азарта :)