Comunicazione bidirezionale crittografata tra due sistemi

0

Ho due peer di rete che hanno bisogno di utilizzare un protocollo applicativo personalizzato e criptato per comunicare tra loro. I messaggi scambiati sono piuttosto piccoli, in genere meno di un paio di centinaia di byte e lo scambio di chiavi viene eseguito di persona. È quindi ragionevole fare le seguenti ipotesi:

  1. Non è necessaria alcuna autorità di certificazione, poiché entrambe le parti si conoscono e concordano sull'uso di una particolare coppia di chiavi.

  2. Poiché i messaggi scambiati sono piccoli e la quantità di traffico molto piccola, la crittografia e la decifrazione dei messaggi non provocano picchi misurabili nel carico della CPU o nel ritardo di rete, pertanto, non è necessario utilizzare una sessione simmetrica chiave (tutto il traffico è crittografato utilizzando la coppia di chiavi RSA 4096).

  3. Un timestamp, HW ID e HMAC vengono aggiunti a ciascun messaggio per verificare sia l'integrità dei dati che l'autenticazione del messaggio.

  4. Per questo motivo, TLS a pieno titolo non è necessario, RSA è sufficiente.

Mi manca qualcosa? Questo meccanismo sarebbe immune al MITM e agli attacchi di replay, oltre che al forcing bruto?

    
posta Ulrik 02.03.2017 - 01:08
fonte

1 risposta

6

all traffic is encrypted using RSA 4096 key pair

Quindi non ti piacciono le prestazioni?

HMAC

Aspetta, HMAC - che richiede una chiave condivisa. Se hai una chiave di autenticazione condivisa, perché stai usando RSA? Utilizza anche una chiave condivisa per la riservatezza.

A time stamp

Cosa succede se gli orologi divergono?

Because of this, full-fledged TLS is not needed, RSA is sufficient.

L'hai fatto all'indietro. Cosa, nel tuo scenario, richiede l'uso di un protocollo non standard? Un protocollo non standard significa:

  • Altri bug perché non ha avuto il maggior numero di recensioni degli esperti.
  • Altri bug perché dovevi scrivere codice personalizzato invece di usare librerie ben testate e mantenute.

Nota che non ho rivisto il tuo protocollo, 1. perché non ci hai detto quale sia il tuo protocollo, e 2. perché rivedere un protocollo è piuttosto più di quanto ci si aspetti in una risposta Stack Exchange. Ma spendendo solo un minuto con le cose che hai citato alza diverse bandiere rosso-arancio.

Utilizza TLS con una chiave precondivisa a meno che tu non abbia una buona ragione per fare diversamente. Un buon motivo per non utilizzare TLS è se si desidera scambiare singoli messaggi piuttosto che mantenere una sessione. In questo caso, i round trip necessari per TLS sono uno spreco e dovresti probabilmente utilizzare DTLS .

    
risposta data 02.03.2017 - 01:36
fonte

Leggi altre domande sui tag