Хороший хэш

Тема в разделе "WASM.CRYPTO", создана пользователем persicum, 14 сен 2010.

  1. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Подскажите надежный хэш в вариантах 64 и 128 бит.
    MD5 проломан до неприличия,
    SHA1 проломан для коллизий с 80 до 63бит.
    Какой есть хеш на 128 чтобы достойно держал 64 бита коллизий,
    а также 64 чтоб держал 32бита, что для большого файла подогнать тоже непросто.
    Хешей много, но я не разбираюсь в них, нужна рекомендация
     
  2. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Пробежался по Вики, все хеши 128 бит взломаны... Для себя сделал вывод, что любой хэш проседает бит на 20-30, даже ГОСТ. Поэтому криптографические хэши начинаются от sha1 и большей длинны. Проломка на 30 бит для них некритична, поскоку они большие.
     
  3. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    TIGER-128 ?
     
  4. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    Гипотетически, можно попробовать "усечь" любой стойкий хеш, например, ГОСТ, до 128 бит.
    К сожалению, стойкость усеченных вариантов практически не исследуется, поэтому
    гарантировать что-либо в их отношении нельзя.
     
  5. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Как лучше усекать, брать первые 128 бит или ксорить младшие слова со старшими?
     
  6. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Тигер заточен под 64 бита, нужно будет делать двойные сдвиги, а они считаются медленными инструкциями. Ну и add adc sub sbb само собой...
    Хотя... Попробую для развлечения=)))
     
  7. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    Вроде бы берут выборочно биты (где я видел спецификации на усеченные версии).
    Объединять несколько бит (хоть XOR-ом, хоть чем) обычно боятся, чтобы не вызвать неожиданных побочных эффектов.
     
  8. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    hxxp://file.qip.ru/file/OLe3srOs/tiger_pas

    тяжело живется на свете быдлокодерам и дельфоманам =(((
    зарелизил на трубопаскале класс tiger, так он с MMX немного даже уступает по скорости 32-битной версии проекта RHASH. Ну дела, у меня считай псевдо-64-бита, и все-равно тормозит тому что компилер си-шный накомпилил в RHASH...

    Кто сможет полечить быстродействие mmx-кода милости прошу чтобы обогнать RHASH в два раза как положено =)))
    Пробовал вместо развертывания всех 24 раундов вызывать 3 по 8, не помогает...
    Благодарности принимаются в любом виде - асм, с++ и т.д. Только ESI-EDI не трогайте, пусть указывают на s-box и schedule...

    Да, Тигер пока не усекал, все 192 ьита
     
  9. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    persicum
    Код (Text):
    1.     mov al,[edx+1]
    2.     movq mm0,[esi+eax*8+t4*8]
    3.     mov al,[edx+3]
    4.     pxor mm0,[esi+eax*8+t3*8]
    5.     mov al,[edx+5]
    6.     pxor mm0,[esi+eax*8+t2*8]
    7.     mov al,[edx+7]
    8.     pxor mm0,[esi+eax*8+t1*8]
    9.     movq mm1,[ecx]
    10.     paddq mm1,mm0
    Это просто ужасное безобразие - модификация части регистра, а потом еще и использование в следующей инструкции. Нужно переделать это хотя бы в виде:
    Код (Text):
    1. mov al,[xxx+1]
    2. mov bl,[xxx+3]
    3. mov cl,[xxx+5]
    4. mov dl,[xxx+7]
    5. movq mm0,[yyy+eax*8]
    6. movq mm1,[yyy+ebx*8]
    7. pxor mm0,[yyy+ecx*8]
    8. pxor mm1,[yyy+edx*8]
    9. pxor mm0,mm1
     
  10. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    >то просто ужасное безобразие - модификация части регистра

    Это я в самом дельфи подсмотрел... Хотел сначала movzx eax, byte ptr спробовать, но поскольку дельви нумерует таблицы байтами именно так, через mov al, то подумал - а зачем козе баян? Разработчикам поди виднее... Насчет al,bl,cl,dl - тоже не уверен что поможет, ведь у проца внутри куча виртуальных регистров eax, мув убивает зависимость
    насчет снятия зависимости четырех pxor подряд - тоже пробовал - не помогает.

    В общем, приаттаченный код я сильно почистил от излишних пересылок по памяти и теперь догнал RHASH вижуал-си, только странно что не перегнал в два раза, где то еще остались тормоза. Обновленный код будет вечером доступен для скачки.
     
  11. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    А может я с ветряными мельницами воюю, может директива register long long u64 пихает переменные прямо в регистры MMX у вижуал-си?
     
  12. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    persicum
    поможет.
    не знаю как в SSE2, а MMX даже порядок загрузки в регистры (mm0,mm1,..) влиял на быстродействие ;)
    Код (Text):
    1.   //pass(a,b,c,5);
    2.     mov eax,[esp+3*4]
    3.     mov [esp+0*4],eax
    4.     mov eax,[esp+4*4]
    5.     mov [esp+1*4],eax
    6.     mov eax,[esp+5*4]
    7.     mov [esp+2*4],eax
    как-то так надо...
    Код (Text):
    1.   //pass(a,b,c,5);
    2.     mov eax,[esp+3*4]
    3.     mov ebx,[esp+4*4]
    4.     mov ecx,[esp+5*4]
    5.     mov [esp+0*4],eax
    6.     mov [esp+1*4],ebx
    7.     mov [esp+2*4],ecx
    procedure Tiger.transformSSE2 - это полная развёрнутая функция хеширования?
     
  13. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    А почему бы не взять два разных хеша и использовать вместе

    например: считаем crc16 для 14 байт данных и используем 14 байт данных + 2 байта crc16 как блок для расчета md5
     
  14. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    PrintHex(t.Answer[1]) = IntToHex(t.Answer[1],8) (встроенная функция)
     
  15. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Почти полная. После нее нужно только выполнить
    a^=aa
    b-=bb
    c+=cc

    См.Вики

    Тайна быстродействия RHASH.EXE покоя не дает... пойду посмотрю под Киевом, файл не запакован слава богу... Специфические константы Тигера легко находятся.
     
  16. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    вообще-то визуал-си и без лишних директив movq использует если посчитает что это нужно.
     
  17. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Посмотрел RHASH.EXE под Киевом. Искал шедьюл тигера по контексту A5A5A5A5. Ничего выдающегося не обнаружил, обычный код языка высокого уровня add adc и работа с локальными переменными по отдельности со старшими и младшими двойными словами через ebp.

    А у меня быдлоасм SSE2 куча регистров и такой тормоз =)))
     
  18. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    остается профайлить ...
     
  19. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    попробовал еще пошаманить применив свободные без дела регистры xmm для временного хранения вместо массива u64 x[0..7], который в оригинальном тигрином коде записан как регистровые переменные x0..x7.
    Это дало еще процентов 15% прироста, а код превратился в сплошной отстой вида movq2dq movdq2q. Смысла модифицировать дальше своими силами нет. Буду ждать пока матерый спец сварганит себе c++ класс тигер на MMX+PADDQ и любезно выложит. Нужно непременно перегнать нативный вижул-си в два раза на асме+MMX, а то в чем тогда польза от асма у которого ума как у перфокарты?

    Кста вижул си в RHASH.EXE сделал pass действительно как
    movzx eax,[]
    movzx ebx,[]
    movzx ecx,[]
    movzx edx,[]

    вместо дельфовово
    xor eax,eax
    mov al,[]
    как тут советовали, но я не верю что это сильно поможет ктомуж регисты заняты под указатели на наши a b c.
     
  20. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    Да, вот еще, отеческие криптоманы криво откомпилили демо-код и насчитали лажу а не тест векторы. кому не лень поправьте Вику.