Extra Systems

CYPHERNET

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


Використовуючи ключі RSA, абоненти Extra Systems Cypher Net на початковій стадії (процедура 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