Domanda:
Perché qualcuno dovrebbe eseguire la "doppia crittografia"?
Lighty
2016-03-15 13:57:39 UTC
view on stackexchange narkive permalink

Se ho un sito Web o un'app mobile, che parla al server tramite una connessione SSL / TLS protetta (ad es. HTTPS) e crittografa anche i messaggi inviati e ricevuti tra l'utente e il server in cima alla connessione già protetta , farò mosse inutili? O la doppia crittografia è un metodo comune? In caso affermativo, perché?

Uno dei motivi potrebbe essere quello di utilizzare l'algoritmo di crittografia doppia "ROT13" altamente efficace.
Potresti volere diversi livelli di crittografia: vuoi crittografare il messaggio di testo dell'utente in modo che solo il destinatario possa leggerlo e vuoi anche crittografare il messaggio del protocollo che lo trasporta, in modo che solo il tuo server possa leggerlo.
Alcune applicazioni legacy potrebbero aver utilizzato la propria crittografia su canali diversi rispetto a TLS molto tempo fa. Quando gli sviluppatori li convertono in TLS, probabilmente non vogliono introdurre nuove possibilità di bug rimuovendo il vecchio livello di crittografia.
@Keavon L'ultimo attacco di mezzo!
@DmitryGrigoryev Come puoi avere un attacco meet-in-the-middle senza chiave?
Potrebbe esserci un requisito di sicurezza predefinito per la crittografia di tutti i messaggi da utente a server. Questo requisito potrebbe essere maggiore o in qualche modo non corrispondere perfettamente a HTTPS. Per ottenere un maggiore controllo ed essere in grado di indicare un pezzo di codice che ** esattamente ** soddisfa il requisito introdotto nel paragrafo X delle specifiche per un documento di revisione, questa potrebbe essere la scelta più semplice per uno sviluppatore.
@immibis Come puoi applicare ROT13 due volte e fingere che il testo sia crittografato?
@DmitryGrigoryev - questa è una vecchia barzelletta sulla sicurezza inefficace esattamente per il motivo che stai chiedendo - suona bene ma è totalmente inutile.
Perché dipende dal problema. Se il problema è l'intercettazione in transito, HTTPS è probabilmente sufficiente. Se il problema è l'intercettazione su uno degli endpoint in cui HTTPS è terminato, HTTPS non fornisce protezione. Se un'app per dispositivi mobili memorizza informazioni sensibili ed è compromessa, lo sono anche i dati memorizzati nell'app. Se i dati sono crittografati, aggiunge una protezione a livello per i dati anche se l'app è compromessa. Sto sorvolando sulla gestione delle chiavi e qui si tratta di preoccupazioni perché non sembrava essere l'argomento, la doppia crittografia lo era.
@DmitryGrigoryev È come dire "ROT13 è vulnerabile agli attacchi DROWN perché posso versare acqua nelle vie aeree del destinatario".
I parametri della richiesta possono finire nei log di accesso al server, questo potrebbe non essere desiderabile, quindi crittografarli potrebbe aiutare.
Ho letto da qualche parte che la doppia crittografia DES in realtà * riduce * la sicurezza della crittografia, motivo per cui Triple-DES è diventato lo standard.
@Keavon Pshaw, eseguo 10.001 round di ROT13, quindi gli aggressori devono impiegare più tempo per recuperare il testo in chiaro. IFNKOVHGROGHPRM!
TLS crittografa solo da te al server. Il server riceve il testo in chiaro. Se stavi archiviando dati che hai crittografato da parte tua, il server non sarebbe in grado di decrittografare i tuoi dati. Possono solo conservarlo per te. Quindi non è "doppia crittografia" crittografare all'interno di TLS, perché dal punto di vista della protezione dall'amministratore del server, non è affatto crittografato da TLS.
Oltre a questi commenti, e a cui si allude in alcune delle risposte, SSL / TLS è solo una sicurezza _point a punto_ non _end to end_ security. Sebbene ci siano delle sfumature, un'entità dannosa può MitM il processo (Bluecoat per esempio), decodificare il tuo flusso SSL e quindi riavviare una connessione al server.
Alcune comunicazioni attraverso uno spazio non attendibile (noto anche come Internet) devono essere avvolte due volte tramite un tunnel IPSEC all'interno di un altro IPSEC utilizzando due diverse implementazioni di IPSEC con chiavi diverse in modo che un attacco riuscito contro l'implementazione del wrapper esterno riveli solo un ulteriore livello di crittografia che è non attaccabile utilizzando lo stesso exploit.
Per essere sicuro, per essere sicuro ...
Storicamente, uno degli anelli deboli della macchina Enigma, usata dai tedeschi durante la seconda guerra mondiale, fu quando decisero di criptare ogni cosa. La seconda crittografia ha introdotto uno schema che era visibile al cervello umano, rendendo la crittografia più facile da violare.
Prendi in considerazione l'utilizzo di un tunnel VPN per il traffico HTTPS durante l'invio di un'e-mail crittografata con PGP con un piccolo volume in allegato crittografato contenente un backup crittografato del tuo server che contiene il tuo database di utenti (dove i valori sensibili sono crittografati piuttosto che liberamente visibili in testo normale) che è normalmente archiviato su un HDD con crittografia dell'intero disco. Molti esempi di legittima "doppia crittografia" qui, anche se è vero che la vita reale raramente sarà così contorta come questo esempio contenente almeno sei livelli di crittografia.
@SplashHit [triple-des] (https://en.wikipedia.org/wiki/Triple_DES) doveva fornire compatibilità in avanti e all'indietro con il DES normale, non perché "due non bastano".
@pojo-guy ha un link per questo?
@JDługosz La nota sulla debolezza del modello dell'uso di enigma per la doppia crittografia proveniva da un'intervista televisiva con uno dei crittologi sopravvissuti della squadra della Seconda Guerra Mondiale. È passato abbastanza tempo che non sono sicuro che le connessioni Internet fossero un prodotto di consumo comune al momento in cui ho visto l'intervista.
@JDługosz La spiegazione tecnica è che l'algoritmo enigma era gestito da macchine azionate da ingranaggi e l'algoritmo di decrittazione era sufficientemente vicino all'algoritmo di crittografia (funzionalmente) che il secondo livello di crittografia era una decrittografia parziale. Da questo potevano capire la lunghezza delle chiavi e usare parole tedesche comuni (ingegneria sociale) per decifrare finalmente il messaggio effettivo. Ad esempio, una chiave di 5 caratteri era quasi invariabilmente "hitler"
Forse stai pensando a come la chiave di sessione è stata elencata due volte prima di cambiarla per il corpo del messaggio? Questo è stato il difetto critico che ha permesso di risolverlo! Non era doppiamente codificato; è stato ripetuto nello stesso flusso. La crittografia e la decrittografia erano in realtà lo * stesso * processo, come in rot13. Quindi sì, immagino che la doppia codifica con le stesse impostazioni del plugboard ma una diversa configurazione delle ruote creerebbe una grande quantità di informazioni sul ciclo che hanno usato. Non lo ricordo nelle storie che ho letto.
Forse temono che il canale possa essere declassato e quindi vogliono avere una sicurezza aggiuntiva
Quindici risposte:
Matthew
2016-03-15 14:18:08 UTC
view on stackexchange narkive permalink

Non è raro, ma potrebbe non essere richiesto. Molti sviluppatori sembrano dimenticare che il traffico HTTPS è già crittografato - basta guardare il numero di domande sull'implementazione della crittografia lato client su questo sito Web - o ritengono che non ci si possa fidare a causa di problemi ben pubblicizzati come Lenovo SSL MitM pasticcio.

Tuttavia, la maggior parte delle persone non ne è stata colpita e al momento non ci sono attacchi particolarmente praticabili contro TLSv1.2, quindi non lo fa " t davvero aggiungere molto.

D'altra parte, ci sono motivi legittimi per crittografare i dati prima della trasmissione in alcuni casi. Ad esempio, se stai sviluppando un'applicazione di archiviazione, potresti voler crittografare utilizzando un'app sul lato client con una chiave nota solo all'utente: ciò significherebbe che il server non sarebbe in grado di decrittografare i dati, ma potrebbe ancora memorizzarlo. L'invio tramite HTTPS significherebbe che anche un utente malintenzionato non dovrebbe essere in grado di acquisire i dati crittografati dal client, ma anche se lo facessero, non avrebbe importanza. Questo modello viene spesso utilizzato dai gestori di password basati su cloud.

In sostanza, dipende da cosa ti stai difendendo: se non ti fidi di SSL / TLS, però, probabilmente non puoi fidarti della crittografia il codice che stai inviando (nel caso dell'applicazione web) neanche!

A pensarci bene, c'è un motivo per non gettare via tutte quelle domande sullo stackoverflow che coinvolgono la crittografia del browser web lato client in javascript. Rendono superpesci e amici inutili e gli intercettori aziendali confezionati vengono facilmente sconfitti (il problema si converte in una corsa agli armamenti).
Se il livello HTTPS viene compromesso tramite un attacco MITM, sicuramente la crittografia JavaScript lato client sarebbe ... meno sicura.
@Joshua Quello che molte persone non riescono a capire è che SuperFish non è un attacco SSL / TLS / HTTPS. È un attacco alla parte di condivisione delle chiavi dell'infrastruttura. Quindi, in realtà, quasi ogni implementazione "sicura" di un codice a chiave pubblica sul tuo computer sarebbe compromessa.
@wizzwizz: Da qui il mio riferimento alla corsa agli armamenti. Il re-tooling annullerebbe immediatamente tutti gli strumenti di cattura stupidi e tutti gli strumenti preesistenti che l'autore si è preso la briga di rompere, quindi devono spostarsi di nuovo. E le piccole aziende dedicate possono rilasciare nuovi aggiornamenti ogni giorno. Il tuo negozio IT non tanto.
Esistono attacchi MiTM basati su VPN che possono essere utilizzati per curiosare sui pacchetti HTTPS (almeno su Android, anche se presumo che altre piattaforme sarebbero ugualmente vulnerabili) se si ha accesso fisico al dispositivo / endpoint client. In teoria, l'aggiunta della tua crittografia nel mix vanificherebbe quel genere di cose, a condizione che la persona non sia in grado di sfruttare l'accesso del proprio client fisico in un modo che gli dia le tue chiavi di crittografia interne.
Se lavori per una grande azienda, il tuo reparto IT potrebbe intenzionalmente MITM-ing le tue connessioni SSL: diverse aziende vendono [proxy di "ispezione SSL"] (https://insights.sei.cmu.edu/cert/2015/03 /the-risks-of-ssl-inspection.html) - questo di solito comporta l'installazione di certificati di root "compromessi" sui dispositivi aziendali. Tuttavia, questi strumenti di "ispezione" non sarebbero in grado di compromettere la crittografia personalizzata per applicazione.
Se lavori per una grande azienda e aggiri i filtri o l'ispezione del traffico, il tuo reparto IT potrebbe seguirti.
basato su @FrankFarmer ora c'è anche spazio per plug-in del browser dannoso per eseguire un MITM sostituendo XMLHttpRequest o Fetch Prototypes nel browser con il proprio posto in cima alle versioni native del browser e catturare tutto l'input prima di inviarlo al gestore HTTPS del browser o dopoil gestore HTTPS ha decrittografato i dati.
Mike Goodwin
2016-03-15 14:21:02 UTC
view on stackexchange narkive permalink

HTTPS fornisce la crittografia solo mentre il messaggio è in transito sulla rete / Internet.

Se il messaggio viene memorizzato o elaborato da un intermediario (ad esempio una coda di messaggi) a un certo punto tra il client e il server che alla fine lo elabora, quindi non rimarrà crittografato mentre si trova nell'intermediario.

Inoltre, se TLS / SSL viene terminato nei perimetri del servizio (ad esempio su un bilanciamento del carico), potrebbe non crittografato sulla rete interna. Questo può essere un problema in cui è richiesta un'elevata sicurezza, ad esempio in alcuni ambienti regolamentati.

In entrambi i casi, la crittografia a livello di messaggio garantirà che i dati siano crittografati in tutti i punti tra il client e il ricevitore finale.

Come ha detto @honze, questa si chiama difesa in profondità ed ha lo scopo di garantire che anche se un sistema è parzialmente compromesso (ad esempio riescono a fare un attacco man-in-the-middle per compromettere SSL / TLS o sfruttare una vulnerabilità nella coda dei messaggi per ottenere i dati inattivi) l'aggressore non può accedere ai dati protetti.

Questa sembra una risposta più chiara sul motivo per cui vorresti crittografare qualcosa inviato da SSL.
Nota da aggiungere: questo consente anche al client di controllare chi è autorizzato a decrittografare il pacchetto finale. Ad esempio, con i backup inviati a un cloud. Non è necessario condividere la chiave di decrittazione con il fornitore di servizi cloud, il che significa che anche se il fornitore di servizi cloud viene "violato" o legalmente obbligato a divulgare i propri dati, il cliente è comunque l'unico con le chiavi.
Olivier Grégoire
2016-03-16 16:03:15 UTC
view on stackexchange narkive permalink

Vorrei condividere la mia esperienza sulla domanda del titolo. Non è realmente correlato alla domanda completa in sé, ma risponde alla domanda "perché qualcuno dovrebbe crittografare due volte?"

In passato ho lavorato per un'organizzazione che gestisce la comunicazione tra operatori sanitari (medici, ospedali , ecc.) e le organizzazioni assicurative (mutue). Ci siamo comportati come un router.

Lo schema era più o meno il seguente:

  fornitore di assistenza 1 \ / organizzazione assicurativa 1 fornitore di assistenza 2 ---- router (noi) ---- organizzazione assicurativa 2 fornitore di assistenza 3 / \ organizzazione assicurativa 3  

Avevamo la seguente protezione:

  1. Crittografia end-to-end : Il fornitore di cure 1 deve inviare le informazioni del paziente all'organizzazione assicurativa 1. Queste informazioni sono sensibili alla privacy e pertanto devono essere crittografate. Al nostro livello non abbiamo il diritto di sapere quali dati vengono inviati all'organizzazione assicurativa.
  2. Fornitore di assistenza - crittografia del router: il fornitore di assistenza invia le informazioni come metadati per noi a essere in grado di gestirlo. Queste informazioni devono essere crittografate. Il contratto stabiliva che i messaggi dovevano ancora essere crittografati anche all'interno della nostra rete in modo che solo uno dei nostri server conoscesse i metadati delle informazioni inviate. Poiché disponiamo di diverse pipe (bilanciatori del carico, firewall, ecc.), Anche la crittografia è richiesta a questo livello.
  3. HTTPS per evitare attacchi MITM: non solo i nostri dati avevano bisogno essere protetti, ma anche i metadati HTTP dovevano essere protetti, quindi HTTPS.

Spero che questo faccia luce sul motivo per cui possono essere richiesti diversi livelli di crittografia.

honze
2016-03-15 14:09:45 UTC
view on stackexchange narkive permalink

Hai ragione. Questo è un concetto di sicurezza multilivello noto come difesa in profondità.

È probabile che i messaggi crittografati indirizzino la crittografia end-to-end e SSL / TLS si rivolga alla crittografia dei metadati. Questo è un modello utile.

Risponde un po 'alla domanda, ma è un po' sottile per quello che sto cercando in una risposta ... +1 ancora.
pjc50
2016-03-16 17:26:04 UTC
view on stackexchange narkive permalink

HTTPS è crittografato in transito e decrittografato alle estremità. Quindi la situazione ovvia in cui potresti voler eseguire la doppia crittografia è dove non vuoi che una (o forse entrambe!) Delle estremità veda il testo in chiaro.

Alcune situazioni Riesco a pensare fuori dalla mia testa:

  • e-mail crittografata tramite provider di webmail. Se invio un messaggio crittografato GPG tramite Gmail a cui accedo tramite una connessione HTTPS, viene crittografato due volte. Perché non voglio che Gmail legga i contenuti.

  • servizi di backup crittografati. Desidero utilizzare HTTPS per impedire il furto delle mie credenziali di accesso, ma non voglio che il servizio di backup veda "all'interno" dei backup.

  • gateway di pagamento. Potresti immaginarne uno in cui un messaggio crittografato viene inviato tra un token hardware di pagamento sicuro e una banca, tramite il dispositivo non sicuro di un utente e il sito di un commerciante. Il collegamento al centro dovrebbe essere HTTPS, ma non è sufficiente: deve essere crittografato sul PC non sicuro e sul sito web del commerciante meno sicuro.

Tieni presente che S / MIME prevede il "triplo avvolgimento" (firma / crittografia / firma): https://tools.ietf.org/html/rfc2634, quindi se consideri la firma e la crittografia anche più possibilità potrebbero avere senso .

user1361991
2016-03-16 10:36:58 UTC
view on stackexchange narkive permalink

Volevo fornire un motivo in più: la standardizzazione.

Ho un'applicazione che per motivi di sicurezza, tutti i dati che entrano ed escono da essa devono essere crittografati. Poiché è già crittografato una volta, i dati possono fluire su entrambe le connessioni http (legacy) e https (corrente). Ha molto più senso crittografare due volte piuttosto che creare una versione dell'applicazione che viene eseguita non crittografata su https e crittografata su http.

Si potrebbe fare un argomento per desupportare il protocollo http, tuttavia, mantenere i certificati ssl e il software ssl corrente è complicato e ha un'affidabilità inferiore rispetto a http per il nostro ambiente.
Capisco il tuo punto, ma qualcuno che creerebbe un'applicazione in cui la sicurezza è un aspetto importante, forzerà HTTPS e disabiliterà HTTP, o nel caso di un'applicazione web, il pub HTTP sarebbe vuoto e sarebbe supportato solo HTTPS.
@Lighty Fidati di me, il mondo reale non funziona in base a principi sensati come quello. La realtà porta a situazioni molto più dure.
LJones
2016-03-16 22:29:08 UTC
view on stackexchange narkive permalink

Si tratta di best practice quando si tratta di informazioni altamente sensibili come dati finanziari, medici, militari o psicologici. L'idea di base di più crittografie è impedire a qualsiasi utente non autorizzato di recuperare i dati. Supponiamo che le possibili combinazioni iniziali per il metodo di crittografia fossero 1 miliardo. Applicando un altro metodo di crittografia su di esso, potremmo moltiplicare le possibilità a 1b ^ 3. Richiederebbe a un utente non autorizzato di impiegare più tempo per decrittare i dati. Anche se la crittografia non è ancora perfetta, è meglio.

In una delle organizzazioni in cui ho lavorato abbiamo utilizzato più crittografie. Questa è una semplificazione del flusso precedente:

  • Controlla i dispositivi e i componenti client e server per l'autorizzazione sul software
  • Crittografa i dati sulla memoria
  • Comprimi i dati
  • Crittografa i dati con software proprietario
  • Inizia la connessione con il server
  • Controlla i dispositivi e i componenti client e server per l'autorizzazione alla connessione
  • Comprimi trasmissione
  • Invia dati tramite connessione crittografata; Se la connessione viene interrotta, riavvia l'intero processo.
  • Dopo aver completato con successo il file, controlla la coerenza dei dati

Se non hai a che fare con un ambiente che è pesante in rete con dati sensibili, questo è eccessivo.

La strategia alla base di questo metodo garantisce che i dispositivi, i componenti (MAC) e l'IP siano stati autenticati. La crittografia dei dati è una procedura standard, così come l'invio tramite HTTPS. Alcune organizzazioni vanno oltre la sicurezza di base e richiedono anche reti tipo darknet che utilizzano Freenet, I2P, IPsec / VPN o Tor per connettersi. Indipendentemente dalla crittografia, la compressione dei dati ridurrà l'archiviazione richiesta e le risorse di rete; tuttavia, compenserà le prestazioni in RAM o elaborazione. Infine, il motivo per cui abbiamo riavviato la connessione dopo una disconnessione è che abbiamo scoperto un modo per dirottare il flusso di dati tramite man-in-the-middle.

In definitiva, non esiste un modo perfetto per crittografare i dati per sempre, ma concentra i tuoi sforzi sulla crittografia fino a quando i dati o le informazioni non diventano irrilevanti o non produci un modo migliore per crittografare i dati.

Oppure potresti semplicemente usare una chiave che è due volte più grande.
Micheal Johnson
2016-03-17 18:55:50 UTC
view on stackexchange narkive permalink

Esistono diversi motivi per inviare dati crittografati su una connessione crittografata:

  • anche se la crittografia della connessione è interrotta (ad es. MitM, possibile ma difficile con HTTPS e che porta a intercettazione di tutti i dati trasmessi), i dati sono ancora crittografati
  • il server HTTPS potrebbe non essere considerato attendibile ed è responsabile della trasmissione dei dati a un altro server
  • allo stesso modo, il server HTTPS potrebbe inoltrare i dati a un altro server tramite una connessione non crittografata e fare in modo che il client crittografi i dati prima della trasmissione riduce il carico sul server HTTPS che altrimenti dovrebbe crittografare i dati da tutti i client invece di essere in grado di passarli direttamente
Falco
2016-03-17 15:01:03 UTC
view on stackexchange narkive permalink

Offuscamento API

Anche se tutte le comunicazioni sono crittografate tramite HTTPS, il client può comunque avere la possibilità di vedere il suo traffico prima della crittografia con vari strumenti di debug. Soprattutto se utilizzi un ambiente browser o un'app con https fornito da un sistema sottostante.

In questo caso potresti crittografare i tuoi dati con una chiave statica, in modo che il client non possa leggere e manipolare facilmente il traffico. Ovviamente questo è solo un offuscamento, poiché la chiave deve essere memorizzata da qualche parte sulla macchina client (almeno nella RAM), ma con il codice sorgente del software è sempre solo offuscamento. L'utente dovrebbe dedicare uno sforzo considerevole per recuperare la tua chiave e decrittografare il tuo traffico per leggere e manipolare le sue richieste.

Un esempio potrebbe essere un gioco basato sul web, che invia ai giocatori il punteggio più alto.

Oppure scopri come accedere ai metodi di amministratore / superutente del gioco.
Un metodo migliore per proteggere le API è l'autenticazione. Se l'utente deve essere autenticato utilizzando un sistema di autenticazione forte come (ad es. Chiave pubblica) prima di poter utilizzare le funzionalità amministrative, l'API non deve essere offuscata. Allo stesso modo, funzioni come l'invio del punteggio possono utilizzare una "firma" temporanea (YouTube usa qualcosa di simile) che deve essere generata almeno una volta e passata con ogni richiesta - sebbene possa sempre essere decodificata, può essere resa molto complicata ( e potrebbe anche essere basato sul contenuto della richiesta, rendendolo diverso per ogni richiesta).
@MichealJohnson questo non aiuterà affatto, se invii `authId = 746788553 score = 200` l'utente deve solo cambiare il valore del punteggio tramite man in the middle (facile sul suo dispositivo) se offuschi, avrà un duro tempo
Si invia anche `signature = 21a87c7b0a6005df838b17b9aafd0dc1`, dove` signature` è generata da un algoritmo offuscato (preferibilmente cambiato ogni poche settimane) da `authId`,` score` e l'ora corrente. Non è necessario offuscare la trasmissione della firma tramite un secondo livello di crittografia, perché anche se l'utente sa che è una firma e ne sa il valore, se cambia il punteggio la firma non sarà più valida (perché il score viene utilizzato nel calcolo) e nel momento in cui hanno decodificato l'offuscamento l'algoritmo si spera sia stato modificato.
@MichealJohnson Questo è davvero un buon punto e otterrà lo stesso vantaggio. - Ma la tua istruzione precedente non si adattava a questo `che deve essere generato almeno una volta e passato ad ogni richiesta` suona più come un valore statico per sessione, il tuo secondo commento è molto meglio
Ho detto "almeno una volta", quindi "potrebbe richiedere la rigenerazione, possibilmente per ogni richiesta". Stavo anche combattendo con il limite di caratteri nei commenti.
Alexander
2016-03-20 16:53:03 UTC
view on stackexchange narkive permalink

Se ho capito bene, la rete Tor funziona in questo modo:

Alice scrive una lettera a Dave e la crittografa tre volte: prima con la chiave di Dave, poi aggiunge l'indirizzo di Dave, crittografa il pacchetto con la chiave di Craig , aggiunge l'indirizzo di Craig e crittografa il pacchetto con la chiave di Bob.

Quindi invia la lettera a Bob, che la decrittografa, trova l'indirizzo di Craig e glielo inoltra.

Craig lo decrittografa, trova l'indirizzo di Dave e glielo inoltra. Dave lo decifra e scopre che la lettera è per lui

In un mondo perfetto, nessuno tranne Alice e Dave potrebbe ora dire che Dave è davvero il destinatario di quella lettera, perché POTREBBE ESSERE che aveva trovato L'indirizzo di Emily all'interno della busta e inoltrato.

Una seconda applicazione potrebbe essere quella di crittografare un messaggio sia con la tua chiave privata che con la chiave pubblica del destinatario. Il destinatario decrittografa il messaggio con la tua chiave pubblica e la sua chiave privata, e può così ottenere le informazioni che il messaggio è da te e per lui. Ma di solito, un HMAC viene utilizzato per assicurarsi che il messaggio provenga effettivamente da un certo mittente e non sia stato manomesso.

Lie Ryan
2016-03-21 04:23:00 UTC
view on stackexchange narkive permalink

Il motivo principale per la crittografia a più livelli è la separazione delle preoccupazioni.

Spesso un insieme di dati può essere elaborato da più server, possibilmente controllati da più organizzazioni, non tutte sono completamente attendibili dall'intero dati. Nella maggior parte dei casi, la maggior parte di questi server intermedi deve agire solo su parti dei dati, quindi se non hanno bisogno di vedere alcune parti di dati, quella parte può essere crittografata. Daresti l'accesso intermedio ai dati di cui hanno bisogno per vedere crittografati in una chiave che hanno e i blob crittografati che possono trasmettere ad altri server per un'ulteriore elaborazione.

L'esempio più semplice è l'email con crittografia GPG e TLS. Il compito principale di un agente di trasferimento della posta (relè di posta) è trasferire la posta elettronica da un hop all'altro. Hanno bisogno di vedere le informazioni di instradamento della posta per svolgere il loro lavoro, ma non dovrebbero aver bisogno di vedere i messaggi stessi. Pertanto, crittograferai due volte la connessione e-mail con una chiave che l'agente di trasferimento della posta può comprendere e il messaggio con un'altra chiave che solo il destinatario comprende.

Un altro esempio è il servizio di pianificazione del calendario / notifica. Inserisci eventi nel tuo calendario, per essere avvisato dall'applicazione di calendario che qualcosa sta accadendo in un determinato momento. Il calendario non aveva bisogno di sapere qual è l'evento, chi è coinvolto negli eventi, né dove si trova.

Un motivo secondario per la crittografia multipla è come un'assicurazione nel caso in cui uno dei livelli di crittografia sia rotto. IMO, questo è un motivo molto più debole perché è necessario considerare che ogni livello aggiuntivo non necessario aumenta la complessità dell'implementazione e la complessità è il nemico della sicurezza.

Chloe
2016-03-21 07:27:09 UTC
view on stackexchange narkive permalink

Non lo vedo menzionato qui, ma penso che sia leggermente più importante di un commento. Potrebbero farlo per perfetta segretezza in avanti. Un utente malintenzionato potrebbe non conoscere la chiave della tua connessione HTTPS, ma potrebbe registrare ogni singolo byte e conservarlo per anni. Quindi potrebbero hackerarti lungo la linea, scoprire una vulnerabilità o costringerti a rivelare la chiave privata del tuo server in un secondo momento, quindi tornare indietro nella cronologia e decrittografare i tuoi messaggi. Avendo una chiave temporanea temporanea che crittografa i messaggi sotto la connessione HTTPS, l'aggressore non sarebbe comunque in grado di leggere i messaggi o, per lo meno, ritarderebbe notevolmente.

Tuttavia, non è proprio la doppia crittografia;si tratta solo (principalmente) di come la chiave di sessione viene derivata, concordata o condivisa.Fondamentalmente, se la chiave di sessione è derivata in modo tale che qualcuno che ha una registrazione completa del testo normale di tutti i dati che sono stati trasferiti avanti e indietro durante lo scambio di chiavi non possa successivamente ricreare la chiave di sessione, allora hai PFS;se qualcuno con un record del genere può ricreare la chiave di sessione, allora non lo fai.PFS è terribilmente bello da avere, ma (potenzialmente) risolve un problema molto diverso, come indicato da esempi di * endpoint * intermedi non attendibili.
Alex KeySmith
2016-03-17 20:32:48 UTC
view on stackexchange narkive permalink

Per evitare problemi con la conformità PCI, in cui lo sviluppatore desidera utilizzare il gateway di pagamento e impone la conformità alla terza parte.

I campi nel modulo post possono essere crittografati lato client, quindi lo sviluppatore non ha i dettagli della carta non crittografati che passano attraverso i loro sistemi (quindi un passo avanti rispetto al non memorizzarli).

In particolare, questo è in cima a HTTPS . Pertanto il sito web non vede nemmeno i dati non crittografati, solo l'utente e il gateway di pagamento.

Esempio con il gateway di pagamento Brain Tree: https://www.braintreepayments.com/blog/ crittografia lato client /

Perché -1? Ho aggiunto un documento di esempio per eseguire il backup del mio caso.
I dati del modulo possono ancora essere considerati un "messaggio".
Certamente non sto suggerendo solo la crittografia del client! Questo è in cima a HTTPS!
Questo è un esempio di un'applicazione abbastanza ragionevole, infatti.
Grazie @Xander sì, immagino che la mia risposta sia stata probabilmente interpretata erroneamente dalle persone all'inizio come semplice crittografia lato client (una cosa ovviamente molto brutta!)
Shelvacu
2016-03-18 09:15:11 UTC
view on stackexchange narkive permalink

È probabile che al momento esistano difetti sia negli algoritmi che nelle implementazioni, che devono ancora essere scoperti. Idealmente questi difetti non esisterebbero ma lo sono.

Se crittografi con due algoritmi diversi e solo uno di essi è difettoso, stai comunque bene ei tuoi dati sono al sicuro. Se il primo livello è rotto, un utente malintenzionato può solo ottenere testo cifrato. Se il secondo livello è rotto, un utente malintenzionato non è in grado di attraversare il primo livello.

La doppia crittografia (o tripla o quadrupla o ..) può essere un buon modo per evitare di mettere tutte le tue uova in un paniere.

Stai assumendo che le doppie crittografie non interagiscano in un modo che significa che la combinazione è più facile da rompere rispetto a entrambi gli algoritmi da soli. Ne hai una prova?
@MartinBonner [No, non lo faccio] (http://crypto.stackexchange.com/questions/33797/can-double-encrypting-act-in-a-way-that-means-the-combination-is-easier- rompere)
Mi sembra un'ipotesi plausibile, ma puzza di sviluppare il tuo algoritmo crittografico (anche se proviene da blocchi di costruzione ben rispettati).
Sì, è dimostrato che la combinazione corretta di due cifrari sarà forte almeno quanto il migliore dei due. Se i passaggi sono separati (non combinati), è possibile utilizzare un passaggio di condizionamento intermedio per impedire i metadati del pacchetto "testo in chiaro noto" dalla cifra esterna.
@JDługosz Qual è la tua definizione di cifrario? ROT13 conta?
Come definito in [questo libro] (http://www.amazon.com/Cryptography-Engineering-Principles-Practical-Applications/dp/0470474246) in particolare, che spiega il principio in dettaglio. Sì, rot13 si qualifica come * stream cypher * nella definizione più generale. La ripetizione di chiavi e chiavi banali sarebbe squalificata se si usasse [una definizione] (https://en.wikipedia.org/wiki/Stream_cipher) che richiedeva un flusso di chiavi pseudocasuale con un lungo periodo. ...
... Ma guarda [Caesar Salad ^ h ^ h ^ h ^ h ^ hCypher] (https://en.wikipedia.org/wiki/Caesar_cipher) per vedere che si applica comunemente a [qualsiasi cosa] (https: / /en.wikipedia.org/wiki/Substitution_cipher)
Jakuje
2016-03-20 14:03:15 UTC
view on stackexchange narkive permalink

Non esattamente il problema HTTPS, ma un altro caso d'uso valido della doppia crittografia è comunemente usato in Tor nel caso in cui "non credo al ragazzo delle consegne e voglio rimanere anonimo utilizzando più passaggi".

Ogni "fattorino" decrittografa solo la busta per scoprire l'altro fattorino. La comunicazione in questo caso è incapsulata e crittografata nel proxy SOCKS.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...