OpenSSL でファイルを暗号化する

Beginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、サイバーセキュリティにおいて重要なスキルである、OpenSSL を使用したファイルの暗号化と復号化の方法を学びます。実践的な演習を通じて、対称鍵の生成と AES 暗号化を適用して機密データを保護する方法を練習します。

この実験では、OpenSSL のインストール、テストファイルの作成、および完全な暗号化 - 復号化サイクルの実行を段階的に説明します。この実践的な経験を通じて、実際のアプリケーションで使用される基本的なデータ保護技術を理解することができます。


Skills Graph

OpenSSL のインストール

このステップでは、安全な通信を実装するための強力なツールキットである OpenSSL をインストールします。OpenSSL は、この実験の後半でファイルの暗号化と復号化に使用する重要な暗号機能を提供します。データの送信と保存のセキュリティ確保に広く使用されています。

始める前に、OpenSSL はほとんどの Linux ディストリビューションにデフォルトで含まれていることを理解することが重要です。ただし、正しいバージョンと必要なすべてのコンポーネントがインストールされていることを確認するために、インストール手順を説明します。以下が具体的な手順です。

  1. まず、パッケージリストを更新する必要があります。これにより、システムが最新の利用可能なソフトウェアバージョンを認識するようになります。

    sudo apt update
  2. 次に、OpenSSL をインストールします。-y フラグを使用すると、インストールを自動的に承認するため、インストール中に 'yes' を入力する手間が省けます。

    sudo apt install openssl -y
  3. インストール後、バージョンを確認することで、インストールが正常に行われたことを検証しましょう。このコマンドは、現在システムでアクティブな OpenSSL のバージョンを表示します。

    openssl version

    以下のような出力が表示されるはずです。

    OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
  4. 最後に、ヘルプメニューを確認します。これにより、利用可能なすべての OpenSSL コマンドが表示され、インストールが正常に機能していることが確認できます。

    openssl help

    ヘルプの出力には、OpenSSL が実行できるさまざまな暗号操作が表示されます。これらの操作については、この実験の次のステップで詳しく調べます。

サンプルファイルの作成

このステップでは、暗号化と復号化の演習におけるテストデータとして使用する簡単なテキストファイルを作成します。既知のテキストファイルを使用することで、元の内容と復号化後の内容を簡単に比較できるため、暗号化プロセスが正しく機能していることを確認するのに役立ちます。

まず、プロジェクトディレクトリにこのサンプルファイルを作成しましょう。初心者にも使いやすい nano テキストエディタを使用しますが、使い慣れたテキストエディタを使用しても構いません。

  1. まず、プロジェクトディレクトリに移動します。これにより、すべてのファイルが 1 つの場所に整理されます。

    cd ~/project
  2. 次に、nano を使用して sample.txt という新しいファイルを作成して開きます。

    nano sample.txt
  3. nano が開くと、空白の編集領域が表示されます。次の 2 行をそのまま入力します。

    This is a sample text file for encryption testing.
    LabEx Cybersecurity Lab - AES Encryption Demo.
  4. nano で入力内容を保存するには、以下の手順を行います。

    • Ctrl+O(数字の 0 ではなく、文字の O)を押して、ファイルを「書き出し」(保存)します。
    • Enter を押して、ファイル名 sample.txt を確認します。
    • Ctrl+X を押して、エディタを終了します。
  5. ファイルが正しく作成されたことを確認するために、その内容を表示しましょう。

    cat sample.txt

    ターミナルには、入力した 2 行が正確に表示されるはずです。何か異なる点がある場合は、再度ファイルを編集する必要があるかもしれません。

  6. 最後に、ファイルが存在し、内容が保存されていることを確認するために、ファイルの詳細を確認します。

    ls -l sample.txt

    このコマンドは、ファイルのパーミッション、所有者、サイズなどの詳細を表示します。サイズがゼロでない(通常は 80 - 100 バイト)ことで、テキストが正しく保存されていることが確認できます。

このサンプルファイルが用意できていることは、次のステップでの暗号化と復号化において重要です。復号化後に元のテキストが戻ってくることで、暗号化プロセスが正常に機能していることを明確に確認できます。

対称鍵の生成

このステップでは、OpenSSL を使用して対称暗号化キーを生成します。このキーは次のステップでサンプルファイルを暗号化するために使用します。対称暗号化では、データのロック(暗号化)とアンロック(復号化)に同じキーが使用されます。これは、別々のキーを使用する非対称暗号化とは異なります。このため、キー生成プロセスはセキュリティ上特に重要です。

以下に、行うことを分解して説明します。OpenSSL の暗号機能を使用して強力なランダムキーを作成し、安全に保存し、その特性を検証します。このキーは AES-256 暗号化を使用します。これは現在、ほとんどの目的に対して非常に安全と考えられています。

以下の手順に従って、安全な AES-256 暗号化キーを生成しましょう。

  1. まず、キーファイルを保存する正しい作業ディレクトリにいることを確認します。これにより、プロジェクトファイルが整理されます。

    cd ~/project
  2. 次に、実際のキーを生成します。openssl rand コマンドは、暗号学的に強力なランダムデータを作成します。32 バイト(256 ビット)のランダムデータを要求し、可読性のために 16 進数(base-16)でフォーマットします。

    openssl rand -hex 32 > symmetric_key.hex
  3. 生成されたキーが正しく作成されたことを確認するために、キーを表示しましょう。キーは長いランダムな文字列として表示されるはずです。

    cat symmetric_key.hex

    次のような 64 文字の 16 進数文字列(32 バイトを表す)が表示されるはずです。

    a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890
  4. このキーは暗号化されたデータを解読できるため、保護する必要があります。chmod 600 コマンドを使用すると、このファイルを読み書きできるのは自分だけになります。

    chmod 600 symmetric_key.hex
  5. 最後に、キーファイルの特性を検証して、すべてが正しく設定されていることを確認しましょう。

    ls -l symmetric_key.hex

    出力には以下の情報が表示されるはずです。

    • 所有者としてあなたのユーザー名
    • -rw------- のパーミッション(読み書きは自分だけ)
    • 65 バイトのサイズ(64 文字 + 改行文字)

このキーファイルは安全に保管するようにしてください。キーを持っている人は誰でもあなたの暗号化されたファイルを復号化できます。実際のシナリオでは、プロジェクトディレクトリよりも安全な場所に保存することを検討する必要があります。

AES でファイルを暗号化する

このステップでは、前のステップで生成した対称鍵を使用して、AES-256-CBC でサンプルファイルを暗号化します。AES(Advanced Encryption Standard)は、強力なセキュリティを提供する広く使用されている対称暗号化アルゴリズムです。256 ビットのキー長は高い保護を提供し、CBC(Cipher Block Chaining)モードはデータの各ブロックが順番に安全に処理されることを保証します。

始める前に、やろうとしていることを理解しましょう。元の読み取り可能なテキストファイルを、ランダムなデータのように見える暗号化されたバージョンに変換します。正しいキーを持っている人だけが、それを元の形式に復号化することができます。

以下の手順に従ってファイルを暗号化しましょう。

  1. まず、サンプルファイルがある正しい作業ディレクトリにいることを確認します。これは、OpenSSL が入力ファイルとキーファイルの両方を見つける必要があるため重要です。

    cd ~/project
  2. 次に、OpenSSL の暗号化コマンドを使用します。-aes-256-cbc はアルゴリズムを指定し、-in は入力ファイルを指し、-out は暗号化されたバージョンを保存する場所を指定し、-pass file: は OpenSSL に暗号化キーの場所を教えます。

    openssl enc -aes-256-cbc -in sample.txt -out sample.enc -pass file:symmetric_key.hex
  3. 暗号化コマンドを実行した後、暗号化されたファイルが正しく作成されたことを確認しましょう。暗号化プロセスで追加データが付加されるため、暗号化されたファイルは元のファイルよりも少し大きくなるはずです。

    ls -l sample.enc

    出力には以下の情報が表示されるはずです。

    • 所有者としてあなたのユーザー名
    • 元のファイルよりも大きいファイルサイズ(暗号化のオーバーヘッドによる)
  4. 暗号化が機能したことを確認するために、暗号化された内容を表示してみましょう。元のテキストファイルとは異なり、これは安全に暗号化されているため、ランダムなバイナリデータとして表示されるはずです。

    cat sample.enc

    ランダムに見えるバイナリデータが表示され、暗号化が成功したことが確認できます。

  5. 追加の検証として、システムがファイルの種類をどのように識別するかを確認できます。file コマンドは、ファイルの内容を調べてその種類を判断します。

    file sample.enc

    出力は、元のファイルのような「ASCII text」ではなく「data」と表示されるはずです。これは、暗号化されたファイルから期待される結果です。

ファイルの復号化と検証

この最後のステップでは、対称鍵を使用して暗号化されたファイルを復号化し、復号化された内容が元のファイルと一致することを検証します。これにより、暗号化/復号化のサイクルが完了し、暗号操作が正しく機能したことが検証されます。復号化は基本的に暗号化の逆のプロセスです。つまり、暗号化に使用されたのと同じキーを使って、並び替えられたデータを元の形式に戻します。

以下の手順に従って、ファイルを復号化して検証しましょう。

  1. まず、暗号化されたファイルとキーが保存されている正しい作業ディレクトリにいることを確認します。

    cd ~/project
  2. 同じ対称鍵を使用して、暗号化されたファイルを復号化します。-d フラグは OpenSSL に復号化を指示し、その他のパラメータは暗号化時に使用したものと一致します。

    openssl enc -d -aes-256-cbc -in sample.enc -out sample.dec -pass file:symmetric_key.hex
  3. 復号化されたファイルが作成されたことを確認します。ls -l コマンドは、ファイルのサイズや作成時間などの詳細情報を表示します。

    ls -l sample.dec
  4. 復号化されたファイルを元のファイルと比較します。diff コマンドは、ファイル間の差分を行ごとにチェックします。

    diff sample.txt sample.dec

    ファイルが同一であれば(本来そうであるはずです)、このコマンドからは出力されません。何らかの出力があれば、元の内容と復号化された内容に不一致があることを示します。

  5. 復号化された内容が元の内容と一致することを確認するために、内容を表示します。cat コマンドは、ファイルの全内容をターミナルに表示します。

    cat sample.dec

    元の sample.txt ファイルとまったく同じテキストが表示されるはずです。この視覚的な確認は、復号化が正しく機能したことを検証するために重要です。

  6. 追加の検証として、ファイルの種類を確認します。file コマンドは、ファイルの内容を調べてその種類を判断します。

    file sample.dec

    出力は、元のファイルと同じように「ASCII text」と表示されるはずです。これにより、復号化によってファイルが元のテキスト形式に正常に復元されたことが確認できます。

まとめ

この実験では、OpenSSL を使用してファイルを暗号化および復号化する方法を実践的に学びました。演習では、OpenSSL のインストール、テストファイルの作成、および AES 対称鍵を使用した暗号化/復号化操作がカバーされています。

この実験では、キー生成からファイルの暗号化、復号化の検証までの完全なワークフローを実証しました。この実践的な経験は、サイバーセキュリティアプリケーションにおける基本的な暗号操作の理解を深めるのに役立ちます。