Extra Systems

CYPHERNET

консольная система надежной коммерческой шифросвязи через сеть интернет

поставка изделия потребителю


Для создания комплекта поставки заказчику программного обеспечения шифрованной связи Extra Systems Cypher Net нами создано несколько скриптов для оболочки bash, которые полностью автоматизируют данный процесс (и исключают появление ошибок). Первый из этих скриптов make_client.sh предназначенный для создания нового клиента (снабженного персональными ключами шифрованной связи RSA) имеет такой текст:

#!/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

Как видно из текста, в этом скрипте мы получаем три простых числа нужной разрядности (512 бит) от openssl и передаем их процедуре keygen которая создает на их базе открытый и закрытый ключ RSA (1024 бит) для данного клиента (первые два простых числа перемножаются для получения основания обоих ключей, а третье используется как показатель степени для открытого ключа; показатель степени закрытого ключа, как и положено стандартами RSA, вычисляется утилитой keygen с применением расширенного алгоритма Евклида). Вместе с утилитами input и output эти ключи (открытый и закрытый) перемещаются этим скриптом в каталог, созданный для передачи всех этих материалов заказчику.

Процедура rsa_key_bin служит для перевода ключей RSA из текстового вида в двоичный (изначальная генерация ключей RSA в текстовом виде в Extra Systems Cypher Net сложилась исторически; в принципе, это никому не мешает).

Второй скрипт make_link.sh предназначенный для создания связи между парой клиентов имеет такой текст:

#!/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

Этот скрипт копирует открытый ключ RSA в каталог партнера и создает для данной пары необходимые файлы fingerprint которые также помещает в соответствующие пользовательские каталоги. Только после этого связь между этими клиентами через наш сервер становится возможной.

С помощью этих двух скриптов, в принципе, можно было бы выполнить любую работу по комплектованию заказа, но для полного удобства мы создали еще и третий скрипт, который позволяет сделать все одним движением. Этот скрипт имеет название make_product.sh и позволяет создать не только пару, но и целую сеть связи:

#!/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

В качестве параметров командной строки этому скрипту передается любое (не менее двух) количество идентификаторов клиентов, для которых необходимо в дальнейшем обеспечить взаимную шифросвязь через наш сервер.


© Extra Systems, 2024 Extra Web Top