web-dev-qa-db-ja.com

インストールされているキーリングなどに依存せずに、コマンドラインで非対称暗号化を行うにはどうすればよいですか?

私の自宅のコンピューターは、LinuxMintを実行しているVMWareホストと多数のVMWareクライアントで構成されています。

VHDをリムーバブルハードドライブに圧縮するバックアップを毎晩実行しています。

圧縮された画像を暗号化したいのですが。また、バックアップスクリプトにパスワードを含めずにこれを実行したいと思います。

私は回転するリムーバブルディスクをいくつか持っており、毎日1つを仕事に持っていくので、オフサイトのコピーを持っています。また、各バックアップディスクにバックアップスクリプトのコピーを含めて、復元を実行するために何をする必要があるかを簡単に理解できるようにします。

私の考えでは、公開鍵暗号化を使用すると、公開鍵で暗号化し、復号化に秘密鍵を要求でき、パスワードを必要とせずにバックアップスクリプトを実行できると考えています。

(秘密鍵または秘密鍵ファイルへのパスフレーズのいずれかを、バックアップメディアにも書き込むKeePassデータベースに保持します。)

ただし、これは自己完結型で実行したいので、バックアップディスクに書き込まれたもの以外は何も使用せずにバックアップを復号化できます。つまり、gpgを使用する場合は、バックアップディスクにgpgのコピーが必要です。これは、何もインストールまたは構成しなくても、単独で実行できます。 (つまり、〜/ .gpgconfなどへの依存関係はありません)

そして、gpgを使用してこれを行う方法を理解することができませんでした。マニュアルでは、現在のユーザー用にインストールして構成することを想定しているようです。何も起こらなかったときに実行できるようにする必要があります。

方法に関するアイデア:

  • アンインストールモードでgpgを実行する、または
  • 他のツールを使用してこれを行う方法は? (openssl?)

コメントを追加...

Gpgをインストールできないのはなぜですか?

問題は復元を行うことです。

私が完全なシステム障害を抱えているとしましょう。おそらく私の家が全焼し、すべてが破壊されたのでしょう。

そのため、新しいコンピューター、ベアドライブ、および最新のオフサイトバックアップを使用して復元を開始しています。

私は何をしますか?

サムドライブからext4パーティションをマウントできるLinuxのバージョンを起動し、元に戻します。

基本的なシステムユーティリティとバックアップディスクに何を置いたか以外に頼ることはできません。

1
Jeff Dege

私はこの問題をいじくり回してきましたが、アプローチがあると思います。

最初に、バックアップを実行する前に1回:

RSAキーペアを生成します。

$ openssl genpkey -out backupkey.pem -aes-256-cbc -algorithm rsa
.................++
............................++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
$ 

良いパスフレーズを使用してください-誰もがハッキングしようとしているものではありません。 6〜8個のランダムな単語が適切に機能します。お気に入りの本や曲から引用を選ばないでください。

次に、作成した.pemファイルから新しい公開鍵を抽出します。

$ openssl rsa -in backupkey.pem -pubout -out backupkey.key
Enter pass phrase for backupkey.pem:
writing RSA key
$ ls -l backupkey.*
-rw-r--r-- 1 jdege jdege  800 Jan 15 20:26 backupkey.key
-rw-r--r-- 1 jdege jdege 3418 Jan 15 20:16 backupkey.pem
$ 

これらをどこかに保存してください。すべてのバックアップで使用します。それらをバックアップスクリプトと一緒に保存し、KeePassパスワードデータベースにコピーを置きます。

その後、バックアップごとに

ランダムなセッションキーを生成します。

$ openssl Rand -hex 128 > session.key
$

次に、バックアップを実行し、結果の暗号化をパイプラインの最後のステップにします。

$ generate-my-backup.sh |
> gzip |
> openssl enc -aes-256-cbc -pass file:./session.key -out /mnt/backups/20190115/backup.bup.gz.enc
$ 

次に、公開RSAキーを使用してセッションキーを暗号化し、セッションキーを削除して、暗号化されたセッションキーをバックアップメディアにコピーします。

$ openssl rsautl -encrypt -inkey backupkey.key -pubin -in session.key -out session.key.enc
$ cp session.key.enc /mnt/backups/20190115/
$ rm session.key
$ 

そして、秘密鍵を含むファイルをバックアップメディアにコピーします。

$ cp backupkey.pem /mnt/backups/20190115/
$ 

復元する必要がある場合

秘密鍵へのパスフレーズを知っていれば、それは簡単です。

$ openssl rsautl -decrypt -inkey backupkey.pem  -in session.key.enc |
> openssl enc -d -aes-256-cbc -in backup.bup.gz.enc -pass stdin |
> gunzip |
> restore-my-backup.sh
Enter pass phrase for backupkey.pem:
$

「opensslrsautl」を実行して暗号化されたセッションキーをstdoutに復号化し、次に「openssl enc -d」を実行してバックアップファイルを復号化し、stdinからキーを読み取り、出力をstdoutに書き込みます。ファイルが属する場所にファイルを配置するために必要なパイプラインの他のすべてに渡されます。

1
Jeff Dege