Уникальность каждого байта в 64битной псевдослучайной последовательности

Тема в разделе "WASM.A&O", создана пользователем EvilsInterrupt, 17 мар 2005.

  1. EvilsInterrupt

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

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



    Исходные данные:

    С помощью РПГЧ сформирована 64 битовая псевдослучайная пос-

    ледовательность.



    Задача:

    Необходимо составить оптимизированыый по скорости код, цель

    которого проверить уникальность значения каждого байта в этой

    последовательности.
     
  2. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Охрененный тест :-/

    Смысла, как всегда, нет.

    Сугубо по решению задачи - создавать аналог хеш-таблицы. Только при коллизии не вставлять узел, а говорить об ошибке. На перле скрипт ваяется за две минуты.
     
  3. EvilsInterrupt

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

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

    eax - major dword

    ebx - minor dword
    Код (Text):
    1.  
    2.             mov ecx,4d
    3.     correct_sychro_message:
    4.             push    eax
    5.             push    ebx
    6.             xor eax,ebx
    7.             jne short   next
    8.             mov ecx,1
    9.             mov edx,0fh
    10.             jmp short   next
    11.         next:
    12.             pop ebx
    13.             pop eax
    14.             bswap   eax
    15.             mov al,bl
    16.             bswap   eax
    17.             bswap   ebx
    18.             mov bl,al
    19.             bswap   ebx
    20.             rol eax,8d
    21.             rol ebx,8d
    22.             loop    correct_sychro_message
    23.             xor dl,0fh
    24.             je  init_synchro_message
    25.  


    volodya

    Смысл, спроси у разработчиков ГОСТа про уникальность и создание синхропосылки. Наверное есть, если они это ввели, а разрабатывали они не для нас а для себя. следовательно это что-то дает
     
  4. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    EvilsInterrupt





    знаешь, уникальность синхропосылки -- это совсем не то де самое что уникальность каждого байта в 64-битной последовательности; синхропосылка 0х0000000000000000 ничем не хуже и не лучше чем 0х1223344556677889.

    наверное, прежде чем умные слова писать, нужно хоть немного подумать, да?
     
  5. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    :) хорошо сказал. очевидно, с этим имеем ряд проблем.



    что же до тестов PRNG - таких много и я упоминал их на этом форуме.

    Кнут рулит. DieHard рулит. Автокорреляция, спектральные тесты - все это описано.
     
  6. EvilsInterrupt

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

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

    Я брал из А.Винокурова документ про ГОСТ про гаммирование со стр. 10, там и сказано, про выбор начального заполнения РПГЧ.

    Если я не так понял скажи где?



    вот дословно:

    "соседние значения, вырабатываемые РПГЧ должны отличаться друг от друга в каждом байте, иначе задача криптоаналитика будет упрощена"
     
  7. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    EvilsInterrupt

    ну даже если и должны, что с того? соседние значения -- значит _ДВА _РАЗНЫХ_ IV, но никак не один и тот же.
     
  8. EvilsInterrupt

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

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

    Ты прав там получается два РГПЧ, один для c1, другой для c2

    следовательно два dword`а говорят о том,что должны быть уни-

    кальны байты в каждой последовательности, а не во всей.



    А о том, что дополнять не следует нулями А.Винокуров гово-

    рил в своей статье когда речь шла про метод "простая замена"

    в частности когда последний блок менее чем 8 байт. А так как

    синхропосылка есть результат первой гаммы, а первая гамма есть

    результат 32-З от синхропосылки,то и здесь это условие также

    следует применять!

    Ссылка на доку ниже. В "Простая замена" п.2.



    Или я не прав?



    http://www.enlight.ru/crypto/frame.htm - поэтой ссылке можно найти

    доку которой я руковдствуюсь. называется она:

    "Алгоритм шифрования ГОСТ 28147-89, его использование и реализация,

    для компьютеров платформы Intel x86".



    Вот моя текущая реализация, она выполняет то, что мне надо. Но можно

    ли написать еще лучше? Может кому интересно напишет лучше меня.


    Код (Text):
    1.  
    2.             xor edx,edx
    3.             mov ecx,2d
    4.     correct_sychro_dword:
    5.             push    eax
    6.             push    ebx
    7.             ror ebx,16d
    8.             ror eax,16d
    9.             xor ebx,[esp]
    10.             jne short   next_second
    11.             mov dl,0fh
    12.             mov ecx,1
    13.             jmp short   next
    14.         next_second:
    15.             xor eax,[esp+4]
    16.             jne short   next
    17.             mov dh,0f0h
    18.             mov ecx,1
    19.         next:
    20.             pop eax
    21.             pop ebx
    22.             ror ebx,8d
    23.             ror eax,8d
    24.             loop    correct_sychro_dword
    25.             xor dl,0fh
    26.             je  init_synchro_first
    27.             xor dh,0f0h
    28.             je  init_synchro_second
    29.  
     
  9. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    64 битовая псевдослучайная последовательность.

    проверить уникальность значения каждого байта в этой последовательности.



    eax<

    edx<

    z>





    proc _check

    mov ecx,4

    call @@1

    jnz @@ex

    push edx,edx

    mov edx,eax

    call @@0

    pop edx,eax

    jnz @@ex

    @@0: mov ecx,2

    @@1: ror eax,8

    push eax

    xor eax,edx

    mov ebx,7EFEFEFFh

    add ebx,eax

    not eax

    xor eax,ebx

    test eax,81010100h

    pop eax

    loopz @@1

    @@ex: ret

    endp
     
  10. _Explorer

    _Explorer New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2005
    Сообщения:
    7
    Proteus, можешь, пожалуйста, прокомментировать как работает твой исходник ? Что-то не совсем понятно, как с помощью 6 итераций (4+2) и набора арифметическо-логических операций осуществляется проверка уникальности каждого байта в строке ?
     
  11. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Задачу можно усложнить, проверку не байтов а dword`ов в последовательности из 8ми dword`ов. Это нужно для генерации ключей, как правило для генерации используют какую либо хеш-функцию, но проверить ее результат не мешает, хоть это и бесмысслено
     
  12. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Вообще это может уже не актуально. Но я заданные числа накладываю сами на себя со смещением. Там где байты совпадают, получается ноль. После @@1 идёт проверка, не содержит ли регистр нулевой байт. Но вот чтобы этот момент понять уже нужно иметь какое-то воображение.