произвольные смещения

Тема в разделе "WASM.CRYPTO", создана пользователем rodger, 22 мар 2008.

  1. rodger

    rodger New Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2007
    Сообщения:
    363
    Всем добрый вечер. Хочу написать простой алгоритм шифрования, есть входной файл я его читаю уксками по 32 бита (dword), потом эти куски xor-ю с таким же куском полученым от генератора случайных чисел. Как я понял мне нужен генератор который на выходе дает тоже 32 битное число (буду искать, если у кого есть линк буду благодарен).
    Пишу на делфи и использую вставки на асме. Помимо ксора я еще хочу сделать перемешивание, т.е. я хочу после ксора в 32 - битном куске полученого шифротекста поменять первые произвольные N бит на последние N бит полученые от аналогичного куска полученого с генератора случайных чисел. N - будет постоянно менятся. Как реализовать подобные вещи.
    Я тут нечто набросал
    function cript(cryp_x:dword);
    var rand_x:dword;
    orig:dword //кусок прочитаного текста
    N:byte;
    rand_x:=longint_rnd; // etu shtyky nado eche skacat'
    ...
    asm
    mov eax, orig
    xor eax, rand_x
    shr eax, N
    ...
    end;
    Если чего напартачил внутри паскалевской функции то я поправлю, меня интересует вставка на асме.
     
  2. RElf

    RElf New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2004
    Сообщения:
    159
    Прежде чем изобретать свое, нужно четко понимать, чем конкретно вас не устраивают готовые известные и проверенные решения.
    Почитайте вот эту тему и сделайте выводы: http://www.wasm.ru/forum/viewtopic.php?id=25267
     
  3. persicum

    persicum New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2007
    Сообщения:
    947
    биты при шифровании обычно перемешивают так - разбивают блок на две равные части a и b.

    Было:
    a ! b
    Стало:
    (a xor b) ! a

    Такая штука называется раундом скремблирования. вот тебе важнейший и единственный криптопримитив =))). Сделай несколько раундов, все биты перемешаются основательно.
    Между раундами можешь там еще поксорить и повращать, чтобы еще сильней запутать, потом бац - преобразование пекаря и бифуркация =))). Правда блок у тебя очень маленький - машинное слово, это скорее на поточник тянет.
     
  4. rodger

    rodger New Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2007
    Сообщения:
    363
    Спасибо за совет. Я еще с другой стороны думаю о быстодествии, т.е. хочу найти некий оптимум между быстодействием, надежностьюю и новизной. А читаю 32 бита, так как думаю что через регистры это все будет делатся быстрее, если нет растолкуйте.
     
  5. Ruptor

    Ruptor Marcos el Ruptor

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    167
    Адрес:
    Australia
    Могу посоветовать посмотреть на мой вариант для примера, может поможет. Там есть и поточный вариант по 32 бита.
     
  6. rodger

    rodger New Member

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