Для створення комплекту поставки замовнику програмного забезпечення шифрованого зв'язку 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 |