Extra Systems

CYPHERNET

Prozedur connect_server


Die Prozedur connect_server wird nach erfolgreicher Ausführung von check_finger_print aus „dispatch_call“ aufgerufen, um den Teilnehmer zu finden, mit dem ein sicherer Kommunikationskanal aufgebaut werden muss. Nach erfolgreicher Erkennung eines solchen Abonnenten stellt connect_server ein Verfahren zur Vereinbarung eines gemeinsamen Sitzungsschlüssels für zwei Abonnenten bereit (Senden von key_data- und hash_data-Objekten).

Es ist wichtig zu betonen, dass der zentrale Extra Systems Cypher Net-Server (wie im folgenden Code leicht zu erkennen ist) bei der Übertragung wichtiger Sicherheitsobjekte key_data und hash_data zwischen Abonnenten diesen Prozess in keiner Weise stört. Für den Server sind diese Daten völliger Unsinn, dessen Bedeutung er nicht versteht, sondern nur deren Größe (PACKED_VALUE_LENTH und HASH_SIZE) kennt.

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;
}

Bitte beachten Sie, dass der Server nicht im Voraus weiß, wie groß die Informationen sind, die während der Aushandlung des Sitzungsschlüssels zwischen Teilnehmern ausgetauscht werden. Dies liegt daran, dass sie unterschiedliche Größen von RSA-Schlüsseln sowie unterschiedliche Hashing-Algorithmen verwenden können. Daher sendet die Clientprozedur get_common_key zunächst die Paketgröße (PACKED_VALUE_LENTH + HASH_SIZE), damit der Server weiß, welche Größeninformationen (die Variable socket_buffer_size) zwischen Abonnenten gesendet werden sollen.

Der Inhalt dieser Seite ist auch in Englisch, Französisch, Ukrainisch und Russisch verfügbar.


© Extra Systems, 2024 Extra Web Top