web-dev-qa-db-ja.com

パイプを使用したgpg対称暗号化

/dev/randomからデータをプルし、GPGを使用して暗号化することにより、(LUKSでDM-Cryptを使用して)ドライブをロックするためのキーを生成しようとしています。

私が使用しているガイドでは、次のコマンドの使用を提案しています。

dd if=/dev/random count=1 | gpg --symmetric -a >./[drive]_key.gpg

パイプなしで実行し、ファイルをフィードすると、(n?)cursesプロンプトが表示され、パスワードを入力するように求められます。ただし、データをパイプ処理すると、次のメッセージが4回繰り返され、フリーズしたままになります。

pinentry-curses: no LC_CTYPE known assuming UTF-8

can't connect to '/root/.gnupg/S.gpg-agent': File or directory doesn't existとも書かれていますが、ファイルからの入力でも表示されるので、これとは関係ないと思います。

だから私の質問はこれに要約されると思います:gpgにコマンドラインからパスフレーズを受け入れるように強制する方法はありますか、または他の方法でこれを機能させるか、または/dev/randomからデータを書き込む必要がありますか?一時ファイルに変換してから、そのファイルを暗号化しますか? (LiveCDでこれを実行していて、まだスワップを作成していないため、私が知る限り、これは問題ないはずです。したがって、ディスクに書き込む方法はありません。)

4
Thomas

ええと...結局、スワップがなく、ファイルシステムがRAMにあるので、次のシャットダウンで死ぬと仮定して、ファイルに書き出して、そのファイルを暗号化することにしました。

ただし、この質問を見つけた人の参考のために(そして私の頭の中でアイデアを固めるために)、initramfsを作成したときに見つけたずっと後に機能することがわかった手順を書き留めておきます。

あなたがする必要があるのは、彼らがパスワード入力のために外部のピンエントリープログラムを使い始める前に、gpgのバージョンに戻ることです。私の知る限り、これはバージョン2で発生しました。現在Linuxがインストールされていると仮定すると、静的にコンパイルされたバージョンのgpg <2.0を入手する必要があります。

これはGentooで非常に簡単に実行でき、次のコマンドのみが必要です。

USE="static" emerge -a1 "<gnupg-2"

インストール中に使用できるように、サムドライブにコピーする前に、必ずlddを使用して実際に静的であることを確認してください。

他のディストリビューションでは、@パッケージマネージャーを確認することをお勧めします。それでも問題が解決しない場合は、ソースをダウンロードしてコンパイルしてみます。

3
Thomas

あなたがttyを所有していることを確認してください:

# ls -l $(tty)
crw--w----. 1 foo tty 136, 0 Mar  1 16:53 /dev/pts/0
# chown root $(tty)

GPG_TTYを設定します。

# export GPG_TTY=$(tty)

gpg/pinentryは、これらの手順の後で機能するはずです。

11
serbaut