Quali sono alcuni comandi di Linux per generare e verificare le firme digitali?

1

Sto tentando un flusso di lavoro per esemplificare il processo di firma digitale utilizzando la crittografia asimmetrica.

Se ho capito bene, la chiave pubblica e la chiave privata in una coppia di chiavi crittografiche asimmetriche sono funzioni inverse. Ergo, se la chiave privata è la funzione F, la chiave pubblica è G = F ^ (- 1), e F (G (x)) = x.

Se ho capito bene, una e-mail con firma digitale è composta da: a) un messaggio in chiaro, chiamiamolo M; b) un testo cifrato, chiamiamolo C.

Supponiamo che H sia una funzione di hash pubblicamente nota, come ad esempio sha1.

Quando invii un'email con firma digitale, desidero innanzitutto cancellare il messaggio in chiaro originale: H (M) = M '. Quindi vorrei scramble-up il valore di hash utilizzando la mia chiave privata: F (M ') = C.

Ora quando invio l'e-mail includo sia M che C. Se l'integrità dell'email firmata digitalmente non è stata compromessa, il destinatario troverà che G (C) = H (M).

La mia domanda non riguarda la teoria sottostante, perché penso di averlo capito abbastanza bene. (Se ciò che ho descritto sopra non è corretto, per favore dimmelo.) Infatti, la mia domanda riguarda l'implementazione e la verifica manuale del flusso di lavoro. Quali programmi \ comandi sono disponibili per implementare ogni passo che è stato descritto sopra? Ho soddisfatto il seguente comando alla riga di comando linux per richiamare la funzione di hash sha1:

echo -n "hello world" | sha1sum | awk '{print $1}'

Ho bisogno di un comando per trasformare del testo usando la funzione che è la mia chiave privata. E ho bisogno di un comando per trasformare del testo usando la funzione che è la mia chiave pubblica. Preferisco qualcosa che mi consenta di verificare manualmente ogni fase del processo.

Modifica So che uno strumento predefinito come gpg è un modo più pratico per fare le firme digitali in un caso d'uso reale. Il mio obiettivo è avere un flusso di lavoro alternativo che generi gli stessi risultati di gpg. È importante essere in grado di convalidare a croce il processo. Inoltre, vorrei essere in grado di insegnare qualche ipotetico sottotipo sulle firme digitali, e per farlo voglio essere in grado di suddividere il processo in una serie di passi ben compresi. E poiché lo scopo principale è quello di fare una validazione incrociata, e non di autenticare realmente \ non ripudiare alcune importanti comunicazioni, quindi le debolezze intrinseche di questo approccio non mi riguardano.

    
posta EricVonB 28.10.2015 - 19:40
fonte

2 risposte

-1

È possibile utilizzare openssl dalla riga di comando per eseguire la crittografia a chiave pubblica (e la decrittografia). Vedi link per maggiori informazioni e vedi link per un esempio.

    
risposta data 29.10.2015 - 09:31
fonte
2

Probabilmente non sarai felice di questa risposta, ma - come sottolineato nei commenti alla tua domanda - è una pessima idea reinventare la ruota quando ci sono già librerie e comandi disponibili a tale scopo, ad es. OpenSSL, GnuPG, ecc.

I rischi legati alla realizzazione della tua implementazione crittografica sono molteplici:

  • Leaking plaintext
  • Codice soggetto a qualsiasi tipo di attacco, ad es. buffer overflow
  • Cattive prestazioni causate dal codice non ottimizzato
  • Sicurezza ridotta (poiché i calcoli si basano su più comandi Linux scritti da terze parti)

Se vuoi davvero farlo devi codificare in un linguaggio di basso livello come C e non usare i comandi di Linux, ma comunque, è una cattiva idea a causa dei punti sopra. Scrivere codice che funziona è difficile; scrivere codice crittografico che è strong e privo di bug è estremamente difficile e dovrebbe essere lasciato agli esperti.

    
risposta data 29.10.2015 - 09:19
fonte