Firme digitali

Protocollo che garantisce la autenticità della comunicazione. Sono le funzioni MAC per la crittografia asimmetrica, ovvero ci permettono di garantire l’autenticità dei dati.

Dal momento che la firma digitale e la cifratura asimmetrica sono molto simili, la firma digitale si dice anche una cifratura con chiave segreta.

sign(sk, message) -> signature verify(pk, message, signature) -> {true, false}

con pk è public key, e sk secret key.

La funzione importante è che, dal momento che la chiave di verifica è pubblica, si la verifica dell’autenticità è pubblica (public verifiability).

Garanzia per cui chi firma il messaggio non può negare in futuro che ha firmato il messaggio (non repudiability). Questa garanzia ci da la base per le leggi nel mondo reale. È la pià grande differenza tra MAC, dove la chiave la devono avere tutti quelli che vogliono verificare la firma.

Scambio di chiavi autenticato

Lo scambio di chiavi garantisce confidenzialità, ma non autenticità. In un caso man in the middle, non si potrebbe avere una verifica dell’autenticità. Per questo motivo si utilizza la firma digitale.

Combinando appunto la firma digitale con il protocollo di key exchange, si ottiene un protocollo di scambio di chiavi autenticato.

Le due direzioni sono indipendenti, e quindi si può autenticare anche solo una sola parte.

Bob **deve** conoscere la public key di Alice! Per far arrivare a Bob al chiave pubblica di Alice, si deve utilizzare un altro protocollo, che dipende molto dal livello applicativo (paradigma TOFU, ecc...).

Protocollo

Digital Signature Algorithm, DSA o ECDSA. Si basa sul protocollo Diffie-Hellman. Anche questo protocollo è basato sul logaritmo discreto.

Curve ellittiche nel range SECP224 - SECP256 sono solitamente utilizzate in contesti web.

Alternativa standard a RSA.

Attenzione Le firme digitali, a seconda del protocollo che si usa, possono essere randomizzate o deterministiche. Nelle firme randomizzate, ci possono essere grandi errori, se non è effettivamente random. In questo caso è un grande disastro. Uno standard se non si hanno buoni input random, è RFC6979.

EdDSA

Standard open, basato anch’esso su curve ellittiche. Pensato per essere deterministico. Usato in ssh, tor, pgp, ma non sul web (i certificati non sono firmati con questo tipo di firma).

csec_0205