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