Здрасьте. Хотел еще вчера задать вопрос, но решил еще раз подумать. Ситуация такая, есть алгорит хэширования SHA-256. По фразе "www.wasm.ru", я получил следующий массив после паддинга: Код (Text): 00403070 77 77 77 2E 77 61 73 6D 2E 72 75 80 00 00 00 00 [url=http://www.wasm.ruЂ.... ]www.wasm.ruЂ.... [/url] 00403080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00403090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 004030A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 58 ...............X сейчас я размышляю, как мне это обработать чтобы получить массив рабочих слов. Толи это так: Код (Text): mov eax,dword ptr[padding] ... ... а-ля формула, для получения W{17,...,64} ... ... mov dword ptr[array_work_words],eax Или же это вот так: Код (Text): mov eax,dword ptr[padding] bswap eax ... ... а-ля формула, для получения W{17,...,64} ... ... bswap eax mov dword ptr[array_work_words],eax Вопрос: - как надо? PS: В аттаче результаты с обоими вариантами. _76772728__dump.txt
Берем приложение B в документе http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf и прогоняем эти данные через реализацию. P.S. Если вопросы остались пиши сюда, но в принципе для любого шифра всегда прогоняй тестовые вектора от авторов на своей реализации дабы убедиться в ее адекватности.
OLS Я начал так делать до твоего совета, но так хотелось халявы. А эта дока у меня даже распечатана. Одно плохо, они не привели полностью массив рабочих слов, и лучше было бы если он дампы привели!
ну там же специально для твоего вопроса в первом слове буковки "abcd" во втором "bcde" - а ниже готовые 32-битные слова
OLS это то да но, я спрашивал не про W{1,...,16},а про W{17,...,64}! если 1,...,16 просто копируем блок сообщения, то второй W{1,...,64} мы юзаем формулу! ОНа в доке, там еще две сигмы! Так вот когда мы берем из памяти в регистр то порядок уже другой, было в памяти 31323334, в регистре становится 34333231. И как тут мне до подачи в формулу этого значения надо ли менять порядок на 31323334 или не надо?
а ты посмотри что у тебя после применения формулы _в регистре_ было. или смотри на память не как на байты, а как на дворды. в общем менять порядок байт не нужно.
А слабо по фразе 'abc' что в доке FIPS 180-2 выдать мне слово W17? Я тогда наверняка буду знать, что я правильно все понял!
ты издеваешься чтоли? 1. _КАК_ можно ошибиться в вычислении W???? 2. Слабо самому взять готовую реализацию и по ней проверять? 3. Специально для тебя. Все W для SHA-256("abc") Код (Text): W[16] = 61626380 W[17] = 000f0000 W[18] = 7da86405 W[19] = 600003c6 W[20] = 3e9d7b78 W[21] = 0183fc00 W[22] = 12dcbfdb W[23] = e2e2c38e W[24] = c8215c1a W[25] = b73679a2 W[26] = e5bc3909 W[27] = 32663c5b W[28] = 9d209d67 W[29] = ec8726cb W[30] = 702138a4 W[31] = d3b7973b W[32] = 93f5997f W[33] = 3b68ba73 W[34] = aff4ffc1 W[35] = f10a5c62 W[36] = 0a8b3996 W[37] = 72af830a W[38] = 9409e33e W[39] = 24641522 W[40] = 9f47bf94 W[41] = f0a64f5a W[42] = 3e246a79 W[43] = 27333ba3 W[44] = 0c4763f2 W[45] = 840abf27 W[46] = 7a290d5d W[47] = 065c43da W[48] = fb3e89cb W[49] = cc7617db W[50] = b9e66c34 W[51] = a9993667 W[52] = 84badedd W[53] = c21462bc W[54] = 1487472c W[55] = b20f7a99 W[56] = ef57b9cd W[57] = ebe6b238 W[58] = 9fe3095e W[59] = 78bc8d4b W[60] = a43fcf15 W[61] = 668b2ff8 W[62] = eeaba2cc W[63] = 12b1edeb
>_КАК_ можно ошибиться в вычислении W???? Хочешь научу? )) >менять порядок байт не нужно что значит не нужно? Не совсем понятно что ты имеешь ввиду. Я понимаю это так: В массиве, после паддинга лежит такая последовательность: massive db 61h,62h,63h,80h..... После того как я ложу этот dword в eax в регистре: 80636261!!! Ты говоришь не нужно! наверное ты имеешь ввиду что не надо менять сейчас на 61626380, т.е. делать bswap eax и подавать сразу для вычисления в формулу! но так получается не верный дамп W[64]! Вот примерный код: Код (Text): mov ecx,48d init_w_17_64: mov eax,dword ptr[edi-8d] ; W( t-2) ; bswap eax sha256_sigma_one mov edx,eax add edx,dword ptr[edi-28d] ; W(t-7d) mov eax,dword ptr[edi-60d] ; W(t-15h) sha256_sigma_zero add eax,edx add eax,dword ptr[edi-64d] ; W(t-16d) ; bswap eax mov dword ptr[edi],eax add edi,4d loop init_w_17_64 Вот дамп: Код (Text): 00403170 61 62 63 80 00 00 00 00 abcЂ.... 00403180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00403190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 004031A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 004031B0 00 00 00 00 00 00 00 18 61 62 63 80 00 0F 06 00 .......abcЂ.. 004031C0 E5 E8 5C DD 80 01 60 C6 3F 02 59 E9 FC E3 C1 00 еи\ЭЂ`Ж?YйьгБ. 004031D0 C7 5F 62 B9 61 12 E5 4D 0A 82 3B 64 EF DE CC 08 З_b№aеM.‚;dпЮМ 004031E0 FA 71 BD 77 87 58 01 DE 71 7E A1 17 5D F4 C6 40 ъqЅw‡XЮq~Ў]фЖ@ 004031F0 DC 59 08 E2 60 86 85 2C A2 7E DE 34 47 07 E3 D5 ЬYв`†…,ў~Ю4GгХ 00403200 82 9E 07 C5 92 50 F6 E3 E8 31 A7 E7 08 6F DD D4 ‚ћЕ’Pцги1§зoЭФ 00403210 23 A8 97 F4 FC 76 E1 95 D7 EA FA 43 B5 66 BF 09 #Ё—фьvб•ЧкъCµfї. 00403220 E5 57 33 C6 7A FD 7D E4 D5 C7 4C BD 58 F1 7B 2A еW3Жzэ}дХЗLЅXс{* 00403230 F7 BB 7A 17 E3 FD 68 D4 F1 F0 E4 9D 5E 37 19 F8 ч»zгэhФсрдќ^7ш 00403240 BC BE 64 3D 60 4F FF 5F 79 05 9A 2B 43 2E 17 EE јѕd=`Oя_yљ+C.о 00403250 8F C5 42 C1 60 EF E5 C2 E1 3A E4 28 A5 63 44 98 ЏЕBБ`пеВб:д(ҐcD 00403260 EF 2C 73 56 4B DF BE 5A AB 56 B1 E8 7D 88 55 E2 п,sVKЯѕZ«V±и}€Uв 00403270 CF 8B 78 3E 4C 41 12 3F П‹x>LA? как видишь W[17] не такое как у тебя!(000f0000). ХОрошо Предположил, что в регистре надо также держать как и на память смотришь! сделал. получил дамп, анализирую, вроде так как ты приводишь, но с помощью утилит, которые я написал для оценки(кстати задолго до твоего совета, скачал исходников и на основе их смастерил утилиты) и все равно значение что в приложении FIPS 180-2 для "a", у меня не выходит не с применинием bswap ни без него! да может я сильно тупой, а кто то умный. Так пусть скажет где я тупой, ткнет пальцем! Заранее благодарен и сорри, если кажется все это тупизмом,но не выходит, хоть и стараюсь очень сильно 612455643__sha_utils.rar
Простите люди добрые за тупизм, разобрался, во всем и че надо делать на самом деле: Надо: 1. Взять сообщение и за "паддинг" 2. После паддинга все сообщение, включая дополниние преобразовать: Код (Text): mov esi,sourse_msg mov ecx,кол-во dword`ов в сообщении convert: mov eax,dword ptr[esi] bswap eax ; 586 проц! mov dword ptr[esi],eax add esi,4d loop convert 3. только тогда вычислять массив W[63]! Привожу дампы, для примера: Код (Text): padding: 00403070 61 62 63 80 00 00 00 00 00 00 00 00 00 00 00 00 abcЂ............ 00403080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00403090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 004030A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 ............... После конвертации: 00403070 80 63 62 61 00 00 00 00 00 00 00 00 00 00 00 00 Ђcba............ 00403080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00403090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 004030A0 00 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 ............... W{1,...,64}: 00403170 80 63 62 61 00 00 00 00 Ђcba.... 00403180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00403190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 004031A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 004031B0 00 00 00 00 18 00 00 00 80 63 62 61 00 00 0F 00 .......Ђcba... 004031C0 05 64 A8 7D C6 03 00 60 78 7B 9D 3E 00 FC 83 01 dЁ}Ж.`x{ќ>.ьѓ 004031D0 DB BF DC 12 8E C3 E2 E2 1A 5C 21 C8 A2 79 36 B7 ЫїЬЋГвв\!Иўy6· 004031E0 09 39 BC E5 5B 3C 66 32 67 9D 20 9D CB 26 87 EC .9је[<f2gќ ќЛ&‡м 004031F0 A4 38 21 70 3B 97 B7 D3 7F 99 F5 93 73 BA 68 3B ¤8!p;—·У™х“sєh; 00403200 C1 FF F4 AF 62 5C 0A F1 96 39 8B 0A 0A 83 AF 72 БяфЇb\.с–9‹..ѓЇr 00403210 3E E3 09 94 22 15 64 24 94 BF 47 9F 5A 4F A6 F0 >г.”"d$”їGџZO¦р 00403220 79 6A 24 3E A3 3B 33 27 F2 63 47 0C 27 BF 0A 84 yj$>Ј;3'тcG.'ї.„ 00403230 5D 0D 29 7A DA 43 5C 06 CB 89 3E FB DB 17 76 CC ].)zЪC\Л‰>ыЫvМ 00403240 34 6C E6 B9 67 36 99 A9 DD DE BA 84 BC 62 14 C2 4lж№g6™©ЭЮє„јbВ 00403250 2C 47 87 14 99 7A 0F B2 CD B9 57 EF 38 B2 E6 EB ,G‡™zІН№Wп8Іжл 00403260 5E 09 E3 9F 4B 8D BC 78 15 CF 3F A4 F8 2F 8B 66 ^.гџKЌјxП?¤ш/‹f 00403270 CC A2 AB EE EB ED B1 12 Мў«олн± Спасибо, всем, кто учавствовал в моем осознании этого алгоритма. Особенно SteelRAT!!! flankerx за его терпение. сорри за тупизм,может кому то мой опыт, хотя бы понадобиться и ему будет на так больно его учить.
Вот плод моего труда. Написал таки, с горем пополам. Прилагаю исходники может кому и сгодятся 1868382236__sha_256.rar