Процедура send_finger_print занимается отсылкой на сервер файла fingerprint, что требуется для того, чтобы наш центральный сервер опознал в Вас нашего легитимного клиента, а также получил информацию о том, к каком режиме (input или output) и с каким абонентом Вы желаете связаться.
Эта процедура вызывается в нужный момент приемником и передатчиком и выполняет свою работу с помощью такого алгоритма:
int send_finger_print(int socket, unsigned int client_id, unsigned int server_id, int client_mode) { int file_handle; char file_name[64]; unsigned char client_finger_print[PACKED_VALUE_LENTH]; if (client_mode == CLIENT_MODE_INPUT) sprintf(file_name, "fingerprint_i_%d_%d", client_id, server_id); else sprintf(file_name, "fingerprint_o_%d_%d", client_id, server_id); if((file_handle = open(file_name, O_RDONLY)) == -1) return 0; read(file_handle, client_finger_print, PACKED_VALUE_LENTH); close(file_handle); socket_send_buffer(socket, client_finger_print, PACKED_VALUE_LENTH); return 1; }
Следует отметить, что сам механизм fingerprint, изобретенный нами в этой системе шифросвязи, служит одним из механизмов защиты центрального сервера от хакерских атак. Получая от абстрактного клиента (который может быть злоумышленником) запрос на соединение, сервер ожидает сразу же получить от него правильный fingerprint. Если этого не происходит, сервер не ведет с таким клиентом никаких дальнейших разговоров, и немедленно разрывает соединение. Напомним, что поскольку файлы fingerprint зашифрованы через RSA открытым (только по названию) ключом сервера, который на самом деле нигде не публикуется, подделать их совершенно невозможно.
Таким образом, с помощью такого простого механизма, мы и здесь имеем защиту, которую невозможно взломать.
© Extra Systems, 2024 |