Страница 2 из 2

Re: А как насчет brute force?

Добавлено: 19 мар 2025, 17:27
george
vendor писал(а): 19 мар 2025, 17:04 Взломщику не обязательно искать осмысленный текст, он может ориентироваться на такие повторения.
Вы правы, такая опасность, теоретически (помним о возрасте Вселенной), существует для всех языков, кроме английского. И именно для ее предотвращения нами и были созданы процедуры shuffle_rotate_l и shuffle_rotate_r (смотрите страницу описания модуля shuffle на официальном сайте продукта). Вот что получается с Вашим примером после применения процедуры shuffle_rotate_l:

Код: Выделить всё

D0 BF  D1 80  D0 BE  D0 B2  D0 B5  D1 80  D0 BA  D0 B0
  п      р      о      в      е      р      к      а

Было:  D0 BF D1 80 D0 BE D0 B2 D0 B5 D1 80 D0 BA D0 B0

Стало: 0B FD 18 0D 0B ED 0B 2D 0B 5D 18 0D 0B AD 0B 0D
Обратите внимание, что повторяются коды "0B" и "18". Но почему? Потому что для букв "п", "о", "в", "е", "к" и "а" ключевой байт один и тот же ("D0"), а основной байт у них у всех начинается с "B". После смены алфавита ключевой байт, конечно, останется для них одинаковым, но старший полубайт основного кода - будет у всех разным!

Именно поэтому в процедуре shuffle_encrypt_buffer сначала вызывается shuffle_buffer, и лишь затем shuffle_rotate_l. Здесь действительно важно, в какой именно последовательности выполнять эти манипуляции.

Так что, не беспокойтесь. Этот путь для злоумышленника тоже тщательно нами замурован.

Re: А как насчет brute force?

Добавлено: 23 мар 2025, 10:39
vendor
george писал(а): 19 мар 2025, 17:27

Код: Выделить всё

Было:  D0 BF D1 80 D0 BE D0 B2 D0 B5 D1 80 D0 BA D0 B0
Стало: 0B FD 18 0D 0B ED 0B 2D 0B 5D 18 0D 0B AD 0B 0D
Но последовательность бит

Код: Выделить всё

...D 0...
у Вас все еще повторяется (на этот раз - на границе байтов). А кто заставит хакера работать только на уровне байт? Что может помешать ему анализировать поток бит (и обнаружить эти повторения)?

Re: А как насчет brute force?

Добавлено: 23 мар 2025, 10:48
george
vendor писал(а): 23 мар 2025, 10:39 Но последовательность бит

Код: Выделить всё

...D 0...
у Вас все еще повторяется
Эта опасность начисто устраняется после повторного (вслед за shuffle_rotate_l) применения процедуры shuffle_buffer (ведь на месте Ваших многоточий в потоке бит всякий раз стоят различные полубайты):

Код: Выделить всё

void shuffle_encrypt_buffer(unsigned char *buffer_ptr, int buffer_len)
{
	shuffle_buffer(buffer_ptr, buffer_len, shuffle_encrypt_data);
	shuffle_rotate_l(buffer_ptr, buffer_len);
	shuffle_buffer(buffer_ptr, buffer_len, shuffle_encrypt_data);
	shuffle_twist(buffer_ptr, buffer_len);
	shuffle_buffer(buffer_ptr, buffer_len, shuffle_encrypt_data);
}
Именно с этой целью (устранить данную проблему) оно (повторный вызов shuffle_buffer) и выполняется.

Применяемый нами в Extra Systems Cypher Net изощренный способ запутывания следов (последовательный вызов shuffle_buffer → shuffle_rotate_l → shuffle_buffer → shuffle_twist → shuffle_buffer) действительно дает в результате такое идеальное суфле, в котором никакой хакер разглядеть уже точно ничего не сможет.

Вот Вам реальный пример работы нашего модуля дополнительного шифрования (для случайного ключа shuffle.encrypt опубликованного на сайте):

Код: Выделить всё

Было изначально:  D0 BF D1 80 D0 BE D0 B2 D0 B5 D1 80 D0 BA D0 B0 

shuffle_buffer:   95 BB 54 6B 95 59 95 80 95 C8 54 6B 95 AD 95 4B 
shuffle_rotate_l: 5B B5 46 B9 55 99 58 09 5C 85 46 B9 5A D9 54 B9 
shuffle_buffer:   14 C8 CC 82 C4 5D 48 B7 EE 6A CC 82 1C D4 03 82 
shuffle_twist:    1C 4C 88 CC 25 44 DB 8E 76 EC A8 C1 2D C0 48 32 
shuffle_buffer:   D7 28 E1 F8 E3 66 94 3E BF 64 B8 AE 4C BC DD B1 

Как Вы сами видите, никаких следов первоначального повторения байта "D0" не остается. И даже от такой длинной последовательности бит как "D1 80 D0 B..." (которая в исходном тексте повторяется дважды) тоже в итоге ничего не остается - она полностью размывается нашим алгоритмом. Результат вполне похож на последовательность случайных чисел.