Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Вниз

md5 коллизии   Найти похожие ветки 

 
cmp   (2007-01-02 14:29) [0]

Помнится толи пару лет назад, толи несколько месяцев назад некая группа математиков отыскала возможность в алгоритме хэширования md5 получать коллизии. Но т.к. я не слишком дружу с математическо-криптографичискими терминами и не слишком хорошо понял эту ситуация. Объясните пожалуйста мне, что же собственно произошло: в каком смысле используются такие коллизии? Т.е. их алгоритм позволяет за несколько часов отскать такую пару данных, от которых возможно получить одинаковый хэш, я прав или нет?


 
vidiv ©   (2007-01-02 14:33) [1]


> Т.е. их алгоритм позволяет за несколько часов отскать такую
> пару данных, от которых возможно получить одинаковый хэш,
>  я прав или нет?

отыскали бы уже... пока прецендентов не было...


 
Ученик чародея ©   (2007-01-02 14:41) [2]


> vidiv ©   (02.01.07 14:33) [1]
>
>
> > Т.е. их алгоритм позволяет за несколько часов отскать
> такую
> > пару данных, от которых возможно получить одинаковый хэш,
>
> >  я прав или нет?
>
> отыскали бы уже... пока прецендентов не было...


Были. На LOU был линк на статью, где приводились два файла с одинаковыми md5.


 
Real ©   (2007-01-02 14:42) [3]

Я тоже думаю всплыло бы где нить. А кто вообще разбирается в md5 в смысле алгоритма? Каким образом достигается необратимое шифрование и гарантия что одни и теже данные - дадут один и тот же хеш?


 
Zeqfreed ©   (2007-01-02 14:46) [4]

Коллизии, разумеется, возможны. Но вот о легком пути их нахождения не слышал.


 
DillerXX ©   (2007-01-02 14:52) [5]

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


 
Anatoly Podgoretsky ©   (2007-01-02 14:55) [6]

> Real  (02.01.2007 14:42:03)  [3]

Гарантия сто процентная


 
Axis_of_Evil ©   (2007-01-02 15:01) [7]

Real ©   (02.01.07 14:42) [3]
гарантия что одни и теже данные - дадут один и тот же хеш?

алгоритм как-никак.


 
Anatoly Podgoretsky ©   (2007-01-02 15:07) [8]

> Axis_of_Evil  (02.01.2007 15:01:07)  [7]

Он наверно думает, что каждый раз MD5 создает хеш с помощью генератора случайных чисел. Нафиг такой алгоритм нужен, если повторяемость не гарантируется.


 
ferr ©   (2007-01-02 15:23) [9]

некоторые хеш-функции используют методы генерации случайных чисел, это удобно.


 
Anatoly Podgoretsky ©   (2007-01-02 15:29) [10]

> ferr  (02.01.2007 15:23:09)  [9]

Скажи нафиг нужна такая функция, если проверить хеш не удастся?


 
Real ©   (2007-01-02 15:29) [11]


> Он наверно думает, что каждый раз MD5 создает хеш с помощью
> генератора случайных чисел. Нафиг такой алгоритм нужен,
> если повторяемость не гарантируется.

Очень рад что вы на моих постах тестируете свой телепатор :) Но мне казалось что я довольно понятно задал вопрос: интересуют приниципы заложенные в алгоритм, а то что гарантия 100% - понятно итак, иначе какой бы толк был если бы работало через раз?


 
cmp   (2007-01-02 15:29) [12]

http://www.mscs.dal.ca/~selinger/md5collision/

Ссылка с примером, но приведенный пример меняет то о чём я думал, в примере две работоспособных программы с одинаковыми хэшами; под винду и под никс. Я думал, что коллизии только под какие-то рандомные данные можно отыскать, а тут...


 
DillerXX ©   (2007-01-02 15:32) [13]


> Ссылка с примером, но приведенный пример меняет то о чём
> я думал, в примере две работоспособных программы с одинаковыми
> хэшами; под винду и под никс. Я думал, что коллизии только
> под какие-то рандомные данные можно отыскать, а тут...

То что в этом алгоритме есть коллизии, это очевидно. Он всегда возвращает строку длиной 32 символа, и принимать может любой размер строки на вход. Ну ясен пень, если мы подставим строку длиной 33 символа, коллизии возникнут 100%


 
DillerXX ©   (2007-01-02 15:33) [14]

Тьфу, не так понял пост, извиняюсь.


 
Real ©   (2007-01-02 15:34) [15]


> То что в этом алгоритме есть коллизии, это очевидно. Он
> всегда возвращает строку длиной 32 символа, и принимать
> может любой размер строки на вход. Ну ясен пень, если мы
> подставим строку длиной 33 символа, коллизии возникнут 100%

Если тебе так понятно, изложи свое понимание алгоритма?

P.S. Лень гуглить и читать официальные статьи :)


 
ferr ©   (2007-01-02 15:36) [16]

> Скажи нафиг нужна такая функция, если проверить хеш не удастся?

Перечитывайте что я написал. Так например если в метод линейного зондирования добавить прыжки на "случайные" расстояния то можно будет избежать "кластеризации".


 
ferr ©   (2007-01-02 15:37) [17]

> Если тебе так понятно, изложи свое понимание алгоритма?

хеш - отображение более мощного множества, в более маломощное :) => быть инъективным оно не может.


 
vidiv ©   (2007-01-02 15:40) [18]


> Были. На LOU был линк на статью, где приводились два файла
> с одинаковыми md5.

как говориться, в стуию


 
Джо ©   (2007-01-02 16:04) [19]

> [18] vidiv ©   (02.01.07 15:40)
>
> > Были. На LOU был линк на статью, где приводились два файла
>
> > с одинаковыми md5.
>
> как говориться, в стуию

А что, вполне нормальная ситуация. Таких файлов существует бесконечное множество, собственно.


 
vidiv ©   (2007-01-02 16:09) [20]


> Джо ©   (02.01.07 16:04) [19]

проверил... жаль =(


 
Джо ©   (2007-01-02 16:19) [21]

> [20] vidiv ©   (02.01.07 16:09)
> проверил... жаль =(

А как ты представляешь себе (чисто логически) преобразование бесконечного множества файлов к бесконечному множеству 32-символьных строк? Таких строк, по определению, существует вполне себе конечное множество.


 
Ученик чародея ©   (2007-01-02 16:27) [22]


> vidiv ©   (02.01.07 15:40) [18]
>
>
> > Были. На LOU был линк на статью, где приводились два файла
> > с одинаковыми md5.
>
> как говориться, в стуию


http://linux.org.ua/cgi-bin/yabb/YaBB.pl?num=1133705914
http://linux.org.ua/cgi-bin/yabb/YaBB.pl?num=1110535173


 
Real ©   (2007-01-02 16:30) [23]


> А как ты представляешь себе (чисто логически) преобразование
> бесконечного множества файлов к бесконечному множеству 32-
> символьных строк? Таких строк, по определению, существует
> вполне себе конечное множество.

Вот и я не понимаю :) Поэтому все добиваюсь от умных людей описания принципа и откуда вообще взялась уверенность что есть 100% гарантия уникальности хеша?


 
Джо ©   (2007-01-02 16:33) [24]

> [23] Real ©   (02.01.07 16:30)
> и откуда вообще взялась уверенность что
> есть 100% гарантия уникальности хеша?

Нет этой гарантии и быть не может :)


 
Zeqfreed ©   (2007-01-02 16:39) [25]


> Вот и я не понимаю :) Поэтому все добиваюсь от умных людей
> описания принципа и откуда вообще взялась уверенность что
> есть 100% гарантия уникальности хеша?

Так говорилось по-моему о 100% уверенности в том, что сколько хешей ни бери из одних и тех же данных, получишь один и тот же хеш. В [3] кто-то в этом усомнился ;)


 
Anatoly Podgoretsky ©   (2007-01-02 17:15) [26]

Real ©   (02.01.07 16:30) [23]
А ты не передергивай, ты сначала хотел получить разные хеши от одинаковых данных.
Для разных данных тебе привели пример с 33 символами, 100% гарантия, что будет как минимум 256 одинаковых хешей.


 
Vendict ©   (2007-01-02 17:32) [27]

ты не перепутал ? вроде была инфа, что умудрились RSA сломать, используя резидентную программу при шифровании на процессоре p4 с технологией HT


 
DillerXX ©   (2007-01-02 17:50) [28]

Про RSA имхо утка...


 
cmp   (2007-01-02 20:39) [29]

Ещё у меня родился вопрос про md5: почему на русские символы по разному в разных вариантах генерирует хэши?
Например, возьмём "абвгд", и проверим по онлайн хэш генераторам.

http://gdataonline.com/makehash.php -- 9cdb481887ae90c61ad975dc8e2eaeff
http://www.pajhome.org.uk/crypt/md5/ -- 4100c4d44da9177247e44a5fc1546778
http://md5-online.de/ -- 21da85900e9a69bebf0ec05a237ee605

Проверьте, сами, и чему в таком случае верить? Как это объяснить?


 
wicked ©   (2007-01-02 20:45) [30]


> Проверьте, сами, и чему в таком случае верить? Как это объяснить?

обьяснить различной кодировкой кирилицы, что влечет за собой различные входные "бинарные" данные... как минимум, есть 4 варианта:
- win1251
- KOI-8
- UTF8
- iso (блиннепомнюномера)
в каждой из кодировок одна и та же строчка будет по разному представлена, отсюда - разные значения хеша


 
Zeqfreed ©   (2007-01-02 20:51) [31]


> почему на русские символы по разному в разных вариантах
> генерирует хэши?

Ну не любят русских авторы алгоритма md5 :(


 
wicked ©   (2007-01-02 22:05) [32]

а вот и подтверждение всему вышесказанному :)
http://bash.org.ru/quote.php?num=30472


 
Vendict ©   (2007-01-02 23:01) [33]

DillerXX ©   (02.01.07 17:50) [28]
Про RSA имхо утка...


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


 
БЭГ   (2007-01-03 08:12) [34]


> Anatoly Podgoretsky ©   (02.01.07 15:07) [8]

md5 использует алгоритм необратимого шифрования...
Таких алгоритмов куча...
Все очень просто... Понять как шифруется можно... А вот осмыслить как расшифровать не получается... :o) ...

Алгоритм на котором построен md5, держится в особом секрете...


 
Джо ©   (2007-01-03 08:22) [35]

> [34] БЭГ   (03.01.07 08:12)
> Алгоритм на котором построен md5, держится в особом секрете...

Что за глупость такая?


 
Lamer@fools.ua ©   (2007-01-03 09:14) [36]

>>wicked ©   (02.01.07 20:45) [30]

>- iso (блиннепомнюномера)
Юниксовая? Тогда, наверное, ISO-8859-5.


 
kaZaNoVa ©   (2007-01-03 09:47) [37]

cmp   (02.01.07 20:39) [29]
Например, возьмём "абвгд", и проверим по онлайн хэш генераторам.

а у меня вообще вышло   1A21452A078F2A09D40B1D69C58BEB8C


 
kaZaNoVa ©   (2007-01-03 09:51) [38]

БЭГ   (03.01.07 8:12) [34]
Алгоритм на котором построен md5, держится в особом секрете...


кусрчек кода из md5


function LRot32(a, b: longword): longword;
begin
 Result:= (a shl b) or (a shr (32-b));
end;

procedure TDCP_md5.Compress;
var
 Data: array[0..15] of dword;
 A, B, C, D: dword;
begin
 Move(HashBuffer,Data,Sizeof(Data));
 A:= CurrentHash[0];
 B:= CurrentHash[1];
 C:= CurrentHash[2];
 D:= CurrentHash[3];

 A:= B + LRot32(A + (D xor (B and (C xor D))) + Data[ 0] + $d76aa478,7);
 D:= A + LRot32(D + (C xor (A and (B xor C))) + Data[ 1] + $e8c7b756,12);
 C:= D + LRot32(C + (B xor (D and (A xor B))) + Data[ 2] + $242070db,17);
 B:= C + LRot32(B + (A xor (C and (D xor A))) + Data[ 3] + $c1bdceee,22);
 A:= B + LRot32(A + (D xor (B and (C xor D))) + Data[ 4] + $f57c0faf,7);
 D:= A + LRot32(D + (C xor (A and (B xor C))) + Data[ 5] + $4787c62a,12);
 C:= D + LRot32(C + (B xor (D and (A xor B))) + Data[ 6] + $a8304613,17);
 B:= C + LRot32(B + (A xor (C and (D xor A))) + Data[ 7] + $fd469501,22);
 A:= B + LRot32(A + (D xor (B and (C xor D))) + Data[ 8] + $698098d8,7);
 D:= A + LRot32(D + (C xor (A and (B xor C))) + Data[ 9] + $8b44f7af,12);
 C:= D + LRot32(C + (B xor (D and (A xor B))) + Data[10] + $ffff5bb1,17);
 B:= C + LRot32(B + (A xor (C and (D xor A))) + Data[11] + $895cd7be,22);
 A:= B + LRot32(A + (D xor (B and (C xor D))) + Data[12] + $6b901122,7);
 D:= A + LRot32(D + (C xor (A and (B xor C))) + Data[13] + $fd987193,12);
 C:= D + LRot32(C + (B xor (D and (A xor B))) + Data[14] + $a679438e,17);
 B:= C + LRot32(B + (A xor (C and (D xor A))) + Data[15] + $49b40821,22);

 A:= B + LRot32(A + (C xor (D and (B xor C))) + Data[ 1] + $f61e2562,5);
 D:= A + LRot32(D + (B xor (C and (A xor B))) + Data[ 6] + $c040b340,9);
 C:= D + LRot32(C + (A xor (B and (D xor A))) + Data[11] + $265e5a51,14);
 B:= C + LRot32(B + (D xor (A and (C xor D))) + Data[ 0] + $e9b6c7aa,20);
 A:= B + LRot32(A + (C xor (D and (B xor C))) + Data[ 5] + $d62f105d,5);
 D:= A + LRot32(D + (B xor (C and (A xor B))) + Data[10] + $02441453,9);
 C:= D + LRot32(C + (A xor (B and (D xor A))) + Data[15] + $d8a1e681,14);
 B:= C + LRot32(B + (D xor (A and (C xor D))) + Data[ 4] + $e7d3fbc8,20);
 A:= B + LRot32(A + (C xor (D and (B xor C))) + Data[ 9] + $21e1cde6,5);
 D:= A + LRot32(D + (B xor (C and (A xor B))) + Data[14] + $c33707d6,9);
 C:= D + LRot32(C + (A xor (B and (D xor A))) + Data[ 3] + $f4d50d87,14);
 B:= C + LRot32(B + (D xor (A and (C xor D))) + Data[ 8] + $455a14ed,20);
 A:= B + LRot32(A + (C xor (D and (B xor C))) + Data[13] + $a9e3e905,5);
 D:= A + LRot32(D + (B xor (C and (A xor B))) + Data[ 2] + $fcefa3f8,9);
 C:= D + LRot32(C + (A xor (B and (D xor A))) + Data[ 7] + $676f02d9,14);
 B:= C + LRot32(B + (D xor (A and (C xor D))) + Data[12] + $8d2a4c8a,20);

 A:= B + LRot32(A + (B xor C xor D) + Data[ 5] + $fffa3942,4);
 D:= A + LRot32(D + (A xor B xor C) + Data[ 8] + $8771f681,11);
 C:= D + LRot32(C + (D xor A xor B) + Data[11] + $6d9d6122,16);
 B:= C + LRot32(B + (C xor D xor A) + Data[14] + $fde5380c,23);
 A:= B + LRot32(A + (B xor C xor D) + Data[ 1] + $a4beea44,4);
 D:= A + LRot32(D + (A xor B xor C) + Data[ 4] + $4bdecfa9,11);
 C:= D + LRot32(C + (D xor A xor B) + Data[ 7] + $f6bb4b60,16);
 B:= C + LRot32(B + (C xor D xor A) + Data[10] + $bebfbc70,23);
 A:= B + LRot32(A + (B xor C xor D) + Data[13] + $289b7ec6,4);
 D:= A + LRot32(D + (A xor B xor C) + Data[ 0] + $eaa127fa,11);
 C:= D + LRot32(C + (D xor A xor B) + Data[ 3] + $d4ef3085,16);
 B:= C + LRot32(B + (C xor D xor A) + Data[ 6] + $04881d05,23);
 A:= B + LRot32(A + (B xor C xor D) + Data[ 9] + $d9d4d039,4);
 D:= A + LRot32(D + (A xor B xor C) + Data[12] + $e6db99e5,11);
 C:= D + LRot32(C + (D xor A xor B) + Data[15] + $1fa27cf8,16);
 B:= C + LRot32(B + (C xor D xor A) + Data[ 2] + $c4ac5665,23);

 A:= B + LRot32(A + (C xor (B or (not D))) + Data[ 0] + $f4292244,6);
 D:= A + LRot32(D + (B xor (A or (not C))) + Data[ 7] + $432aff97,10);
 C:= D + LRot32(C + (A xor (D or (not B))) + Data[14] + $ab9423a7,15);
 B:= C + LRot32(B + (D xor (C or (not A))) + Data[ 5] + $fc93a039,21);
 A:= B + LRot32(A + (C xor (B or (not D))) + Data[12] + $655b59c3,6);
 D:= A + LRot32(D + (B xor (A or (not C))) + Data[ 3] + $8f0ccc92,10);
 C:= D + LRot32(C + (A xor (D or (not B))) + Data[10] + $ffeff47d,15);
 B:= C + LRot32(B + (D xor (C or (not A))) + Data[ 1] + $85845dd1,21);
 A:= B + LRot32(A + (C xor (B or (not D))) + Data[ 8] + $6fa87e4f,6);
 D:= A + LRot32(D + (B xor (A or (not C))) + Data[15] + $fe2ce6e0,10);
 C:= D + LRot32(C + (A xor (D or (not B))) + Data[ 6] + $a3014314,15);
 B:= C + LRot32(B + (D xor (C or (not A))) + Data[13] + $4e0811a1,21);
 A:= B + LRot32(A + (C xor (B or (not D))) + Data[ 4] + $f7537e82,6);
 D:= A + LRot32(D + (B xor (A or (not C))) + Data[11] + $bd3af235,10);
 C:= D + LRot32(C + (A xor (D or (not B))) + Data[ 2] + $2ad7d2bb,15);
 B:= C + LRot32(B + (D xor (C or (not A))) + Data[ 9] + $eb86d391,21);

 Inc(CurrentHash[0],A);
 Inc(CurrentHash[1],B);
 Inc(CurrentHash[2],C);
 Inc(CurrentHash[3],D);
 Index:= 0;
 FillChar(HashBuffer,Sizeof(HashBuffer),0);
end;

class function TDCP_md5.GetHashSize: integer;
begin
 Result:= 128;
end;

procedure TDCP_md5.Init;
begin
 Burn;
 CurrentHash[0]:= $67452301;
 CurrentHash[1]:= $efcdab89;
 CurrentHash[2]:= $98badcfe;
 CurrentHash[3]:= $10325476;
 fInitialized:= true;
end;

procedure TDCP_md5.Update(const Buffer; Size: longword);
var
 PBuf: ^byte;
begin
 if not fInitialized then
   raise EDCP_hash.Create("Hash not initialized");

 Inc(LenHi,Size shr 29);
 Inc(LenLo,Size*8);
 if LenLo< (Size*8) then
   Inc(LenHi);

 PBuf:= @Buffer;
 while Size> 0 do
 begin
   if (Sizeof(HashBuffer)-Index)<= DWord(Size) then
   begin
     Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index);
     Dec(Size,Sizeof(HashBuffer)-Index);
     Inc(PBuf,Sizeof(HashBuffer)-Index);
     Compress;
   end
   else
   begin


 
kaZaNoVa ©   (2007-01-03 09:51) [39]

     Move(PBuf^,HashBuffer[Index],Size);
     Inc(Index,Size);
     Size:= 0;
   end;
 end;
end;



 
kaZaNoVa ©   (2007-01-03 10:00) [40]

kaZaNoVa ©   (03.01.07 9:51) [38]
в таком количестве преобразований имхо без бутылки не разабраться)))))))



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.039 c
2-1168539990
Биритм
2007-01-11 21:26
2007.01.28
Перезагрузка компьютера


1-1165228805
StriderMan
2006-12-04 13:40
2007.01.28
SetFocus и ScrollBox


2-1168516635
16alex
2007-01-11 14:57
2007.01.28
Unable to execute query


15-1167758067
kaZaNoVa
2007-01-02 20:14
2007.01.28
Пространств вариантов или свобода выбора


15-1168006020
IMHO
2007-01-05 17:07
2007.01.28
Вечная компьютерная игра





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский