タイトルにあるように、これらの4バイトには意味がありますか(キーのビットネスに応じて笑顔が変化するようです)。
以下の2つのファイルは異なるキーで暗号化されていますが、同じキー内では4バイトは常に同じです。
これらの4バイトが常に同じである場合、PGP/GPGに組み込みの方法はありますか?送信中にこれらのバイトを取り除いて宛先で再作成する以外に、攻撃者がどのファイルを取得/傍受したかを攻撃者が知るのを防ぎますか?
はい、最初のバイトがこれらの記号として表示されるのは偶然です。これらはOpenPGPメッセージフォーマット仕様( RFC 488 )の一部であり、パケットのプロパティによって異なります。
それらのバイトのみを含むファイルを作成して、GPGメッセージとして読み取ってみましょう。
$エコー "\ x85\x02\x0c\x03"> foo.gpg && gpg --list-packets foo.gpg #off = 0 ctb =85 tag = 1 hlen = 3 plen =524 :pubkey encパケット: バージョン3、アルゴ255、キーID 0AFFFFFFFFFFFFFF サポートされていないアルゴリズム255
最初のバイト(0x85 = 0b10000101
)は、パケットタイプを説明する暗号タイプバイト(CTB)です。次のように分割できます。1
:CTBインジケータービット0
:古いパケット形式( RFC 1991 を参照)0001
:公開鍵で暗号化されたパケット01
:パケット長フィールドは2バイト長です
2番目と3番目のバイトは、パケット長(0x020c = 524
)。
0x03
)は、バージョン3パケット形式であることを意味します。ご覧のとおり、これらのバイトは意味があり、情報を失うことなく削除できるマジックナンバー定数ではありません。それらを切り離すと、GPGパケットが破損しているため、再構築するために推測が必要になります。
バイトはスマイリーとハートとして表示されます。これは、(おそらくDOSの)端末が印刷不可能な制御文字を表示する方法だからです。 コードページ437 から始まる文字セットでは、印刷可能なASCII範囲外の下位バイトは、伝統的にアイコンとして表されます。これが元のCP437
IBM PCの場合:
一般的な原則として、適切に設計されたバイナリファイル形式¹では、最初の数バイトが形式を識別する マジックナンバー になります。 ELF実行可能ファイルの最初の4バイトは常に7f 45 4c 46、PNGファイルの最初の8バイトは常に89 50 4e 47 0d 0a 1a 0aのようになります。適切に設計されたencryptedファイル形式は常に、マジックナンバーに従い、暗号化アルゴリズム、暗号化されたデータの長さなどを明らかにする暗号化されていない「ヘッダー」が続きます。
Kerckhoffsの原理 により、これは通常、セキュリティの脆弱性とは見なされません。これは、暗号システムが安全である必要があることを示しています[場合でも=攻撃者はすべてのことを知っていますファイルヘッダーはそれらを通知できます(アルゴリズムなど)。
可能ファイル形式またはプロトコルを設計することです。そのすべてのバイトは、解読キーがわかっている場合を除いて、ランダム性と区別がつきませんが、驚くほど困難です(知っていました 暗号化されたデータの予想される長さを暗号化すると、導入脆弱性 ?)になる可能性があり、実際には何も得られません。 cat /dev/random
の出力と完全に区別できないファイルは、明らかにGPGで暗号化されたファイルとして、秘密警察にちょうど不審になります。たぶんmoreファイルを暗号化するのにあらゆる種類の無害な理由があるので、疑わしいです。
攻撃者が暗号化を使用して誰かと通信していることだけを心配している場合は、秘密情報をordinary-looking内に隠す steganography が必要です。 、暗号化されていないファイル。ステガノグラフィの最新技術は、暗号の最新技術ほど高度ではないことに注意してください。最後に確認したところ、既知のアプローチはすべて、断固とした敵によって破られました。 (秘密警察の第一印象が「ああ、これは休暇の写真がいっぱいのメモリカードです」である場合、彼らはあなたを疑う理由がすでにない限り、それ以上深く掘り下げることはないかもしれません。)
G GPGファイル形式が適切に設計されているかどうかについて、私には意見がありません。