В своей системе консольной шифросвязи Extra Systems Cypher Net я использую поточное шифрование RC4, перед которым открытый текст дополнительно проходит через шифр Павленко (этот метод шифрования, как и любой другой, носит имя своего изобретателя). Кроме того, реализация алгоритма RC4 в моем исполнении тоже имеет ряд особенностей, направленных на усиление криптостойкости всей системы. Разберем все это по порядку.
shuffle_encrypt_buffer(str_buf, buf_size);
encrypt_buffer(str_buf, buf_size);
Первый вызов — шифр Павленко, второй вызов — шифр RC4. В приемнике аналогичный фрагмент, ясное дело, меняет эти вызовы местами:
decrypt_buffer(str_buf, buf_size);
shuffle_decrypt_buffer(str_buf, buf_size);
Полное описание шифра Павленко содержится на специальной странице сайта Extra Systems Cypher Net, я же хочу лишь подчеркнуть здесь, что имея в своем распоряжении сам алгоритм, но не имея ключей, ни один криптоаналитик не сможет взломать этот шифр за разумное время. То есть, для обеспечения надежной шифросвязи, на самом деле, могло бы хватить и одного этого метода шифрования, а в Extra Systems Cypher Net в дополнение к нему (вслед за ним) применяется еще и безупречно реализованный и дополнительно усиленный алгоритм шифрования RC4.
Перейдем теперь к рассмотрению реализации RC4 в Extra Systems Cypher Net. Как и для шифра Павленко, для описания RC4 на сайте продукта этому алгоритму также посвящена отдельная страница. Особое внимание следует обратить на процедуру инициализации:
void make_crypt_key_table(unsigned char *key_data_ptr, int key_data_len)
{
int i, buffer_len;
unsigned char x;
unsigned char rc4_trash[RC4_SKIP_TRASH + 256];
prepare_rc4_key(key_data_ptr, key_data_len, &rc4_key_table);
x = RC4_SKIP_EXTRA;
for(i = 0; i < key_data_len; i++) x = x + key_data_ptr[i];
buffer_len = RC4_SKIP_TRASH + x;
encrypt_buffer(rc4_trash, buffer_len);
}
Как известно, в современных криптографических кругах принято считать обязательным пропуск первых 256 байт шифра RC4, которые в упомянутых кругах догматиков почему-то считаются недостаточно благонадежными. Лично я считаю это блажью (особенно, с учетом того, что в Extra Systems Cypher Net используются одноразовые криптографически случайные ключи RC4 длиной не менее 1000 бит), но решил все же это сделать — как говорится, «иногда проще согласиться, чем объяснять, почему этого не нужно делать» (литературный вариант — в оригинале это звучит не подходящим для печати образом). Итак, что мы видим в этом фрагменте кода? Мы видим, что пропускается минимум 500 начальных байт шифра RC4 (именно такое значение на сайте продукта официально декларируется фирмой для параметра RC4_SKIP_TRASH) и плюс к тому некое случайное их количество в диапазоне от 0 до 255 — математическое ожидание этой величины, таким образом, составляет 128. То есть, в среднем, пропускается не менее 628 начальных байт шифра RC4. Более того, конкретное значение этой цифры всякий раз остается неизвестным хакеру (из-за неразглашения фирмой параметров RC4_SKIP_TRASH и RC4_SKIP_EXTRA, а также из-за полной вычислительной непредсказуемости суммы байт ключа RC4 по модулю 256), что еще больше его запутывает (несмотря на полную открытость кода).
Таким образом, подводя итоги, можно сказать, что система шифрования Extra Systems Cypher Net, полученная путем идеального симбиоза шифра Павленко (превращающего любой осмысленный текст на любом европейском языке в последовательность случайных символов с энтропией 7.9 бит на байт) и полностью надежной реализации RC4 (с достаточно большим и при этом совершенно непредсказуемым начальным пропуском байт шифра), представляет собой такого монстра шифрования, которого абсолютно невозможно взломать никакими методами и никакими ресурсами — ни сегодня, ни в будущем.
Комментариев нет:
Отправить комментарий