PDA

View Full Version : hash e firme digitali: mi spiegate una cosa grazie


Rigo007
01-10-2008, 10:35
Mi hanno appena affibbiato un progetto in cui devo calcolare l'hash-function di un frame (utilizzando SHA-256) e poi il message-digest ottenuto dovrebbe essere 'firmato' attraverso un algoritmo di crittografia asimmetrica (RSA).

Ora, in teoria, non dovrei inviare nulla di extra nel frame, o sbaglio?!?! Oppure devo inviare anche la chiave pubblica e il messaggio digest al destinario?

Per semplicità, almeno in un primo step, avrei pensato di aver già la chiave pubblica in un file nel destinario (senza dover chiedere/inviare certificati o cose simili): cosi' almeno posso verificare che riesco a decriptare (utilizzando la mia chiave privata sul destinatario) il messaggio e ad 'un-hasharlo' per vedere se non è stato modificato e, se proviene dal giusto mittente.

Grazie

Ed_Bunker
01-10-2008, 10:42
Non ho capito bene cosa tu voglia sapere di preciso.
Generalmente, cmq., cio' che si fa dovrebbe essere quello di calcolare il digest tramite una funzione hash calcolata sul messaggio da spedire e quindi cifrare messaggio e digest tramite la chiave privata.
Il messaggio sara' quindi decifrato dal destinatario tramite la chiave pubblica.
Calcolera' quindi anch'egli l'hash sul messaggio e confrontera' il digest ottenuto con quello inviatogli per poter cosi' sapere se il messaggio e' effettivamente integro.

Rigo007
01-10-2008, 11:44
Generalmente, cmq., cio' che si fa dovrebbe essere quello di calcolare il digest tramite una funzione hash calcolata sul messaggio da spedire e quindi cifrare messaggio e digest tramite la chiave privata.

Quindi se ho a disposizione sul destinatario la stessa funzione di hash e la chiave pubblica non serve che invii nient'altro oltre ai campi del mio frame, o sbaglio?

IceCoder
01-10-2008, 11:56
a dire il vero è la chiave privata che serve a decriptare il file, la chiave pubblica la usi tu per criptarlo.

il destinatario dovrà ricevere in qualche modo la chiave privata (esempio stupido: tramite dischetto) e poi il file che avrai criptato per mezzo della chiave pubblica e di quella privata.

2 chiavi in criptazione, 1 in decriptazione, per questo si chiama asimmetrica.

Rigo007
01-10-2008, 14:53
Quindi se ho a disposizione sul destinatario la stessa funzione di hash e la chiave pubblica non serve che invii nient'altro oltre ai campi del mio frame, o sbaglio?

Putroppo mi sbagliavo.
Ho scoperto che devo inserire anche l'hash criptato nel frame che devo trasmettere, usando delle particolare estensioni.
In questo modo, dopo averlo descriptato e dopo aver calcolato l'hash, il destinatario puo' verificare che il frame non sia 'corrotto' facendo semplicemente un confronto.

Big Bamboo
01-10-2008, 15:36
2 chiavi in criptazione, 1 in decriptazione, per questo si chiama asimmetrica.
:confused:

Con un esempio ti sarà più chiaro perché si dice asimmetrica: tu sei l'utente A e vuoi inviare un messaggio a B in modo che solo lui possa leggerlo.

L'utente A usa la chiave pubblica di B per criptare il messaggio e poi glielo spedisce. A questo punto l'utente B usa la sua chiave privata per decifrare il messaggio (la chiave privata deve rimanere tale, cioè non va data a nessuno, ne tanto meno spedita)
Il sistema si dice asimmetrico perché le due chiavi benché diverse si complementano l'un l'altra, cioè una cosa criptata con una viene decifrata con l'altra e viceversa.

inoltre visto che l'operazione è molto onerosa, di solito il messaggio vero e proprio è criptato utilizzando un algoritmo simmetrico, e la shared key viene inviata dal mittente al destinatario utilizzando il sistema asimmetrico.
Se poi si vuole parlare di integrità, autenticità, segretezza per ognuna di queste proprietà si agisce con tecniche diverse.

IceCoder
01-10-2008, 15:42
:confused:

Con un esempio ti sarà più chiaro perché si dice asimmetrica: tu sei l'utente A e vuoi inviare un messaggio a B in modo che solo lui possa leggerlo.

L'utente A usa la chiave pubblica di B per criptare il messaggio e poi glielo spedisce. A questo punto l'utente B usa la sua chiave privata per decifrare il messaggio (la chiave privata deve rimanere tale, cioè non va data a nessuno, ne tanto meno spedita)
Il sistema si dice asimmetrico perché le due chiavi benché diverse si complementano l'un l'altra, cioè una cosa criptata con una viene decifrata con l'altra e viceversa.

inoltre visto che l'operazione è molto onerosa, di solito il messaggio vero e proprio è criptato utilizzando un algoritmo simmetrico, e la shared key viene inviata dal mittente al destinatario utilizzando il sistema asimmetrico.
Se poi si vuole parlare di integrità, autenticità, segretezza per ognuna di queste proprietà si agisce con tecniche diverse.

uhm.. si ho fatto qualche ricerca a mi sa di aver confuso un po' le cose:sofico:

Rigo007
01-10-2008, 18:53
Se poi si vuole parlare di integrità, autenticità, segretezza per ognuna di queste proprietà si agisce con tecniche diverse.

Già, infatti sto implementando una RTX application e non mi interessa se qualcuno riesce a leggere il mio messaggio.
Mi interessa verificare la sorgente del messaggio e analizzare le performance.

Big Bamboo
02-10-2008, 07:30
allora basta un digest criptato con la chiave privata del mittente, il destinatario per verificare l'integrità del messaggio e la sua autenticità eseguirà a sua volta il digest del messaggio. A questo punto lo confronterà con quello ricevuto dopo averlo decifrato con la chiave pubblica (certificata dall'authority di turno) del mittente.

Rigo007
02-10-2008, 08:38
allora basta un digest criptato con la chiave privata del mittente, il destinatario per verificare l'integrità del messaggio e la sua autenticità eseguirà a sua volta il digest del messaggio. A questo punto lo confronterà con quello ricevuto dopo averlo decifrato con la chiave pubblica (certificata dall'authority di turno) del mittente.

era quello che intendevo nel mio post precedente :)

Il frame presenta un reserved tag in cui è possibile indicare in numero di ottetti presenti nell'area estensioni.
Il formato delle estensioni è il seguente:

Extension::={
[0] IMPLICIT SEQUENCE {
[1] ...
[2] ...
[3] IMPLICIT DigestCifrato OPTIONAL
...
}
}

codificate secondo una sintassi BER (basic encoding rules).
Qualcuno sa come funziona la cosa a livello pratico? Nel senso di come effettivamente inserisco il digest cifrato nel frame? O puo' indicarmi una guida, un libro o un tutorial?
Io sto programmando in VS C++.

Grazie

Big Bamboo
02-10-2008, 15:22
io mi sono fermato alla teoria :D