Вычисление рабочей переменной W{17,...,64} в алгоритме SHA-256

Тема в разделе "WASM.CRYPTO", создана пользователем EvilsInterrupt, 6 апр 2005.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Здрасьте.



    Хотел еще вчера задать вопрос, но решил еще раз подумать.



    Ситуация такая, есть алгорит хэширования SHA-256. По фразе

    "www.wasm.ru", я получил следующий массив после паддинга:


    Код (Text):
    1.  
    2. 00403070  77 77 77 2E 77 61 73 6D 2E 72 75 80 00 00 00 00  [url=http://www.wasm.ruЂ....
    3. ]www.wasm.ruЂ....
    4. [/url]
    5. 00403080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    6. 00403090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    7. 004030A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 58  ...............X
    8.  




    сейчас я размышляю, как мне это обработать чтобы получить

    массив рабочих слов.



    Толи это так:
    Код (Text):
    1.  
    2. mov eax,dword ptr[padding]
    3. ...
    4. ...
    5. а-ля формула, для получения W{17,...,64}
    6. ...
    7. ...
    8. mov dword ptr[array_work_words],eax
    9.  




    Или же это вот так:
    Код (Text):
    1.  
    2. mov eax,dword ptr[padding]
    3. bswap   eax
    4. ...
    5. ...
    6. а-ля формула, для получения W{17,...,64}
    7. ...
    8. ...
    9. bswap   eax
    10. mov dword ptr[array_work_words],eax
    11.  




    Вопрос: - как надо?



    PS:

    В аттаче результаты с обоими вариантами.

    [​IMG] _76772728__dump.txt
     
  2. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    Берем приложение B в документе

    http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf

    и прогоняем эти данные через реализацию.



    P.S. Если вопросы остались пиши сюда, но в принципе для любого шифра всегда прогоняй тестовые вектора от авторов на своей реализации дабы убедиться в ее адекватности.
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    OLS

    Я начал так делать до твоего совета, но так хотелось халявы. А эта дока у меня даже распечатана.



    Одно плохо, они не привели полностью массив рабочих слов, и лучше было бы если он дампы привели!
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    и еще, я вот для оценки дампов написал такую утилиту. Может где с тупил..

    [​IMG] 435563387__calc_t1_t2.cpp
     
  5. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    ну там же специально для твоего вопроса в первом слове буковки "abcd" во втором "bcde" - а ниже готовые 32-битные слова
     
  6. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    OLS

    это то да но, я спрашивал не про W{1,...,16},а про W{17,...,64}!

    если 1,...,16 просто копируем блок сообщения, то второй W{1,...,64} мы юзаем формулу! ОНа в доке, там еще две сигмы!

    Так вот когда мы берем из памяти в регистр то порядок уже другой, было в памяти 31323334, в регистре становится 34333231.

    И как тут мне до подачи в формулу этого значения надо ли менять порядок на 31323334 или не надо?
     
  7. flankerx

    flankerx New Member

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

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    А слабо по фразе 'abc' что в доке FIPS 180-2 выдать мне слово W17? Я тогда наверняка буду знать, что я правильно все понял!
     
  9. flankerx

    flankerx New Member

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

    1. _КАК_ можно ошибиться в вычислении W????

    2. Слабо самому взять готовую реализацию и по ней проверять?

    3. Специально для тебя. Все W для SHA-256("abc")
    Код (Text):
    1. W[16] = 61626380
    2. W[17] = 000f0000
    3. W[18] = 7da86405
    4. W[19] = 600003c6
    5. W[20] = 3e9d7b78
    6. W[21] = 0183fc00
    7. W[22] = 12dcbfdb
    8. W[23] = e2e2c38e
    9. W[24] = c8215c1a
    10. W[25] = b73679a2
    11. W[26] = e5bc3909
    12. W[27] = 32663c5b
    13. W[28] = 9d209d67
    14. W[29] = ec8726cb
    15. W[30] = 702138a4
    16. W[31] = d3b7973b
    17. W[32] = 93f5997f
    18. W[33] = 3b68ba73
    19. W[34] = aff4ffc1
    20. W[35] = f10a5c62
    21. W[36] = 0a8b3996
    22. W[37] = 72af830a
    23. W[38] = 9409e33e
    24. W[39] = 24641522
    25. W[40] = 9f47bf94
    26. W[41] = f0a64f5a
    27. W[42] = 3e246a79
    28. W[43] = 27333ba3
    29. W[44] = 0c4763f2
    30. W[45] = 840abf27
    31. W[46] = 7a290d5d
    32. W[47] = 065c43da
    33. W[48] = fb3e89cb
    34. W[49] = cc7617db
    35. W[50] = b9e66c34
    36. W[51] = a9993667
    37. W[52] = 84badedd
    38. W[53] = c21462bc
    39. W[54] = 1487472c
    40. W[55] = b20f7a99
    41. W[56] = ef57b9cd
    42. W[57] = ebe6b238
    43. W[58] = 9fe3095e
    44. W[59] = 78bc8d4b
    45. W[60] = a43fcf15
    46. W[61] = 668b2ff8
    47. W[62] = eeaba2cc
    48. W[63] = 12b1edeb
     
  10. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    flankerx



    Сам пива не выпью, но тебе отдам долю! Благодарствую!
     
  11. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    >_КАК_ можно ошибиться в вычислении W????



    Хочешь научу? :)))



    >менять порядок байт не нужно



    что значит не нужно?

    Не совсем понятно что ты имеешь ввиду. Я понимаю это так:

    В массиве, после паддинга лежит такая последовательность:

    massive db 61h,62h,63h,80h.....

    После того как я ложу этот dword в eax в регистре: 80636261!!!

    Ты говоришь не нужно! наверное ты имеешь ввиду что не надо менять сейчас на 61626380, т.е. делать bswap eax и подавать сразу для вычисления в формулу!



    но так получается не верный дамп W[64]! Вот примерный код:
    Код (Text):
    1.  
    2.     mov ecx,48d
    3. init_w_17_64:
    4.     mov eax,dword ptr[edi-8d]   ; W( t-2)
    5. ;   bswap   eax
    6. sha256_sigma_one
    7.     mov edx,eax
    8.     add edx,dword ptr[edi-28d]  ; W(t-7d)
    9.     mov eax,dword ptr[edi-60d]  ; W(t-15h)
    10. sha256_sigma_zero
    11.     add eax,edx
    12.     add eax,dword ptr[edi-64d]  ; W(t-16d)
    13. ;   bswap   eax
    14.     mov dword ptr[edi],eax
    15.     add edi,4d
    16.     loop    init_w_17_64
    17.  


    Вот дамп:
    Код (Text):
    1.  
    2. 00403170                          61 62 63 80 00 00 00 00          abcЂ....
    3. 00403180  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    4. 00403190  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    5. 004031A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    6. 004031B0  00 00 00 00 00 00 00 18 61 62 63 80 00 0F 06 00  .......abcЂ..
    7. 004031C0  E5 E8 5C DD 80 01 60 C6 3F 02 59 E9 FC E3 C1 00  еи\ЭЂ`Ж?YйьгБ.
    8. 004031D0  C7 5F 62 B9 61 12 E5 4D 0A 82 3B 64 EF DE CC 08  З_b№aеM.‚;dпЮМ
    9. 004031E0  FA 71 BD 77 87 58 01 DE 71 7E A1 17 5D F4 C6 40  ъqЅw‡XЮq~Ў]фЖ@
    10. 004031F0  DC 59 08 E2 60 86 85 2C A2 7E DE 34 47 07 E3 D5  ЬYв`†…,ў~Ю4GгХ
    11. 00403200  82 9E 07 C5 92 50 F6 E3 E8 31 A7 E7 08 6F DD D4  ‚ћЕ’Pцги1§зoЭФ
    12. 00403210  23 A8 97 F4 FC 76 E1 95 D7 EA FA 43 B5 66 BF 09  #Ё—фьvб•ЧкъCµfї.
    13. 00403220  E5 57 33 C6 7A FD 7D E4 D5 C7 4C BD 58 F1 7B 2A  еW3Жzэ}дХЗLЅXс{*
    14. 00403230  F7 BB 7A 17 E3 FD 68 D4 F1 F0 E4 9D 5E 37 19 F8  ч»zгэhФсрдќ^7ш
    15. 00403240  BC BE 64 3D 60 4F FF 5F 79 05 9A 2B 43 2E 17 EE  јѕd=`Oя_yљ+C.о
    16. 00403250  8F C5 42 C1 60 EF E5 C2 E1 3A E4 28 A5 63 44 98  ЏЕBБ`пеВб:д(ҐcD˜
    17. 00403260  EF 2C 73 56 4B DF BE 5A AB 56 B1 E8 7D 88 55 E2  п,sVKЯѕZ«V±и}€Uв
    18. 00403270  CF 8B 78 3E 4C 41 12 3F                          П‹x>LA?
    19.  


    как видишь W[17] не такое как у тебя!(000f0000). ХОрошо Предположил, что в регистре надо также держать как и на память смотришь! сделал. получил дамп, анализирую, вроде так как ты приводишь, но с помощью утилит, которые я написал для оценки(кстати задолго до твоего совета, скачал исходников и на основе их смастерил утилиты) и все равно значение что в приложении FIPS 180-2 для "a", у меня не выходит не с применинием bswap ни без него!



    да может я сильно тупой, а кто то умный. Так пусть скажет где я тупой, ткнет пальцем!



    Заранее благодарен и сорри, если кажется все это тупизмом,но не выходит, хоть и стараюсь очень сильно

    [​IMG] 612455643__sha_utils.rar
     
  12. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Простите люди добрые за тупизм, разобрался, во всем и че надо делать на самом деле:



    Надо:

    1. Взять сообщение и за "паддинг"

    2. После паддинга все сообщение, включая дополниние преобразовать:
    Код (Text):
    1.  
    2.     mov esi,sourse_msg
    3.     mov ecx,кол-во dword`ов в сообщении
    4. convert:
    5.     mov eax,dword ptr[esi]
    6.     bswap   eax         ; 586 проц!
    7.     mov dword ptr[esi],eax
    8.     add esi,4d
    9.     loop    convert
    10.  


    3. только тогда вычислять массив W[63]!



    Привожу дампы, для примера:
    Код (Text):
    1.  
    2. padding:
    3.  
    4. 00403070  61 62 63 80 00 00 00 00 00 00 00 00 00 00 00 00  abcЂ............
    5. 00403080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    6. 00403090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    7. 004030A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18  ...............
    8.  
    9. После конвертации:
    10.  
    11. 00403070  80 63 62 61 00 00 00 00 00 00 00 00 00 00 00 00  Ђcba............
    12. 00403080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    13. 00403090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    14. 004030A0  00 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00  ...............
    15.  
    16. W{1,...,64}:
    17.  
    18. 00403170                          80 63 62 61 00 00 00 00          Ђcba....
    19. 00403180  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    20. 00403190  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    21. 004031A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    22. 004031B0  00 00 00 00 18 00 00 00 80 63 62 61 00 00 0F 00  .......Ђcba...
    23. 004031C0  05 64 A8 7D C6 03 00 60 78 7B 9D 3E 00 FC 83 01  dЁ}Ж.`x{ќ>.ьѓ
    24. 004031D0  DB BF DC 12 8E C3 E2 E2 1A 5C 21 C8 A2 79 36 B7  ЫїЬЋГвв\!Иўy6·
    25. 004031E0  09 39 BC E5 5B 3C 66 32 67 9D 20 9D CB 26 87 EC  .9је[<f2gќ ќЛ&‡м
    26. 004031F0  A4 38 21 70 3B 97 B7 D3 7F 99 F5 93 73 BA 68 3B  ¤8!p;—·У™х“sєh;
    27. 00403200  C1 FF F4 AF 62 5C 0A F1 96 39 8B 0A 0A 83 AF 72  БяфЇb\.с–9‹..ѓЇr
    28. 00403210  3E E3 09 94 22 15 64 24 94 BF 47 9F 5A 4F A6 F0  >г.”"d$”їGџZO¦р
    29. 00403220  79 6A 24 3E A3 3B 33 27 F2 63 47 0C 27 BF 0A 84  yj$>Ј;3'тcG.'ї.„
    30. 00403230  5D 0D 29 7A DA 43 5C 06 CB 89 3E FB DB 17 76 CC  ].)zЪC\Л‰>ыЫvМ
    31. 00403240  34 6C E6 B9 67 36 99 A9 DD DE BA 84 BC 62 14 C2  4lж№g6™©ЭЮє„јbВ
    32. 00403250  2C 47 87 14 99 7A 0F B2 CD B9 57 EF 38 B2 E6 EB  ,G‡™zІН№Wп8Іжл
    33. 00403260  5E 09 E3 9F 4B 8D BC 78 15 CF 3F A4 F8 2F 8B 66  ^.гџKЌјxП?¤ш/‹f
    34. 00403270  CC A2 AB EE EB ED B1 12                          Мў«олн±
    35.  




    Спасибо, всем, кто учавствовал в моем осознании этого алгоритма. Особенно SteelRAT!!! flankerx за его терпение.

    сорри за тупизм,может кому то мой опыт, хотя бы понадобиться и ему будет на так больно его учить.
     
  13. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Вот плод моего труда.

    Написал таки, с горем пополам. Прилагаю исходники может кому и сгодятся

    [​IMG] 1868382236__sha_256.rar