L'hashing di un file considera anche la sua firma digitale?

0

Ho un eseguibile (utilizzando Windows signtool ) eseguibile che è stato sottoposto a hash da SHA1 algoritmo e crittografato usando RSA. Ora mi piace verificare l'eseguibile per evitare vulnerabilità di sicurezza. Per questo ho un'idea di ottenere l'algoritmo di hashing dalla firma digitale e di eseguire nuovamente l'hashing firmato e confrontarlo con l'hash decrittografato utilizzando la chiave pubblica trovata nel certificato. Entrambi gli hash sarebbero uguali, poiché:

  1. Hash decrittografato da nella firma: Hashed solo il file binario
  2. Hashing: hash il file binario con firma digitale.

Vorrei anche chiarire che, possiamo recuperare l'hash crittografato dalla firma digitale. Se sì, come?

    
posta Kethiri Sundar 10.10.2018 - 09:20
fonte

1 risposta

1

Aggiornamento
Ho appena capito cosa stai realmente chiedendo. Lascerò la vecchia risposta di seguito, nel caso qualcuno ne avesse bisogno.

La risposta:
L'applicazione signtool consente di specificare un'opzione denominata "verifica". Non è necessario accedere al valore hash crittografato, lo verificherà per te. Probabilmente non è possibile farlo manualmente se preferisci. Forse quando utilizzi la modalità dettagliata al momento della firma ti mostrerà il valore hash, nel caso in cui tu voglia veramente vederlo. Firmare solo il binario suona come una buona idea se non ci fossero file di metadati / configurazione / nulla che non si compili. Non ho usato Windows per un po ', ma forse puoi usare makecat al posto di signtool, penso che dovrebbe consentire dimensioni di app più grandi. Spero che questo aiuti.

La vecchia risposta, che spiega le cose tecniche:

Mi sembra che tu stia cercando di capire come funzionano le firme digitali e come puoi implementare il meccanismo. Se ho torto, riformulare la domanda e provare a spiegare passo per passo cosa si sta facendo, come per uno pseudo-codice dell'algoritmo. Proverò a spiegare quello che penso tu voglia sapere.
Quando firmi un documento: puoi leggere il documento (quindi non è crittografato), devi solo assicurarti che sia valido, quindi cerca la sua firma e timbro. La firma e il timbro indicano se il documento è valido / verificato. Allo stesso modo, quando usi le firme digitali, invii sempre 2 pezzi di dati: l'eseguibile nel tuo caso (non con hash, non criptato, puoi "leggerlo") più la firma. Quindi hai l'eseguibile, non hai la firma.
Per creare la firma:

  1. hash l'eseguibile. L'eseguibile è in genere di grandi dimensioni, quindi richiederebbe molto tempo per crittografarlo. Fortunatamente, se si utilizza un buon algoritmo di hash, esiste una probabilità infinitesimale che 2 file diano la stessa stringa hash. Quindi puoi essere abbastanza sicuro che l'hash rappresenta il tuo eseguibile (anche se è solo una stringa priva di significato) e usarlo invece di usare l'intero eseguibile ulteriormente in questo processo.
  2. genera una coppia di chiavi private-pubbliche. Il certificato conterrà la chiave pubblica e la chiave privata deve essere tenuta segreta. La cosa bella qui è che puoi sempre criptare con qualsiasi chiave pubblica o chiave privata e decifrare con l'altra. Mai in modo diverso o con una chiave diversa. Quindi, se si è sicuri che la chiave pubblica appartiene a qualcuno (il certificato è attendibile), quindi se crittografano qualcosa con la chiave privata, è possibile decrittografarla utilizzando quella pubblica. Se qualcun altro ha crittografato i dati, perché la chiave privata è segreta e non hanno accesso, qualsiasi chiave generata da loro, non sarà in grado di decrittografarla.
  3. crittografare l'hash con la chiave privata generata al passaggio 2. Il valore ottenuto qui è la tua firma.

Ora che hai sia il file che la firma, mandali dall'altra parte o usali come vuoi. Una volta ricevute le informazioni dall'altra parte, come verificano che sia valido? Hanno il documento, vogliono solo essere sicuri che non sia stato cambiato da qualcun altro. Hanno anche la firma. Quindi seguono i seguenti passi:

  1. decripta il valore della firma usando la chiave pubblica (il certificato). Se non possono decifrare il valore, qualcuno ha falsificato la firma (hanno cambiato quel valore con un altro). Se possono decifrarlo, allora sanno che la firma è quella valida. Dopo la decrittografia, ottengono il valore hash dell'eseguibile (passaggio 1 sopra, quando si crea la firma). Sanno che questo valore di hash identifica l'eseguibile valido. Questa è la fonte della verità.
  2. ha cancellato il documento ricevuto (l'eseguibile) con lo stesso algoritmo utilizzato durante la creazione delle firme. Quando si utilizza un algoritmo di hashing valido, indipendentemente dal numero di volte in cui si esegue lo hash dello stesso documento, il valore hash ottenuto sarà sempre lo stesso. Quindi, se il documento non è stato modificato, il valore dell'hash sarà identico a quello ottenuto al passaggio 1. Se non sono uguali, significa che ora quando hai cancellato il documento ricevuto, il valore dell'hash era diverso, quindi il documento è stato modificato / sostituito da qualcun altro. Quindi non puoi fidarti di esso.
  3. verifica se i 2 hash sono uguali (se non lo sono, come spiegato al punto 2, il documento non è quello vero, è stato modificato da qualcun altro). Se sono uguali, puoi fidarti sia del documento che della firma.

Questa procedura dovrebbe anche rispondere a come i valori hash saranno uguali e in che modo ricevere il valore hash dal valore della firma.
Un'ultima cosa, per favore usa algoritmi sicuri, come SHA-256 invece di SHA1 e alla fine (non proprio necessariamente) EC invece di RSA.

    
risposta data 10.10.2018 - 12:36
fonte

Leggi altre domande sui tag