Расшифровка файла XOR

Итак, мне нужно расшифровать файл .txt, который зашифрован с помощью XOR code и повторным неизвестным паролем, и цель состоит в том, чтобы обнаружить сообщение.

Вот то, что я уже знаю благодаря профессору:

  1. Сначала мне нужно найти длину неизвестного пароля

  2. Сообщение было изменено, и в нем нет пробелов (это может немного усложнить задачу, поскольку пробел чаще всего встречается в сообщении).

Любые идеи о том, как решить эту проблему?

спасибо в продвинутом :)


person dan    schedule 04.09.2011    source источник
comment
Я не думаю, что пробелы являются наиболее распространенными символами в сообщениях на любом языке.   -  person Piotr Perak    schedule 04.09.2011
comment
Технически есть вероятность, что это невозможно. Если длина ключа ›= длине сообщения, то это одноразовый блокнот и его нельзя расшифровать. (предложение ужасное, правда? :-))   -  person xanatos    schedule 04.09.2011
comment
Какой у Вас вопрос? Вы просите нас написать задание для вас?   -  person Michael Petrotta    schedule 04.09.2011
comment
Итак, чтобы быть уверенным: у вас есть ОДИН единственный .txt (НЕ выбранный вами), у вас нет ни пароля, ни его длины. Вы знаете, что это текст, поэтому допустим, что каждый символ равен ‹= 126. Верно?   -  person xanatos    schedule 04.09.2011
comment
конечно, я не хочу, чтобы ты делал это для меня... мне нужны идеи, чтобы решить эту проблему   -  person dan    schedule 04.09.2011
comment
@xanatos: Хотя вы правы - поскольку это домашнее задание, я думаю, мы можем предположить, что оно поддается расшифровке :)   -  person schnaader    schedule 04.09.2011
comment
@schnaader Это будет не первый раз, когда проблема homework имеет ошибку :-) :-)   -  person xanatos    schedule 04.09.2011
comment
@Peri: пробел является наиболее распространенным символом в стандартном английском тексте, за ним следует ETAOIN SHRDLU.   -  person rossum    schedule 05.09.2011


Ответы (4)


Для начала нужно узнать длину пароля. Вы делаете это, оценивая Индекс совпадения или Каппа-тест. XOR зашифрованного текста с самим собой сдвинут на 1 шаг и подсчитывает количество одинаковых символов (значение 0). Вы получаете значение Каппа, разделив результат на общее количество символов минус 1. Сдвиньте еще раз и снова вычислите значение Каппа. Сдвигайте зашифрованный текст столько раз, сколько необходимо, пока не узнаете длину пароля. Если длина равна 4, вы должны увидеть что-то похожее на это:

Offset             Hits
-------------------------
  1              2.68695%
  2              2.36399%
  3              3.79009%
  4              6.74012%
  5              3.6953%
  6              1.81582%
  7              3.82744%
  8              6.03504%
  9              3.60273%
 10              1.98052%
 11              3.83241%
 12              6.5627%

Как вы видите, значение Каппа значительно выше для чисел, кратных 4 (4, 8 и 12), чем для других. Это говорит о том, что длина пароля равна 4.

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

THISISTHEPLAINTEXT    <- Plaintext
PASSPASSPASSPASSPA    <- Password
------------------
EJKELDOSOSKDOWQLAG    <- Ciphertext

Когда два одинаковых значения подвергаются XOR: ed, результат равен 0:

EJKELDOSOSKDOWQLAG        <- Ciphertext
    EJKELDOSOSKDOWQLAG    <- Ciphertext shifted 4.

Есть в реальности:

THISISTHEPLAINTEXT        <- Plaintext
PASSPASSPASSPASSPA        <- Password
    THISISTHEPLAINTEXT    <- Plaintext
    PASSPASSPASSPASSPA    <- Password

Который:

THISISTHEPLAINTEXT        <- Plaintext
    THISISTHEPLAINTEXT    <- Plaintext

Как вы видите, пароль «исчезает», а открытый текст подвергается операции XOR: с самим собой.

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

В следующей таблице показаны значения зашифрованного текста для всех английских символов:

   A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
A  0                                                                           
B  3  0                                                                        
C  2  1  0                                                                     
D  5  6  7  0                                                                  
E  4  7  6  1  0                                                               
F  7  4  5  2  3  0                                                            
G  6  5  4  3  2  1  0                                                         
H  9 10 11 12 13 14 15  0                                                      
I  8 11 10 13 12 15 14  1  0                                                   
J 11  8  9 14 15 12 13  2  3  0                                                
K 10  9  8 15 14 13 12  3  2  1  0                                             
L 13 14 15  8  9 10 11  4  5  6  7  0                                          
M 12 15 14  9  8 11 10  5  4  7  6  1  0                                       
N 15 12 13 10 11  8  9  6  7  4  5  2  3  0                                    
O 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0                                 
P 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31  0                              
Q 16 19 18 21 20 23 22 25 24 27 26 29 28 31 30  1  0                           
R 19 16 17 22 23 20 21 26 27 24 25 30 31 28 29  2  3  0                        
S 18 17 16 23 22 21 20 27 26 25 24 31 30 29 28  3  2  1  0                     
T 21 22 23 16 17 18 19 28 29 30 31 24 25 26 27  4  5  6  7  0                  
U 20 23 22 17 16 19 18 29 28 31 30 25 24 27 26  5  4  7  6  1  0               
V 23 20 21 18 19 16 17 30 31 28 29 26 27 24 25  6  7  4  5  2  3  0            
W 22 21 20 19 18 17 16 31 30 29 28 27 26 25 24  7  6  5  4  3  2  1  0         
X 25 26 27 28 29 30 31 16 17 18 19 20 21 22 23  8  9 10 11 12 13 14 15  0      
Y 24 27 26 29 28 31 30 17 16 19 18 21 20 23 22  9  8 11 10 13 12 15 14  1  0   
Z 27 24 25 30 31 28 29 18 19 16 17 22 23 20 21 10 11  8  9 14 15 12 13  2  3  0

Что это значит тогда? Если A и B подверглись XOR:ed, то результирующее значение равно 3. E и P дадут 21. И т. д. Хорошо, но как это вам поможет?

Помните, что открытый текст подвергается XOR: с самим собой, сдвинутым на кратное длине пароля. Для каждого значения вы можете проверить приведенную выше таблицу и определить, какие комбинации может иметь эта позиция. Допустим, значение равно 25, тогда два символа, которые привели к значению 25, могут быть одной из следующих комбинаций: (I-P), (H-Q), (K-R), (J-S), (M-T), (L-U), (O-V ), (N-W), (A-X) или (C-Z). Но какой? Теперь вы делаете больше сдвигов и снова ищете соответствующие значения в таблице для каждой позиции. В следующий раз значение может быть 7, и, поскольку у вас уже есть список возможных комбинаций символов, вы проверяете только их. В следующих двух сменах значения равны 3 и 1. Теперь вы можете определить, что это символ W, так как это единственный общий символ в каждой смене, (N-W), (P-W), (T-W), (V-W). Вы можете сделать это для большинства позиций.

Вы не получите весь открытый текст, но вы получите достаточно символов, чтобы узнать пароль. Возьмите известные символы и XOR их в правильном положении в зашифрованном тексте. Это даст пароль. Количество известных символов, которое вам нужно, по крайней мере, равно количеству символов в пароле, если они находятся в «правильных» позициях по отношению к паролю.

Удачи!

person Sani Singh Huttunen    schedule 04.09.2011

вам следует взглянуть на взлом Vigenere Chiffre, особенно на автокорреляцию. Последнее поможет вам узнать длину пароля, а остальное обычно просто брутфорс по нормальному распределению букв (где наиболее распространена буква e в английском языке).

person Lars    schedule 04.09.2011
comment
большое спасибо за ответ! я посмотрю на виженера шиффра - person dan; 05.09.2011

Хотя пробелы являются наиболее распространенными символами и упрощают подобную расшифровку, другие символы также имеют разную частоту. Например, см. эту статью в Википедии. Если у вас достаточно зашифрованного текста и длина пароля не слишком велика, этого может быть достаточно, чтобы узнать наиболее часто встречающиеся байты в зашифрованном тексте. Скорее всего, это будут зашифрованные версии e, которые чаще всего встречаются в английских текстах. Это само по себе не даст вам расшифрованный текст, но очень вероятно, что вы сможете узнать длину пароля и (часть) самого пароля с его помощью. Например, предположим, что наиболее часто зашифрованными байтами являются

w x m z y

почти с той же частотой, и после последнего наблюдается значительное падение частоты. Это скажет вам две вещи:

  1. Длина пароля скорее всего равна 5, потому что по статистике все зашифрованные e будут равновероятными. РЕДАКТИРОВАТЬ: ОК, это неверно, это будет 5 или выше, потому что пароль может содержать один и тот же символ несколько раз.
  2. Пароль будет представлять собой некоторую перестановку (w x m z y XOR e e e e e) — вы можете использовать байтовые смещения по модулю длины пароля, чтобы получить правильную перестановку.

РЕДАКТИРОВАТЬ: Один и тот же символ, встречающийся в пароле несколько раз, немного усложняет задачу, но вы, скорее всего, сможете их идентифицировать, потому что, как я уже сказал, зашифрованные версии e будут группироваться вокруг частоты f - теперь, если символ встречается n раз , он будет иметь частоту около n*f.

person schnaader    schedule 04.09.2011

Наиболее распространенная трехбуквенная триграмма в английском языке (при условии, что язык, вероятно, английский) - это «the». Поместите «the» во всех возможных точках вашего зашифрованного текста, чтобы получить возможные 3 символа ключа. Попробуйте каждый возможный фрагмент ключа во всех других возможных позициях в зашифрованном тексте и посмотрите, что вы получите. Например, «qzg» вряд ли будет правильным, но «fen» может быть. Посмотрите на расстояние между возможными позициями, чтобы определить длину ключа. С длиной ключа и фрагментом ключа вы можете разместить намного больше ключа.

Как сказал Ларс, взгляните на способы расшифровки Виженера, что, по сути, и есть то, что у вас есть.

person rossum    schedule 04.09.2011