Extra Systems

CYPHERNET

консольная система надежной коммерческой шифросвязи через сеть интернет

зашифрованный обмен сеансовыми ключами (пролог)


Используя ключи RSA, абоненты на начальной стадии (процедура get_common_key), генерируют случайные последовательности байт и обмениваются ними в зашифрованном виде. Этот обмен и называется прологом (дальнейшей, уже содержательной, связи). В упомянутой нами выше процедуре get_common_key к этому процессу (прологу) имеют отношение вот эти строки:

	make_local_key();
	get_hash(local_key.packed, PACKED_VALUE_LENTH / 2, local_hash);
	encrypt_local_key();
	memcpy(socket_buffer, crypted_local_key, PACKED_VALUE_LENTH);
	memcpy(socket_buffer + PACKED_VALUE_LENTH, local_hash, HASH_SIZE);
	socket_send_buffer(socket, socket_buffer, PACKED_VALUE_LENTH + HASH_SIZE);

Размер пролога, как леко видеть, составляет PACKED_VALUE_LENTH + HASH_SIZE, то есть, зависит от разрядности используемых ключей RSA (параметр PACKED_VALUE_LENTH) и используемого в данной конкретной поставке алгоритма хэширования (параметр HASH_SIZE). Таким образом, он может меняться, что создавало бы проблемы центральному серверу в процедуре connect_server, если бы ему заранее, еще в ходе процедуры check_finger_print, абоненты, через высланный ими fingerprint, не сообщили значение своего prolog_size.

Легко видеть, что пролог состоит из двух частей: сгенерированной клиентом (в процедуре make_local_key) случайной последовательности local_key и хэша этой последовательности local_hash. При этом, хэш вычисляется до шифрования local_key, что обеспечивает надежность связи, поскольку расшифровать эту посылку может лишь партнер по связи, имеющий закрытый ключ RSA, а зашифровать может лишь абонент, которому этим партнером был лично передан для этого открытый ключ. Никакая атака посредника (man-in-the-middle), таким образом, в данном случае невозможна.


© Extra Systems, 2024 Extra Web Top