Re: [Hackmeeting] Gnupg da un punto di vista matematico

Nachricht löschen

Nachricht beantworten
Autor: vecna
Datum:  
To: hackmeeting
Betreff: Re: [Hackmeeting] Gnupg da un punto di vista matematico
dario@??? wrote:
> Ciao a tutti!
> Sto cercando documentazione su gnupg, non la documentazione solita che
> tutti sappiamo a memoria.
> Ma qualcosa che copra il punto di vista matematico, la procedura, le
> formule, l'algoritmo.
>
> Ho cercato google ma appaiono solo pdf da universita', magari da
> facolta' di matematica, che dicono "questo testo non coprira' aspetti
> matematici". Bella facolta' di merda.


avevo fatto esperimenti patchando gpg, e nonostante l'impatto iniziale
difficoltoso, presente ogni volta che metti le mani in progetti già
maturi, mi ero abbastanza raccappezzato sulle operazioni di generazion,
cifratura, decifratura, partendo da questa funzione in poi:

primegen.c

MPI
generate_elg_prime( int mode, unsigned pbits, unsigned qbits,
            MPI g, MPI **ret_factors )


se sei interessato agli aspetti matematici, in generate_elg_prime vedi
come viene scelto il numero primo. ci sono nei commenti alcune
considerazioni matematiche, e tramite le lib Multi Precision Integer
(MPI) vengono manipolati comodamente.

per comprendere a pieno il codice devi vederti quelle e poi, le funzioni
che mi ero seguito al tempo, chiarificatrici sulla vita della chiave,
sono state:

armor.c

static int
radix64_read( armor_filter_context_t *afx, IOBUF a, size_t *retn,
          byte *buf, size_t size )



import.c

static int
import_keys_internal( IOBUF inp, char **fnames, int nnames,
              void *stats_handle, unsigned char **fpr, size_t
             *fpr_len, unsigned int options )



elgamal.c

nella funzione test_keys viene chiamato do_encrypt e do_decrypt in
sequenza, puoi modificarla per fargli stampare tutti i parametri e
seguirti quelle funzioni do_

pubkey.c

int
pubkey_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors )

keygen.c

static int
gen_elg(int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK
     *dek,
    STRING2KEY *s2k, PKT_secret_key **ret_sk, u32 timestamp,
    u32 expireval, int is_subkey)





il codice è l'unica certezza,
buon giovedì