Вопрос по XOR

Тема в разделе "WASM.CRYPTO", создана пользователем chatty2, 7 янв 2008.

  1. chatty2

    chatty2 New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2006
    Сообщения:
    15
    Есть вот такой алгоритм шифрования файлов через XOR:
    Код (Text):
    1. password = '123412341234' + password;
    2. hash = MD4(password);
    3. for (pos = 0; pos < 134; pos++) data[pos] ^= hash[pos % 16];
    Размер файла 134 байта. В середине файла есть 2 байта, которые одинаковы у всех исходных файлов.
    Вопрос: Можно ли расшифровать файл без пароля или получить пароль?

    Под паролем подразумеваю MD4 хэш, с помощью которого зашифрован файл. Его длина известна - 16 байт, символы из которых он состоит - тоже (цифры от 0 до 255).
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Алгоритм шифрования MD4 односторонний, расшифровать не удастся.
     
  3. chatty2

    chatty2 New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2006
    Сообщения:
    15
    MD4 - алгоритм хэширования. И в данном случае используется для получения ключа шифрования XOR - MD4(строка-константа + пароль).
    Именно про этот ключ я и спрашиваю.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ты про Advapi32!MD4# и MD5?
    Вот кусок кода MD4:
    Код (Text):
    1. Esi=[CTX+8]
    2. Edx=[CTX+4]
    3. Edi=[CTX+0Ch]
    4. Ecx=Ptr_String
    5. ..............................................................................
    6. Ebx=((((Edi xor Esi) and Edx) xor Edi)+D[ecx]+D[CTX]) rol 3
    7. ..............................................................................
    8. Edi=(Edi+(((Esi xor Edx) and Ebx) xor Esi)+D[ecx+4]) rol 7
    9. ..............................................................................
    10. Esi=(Esi+(((Edx xor Ebx) and Edi) xor Edx)+D[ecx+8]) rol 0Bh
    11. ..............................................................................
    12. Edx=(Edx+(((Edi xor Ebx) and Esi) xor Ebx)+D[ecx+0Ch]) rol 13h
    13. ..............................................................................
    14. Ebx=(Ebx+(((Edi xor Esi) and Edx) xor Edi)+D[ecx+10h]) rol 3
    15. ..............................................................................
    16. Edi=(Edi+(((Esi xor Edx) and Ebx) xor Esi)+D[ecx+14h]) rol 7
    17. ..............................................................................
    18. Esi=(Esi+(((Edx xor Ebx) and Edi) xor Edx)+D[ecx+18h]) rol 0Bh
    19. ..............................................................................
    20. Edx=(Edx+(((Edi xor Ebx) and Esi) xor Ebx)+D[ecx+1Ch]) rol 13h
    21. ..............................................................................
    22. Ebx=(Ebx+(((Edi xor Esi) and Edx) xor Edi)+D[ecx+20h]) rol 3h
    23. ..............................................................................
    24. Edi=(Edi+(((Esi xor Edx) and Ebx) xor Esi)+D[ecx+24h]) rol 7h
    25. ..............................................................................
    26. Esi=(Esi+(((Edx xor Ebx) and Edi) xor Edx)+D[ecx+28h]) rol 0Bh
    27. ..............................................................................
    28. Edx=(Edx+(((Edi xor Ebx) and Esi) xor Ebx)+D[ecx+2Ch]) rol 13h
    29. ..............................................................................
    30. Ebx=(Ebx+(((Edi xor Esi) and Edx) xor Edi)+D[ecx+30h]) rol 3h
    31. ..............................................................................
    32. Edi=(Edi+(((Esi xor Edx) and Ebx) xor Esi)+D[ecx+34h]) rol 7h
    33. ..............................................................................
    34. Esi=(Esi+(((Edx xor Ebx) and Edi) xor Edx)+D[ecx+38h]) rol 0Bh
    35. ..............................................................................
    36. Edx=(Edx+(((Edi xor Ebx) and Ebx) xor Edx)+D[ecx+3Ch]) rol 13h
    37. Eax=((Esi or Edx) and Edi)) or (Esi and Edx)
    38. ..............................................................................
    39. Ebx=(Ebx+(Eax+D[ecx]+5A827999h)) rol 3
    40. Eax=((Edx or Ebx) and Esi) or (Edx and Ebx)
    41. ..............................................................................
    Видно, что из хэша пароль не выделишь.
    В твоём случае непонятно что за MD4().
     
  5. chatty2

    chatty2 New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2006
    Сообщения:
    15
    Да причем тут MD4!
    Я про XOR спрашиваю. Исходный файл (134 байта) ксорится ключем (16 байт). Т.е. первый байт файла - первым байтом ключа, 2ой - 2ым, 16ый - 16ым, 17ый - 1ым, и так далее...
    При этом:
    1) ключ - MD4 хэш.
    2) во всех исходных файлах есть 2 одинаковых байта на одном и том-же месте.

    Меня интересует, воззможно ли расшифровать файл не зная этого хэша или получить этот хэш.
     
  6. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    Если ты знаешь эти 2 байта, то ты знаешь 2 байта ключа и можешь расшифровать 1/8 каждого файла. Если ты знаешь содержимое хотя бы одного зашифрованного файла то ты сможешь расшифровать все файлы зашифрованные на данном пароле. Что внутри файлов-то?
     
  7. chatty2

    chatty2 New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2006
    Сообщения:
    15
    Содержимое каждого файла (открытый ключ rsa под xor'ом) уникально.
    Я хочу узнать, возможно ли подобрать пароль по 1му символу или расшифровать файл не зная пароль.
    XOR 128 bit не поддается криптоанализу?
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Нет.
     
  9. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    Интересно, а зачем шифровать открытые ключи? =) И что это за ключи такие что у них у всех 2 байта одинаковые =)

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

    А как эта система реагирует на неправильный пароль? Есть там алгоритм проверки?
     
  10. chatty2

    chatty2 New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2006
    Сообщения:
    15
    Это у нашего местного разработчика спросить надо, зачем открытый ключ для подписи дополнительно шифровать. При авторизации клиента спрашивает пароль, которым расшифровывается ключ.

    Из за глупости разработчика. У него формат файла: [MD4 файла]\x00[длина e]\x00[e)][длина n]\x00[n]. И при шифровании файла получается, что заголовок "[MD4 файла]\x00[длина e]\x00" остается без изменений, а "[e][длина n]\x00[n]" шифруется. При этом [длина n]==[длина e]==\x42

    Ага, гаммированием вроде это называется...

    Как уже написал выше, в заголовке есть MD4 исходного файла. При вводе логина и пароля, они соединяются в одну строку. От них получается MD4 хэш, которым ксорится файл. После этого сравниваются MD4 того, что получилось, и MD4 из заголовка. Если они совпадают, то получившимся открытым ключем RSA подписывается строка авторизации, которая отправляется на сервер для проверки. На сервере эта строка расшифровывается закрытым ключем и сравнивается с тем, что было отправлено клиенту. Если они совпадают, то клиент авторизован.
     
  11. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Нет нельзя.
    Нет.
     
  12. Ruptor

    Ruptor Marcos el Ruptor

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    167
    Адрес:
    Australia
    Client authorizuyetsa po znaniyu otkritogo klucha servera??? Yego zhe vse clienti znayut! Naoborot navernoye vsio - eto navernoye *zakritiy* kliuch na cliente shifruyetsa parolem, a na servere kak raz otkritiy kliuch etogo clienta. Vsio ravno prosto XOR s MD4 hash ot parolia? Da po etim neskolkim izvestnim bytes znayete kak legko rainbow tables stroit i paroli nahodit? Tupo kak-to... Takiye algoritmi, a vmesto shifrovaniya XOR...
     
  13. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    chatty2
    Если из содержимого файла больше ничего не известно — то расшифровать не получится. Если будешь знать n или e, то расшифровывается все тривиально.

    Если пароль вводит пользователь, то можно попробовать поподбирать его брутфорсом/словарем.

    P.S> Вооще странный формат ключа: модуль 528 бит и e 528 бит. Такой модуль разламывается без особых трудностей, а с таким e шифрование будет происходить очень медленно.
     
  14. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    Как вариант - взять словарь, просчитать для каждого пароля MD4('123412341234' + password), сохранять для 2го этапа только те хэши, в которых совпали 2 известных байта. Затем уже на 2м этапе производить честную расшифровку и сравнивать хэш от расшифрованного файла с эталонным.
    з.ы. Ещё 2 бита хэша нам потенциально известны, если учесть что самый старший бит E равен 1 и самый младший тоже должен быть 1 (E - нечётное число, если не ошибаюсь). Аналогично 2 бита можно вытащить и из N, если ничего не путаю. Так что маску отсева потенциальных хэшей на 1м этапе можно расширить на эти биты.
     
  15. chatty2

    chatty2 New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2006
    Сообщения:
    15
    Это сделал - скорость подбора возрасла в 4 раза.
    А вот с битами E и N не понятно.
    Вот E и N из моего расшифрованного файла:
    E:
    Код (Text):
    1. AD2627D4BE0AF2564857B71DE2F2AD75D60DA75E350D79899EE68186FDB3EB0C8B7B0AF38C0F1B64754F19DE4B2890F75AE33D16F63B673DAE3E04D4F34944BCC702
    N:
    Код (Text):
    1. D5D9D4CDCBACF72A3C037CFEA6D7E2BA11AA317A7E847F28CCDF39D2B8C33642BCCA441B537EE393E22B790DEE06B6B5FE8883A4E9026E4F0449A0EFB867957EE806
     
  16. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    Читаем описание алгоритма RSA:

    Взять два больших простых числа p и q. //p и q нечётны, ибо просты
    Вычислить n = pq. // n - нечётно, ибо p и q нечётны.
    Взять небольшое нечетное число e, взаимно простое с φ(n) = (p−1)(q−1). // e - нечётно по алгоритму
    Вычислить d = e−1 (mod φ(n)).
    Пара P = (e, n) — открытый RSA-ключ.
    Пара S = (d, n) — секретный RSA-ключ.

    Таким образом, в расшифрованном виде последний байт E и последний байт N будут иметь вид (битовое представление): ???????1. Произведём XOR с тем последним байтом, что имеется на практике:

    для E:
    00000010 XOR ???????1 = ???????1, значит соответсвующий байт в хэше (ключе) (вычислить каким байтом хэша расшифровывается последний байт E) должен быть нечётным.

    Аналогично для N:
    00000110 XOR ???????1 = ???????1, значит соответсвующий байт хэша тоже должен быть нечётным. Таким образом ещё сокращаем число хэшей, годных для второго этапа в 4 раза, отсеивая те, в которых данные байты будут чётными.

    Насчёт старших единичных битов я походу погорячился, по крайней мере в случае E.
     
  17. chatty2

    chatty2 New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2006
    Сообщения:
    15
    Выяснилось, что RSA все-таки там не используется. Есть всего 1 ключ, в нем E и N. Он находится как на сервере, так и у клиента. С помощью "модульного возведения в степень" (Modular Exponentiation), вычисляется хэш некоторой строки. Он отправляется на сервер, где имеющимся ключем этого клиента вычисляется хэш от этой-же строки. После этого хэши сравниваются.

    Кто что может сказать про это возведение? Есть ли какие-то условия для E/N, которые можно использовать?

    E и N, которые я писал выше, уже расшифрованы. И они как я понимаю - четные. При этом, из того, что я нашел про ModExp, видно, что E/N должны быть такие-же как и в RSA.
     
  18. chatty2

    chatty2 New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2006
    Сообщения:
    15
    Никто больше ничем не поможет?
     
  19. kayot_

    kayot_ New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2008
    Сообщения:
    1
    а известно что-нибудь о содержании файла ? (последовательность символов в тексте случайна?)
     
  20. chatty2

    chatty2 New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2006
    Сообщения:
    15
    Практически. В файле числа E и N, используемые для хэширования. Всего 134 байта, из них всегда известно 2.