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

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

4 голосов
/ 04 сентября 2011

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

Вот вещи, которые я уже знаю благодаря профессору:

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

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

Есть идеи, как решить эту проблему?

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

Ответы [ 4 ]

13 голосов
/ 05 сентября 2011

Для начала нужно узнать длину пароля.Вы делаете это, оценивая Индекс совпадений или Каппа-тест.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%

Как видите, значение Kappa значительно выше на множителях 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: ed с самим собой.

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

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

   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: ed ссам сдвигается на кратные длины пароля.Для каждого значения вы можете проверить таблицу выше и определить, какие комбинации может иметь эта позиция.Допустим, значение равно 25, тогда два символа, которые привели к значению 25, могут быть одной из следующих комбинаций: (IP), (HQ), (KR), (JS), (MT), (LU), (OV), (NW), (AX) или (CZ).Но какой?Теперь вы делаете больше смен и ищите соответствующие значения в таблице снова для каждой позиции.В следующий раз значение может быть 7, и поскольку у вас уже есть список возможных комбинаций символов, вы проверяете только их.В следующие две смены значения равны 3 и 1. Теперь вы можете определить, что символ является W, поскольку это единственный общий символ в каждой смене, (NW), (PW), (TW), (VW).Вы можете сделать это для большинства позиций.

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

Удачи!

1 голос
/ 04 сентября 2011

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

w x m z y

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

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

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

1 голос
/ 04 сентября 2011

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

0 голосов
/ 05 сентября 2011

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

Как сказал Ларс, рассмотрите способы дешифрования Vigenère, который фактически является тем, что у вас есть.

...