web-dev-qa-db-ja.com

GPG対称暗号化ファイルを検証するにはどうすればよいですか?

対称暗号化で暗号化されたファイルを作成しました。

gpg -c 50GBfile

オリジナルを削除したいのですが。オリジナルを削除する前に、暗号化されたファイルの整合性を確認したいと思います。 (ZipファイルがCRCを使用する方法と同様です)。 gpgは、対称的に暗号化されたファイルの内容を検証する方法を提供しますか?

6
Rucent88

gnupgでの唯一の「検証」操作は署名検証ですこれは基本的に暗号化されたファイルのハッシュを公開鍵で暗号化します(=署名)。

私の意見では、これは、ファイルの暗号化中に出力ビットが破損した場合、ハッシュは破損したファイルに対して計算されることを意味します。すでに破損したファイルに署名したため、そのファイルのsignatureを確認しても、これを発見することはできません。

暗号化されたファイルが破損していないことを確実に検証する唯一の方法は、生成されたファイルを復号化してそのハッシュを元のファイルと比較するという長いプロセスを経ることです。

そしてこれはSeperoが上で提供したものですが、 "検証できます..."の代わりに " のみ検証する方法... "

更新-ポイントを家に帰すには:

数分前、私はまさにそれを行いました。9.8GBのバックアップファイルを5つのrarピースに分割し、各ピースをgnupgによって対称的に暗号化しました。 RARピースを削除する前に、上記で説明したように、暗号化されたピースの整合性を検証しました。5つのうち1つはハッシュテストに合格しませんでした。そのピースを再度復号化しましたが、復号化されたピースのハッシュは元のrarピースと一致しました。

私は悪い復号化されたrar部分を良い復号化されたものとバイナリ比較しました、そしてそれらの2GBファイルの唯一の違いは1バイトでした:C8対48-1ビットフリップ(すなわち11001000対01001000)によって引き起こされます。

話の教訓は、優れたWIN7システムと優れたHDDで、gnupgが復号化で少し反転できる場合、暗号化でもそれを実行できるということです。この整合性検証ステップを二度とスキップすることはありません。

4
Ninveh

ファイルをgpg -cで暗号化した場合、パスフレーズを知らずにファイルの内容を確認する方法はありません。これが対称暗号化のコアプロパティです。とにかくパスフレーズを提供する必要があるので、実際のテストを実行します。ファイルを解凍して、元のファイルと比較します。 Linuxまたはその他のUNIXバリアントの場合:

gpg -d <50GBfile.gpg | cmp - 50GBfile

整合性をさらに保証したい場合は、ファイルを暗号化するときに-sオプションを追加することにより、秘密鍵を使用してファイルに署名できます。

gpg -c -s 50GBfile

次に、gpg --verify 50GBfile.gpgを使用して署名を確認できます。これは、ファイルが署名したファイルの1つであることを保証するだけであり、間違ったファイルに署名したという間違いから保護するものではないことに注意してください。

非対称暗号化(受信者の公開鍵—自分の公開鍵)を使用した場合、ファイルに目的のコンテンツが含まれていることを確認するには、受信者の秘密鍵が必要になります。複数の受信者がいる場合は、どの受信者の秘密鍵でもかまいません。通常、GPG構成ファイルにencrypt-toまたはhidden-encrypt-toを付けて、暗号化されたすべてのメッセージの受信者として独自のキーを配置します。

Md5sumを抽出して元のサンプルと比較することで確認できます。

$ gpg -d 50GBfile | md5sum
gpg: AES256 encrypted data
gpg: gpg-agent is not available in this session
gpg: encrypted with 1 passphrase
1df1aaffb20c5255e282d6f584489993  -
$ md5sum 50GBfile
1df1aaffb20c5255e282d6f584489993  50GBfile
1
Sepero

整合性を検証する場合は、元のファイルもsignする必要があります。

gpg --encrypt --signfile

最後に、ファイルを復号化することにより、(署名に基づいて)整合性を検証できます(整合性は自動的にチェックされます)

gpg --decryptfile.asc

0
mateuszk87