Para crear un kit de entrega para el cliente del software de comunicación cifrada Cypher Net de Extra Systems, hemos creado varios scripts para el shell bash que automatizan completamente este proceso (y eliminan errores). El primero de estos scripts, make_client.sh, diseñado para crear un nuevo cliente (equipado con claves de comunicación cifradas RSA personales) tiene el siguiente 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 puede verse en el texto, en este script recibimos tres números primos del ancho requerido (512 bits) de openssl y los pasamos al procedimiento keygen, que crea en base a ellos una clave RSA pública y privada (1024 bits) para un cliente determinado (los dos primeros números primos se multiplican para obtener la base de ambas claves, y el tercero se utiliza como exponente de la clave pública; el exponente de la clave privada, como lo exigen los estándares RSA, lo calcula el keygen utilidad usando la extendida. algoritmo euclidiano). Junto con las utilidades de entrada y salida, este script mueve estas claves (públicas y privadas) al directorio creado para transferir todos estos materiales al cliente.
El procedimiento rsa_key_bin se utiliza para convertir claves RSA de texto a binario (la generación inicial de claves RSA en forma de texto en Extra Systems Cypher Net fue histórica; en principio, esto no molesta a nadie).
El segundo script, make_link.sh, diseñado para crear una conexión entre un par de clientes, tiene el siguiente 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 la clave pública RSA en el directorio del socio y crea los archivos de huellas digitales necesarios para este par, que también coloca en los directorios de usuario correspondientes. Sólo después de esto es posible la comunicación entre estos clientes a través de nuestro servidor.
Con la ayuda de estos dos scripts, en principio, sería posible completar cualquier trabajo de preparación de pedidos, pero para mayor comodidad, también creamos un tercer script que le permite hacer todo con un solo movimiento. Este script se llama make_product.sh y le permite crear no solo un par, sino también una red de comunicación completa:
#!/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 la línea de comando, a este script se le pasa cualquier número (al menos dos) de identificadores de cliente para los cuales es necesario garantizar aún más la comunicación cifrada mutua a través de nuestro servidor.
El contenido de esta página también está disponible en inglés, francés, alemán, portugués, ucraniano y ruso.
© Extra Systems, 2024 |