Процедура генерации сеансового ключа make_local_key заполняет буфер последовательностью случайных байт. Эта процедура выполняется одинаковым образом каждым из абонентов (естественно, случайные последовательности при этом генерируются разные). Далее в процедуре get_common_key происходит двоичное сложение двух таких ключей, созданных двумя абонентами. В результате получается одно и то же число, которое и используется в качестве сеансового ключа для алгоритма потокового шифрования.
Размер ключа PACKED_SESSION_KEY_LENTH зависит от алгоритма шифрования, но должен быть меньше модуля RSA, иначе его нельзя будет зашифровать. В нашей системе максимальная длина этого параметра задается на один байт короче, чем длина ключа RSA (это гарантирует возможность последующего шифрования).
void make_local_key(void) { memset(local_key.packed, 0, PACKED_VALUE_LENTH); fill_random_buffer(local_key.packed, PACKED_SESSION_KEY_LENTH); unpack_value(local_key.packed, local_key.unpacked); }
© Extra Systems, 2024 |