Выбор алгоритма обратимого шифрования Mcrypt

Тема в разделе "Защита и взлом", создана пользователем BaNru, 22 окт 2012.

  1. BaNru

    BaNru Постоялец

    Регистр.:
    20 ноя 2008
    Сообщения:
    126
    Симпатии:
    52
    Какой из алгоритмов самый устойчивый к взлому?

    На данный момент нашел только 6 алгоритмов в мануале:
    - MCRYPT_DES
    - MCRYPT_3DES
    - MCRYPT_RIJNDAEL_128
    - MCRYPT_RIJNDAEL_256
    - MCRYPT_GOST
    - MCRYPT_BLOWFISH

    Шифроваться будет текст кода.
     
  2. chibit

    chibit Life sucks.

    Регистр.:
    4 дек 2007
    Сообщения:
    419
    Симпатии:
    285
    MCRYPT_RIJNDAEL_128 (он же AES 128). Альтернатива - twofish, но его в списке нету.
     
    BaNru, Extalionez и latteo нравится это.
  3. Sloan

    Sloan Создатель

    Регистр.:
    16 авг 2012
    Сообщения:
    38
    Симпатии:
    3
    Зачем использовать это, если в openssl есть все что нужно, даже больше. Из списка - все устаревшие. Какая версия? В 2.6.8 есть TWOFISH - используйте его если нужен именно mcrypt.
    Вообще советую openssl (aes-256-cbc).
     
  4. Darkness

    Darkness Постоялец

    Регистр.:
    21 янв 2013
    Сообщения:
    146
    Симпатии:
    69
    В названии размер ключа, размер блока у AES 128 бит, Twofish альтернатива AES-256, но он медленнее AES-256, с тем же крипто эффектом.
    Вообще советую слегка подмешивать алгоритм, чтобы он не был идентичный доступным поумолчанию, тогда будет стойкий крипт, самый стойкий блочный крипт это комбинация ECB + CBC.
     
  5. olivok

    olivok

    Регистр.:
    13 ноя 2012
    Сообщения:
    159
    Симпатии:
    98
    Никто даже AES128 не будет брутфорсом ломать ради вашего кода, так что не стоит зря усложнять алгоритмы и замедлять расшифровку. AES128 в свежих версиях openssl ускоряются аппаратно, так что это лучший выбор. IMHO.
     
  6. Darkness

    Darkness Постоялец

    Регистр.:
    21 янв 2013
    Сообщения:
    146
    Симпатии:
    69
    Да ты прав, брутфорсом не будут, есть на много быстрее методы атаки, 128 битный ключ ломают за трое суток, это 32 знака, даже при грубом переборе, при 6.334028666297328e+49 возможных комбинаций, на средней GPU ломанут за двое - трое суток.
    Как показала практика, OpenSSL медленнее чем Mcrypt, при 10 000 повторов и 64Кб входных данных, OpenSSL Rijndael 256 CBC - 1.54 сек, Mcrypt Rijndael 256 CBC - 1.47 сек, время за весь цикл, что и следовало ожидать, так как OpenSSL предназначался для других целей, не стоит плодить ***но код и лепить то, что там ни к месту, нет понятия ускоряется аппаратно, есть понятие оптимизация под инструкции, в репозиториях большинство пакетов собраны с SSE2/SSE3, редко где SSE4, в моем случае оба пакета собраны в Gentoo с SSE4.
     
  7. olivok

    olivok

    Регистр.:
    13 ноя 2012
    Сообщения:
    159
    Симпатии:
    98
    Не совсем понимаю, откуда взялось число 6.334028666297328e+49, если 2^128 = 3,4e+38 и можно подробнее, про взом AES128 за 3-е суток? По поводу уменьшения сложность до 8,5e+37 еще слышал, в про такой быстрый взлом уже что-то новенькое, есть ссылки?
    Про openssl - это в первую очередь набор библиотек, который использует множество ПО, так что о каких других целях речь?
    Под аппаратным ускорением я имею ввиду поддержку специализированных инструкций Перейти по ссылке, можно конечно называть это и "оптимизацией под инструкции", но это все-же команды, рассчитанные именно на AES, а не общего назначения, как SSE.
     
  8. Darkness

    Darkness Постоялец

    Регистр.:
    21 янв 2013
    Сообщения:
    146
    Симпатии:
    69
    AES-NI во первых еще не один компилятор не умеет полностью использовать данную инструкцию, во вторых еще не каждый имеет процессор с данной инструкцией, в третьих эта инструкция хз как работает, так как в финальном конкурсе AES было 5 алгоритмов и каждый с отличительными особенностями.
    36^(128/4), 36 символов, 32 байта, откуда 2^128?
    Холивар OpenSSL vs Mcrypt? Mcrypt направленна на скорость крипта, OpenSSL на шифрование дигитальных подписей.
    На хабре была статья про 4xGTX480 и брут Rijndael_CBC_128 за 72 часа.
     
  9. olivok

    olivok

    Регистр.:
    13 ноя 2012
    Сообщения:
    159
    Симпатии:
    98
    Все современные процессоры поддерживают, там где нет поддержки, то используются старые, без оптимизации, в чем проблема?
    Для использования AES-NI компилятор особо и не нужен, можно написать реализацию чисто на ассемблере, хотя и gcc / visual c отлично с ним работает, как доказательство - openssl 1.x, который есть на всех платформах и использует AES-NI (которые появились еще вроде в 2008 году) и какие могут быть вопросы в работе инструкций тоже не ясно, они просто выполняют раунды шифрования в соответствии со стандартом (где-то есть пруфлинки на проблемы с ними?)

    Бред какой-то, откуда 36 символов? Длина Chiper-key для AES 128 - 128 бит (а не символов), т.е. 2^128, есть алгоритмы, которые позволяют уменьшить сложность в 4 раза, т.е. 2^126

    Хм, а ничего, что apache/nginx для шифрования трафика использует OpenSSL, хотя подписи используются только на этапе инициализации соединения?

    Пруфлинк или небыло.
     
  10. artmavir

    artmavir Писатель

    Регистр.:
    13 янв 2013
    Сообщения:
    2
    Симпатии:
    0
    Лично я делаю так.
    PHP:
    // Генерируем ключ доступа
                        
    $salt '$2y$11$'.substr(md5(uniqid(rand(), true)), 022);
                        
    $key crypt($password$salt);
                        
    // Генерируем хеш доступа
                        
    $salt '$2y$11$'.substr(md5(uniqid(rand(), true)), 022);
                        
    $hash crypt($password$salt);

    PHP:
    // Генерируем хеш на основе crypt
                    
    $hash_tmp crypt($password$data_user['hash']);
                    
    // Проверяем совпадение
                    
    if ($data_user['hash'] == $hash_tmp)
                    {