Utilizando chaves RSA, os subscritores do Extra Systems Cypher Net na fase inicial (procedimento get_common_key) geram sequências de bytes aleatórias e trocam-nas de forma encriptada. Esta troca é designada por prólogo (ligação adicional, já significativa). No procedimento get_common_key mencionado acima, estas linhas são relevantes para este processo (prólogo):
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);
O tamanho do prólogo, como se pode facilmente constatar, é PACKED_VALUE_LENTH + HASH_SIZE, ou seja, depende da profundidade de bits das chaves RSA utilizadas (parâmetro PACKED_VALUE_LENTH) e do algoritmo de hash utilizado nesta entrega específica (parâmetro HASH_SIZE). Assim, pode alterar, o que criaria problemas ao servidor central no procedimento connect_server caso os subscritores não informassem previamente, durante o procedimento check_finger_print, através da impressão digital que enviaram, o valor do seu prolog_size.
É fácil de ver que o prólogo é constituído por duas partes: uma sequência aleatória local_key gerada pelo cliente (no procedimento make_local_key) e um hash desta sequência local_hash. Ao mesmo tempo, o hash é calculado antes de encriptar o local_key, o que garante a fiabilidade da ligação, uma vez que apenas um parceiro de comunicação que possua uma chave RSA privada pode desencriptar este pacote, e apenas um subscritor a quem este parceiro tenha fornecido pessoalmente a chave pública para tal pode encriptá-lo. Nenhum ataque man-in-the-middle é, portanto, possível neste caso.
O conteúdo desta página está também disponível em inglês, francês, alemão, espanhol, ucraniano e russo.
© Extra Systems, 2024 |