хеш функция

Discussion in 'WASM.CRYPTO' started by jeni, May 21, 2007.

  1. TermoSINteZ

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    Joined:
    Jun 11, 2004
    Messages:
    3,568
    Location:
    Russia
    jeni
    Там доказательство того что хеш без коллизий - мистика.
    Поэтому и были придуманы способы\методы разрешения коллизий.
     
  2. Stiver

    Stiver Партизан дзена

    Blog Posts:
    0
    Joined:
    Dec 18, 2004
    Messages:
    812
    Location:
    Germany
    Куда-то вас всех не в ту степь понесло. Под "необратимой" естественно имеется в виду "практически необратима", то есть так называемая one-way function (строгое определение можно найти например в Википедии). Ежу понятно, что перебором обращается любая функция на ограниченном пространстве значений.

    UyTvGauG
    Прежде чем утверждать что-либо с такой категоричностью, желательно думать головой. Простейший вариант: берешь достаточно большое простое p, группу Z_{p}, генератор a и вычисляешь f(x) := a^{x}.

    Задача кстати интересная, сам бы с удовольствием на решение посмотрел.
     
  3. MSoft

    MSoft New Member

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    хм... что же тут думать? на вход подается число размером всего 4 байта. На выходе тоже 4 байта (это я о CRC, раз уж MD5 - это длинный хеш). Все хэши должны быть уникальными. О чем тут думать???
     
  4. Stiver

    Stiver Партизан дзена

    Blog Posts:
    0
    Joined:
    Dec 18, 2004
    Messages:
    812
    Location:
    Germany
    MSoft
    Это ты уже сам придумал. В условии размер выхода не оговаривается. Пример подходящей функции я привел.
     
  5. MSoft

    MSoft New Member

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    1) он попросил меня привести код, который удовлетворяет условию необратимости и при этом маленький. Это однозначно CRC32. У него на выходе только 4 байта. Поэтому условие коллизии однозначно не соблюдается
    2) md5, если верить автору, большой, а надо как можно меньше. Поэтому, я и "придумал" про 4 байта на выходе
     
  6. kropalik

    kropalik New Member

    Blog Posts:
    0
    Joined:
    Apr 27, 2005
    Messages:
    155
    Location:
    msk
    это вовсе не обязательно должна быть хэш функция.
    можно использовать симметричный шифр (например rc4).
    берем исходные 4 байта и используем в качестве ключа
    которым шифруем заранее известную постоянную строку.
    Из зашифрованного значения ключ не вычислить (только перебором).
    коллизий тоже не будет при достаточной длине шифруемой константы.
     
  7. jeni

    jeni Евгений

    Blog Posts:
    0
    Joined:
    Mar 10, 2007
    Messages:
    41
    Судя по ответам мои условия не совсем полные :) (Жаль что мы не телепаты :))

    И так попробую внести некоторые коррективы в проблему.

    Те первые три условия сохраняются - они базовые.

    -Код самой реализации функции(т.е набор инструкций, а не выходное значение) должен быть как можно меньше.
    -Выходное значение меня не интересует, хотя желательно чтобы оно не совсем большое было.
    -То что функция будет легко ломаться перебором на данном отрезке это так и задуманно.
    -Код(набор инструкций) этой функции будет отлаживаться/дизассемблироваться, так что алгоритмы (де)шифрования не подходят.
    -Блин чуть не забыл. Каждому входному значению должно соответствовать единственное значение результата функции. Не забывать что у нас ограниченный отрезок :)

    Если будут какие-нибудь вопросы по условию, то пишите :)
     
  8. Stiver

    Stiver Партизан дзена

    Blog Posts:
    0
    Joined:
    Dec 18, 2004
    Messages:
    812
    Location:
    Germany
    jeni

    Ну вот например:
    Code (Text):
    1. unsigned __int64 hash(unsigned int x)
    2. {
    3.     unsigned __int64 result = 1;
    4.     unsigned __int64 base = 2863371373;
    5.     unsigned __int64 p = 4294967311;
    6.  
    7.     while(x) {
    8.         if(x & 1) {
    9.             result = (base * result) % p;
    10.         }
    11.         x >>= 1;
    12.         base = (base * base) % p;
    13.     }
    14.  
    15.     return result;
    16. }
    Надеюсь в числах не наврал, вычислял "на коленке". Если нужна более высокая устойчивость, просто соответственно выбирай числа.

    P.S. Хотя вот этого я так и не понял: -Код(набор инструкций) этой функции будет отлаживаться/дизассемблироваться, так что алгоритмы (де)шифрования не подходят.
     
  9. kropalik

    kropalik New Member

    Blog Posts:
    0
    Joined:
    Apr 27, 2005
    Messages:
    155
    Location:
    msk
    можно подробнее критерии для такого кода ?
    имеется в виду что не подходят стандартные
    алгоритмы и надо придумывать новый ?
     
  10. jeni

    jeni Евгений

    Blog Posts:
    0
    Joined:
    Mar 10, 2007
    Messages:
    41
    kropalik
    Нет, имеется в виду то, что все алгоритмы с ключом не подходят, и вообще не подходят все алгоритмы на основе чего-то секретного. Ну а вообще по-хорошему мне нужно только хеш функция, т.е. без возможности восстановления исходного значения.

    И еще такой вопрос. Как проверить криптостойкость алгоритма на необратимость???
     
  11. kropalik

    kropalik New Member

    Blog Posts:
    0
    Joined:
    Apr 27, 2005
    Messages:
    155
    Location:
    msk
    а в том алгоритме что я предложил тоже нет
    ничего секретного.

    1. key = входные данные (4 байта)
    2. s = '1234ABCD'
    3. result = RC4(s,key)
    или так: result = RC4(s1,RC4(s2,k));

    размер результата (значение хэш функции) = длина строки s.
    восстановить key имея result можно только перебором (свойство rc4).
    отсутсвие коллизий можно обеспечить выбором подходящей длины s.
    код реализуюций rc4 занимает мало места.
    в качестве строки s можно использовать сам код.
     
  12. jeni

    jeni Евгений

    Blog Posts:
    0
    Joined:
    Mar 10, 2007
    Messages:
    41
    kropalik
    А в rc4 зная key, и result можно восстановить исходную строку? Если да то не подходит. И еще отрезок у нас ограниченный от 0 до 0FFFFFFFFh(DWORD).
     
  13. MSoft

    MSoft New Member

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    насколько я знаю, можно, т.к. это симметричный алгоритм

    А что, если не секрет, требуется в итоге? Какая цель ставиться? А то мы тут гадаем, а все может быть намного проще?
     
  14. Stiver

    Stiver Партизан дзена

    Blog Posts:
    0
    Joined:
    Dec 18, 2004
    Messages:
    812
    Location:
    Germany
    kropalik
    А как определить, даст выбранная строка коллизии или нет? Похоже только на опыте, т.е. перебрав все значения? Приведенный мной выше код гарантирует отсутствие коллизий по построению, тогда как с rc4 это непонятно..
     
  15. kropalik

    kropalik New Member

    Blog Posts:
    0
    Joined:
    Apr 27, 2005
    Messages:
    155
    Location:
    msk
    ее незачем узнавать таким методом т.к. она и так известна
    в моем примере "1234ABCD" или фрагмент кода самой функции rc4().
    ну если длина s<4 байт то даст стопудово. можно попробовать вычислить
    теоретически минимальную длину s, которая будет гарантировать отсутствие
    коллизий. но поскольку входные данные всего 4 байта можно и перебром.
    это не слишком долго и реальная длина может оказаться меньше вычисленной.
    да тоже неплохой вариант, особенно если важна скорость.
     
  16. jeni

    jeni Евгений

    Blog Posts:
    0
    Joined:
    Mar 10, 2007
    Messages:
    41
    Stiver
    Что означают вот ети команды на асме???
    & - (and)
    % - (or)
    x >>= 1 - (циклический сдвиг вправо на 1)
     
  17. GanDJuStas

    GanDJuStas New Member

    Blog Posts:
    0
    Joined:
    Mar 11, 2003
    Messages:
    21
    Location:
    Russia
    А применить алгоритм генерации псевдослучайного числа?
    mul <БОЛЬШОЕ ПРОСТОЕ ЧИСЛО>
    add <ПРОСТОЕ ЧИСЛО ПОМЕНЬШЕ>
     
  18. MSoft

    MSoft New Member

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    and = and
    or = or
    циклический сдвиг вправо на 1 = ror reg,1
     
  19. asmfan

    asmfan New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2006
    Messages:
    1,004
    Location:
    Abaddon
    циклический сдвиг вправо на 1 = ror reg,1
    а это просто сдвиг вправо на 1 нециклический.
     
  20. MSoft

    MSoft New Member

    Blog Posts:
    0
    Joined:
    Dec 16, 2006
    Messages:
    2,854
    asmfan
    ой, лапухнулся :) бейте меня, бейте :) в конце концов, я ж предупреждал - мнение автора может не совпадать с его точкой зрения! :)

    П.С. да здравствует ссылочка "редактировать" :)