Protocollo di autenticazione di terze parti

4

Ho un dispositivo hardware (H) , telefono (P) e server web (S) . Vorrei che P sia in grado di inviare comandi a H , ma solo se è autorizzato a farlo. Le autorizzazioni sono memorizzate sul server. Tecnicamente potrei farlo con Kerberos, ma sembra eccessivo. Il protocollo che attualmente ho è il seguente:

  1. P richiede nonce da H (previene l'attacco di replay)
  2. H invia nonce a P
  3. P inoltra nonce, insieme al comando che desidera inviare a H, a S
  4. Se P ha il permesso di eseguire il comando su H, S invia Encrypt (Nonce | Command) al telefono. Questo è crittografato con una chiave che H e S condividono in anticipo. (P si autentica su S con nome utente / password)
  5. P inoltra Criptare (Nonce | Comando) su H.
  6. H decodifica e verifica nonce. Se corretto, esegue il comando.

Questo è sicuro? So che non dovresti creare protocolli tu stesso quindi sono curioso di sapere se questo esiste già e se è usato in altri posti?

    
posta Nimyz 08.05.2015 - 21:24
fonte

2 risposte

1

Sulla base dei tuoi commenti sembra che S stia passando un token di accesso crittografato o firmato a P che passa a H. H può decifrare o verificare che il token sia autentico e utilizzare le informazioni contenute all'interno per determinare che P possa eseguire l'applicazione. Sembra fantastico.

Non sono sicuro che tu abbia bisogno di un nonce qui se tutto ciò che stai cercando di fare è impedire la riproduzione. Potresti semplicemente usare un numero di serie. Accetta solo richieste con un numero di serie superiore a quello più grande che hai visto. Questo rimuoverà una comunicazione di andata e ritorno e ridurrà notevolmente la contabilità. Se H può perdere il numero di serie corrente (es: riavviando), forse dovresti mantenere il nonce.

In generale, quello che stai facendo sembra abbastanza ragionevole. Detto questo, sarebbe meglio se non progettassi e scrivessi la tua sicurezza. Usa SAML. È stato studiato estensivamente ed è molto meno probabile che abbia un difetto di progettazione o di implementazione rispetto a qualsiasi soluzione tu possa trovare.

    
risposta data 08.05.2015 - 23:18
fonte
0
  1. Suppongo che H stia generando nonce con sufficiente casualità ed è almeno 64 bit.

  2. Suppongo che la comunicazione tra P e S sia su TLS autenticato dal server.

    • H ricorda i nonce in sospeso, o solo l'ultimo? Se è superiore a 1, H si aspetta che i comandi vengano ricevuti in ordine e riceverli fuori ordine causerà un comportamento imprevisto? Non hai protezione contro la ricezione di comandi fuori servizio.

    • Stai usando Encrypt (Nonce | Command), piuttosto dovresti provare HMAC (Nonce | Command), poiché sembra che tu voglia integrità e non confidenza. E usare le primitive di crittografia per l'integrità non è una buona idea.

risposta data 10.12.2017 - 22:25
fonte

Leggi altre domande sui tag