web-dev-qa-db-ja.com

パスフレーズを再入力せずに、gpgを使用してファイルを復号化および暗号化します

[通知:私の問題は this に似ています。そして関連する this ]

基本的に、対称的に暗号化されたファイルを編集してから、同じパスフレーズを使用して再暗号化する必要があります。再入力する必要はありません。

こんなふうになります:

gpg --output $file_to_edit --decrypt $ecrypted_file
echo "Some edit" >> $file_to_edit
gpg --output $ecrypted_file --symmetric $file_to_edit

ここで、gpgはパスフレーズを3回要求します(1回は復号化用、2回は暗号化用)。私が欲しいのは、パスフレーズを1回だけ入力し(復号化のため)、正しい場合は、暗号化のためにもう一度使用することです。これを行うための安全な方法はありますか?

1
francescop21

いくつかのオプションがありますが、それらはすべて、後で削除が取り消されるのを待って、ディスク上に復号化されたファイルを残す可能性があります。シュレッドはファイルを安全に削除する際に問題が発生する可能性があり(ログ/ジャーナル、冗長書き込み/ RAID、一時キャッシュ、圧縮ファイルシステムがある場合)、SSDもセクターをサイレントにスワップする可能性があります。 tmpfsファイルシステムを使用している場合でも、スワップに書き出される可能性があります。また、使用する編集プログラムによって、さらに多くの一時/キャッシュファイルが残る可能性があります。ファイルシステムとスワップ全体が暗号化されていると非常に役立ちますが、本当にもっと暗号化する必要がありますか?

基本的なテキスト(パスワードなど)を保存するだけの場合は、KeePass(X/XC)、LastPassなどの専用プログラムを使用するか、eCryptfs、EncFS、またはなどのファイルを暗号化する別の暗号化方法を使用することをお勧めします。 LUKSやTrueCryptの後継機などのデバイスを暗号化します。


しかし、GPGだけで、これらのオプションの1つを使用できます

  • --passphrase-fd n
    ファイル記述子nからパスフレーズを読み取ります。最初の行のみがファイル記述子nから読み取られます。 nに0を使用すると、パスフレーズはSTDINから読み取られます。これは、パスフレーズが1つだけ指定されている場合にのみ使用できます。

    このパスフレーズは、オプション--batchも指定されている場合にのみ使用されることに注意してください。これはGnuPGバージョン1.xとは異なります。

  • --passphrase-file file
    ファイルfileからパスフレーズを読み取ります。ファイルfileから最初の行のみが読み取られます。これは、パスフレーズが1つだけ指定されている場合にのみ使用できます。明らかに、ファイルに保存されているパスフレーズは、他のユーザーがこのファイルを読み取ることができる場合、セキュリティに問題があります。回避できる場合は、このオプションを使用しないでください。このパスフレーズは、オプション--batchも指定されている場合にのみ使用されることに注意してください。これはGnuPGバージョン1.xとは異なります。

  • --passphrase string
    パスフレーズとして文字列を使用します。これは、パスフレーズが1つだけ指定されている場合にのみ使用できます。明らかに、これはマルチユーザーシステムでは非常に疑わしいセキュリティです。回避できる場合は、このオプションを使用しないでください。このパスフレーズは、オプション--batchも指定されている場合にのみ使用されることに注意してください。これはGnuPGバージョン1.xとは異なります。

上記のオプションの場合、おそらく--pinentry-mode loopback(競合がある場合は新しいファイル名などの新しい情報を入力できます)または--batchのいずれかが必要になります。そうでない場合、gpgはパスフレーズオプションを無視し、パスフレーズのエージェント(バグIMO)。これも役立つかもしれません:

  • --passphrase-repeat n
    gpgが新しいパスフレーズの繰り返しを要求する回数を指定します。これは、パスフレーズを覚えるのに役立ちます。デフォルトは1回の繰り返しです。

パスフレーズを入力してread /シェル/ bash変数(たとえば$password)に保存し、後で--passphrase="$password"で呼び出すことしかできませんでした。何かのようなもの

until gpg --pinentry-mode loopback --passphrase="$password" --output $file_to_edit $ecrypted_file;
do read -r password;
done

#Got out of the loop with a correct password, now
echo "Some edit" >> $file_to_edit

gpg --pinentry-mode loopback --passphrase="$password" --output $ecrypted_file --yes --symmetric $file_to_edit

--yes上書きする)

4
Xen2050