Идентифицировать алгоритм обмена ключами Диффи-Хэллмана

Тема в разделе "WASM.CRYPTO", создана пользователем naTpuoT, 15 ноя 2007.

  1. naTpuoT

    naTpuoT New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    20
    Адрес:
    Russia
    Знаю на 100%,что он в проге используется, как его найти в теле программы?
    Пробовал PeID, он нашел т.н. IETF-768, IETF-1024 prime modulus и т.д.
    Я так понимаю - это может использоваться как большое простое "n" ... но проверить это не могу...
    Явно используется только здесь:

    Код (Text):
    1. .text:00028694 Diffie_Hellman___                       ; DATA XREF: .rdata:off_57894o
    2. .text:00028694                 STMFD   SP!, {R4-R6,LR}
    3. .text:00028698                 MOV     R4, R0
    4. .text:0002869C                 MOV     R2, R1
    5. .text:000286A0                 LDR     R5, =_IETF
    6. .text:000286A4                 MOV     R6, #0
    7. .text:000286A8                 LDR     R0, [R5]
    8. .text:000286AC                 MOV     R3, R6
    9. .text:000286B0                 CMP     R0, #0
    10. .text:000286B4                 BEQ     loc_286D8
    11. .text:000286B8                 MOV     R1, R5
    12. .text:000286BC
    13. .text:000286BC loc_286BC                               ; CODE XREF: Diffie_Hellman___+40j
    14. .text:000286BC                 LDR     R0, [R0]
    15. .text:000286C0                 CMP     R0, R2
    16. .text:000286C4                 BCS     loc_286D8
    17. .text:000286C8                 LDR     R0, [R1,#4]!
    18. .text:000286CC                 ADD     R3, R3, #1
    19. .text:000286D0                 CMP     R0, #0
    20. .text:000286D4                 BNE     loc_286BC
    21. .text:000286D8
    22. .text:000286D8 loc_286D8                               ; CODE XREF: Diffie_Hellman___+20j
    23. .text:000286D8                                         ; Diffie_Hellman___+30j
    24. .text:000286D8                 LDR     R0, [R5,R3,LSL#2]!
    25. .text:000286DC                 CMP     R0, #0
    26. .text:000286E0                 BEQ     loc_28700
    27. .text:000286E4                 MOV     R1, R0
    28. .text:000286E8                 MOV     R0, R4
    29. .text:000286EC                 BL      sub_28754
    30. .text:000286F0                 TST     R0, #0xFF
    31. .text:000286F4                 LDRNE   R0, [R5]
    32. .text:000286F8                 LDRNE   R0, [R0]
    33. .text:000286FC                 LDMNEFD SP!, {R4-R6,PC}
    34. .text:00028700
    35. .text:00028700 loc_28700                               ; CODE XREF: Diffie_Hellman___+4Cj
    36. .text:00028700                 MOV     R0, R6
    37. .text:00028704                 LDMFD   SP!, {R4-R6,PC}
    38. .text:00028704 ; End of function Diffie_Hellman___
    39. .text:00028704
    40. .text:00028704 ; ---------------------------------------------------------------------------
    41. .text:00028708 off_28708       DCD _IETF               ; DATA XREF: Diffie_Hellman___+Cr
    В sub_28754 каких-либо супер-математических операций не заметил...:dntknw:
    Не его (алгоритма) ли это часть и есть ли другие способы его идентификации?

    P.s.: да и вообще интересно как на asm'e (лучше для ARM'a,но не критично) реализуются операции возведения в степень по модулю большого простого числа (подозреваю, что вопрос элементарный - если что, не пинайте :) )
     
  2. Sergey_R

    Sergey_R Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    138
    Посмотри, например, здесь - http://www.macro.aaanet.ru/apnd_13.html (Ну и много еще где, ключевые слова для поиска "арифметика длинных чисел".)
    Только собственно возведение в степень в таких случаях не используют. Делаются последовательные операции умножения числа на себя по модулю, так как:
    g^a mod p = (...((g*g mod p)*g mod p)*g mod p ...)*g mod p
    В этом случае нет необходимости хранить ОГРОМНЫЕ промежуточные значения степеней и без того _длинных_ ;о) целых.
     
  3. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    g^a по модулю p никогда не вычисляется умножением на g a-раз. Учите быстрый алгоритм возведения в степень.
     
  4. naTpuoT

    naTpuoT New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2005
    Сообщения:
    20
    Адрес:
    Russia
    Спасибо всем ответившим - пока изучаю найденные материалы...

    Есть ещё варианты? (по идентификации в частности...)
     
  5. Sergey_R

    Sergey_R Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    138
    Да, все верно. (Упрощения в изложении всегда чреваты замечаниями... ;о)) Просто главное, что я хотел сказать, так это то, что никогда значение g^a не вычисляется полностью перед единственным взятием модуля в конце вычислений. На промежуточных этапах производится взятие промежуточного результата по модулю.