Para criar um kit de entrega para o cliente do software de comunicação encriptada Extra Systems Cypher Net, criámos vários scripts para o shell bash que automatizam completamente este processo (e eliminam erros). O primeiro destes scripts, make_client.sh, concebido para criar um novo cliente (equipado com chaves pessoais de comunicação encriptadas RSA) tem o seguinte texto:
#!/bin/bash RSA_KEY_SIZE=1024 PRIME_SIZE=$(($RSA_KEY_SIZE / 2)) CLIENT_NUMBER=$1 [ -d $CLIENT_NUMBER ] || mkdir $CLIENT_NUMBER echo "Создаем ключи RSA длиной $RSA_KEY_SIZE бит для клиента №$CLIENT_NUMBER" PR1=$(openssl prime $(openssl prime -generate -bits $PRIME_SIZE) | cut -f1 -d ' ') PR2=$(openssl prime $(openssl prime -generate -bits $PRIME_SIZE) | cut -f1 -d ' ') PR3=$(openssl prime $(openssl prime -generate -bits $PRIME_SIZE) | cut -f1 -d ' ') ./keygen $PR1 $PR2 $PR3 > all.txt head -n 1 all.txt > public_$CLIENT_NUMBER tail -n 1 all.txt > private_$CLIENT_NUMBER rm all.txt ./rsa_key_bin public_$CLIENT_NUMBER rm public_$CLIENT_NUMBER ./rsa_key_bin private_$CLIENT_NUMBER rm private_$CLIENT_NUMBER mv private_$CLIENT_NUMBER.bin $CLIENT_NUMBER mv public_$CLIENT_NUMBER.bin $CLIENT_NUMBER cp input $CLIENT_NUMBER cp output $CLIENT_NUMBER
Como se pode observar no texto, neste script recebemos três números primos com a largura necessária (512 bits) do openssl e passamos para o procedimento keygen, que cria com base neles uma chave RSA pública e privada (1024 bits) para um determinado cliente (os dois primeiros números primos são multiplicados para obter a base de ambas as chaves, e o terceiro é utilizado como expoente para a chave pública; o expoente da chave privada, tal como é exigido pelas normas RSA, é calculado pelo keygen utilitário utilizando o estendido. Algoritmo euclidiano). Juntamente com os utilitários de entrada e saída, estas chaves (públicas e privadas) são movidas por este script para o diretório criado para transferir todos estes materiais para o cliente.
O procedimento rsa_key_bin é utilizado para converter chaves RSA de texto para binário (a geração inicial de chaves RSA em formato de texto no Extra Systems Cypher Net foi histórica; em princípio, isto não incomoda ninguém).
O segundo script, make_link.sh, concebido para criar uma ligação entre um par de clientes, tem o seguinte texto:
#!/bin/bash TMP_DIR_LIST="fingerprints" for NEED_TMP_DIR in $TMP_DIR_LIST do [ -d $NEED_TMP_DIR ] || mkdir $NEED_TMP_DIR done for CLIENT_NUMBER in $1 $2 do [ -d $CLIENT_NUMBER ] || mkdir $CLIENT_NUMBER done cp $1/public_$1.bin $2 cp $2/public_$2.bin $1 ./fingerprint $1 $2 || exit ./fingerprint $2 $1 || exit mv ./fingerprints/fingerprint_i_$1_$2 ./$1 mv ./fingerprints/fingerprint_o_$1_$2 ./$1 mv ./fingerprints/fingerprint_i_$2_$1 ./$2 mv ./fingerprints/fingerprint_o_$2_$1 ./$2 for NEED_TMP_DIR in $TMP_DIR_LIST do [ -d $NEED_TMP_DIR ] && rmdir $NEED_TMP_DIR done
Este script copia a chave pública RSA para o diretório do parceiro e cria os ficheiros de impressões digitais necessários para este par, que também coloca nos diretórios de utilizadores correspondentes. Só depois disso é que a comunicação entre esses clientes através do nosso servidor se torna possível.
Com a ajuda destes dois scripts, num primeiro momento seria possível realizar qualquer trabalho de preparação de encomendas, mas para maior comodidade, criámos também um terceiro script que permite fazer tudo de uma só vez. Este script chama-se make_product.sh e permite criar não só um par, mas também uma rede de comunicação inteira:
#!/bin/bash for CLIENT_NUMBER in $@ do ./make_client.sh $CLIENT_NUMBER done COUNER_1=1 for CLIENT_NUMBER_1 in $@ do COUNER_2=1 for CLIENT_NUMBER_2 in $@ do [ "$COUNER_2" -gt "$COUNER_1" ] && ./make_link.sh $CLIENT_NUMBER_1 $CLIENT_NUMBER_2 COUNER_2=$(( $COUNER_2 + 1 )) done COUNER_1=$(( $COUNER_1 + 1 )) done
Como parâmetros de linha de comando, este script recebe qualquer (pelo menos dois) número de identificadores de cliente para os quais é necessário garantir ainda mais a comunicação encriptada mútua através do nosso servidor.
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 |