web-dev-qa-db-ja.com

gpgでファイルを暗号化、署名、復号化するにはどうすればよいですか?

ファイルの暗号化と復号化にgpgを使用しています。これから私がこれを参考にしてやっているステップは question です:

# Sender
gpg --encrypt --recipient [email protected] --output confidential.pgp confidential.txt
gpg -–sign –-local-user [email protected] --output signed.pgp confidential.pgp

# Recipient
gpg --decrypt –output confidential.pgp signed.pgp 
gpg --decrypt –output confidential.txt confidential.gpg

動作しますが、これは、署名の検証を行う必要がある場合に、ファイルを暗号化、署名、および復号化する正しい方法です必須受信者側?特に、2回復号化することは少し奇妙に見えます。これはsingleコマンドで実行できますか?

暗号化コマンドで--signを直接使用してみましたが、警告であり、必須署名要件。これが 公式マニュアル ですが、すべてを1つのステップで実行することについては説明していません。

# Sender
gpg -–sign –-local-user [email protected] --encrypt --recipient [email protected] --output signed.pgp confidential.txt

# Recipient
gpg --decrypt –output confidential.txt signed.pgp

更新1

調査の結果、非常に関連のある question が見つかりました。これは、gnupg --sign --encryptが最初に署名し、次にencryptsがドキュメントに署名することを示しているようです。したがって、ドキュメントを表示するには、最初にdecryptする必要がありますとにかく。オプションで、--status-fdを使用してステータスを出力できます。これは、簡単なスクリプトを使用して署名が適切かどうかを確認するために使用できます。したがって、コードは次のようになります。

# Sender
gpg -–sign –-local-user [email protected] --encrypt --recipient [email protected] --output signed.pgp confidential.txt

# Recipient
gpg --decrypt --status-fd –output confidential.txt signed.pgp | verify

ここで、verifyは、ステータスレジスタを確認し、必要に応じて中止するシェルスクリプトです。

6
Nishant

人の問題を解決するためにテクノロジーを使おうとしている

これは一般に良い考えではありません。

もう少し詳しく説明します。あなた-送信者-メッセージを生成し、それを暗号化してから、暗号化されたメッセージに署名します。これは、手紙を書いて、それを箱に入れ、箱を施錠して、署名を箱に付けるのと同じです。

メッセージの受信者に署名を確認してもらい、それを復号化してメッセージを読みます。これは、署名を探し、それが正しいことを確認し、ボックスのロックを解除して手紙を読むのと似ています。

両方のシナリオの問題は、相手がどのように行動するかを制御できないことです。彼らは怠惰で常に見つけたボックスのロックを解除することができ、誰がそれを送信したかを確認せずに見つけたものを解読することができます。

人の問題...

以前、これは「人の問題」であると述べました。つまり、受信者に署名を検証してもらい、想定外のものを信頼しないようにしてほしいということです。一部の人々は単に気にしないで、それを修正するのは難しいです。 「誰かを世話する」ことは非常に難しく、人間の心理学は本当に助けにはなりません。

たとえば、ユーザーが何かをするとき、彼らは特定の理由でそれをします。コンピュータが彼らに「本当にそれをしたいのですか?」と尋ねたら次に、そのメッセージを消すためにクリックする必要があるボタンをクリックします。これは多くのセキュリティ警告に当てはまりますが、残念ながら、技術的にできることは多くありません。

...人のソリューションが必要です。

しかし、あなたにできることはユーザーを教育することです。署名とは何か、なぜそれが重要で、なぜ気にかけるべきかを説明します。そして、あなたが言ったように、彼らが気にするあなたの理由がそれが必須であるためであるならば、それはそれで十分な理由であるべきです。

あなたの上司が今日来て、「見て、警告があってそれを無視すれば解雇されるかもしれない」と言うと想像してみてください。そうすれば、その警告をクリックしないようにするという非常に高いインセンティブがあります。それは負の補強であっても、それは人間の解決策です。

使いやすさを犠牲にしてセキュリティはセキュリティを犠牲にして来ます

私よりはるかに賢いが、名前を覚えていない人がかつて言った。そして、すべての意図と目的にとって、それは真実です。署名を使用してセキュリティを向上させたいので、ユーザーにとっては面倒ではありません。署名はユーザーがそれについて考える必要さえなくても自動的に検証されるべきです。

ユーザーに「コマンドfooは必要なことを行います。コマンドbarfooの前に実行する必要があり、気にしないことを行います」とユーザーに伝える場合、実際にbarを実行してからfooを実行するユーザーの数を推測してください。ほぼなし。

代わりに、barを自動的に実行し、署名が有効かどうかを確認してからfooを実行するスクリプトをデプロイします。

1
MechMK1