I problemi di crittografia JavaScript possono essere mitigati?

1

All'inizio di quest'anno, mi è stato chiesto di valutare l'utilizzo di JavaScript per crittografare le informazioni sensibili nel browser dell'utente prima di inviarlo al nostro server. Mentre la mia prima risposta è stata "chiedi a un esperto", il mio capo è stato irremovibile, quindi sono andato avanti e ho ricercato le opinioni degli esperti sull'argomento nel modo migliore possibile. Sulla base di questa ricerca sono tornato da lui con un clamoroso "nessun esperto pensa che sia una buona idea" ed è stato in grado di convincerlo, ma non sono stato in grado di rispondere in modo specifico ad alcune delle sue confidenze per RAGIONI è stata una cattiva idea. Nello specifico, i motivi principali che ho trovato per la crittografia JavaScript in-browser sono i seguenti:

  • Basta usare TLS in primo luogo, è sicuro al 100% di essere migliore
  • JavaScript non offre PRNG crittograficamente sicuro
  • Ogni utente malintenzionato di Man-In-The-Middle dovrebbe semplicemente modificare il codice di crittografia, rendendolo inutilizzabile

Tuttavia, il caso d'uso specifico che stavo indagando mitigava quelli:

  • Stavamo già progettando di applicare TLS, con la parte JavaScript destinata esclusivamente a coprire le future vulnerabilità TLS
  • Generheremmo una coppia di chiavi RSA altrove e invieremo la chiave pubblica con il codice di crittografia, piuttosto che richiedere al client di generare o inviare le chiavi del proprio
  • Sebbene non protegga da un utente malintenzionato che potrebbe modificare il nostro javascript, potremmo comunque proteggere da vulnerabilità che consentono solo i messaggi di LETTURA

Non sono stato in grado di trovare una vera risposta all'ultimo argomento in particolare, e potevo solo ricorrere a "un consenso schiacciante". Posso pensare ad alcuni argomenti POSSIBILI, ma non sono stato in grado di supportarli definitivamente:

  • La crittografia all'interno di TLS non aggiunge alcun valore al primo posto
  • Le vulnerabilità di sola lettura in TLS non sono realistiche, qualsiasi crack potrebbe anche consentire modifiche anche
  • Anche senza modificare il codice di crittografia originale, un utente malintenzionato potrebbe inserire JavaScript in un modo diverso e impedire la crittografia in questo modo
  • Potrebbe aggiungere una modesta quantità di sicurezza, ma lo sforzo e le conoscenze necessarie per crearlo e mantenerlo sarebbero proibitivi

TL; DR: Gli argomenti principali che ho visto contro la crittografia JavaScript sono 1) uso TLS invece e 2) JavaScript non genera chiavi sicure. Se viene utilizzato anche TLS e le chiavi vengono generate altrove, la crittografia JavaScript inizia ad aggiungere valore? '

Nota: in risposta a un paio di commenti, il caso d'uso qui NON è crittografia end-to-end; il server deve, almeno in alcune situazioni, leggere i dati originali.

    
posta Kamil Drakari 22.12.2017 - 16:32
fonte

1 risposta

1

Ovviamente, lo sviluppo dell'API Web Crypto indica che esiste un futuro per la crittografia in Javascript su Internet. (O almeno il W3C ci crede!)

Ora puoi generare numeri casuali sicuri ed eseguire operazioni crittografiche in modo efficiente, in modo da poterlo utilizzare per casi come quelli che hai descritto. (Un altro esempio potrebbe essere quello di proteggerti in caso di un osservatore passivo in una posizione come Cloudflare.)

Come hai sottolineato, è ancora necessario che TLS fornisca integrità, in quanto un errore consentirebbe a un utente malintenzionato di modificare / iniettare javascript dannosi. Tuttavia, la tua proposta potrebbe attenuare le preoccupazioni come BREAK, CRIME e vulnerabilità simili. (A seconda dell'implementazione, potrebbe anche essere utile in caso di problemi come Heartbleed.)

Un problema che non hai considerato è quello di garantire che la tua crittografia sia adeguatamente implementata in modo tale da non aprirti agli attacchi nuovi . La crittografia non è una panacea e, se fatta male, può peggiorare la vita. (Ad esempio, potrebbe portare a nuovi attacchi di timing o di dimensioni del testo cifrato.)

    
risposta data 15.01.2018 - 05:43
fonte

Leggi altre domande sui tag