RFC 4880 descrive il pacchetto firma versione 4, etichetta 2, comeOpenPGP Firma Packet hash dati
- One-octet signature type.
- One-octet public-key algorithm.
- One-octet hash algorithm.
- Two-octet scalar octet count for following hashed subpacket data.
Note that this is the length in octets of all of the hashed
subpackets; a pointer incremented by this number will skip over
the hashed subpackets.
- Hashed subpacket data set (zero or more subpackets).
- Two-octet scalar octet count for the following unhashed subpacket
data. Note that this is the length in octets of all of the
unhashed subpackets; a pointer incremented by this number will
skip over the unhashed subpackets.
- Unhashed subpacket data set (zero or more subpackets).
- Two-octet field holding the left 16 bits of the signed hash
value.
- One or more multiprecision integers comprising the signature.
e considera che il penultima riga significa semplicemente prendere la stringa della subpacket hash e hash con l'algoritmo hash e prende i suoi primi 2 byte. tuttavia, non importa quello che faccio, non riesco a capirlo.
ho generato questo falso chiave molto tempo fa
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG v1.39
mQGiBE5B0h8RBAD533Z5bK1IpBx02QyQL0QoJE4uFRIMGDiwXuwmZzVl+R7Vlurd
GRLsCCbE6vOOh7XQVZGzLEBy9WNzZ9m+EbCfSVAYkjS6FhLws6hG6irrnS+b3JBf
gFJ8vNGF9Z7bhx+7y7NBk0IMyWkGnUkcnav73t5FQUI2faEBN4c/yAGJZwCgjcB7
3akWk9XVWvTCsiMXxpyvkukEALXsvB6cOoFEtQq9cQHjP63fBlvD94dhhMiM0cH6
hW9JotxdK+cxFGG9ZIWgoN2PWbMJka/H4W5EL6tS+YiNAR7I1Ozkt6X16GjnQUzZ
MlSpleK+KiKVN2anRaPEoOIinHrE3ZXd6QlJ/4+OJn4IVWmSEaJpFf4QNgvEu4rh
xinyBAD2RNzREOA+wpnFZ4lDt9NZXmXdxQME/l0J9XcvWhpGsxA/MATQKImy7N49
7GT/M38F+TrpBobag1O3buE99fOLyws4Tbc+sZMdHxoiGZDAIRNQS2rv475E6ktj
7vd5CYvOkA6+8sX1+hPcNlkHtHB1OFkJRsYp6k0zkyC9adjBM7QTYWJjIDxtYWtj
bUBhYWEuY29tPohGBBMRAgAGBQJOQdIfAAoJEDBSJUXPd92GRSQAoItbtbToOg7a
/hcg2sA/aBEQNwuxAKCGR69vmSoCWoBP5waPk0UsjM3BSbjMBE5B0h8QAgCUlP7A
lfO4XuKGVCs4NvyBpd0KA0m0wjndOHRNSIz44x24vLfTO0GrueWjPMqRRLHO8zLJ
S/BXO/BHo6ypjN87Af0VPV1hcq20MEW2iujh3hBwthNwBWhtKdPXOndJGZaB7lsh
LJuWv9z6WyDNXj/SBEiV1gnPm0ELeg8Syhy5pCjMAf9QHehP2eCFqfEwTAnaOlA6
CU+rYHKPZaI9NUwCA7qD2d93/l08/+ZtFvejZW1RWrJ8qfLDRtlPgRzigoF/CXbR
iEYEGBECAAYFAk5B0h8ACgkQMFIlRc933YZRrACfUnWTjHHN+QsEEoJrwRvFmvzj
bR4An24pTpeeN+I6R59O/sdmYsAhjULX
=sStS
-----END PGP PUBLIC KEY BLOCK-----
quello che penso im dovrebbe fare:
sha1("\x05\x02\x4e\x41\xd2\x1f") = "52f07613cfd61c80d2343566a8f3f487a0975b80"
\x05 - length of subpacket
\x02 - subpacket type
\x4e\x41\d2\x1f - creation time
Da pgpdump.net, vedo che la sinistra 2 byte del hash (SHA 1) il valore è 45 24
per il primo pacchetto di firma e 51 ac
per il secondo. sto ottenendo 52 f0
per entrambi. ovviamente, non includo alcune informazioni, ma che cos'è? i pacchetti secondari hash sono identici e tutti i dati prima dei dati hash sono uguali, tranne che sono diversi tipi di pacchetti di firma (0x13/0x18). non sono stato in grado di ottenere uno dei valori hash corretti anche quando aggiungo/prendo caratteri dal pacchetto di dati. la generazione di key im è esattamente la stessa della chiave qui mostrata tranne che per i valori hash.
quali sono i dati che dovrei essere hashing ??
edit: se trovato questo un po 'più avanti:
The concatenation of the data being signed and the signature data
from the version number through the hashed subpacket data (inclusive)
is hashed. The resulting hash value is what is signed. The left 16
bits of the hash are included in the Signature packet to provide a
quick test to reject some invalid signatures.
Ma qual è il dati che vengono firmati? tutti i pacchetti prima della firma? solo il pacchetto prima del pacchetto di firma corrente?
l'esempio chiave in alto è composto da packet 6 + packet 13 + packet 2 + packet 14 + packet 2
. Ho provato tutte le combinazioni possibili di packet 6
, packet 13
, e packet 2
(dal numero di versione di hash dei dati compreso), ma ancora non riesce a trovare la stringa che hash con i valori corretti