Extra Systems

CYPHERNET

entrega do produto ao consumidor


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 Extra Web Top