Extra Systems

CYPHERNET

procédure connect_server


La procédure connect_server est appelée depuis dispatch_call après l'exécution réussie de check_finger_print afin de retrouver l'abonné avec lequel il est nécessaire d'établir un canal de communication sécurisé. Après avoir détecté avec succès un tel abonné, connect_server fournit une procédure pour convenir d'une clé de session commune à deux abonnés (envoi d'objets key_data et hash_data).

Il est important de souligner que lors du transfert des objets de sécurité clés key_data et hash_data entre abonnés, le serveur central Extra Systems Cypher Net (comme on peut facilement le voir dans le code ci-dessous) n'interfère en aucune façon avec ce processus. Pour le serveur, ces données sont un non-sens total, dont il ne comprend pas la signification, mais connaît seulement sa taille (PACKED_VALUE_LENTH et HASH_SIZE).

int connect_server(THREADDATA *thread_item) {
	int i, found, my_socket, his_socket, socket_buffer_size;
	char socket_buffer[MAX_SOCKET_BUFFER_SIZE];
	found = 0;
	thread_item->buffer_to_send = NULL;
	while (!found) {
		for (i = 0; (i < THREAD_POOL_SIZE) && (!found); i++) {
			found = ((thread_pool[i].client_id == thread_item->server_id) && (thread_pool[i].server_id == thread_item->client_id) && (thread_pool[i].client_mode != thread_item->client_mode));
			if (found) thread_item->server_thread = i;
		}
		if (!found) es_sleep(100);
	}
	my_socket = thread_item->thread_socket;
	his_socket = thread_pool[thread_item->server_thread].thread_socket;
	if (socket_read_buffer(my_socket, socket_buffer, thread_item->prolog_size) != thread_item->prolog_size) return 0;
	if (socket_send_buffer(his_socket, socket_buffer, thread_item->prolog_size) != thread_item->prolog_size) return 0;
	return 1;
}

Veuillez noter que le serveur ne connaît pas à l'avance la taille des informations échangées entre les abonnés lors du processus de négociation des clés de session. En effet, ils peuvent utiliser différentes tailles de clés RSA ainsi que différents algorithmes de hachage. Par conséquent, la procédure client get_common_key envoie d'abord la taille du paquet (PACKED_VALUE_LENTH + HASH_SIZE) afin que le serveur sache quelle information de taille (la variable socket_buffer_size) doit être envoyée entre les abonnés.

Le contenu de cette page est également disponible en anglais, allemand, portugais, espagnol, italien, ukrainien et en russe.


© Extra Systems, 2024 Extra Web Top