раунд блочного шифра

Тема в разделе "WASM.CRYPTO", создана пользователем takerZ, 13 фев 2011.

  1. takerZ

    takerZ New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    18
    есть блочный шифр, не из стандартных. появилась необходимость написать обратную функцию. завяз на следующем раунде:
    Код (Text):
    1.     XOR     ESI, ESI
    2.     XOR     EDI, EDI
    3.  
    4. NEXT:
    5.     BT      EDX, 4h
    6.     RCL     ECX, 4h
    7.     JNB     ISEND
    8.     XOR     ESI, EAX
    9.     XOR     EDI, EBX
    10.  
    11. PREP:
    12.     RCR     EDX, 5h
    13.     BT      EBX, 1Bh
    14.     RCR     EAX, 4h
    15.     RCL     EBX, 5h
    16.     JNB     NEXT
    17.     XOR     EAX, 800008h
    18.     XOR     EBX, 80000300h
    19.     JMP     NEXT
    20.  
    21. ISEND:
    22.     TEST    EDX, EDX
    23.     JNZ     PREP
    24.     TEST    ECX, ECX
    25.     JNZ     PREP
    пары eax/ebx и ecx/edx получаются из предыдущего раунда следующим образом:
    Код (Text):
    1. eax = ebx = ecx = edx = 0;
    2. do
    3. {
    4.     if (qword & 1)
    5.     {
    6.         eax ^= table[0];
    7.         ebx ^= table[1];
    8.         ecx ^= table[2];
    9.         edx ^= table[3];
    10.     }
    11.     table += 4;
    12. }
    13. while (qword >>= 1);
    обе битовые матрицы из таблицы для каждой пары невырожденные, по каждой из пар можно восстановить куворд. вопрос: каким образом можно имея только пару esi/edi получить обе или хотя бы одну из пар eax/ebx, ecx/edx?