İlgili özel anahtarla yapılan bir imzayı doğrulamak için ortak anahtara sahip olmalısınız, ancak anahtarı imzalamanız veya yerel olarak imzalamanız gerekmez. Bu durumda, GPG'den anahtarın güvenilmeyen olduğuna dair bir uyarı alırsınız.
İşte kendi anahtarım tarafından imzalanmış bir dosyayla ancak anahtarın içe aktarılmadığı bir sistemde yaptığım bir test:
[ben@seditious tmp]$ gpg -v --verify thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: Can't check signature: public key not found
[ben@seditious tmp]$ gpg -v --status-fd 1 --verify thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
[GNUPG:] ERRSIG 7FF2D37135C7553C 1 10 00 1380142299 9
[GNUPG:] NO_PUBKEY 7FF2D37135C7553C
gpg: Can't check signature: public key not found
[ben@seditious tmp]$
Ne yazık ki Harry'nin önerisi işe yaramıyor, biraz daha fazla bilgi çıkartıyor, ancak kullanım için yeterli değil.
Görebileceğiniz gibi, elde edilen en fazla bilgi, imzayı yapmak için kullanılan alt anahtarın anahtar kimliği ve imzanın yapıldığı zamandır. Bu, pgpdump (veya --list-packets) için mevcut olan verilerle eşleşir:
bash-3.2$ pgpdump thing.txt.gpg
Old: Compressed Data Packet(tag 8)
Comp alg - ZLIB <RFC1950>(comp 2)
Old: One-Pass Signature Packet(tag 4)(13 bytes)
New version(3)
Sig type - Signature of a binary document(0x00).
Hash alg - SHA512(hash 10)
Pub alg - RSA Encrypt or Sign(pub 1)
Key ID - 0x7FF2D37135C7553C
Next packet - other than one pass signature
Old: Literal Data Packet(tag 11)(24 bytes)
Format - binary
Filename - thing.txt
File modified time - Thu Sep 26 06:51:39 EST 2013
Literal - ...
Old: Signature Packet(tag 2)(412 bytes)
Ver 4 - new
Sig type - Signature of a binary document(0x00).
Pub alg - RSA Encrypt or Sign(pub 1)
Hash alg - SHA512(hash 10)
Hashed Sub: signature creation time(sub 2)(4 bytes)
Time - Thu Sep 26 06:51:39 EST 2013
Sub: issuer key ID(sub 16)(8 bytes)
Key ID - 0x7FF2D37135C7553C
Hash left 2 bytes - f0 97
RSA m^d mod n(3066 bits) - ...
-> PKCS-1
bash-3.2$
Gördüğünüz gibi, hash algoritması sağlar, anahtar türünün ayrıntıları (imzalama anahtarım 3072 bitlik bir RSA alt anahtarı ve alt anahtarın anahtar kimliğidir, ancak ana anahtarı tanımlayacak hiçbir şey yoktur. Açık anahtar olduğunda ve imzayı doğruladığınızda
Sonra genel anahtarımı bu sisteme aktardım ve tekrar denedim:
[ben@seditious tmp]$ gpg -v --verify thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: using PGP trust model
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: DB47 24E6 FA42 86C9 2B4E 55C4 321E 4E23 7359 0E5D
Subkey fingerprint: B7F0 FE75 9387 430D D0C5 8BDB 7FF2 D371 35C7 553C
gpg: binary signature, digest algorithm SHA512
[ben@seditious tmp]$
Artık anahtarı tanımlayıp birincil anahtarla eşleştirebiliyor. Bununla birlikte, bu gibi uyarıların niteliğini azaltmak mümkündür:
[ben@seditious tmp]$ gpg -v --verify --trust-model always thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: Using untrusted key!
gpg: binary signature, digest algorithm SHA512
[ben@seditious tmp]$
Hala güvenilmeyen bir anahtar olduğuna dair bir uyarı var, ancak büyük ölçüde değil ve ayrıntıların kaldırılması yalnızca bunu azaltıyor:
[ben@seditious tmp]$ gpg --verify --trust-model always thing.txt.gpg
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: Using untrusted key!
[ben@seditious tmp]$
Doğrulama aşaması için ortak anahtar gereklidir, çünkü imzalayan tarafından oluşturulan verileri özel anahtarlarıyla eşleştirmek için kullanılır. Basit bir ifadeyle, genel anahtara şifrelenmiş verilerini işlemek için özel anahtara ihtiyaç duyulan şifrelemenin tamamlayıcısı olarak düşünülebilir.
Not: Bu örnekte UID'leri biraz değiştirdim, ancak bu anahtarı alan herkes gerçekte ne olduklarını görecek. Aksi halde çıktı, düz bir kopyala yapıştırtır.
DÜZENLEME: Eğer ASCII olmayan bir zırhlı formatta (yani .asc dosyası yerine .gpg dosyası) varsa, genel anahtar dosyasını doğrudan bir anahtarlık gibi çağırabilirsiniz. Yine de, ortak anahtara ihtiyacınız var. Bunu yapmak için komut bu gibidir:
[ben@seditious ~]$ gpg -v --no-default-keyring --keyring /tmp/mykey.gpg --verify /tmp/thing.txt.gpg
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: using PGP trust model
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg: aka "Ben M (backup email address) <benm@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: aka "Ben M <ben.m@REDACTED>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: DB47 24E6 FA42 86C9 2B4E 55C4 321E 4E23 7359 0E5D
Subkey fingerprint: B7F0 FE75 9387 430D D0C5 8BDB 7FF2 D371 35C7 553C
gpg: binary signature, digest algorithm SHA512
[ben@seditious ~]$
gpg --status-fd 1 --verify (thefile)
çıktısında ilk dizgede imzayı oluşturan tuşun parmak izini verip vermediğini görmeye çalışın .