最後のステップとして、OpenSSL を使用して暗号化を実装し、それを Netcat と統合することで、通信にセキュリティレイヤーを追加しましょう。暗号化は、ネットワーク伝送中に機密情報が権限のない第三者に傍受されたり読み取られたりするのを防ぐために不可欠です。
-
まず、送信者用スクリプトを作成しましょう。このスクリプトはメッセージの暗号化と送信を処理します。secure_sender.sh という名前の新しいファイルを開きます。
nano secure_sender.sh
-
ファイルに以下の内容を追加します(コピー&ペーストが可能です)。
#!/bin/bash
echo "Secure Sender - Enter messages to send. Press Ctrl+C to exit."
while true; do
echo "Enter message:"
read message
encrypted=$(echo "$message" | openssl enc -aes-256-cbc -salt -base64 -pbkdf2 -iter 10000 -pass pass:secretpassword 2> /dev/null)
echo "$encrypted" | nc -N localhost 12345
done
このスクリプトの仕組みは以下の通りです:
- ループ内で継続的にメッセージの入力を求めます。
- 入力を受け取り、パイプを通じて OpenSSL に渡し暗号化します。
- Netcat (
nc) を使用して、暗号化されたデータを localhost のポート 12345 に送信します。
- 暗号化パラメータには、セキュリティを高めるためのソルト(salt)、安全な伝送のための base64 エンコーディング、および 10,000 回の反復を伴う PBKDF2 キー派生が含まれています。
-
Ctrl+X を押し、次に Y、そして Enter を押してファイルを保存し終了します。スクリプトを実行可能にします。
chmod +x secure_sender.sh
-
次に、受信者用スクリプトを作成します。このスクリプトは着信メッセージをリッスン(待機)し、復号します。secure_receiver.sh という名前の新しいファイルを開きます。
nano secure_receiver.sh
-
以下の内容を追加します。
#!/bin/bash
echo "Secure Receiver - Waiting for messages. Press Ctrl+C to exit."
while true; do
encrypted=$(nc -l -p 12345)
if [ ! -z "$encrypted" ]; then
decrypted=$(echo "$encrypted" | openssl enc -aes-256-cbc -d -salt -base64 -pbkdf2 -iter 10000 -pass pass:secretpassword 2> /dev/null)
echo "Received message: $decrypted"
fi
done
このスクリプトは以下の通りです:
- ポート
12345 で着信データを継続的にリッスンします。
- データを受信すると、パイプを通じて OpenSSL に渡し復号します。
- メッセージを正しく復号するために、送信者と同じ暗号化パラメータを使用します。
- 元の平文メッセージを表示します。
-
Ctrl+X を押し、次に Y、そして Enter を押してファイルを保存し終了します。スクリプトを実行可能にします。
chmod +x secure_receiver.sh
-
それでは、暗号化通信システムをテストしましょう。受信者用と送信者用の 2 つのターミナルウィンドウを同時に開く必要があります。
-
最初のターミナルで、受信者スクリプトを起動します。
./secure_receiver.sh
受信者がメッセージを待機していることを示すメッセージが表示されます。受信者は現在、ポート 12345 でアクティブにリスニングしています。
-
2 つ目のターミナルで、送信者スクリプトを起動します。
./secure_sender.sh
メッセージの入力を求められます。ここで入力した内容はすべて、ネットワーク経由で送信される前に暗号化されます。
-
送信者ターミナルでメッセージを入力し、Enter キーを押します。暗号化されたメッセージが送信されるのが確認できるはずです(送信される際に暗号化されたバージョンが一瞬表示されます)。