web-dev-qa-db-ja.com

Linuxで暗号化されていないファイルを作成せずにopensslaes-256-cbc暗号化ファイルを読み取るにはどうすればよいですか?

暗号化されたファイルがあり、それを復号化するには、次のコマンドを使用します。

 openssl aes-256-cbc -d -in encrypted_file -out unencrypted_file

しかし、これを行うと、暗号化されていないファイルが作成され、完了したら削除する必要があります。これは、誰かが私のコンピューターを入手して、ある種のデータ回復ツールを使用した場合、暗号化されていないファイルを入手できることを意味します。別のファイルを作成せずに暗号化されたファイルのデータにアクセスする方法はありますか?

6
KNejad

Linuxを使用していると仮定し、いくつかのアイデアがあります...

RAMに抽出

簡単な方法は、復号化されたファイルを作成することですが、ディスクには書き込まないでください。たとえば、ramfsまたはtmpfsファイルシステムを使用してRAMに配置します。ただし、問題は次のようになります。

  • ファイルがRAMに収まらない可能性があります
  • ramfsは、すべてのramが使用されるまでサイズが大きくなる可能性があります(その後、おそらくクラッシュします)
  • tmpfs はディスク上のスワップ に書き込まれる場合があります(tmpfsとramfsの違いについてはそのリンクも参照してください)。

/tmpまたは他のフォルダ(/run/run/shm/run/userなど)はすでにtmpfsとしてマウントされている可能性があります。mount|grep tmpfsで確認できます。


新しいtmpfsを作成するには、これを行うことができます(-o size=16384と同様に、必要に応じてバイト単位のサイズで、デフォルトであると思います)ラムの半分まで):

Sudo mount -v -t tmpfs  tmpfs /mountpoint

古いramfsを使用するには、スワップに書き込まれませんが、サイズ制限はありません。これは機能するはずです。

Sudo mount -v -t ramfs  ramfs /mountpoint

上記のリンク は警告しますが:

ramfsファイルシステムは、容量によって制限されるディスクベースのファイルシステムのようにサイズを制限することはできません。 ramfsは、システムがRAMを使い果たし、クラッシュするか応答しなくなるまで、メモリストレージを使用し続けます

また、 カーネルのドキュメントはこちら も警告と発言:

Ramfsの欠点の1つは、すべてのメモリがいっぱいになるまでデータを書き込み続けることができることです。VMは、VMが次のように考えるため、データを解放できません。ファイルは(スワップスペースではなく)バッキングストアに書き込まれる必要がありますが、ramfsにはバッキングストアがありません。このため、ルート(または信頼できるユーザー)のみにramfsマウントへの書き込みアクセスを許可する必要があります。

サイズ制限を追加するために、tmpfsと呼ばれるramfs派生物が作成されました。スワップスペースにデータを書き込む機能。通常のユーザーには、tmpfsマウントへの書き込みアクセスを許可できます。詳細については、Documentation/filenames /tmpfs.txtを参照してください。

暗号化されたデバイスまたはフォルダーに抽出します

上記のRAMの問題が多すぎる場合は、別のプログラムを使用して、ディスク上のファイルを再度暗号化することができますが、それを読み取ることができます&暗号化されていない「オンザフライ」で使用(例:復号化されたバージョンは通常のファイルのように見え、動作しますが、ディスク上で暗号化されたままになります)dm -crypt/LUKS/truecrypt with cryptsetup 、または暗号化されたフォルダー( eCryptFS または EncFS )を使用して、そこでファイルを復号化します。

  • たとえば、フォルダmountpoint-folderにマウントされたext4を使用して1GBLUKSコンテナファイルを作成するには、次のようにします。

    head -c 1G /dev/zero > 1G
    Sudo cryptsetup -v luksFormat 1G
    Sudo cryptsetup -v luksOpen 1G container
    Sudo mkfs.ext4 -v /dev/mapper/container
    Sudo mount -v /dev/mapper/container <mountpoint-folder>
    

    次に、ファイルをmountpont-folderに復号化します。このファイルは、再度暗号化されたディスクに書き込まれていても、読み取り可能です。

  • eCryptFSはすでにLinuxMint、Ubuntu、および他の多くのディストリビューションにインストールされています。ecryptfs-setup-privateを実行してから、作成された~/Privateフォルダーを使用するだけでよい場合があります。

  • EncFSをインストールする必要があり(apt-get install encfsと同様)、それが manページはこちら または こちら であることがわかります。encfs ~/.secret ~/decryptedのようなコマンドが機能するはずです。

    また、EncFSには、「ソースプレーンテキストデータを取得し、暗号化されたデータをオンデマンドで生成する」という優れた--reverse機能があります。これは、リモートで暗号化されたバックアップを作成する場合に役立ちます。ローカルファイルを暗号化しないでください。 "

4
Xen2050

Stdinからの入力を受け入れるプログラムでデータを処理できる場合は、パイプも使用できます。例えば: openssl aes-256-cbc -d -in encrypted_plain_text_file | less

4
Tom Yan