Domanda:
La sicurezza per oscurità è orribile. La sicurezza e l'oscurità sono buone?
user3280964
2018-05-30 23:11:57 UTC
view on stackexchange narkive permalink

Normalmente predico che creare un algoritmo di crittografia personalizzato è una cattiva idea. Ma farà davvero male se è lo strato più esterno però? O peggiorerà la sicurezza?

  AES -> CipherText -> CustomEncryptionAlgorithm-> CipherText  

Penso che il livello extra aiuterà. Diciamo che anche se CustomEncryptionAlgorithm è un pasticcio pieno di bug, non può peggiorare le cose. Questo perché l'uscita AES è già indistinguibile dal rumore casuale.

D'altra parte, qualcosa mi dice che quanto segue è problematico

  CustomEncryptionAlgorithm -> CipherText -> AES -> CipherText  

È brutto? e perché?

Per favore, non commentare le risorse aziendali spese per la sicurezza, l'oscurità, ecc. (Sono d'accordo che la sicurezza viene fuori) Sono più interessato a comprendere la teoria crittografica alla base delle vulnerabilità in questo approccio.

I commenti non sono per discussioni estese;questa conversazione è stata [spostata in chat] (https://chat.stackexchange.com/rooms/78252/discussion-on-question-by-user3280964-security-by-obscurity-is-horrible-is-secu).
Sono confuso dal modo in cui hai elencato i flussi di lavoro.Il primo flusso di lavoro è `var x = plaintext;var y = aes (x);var z = custom (y);send (z) "e il secondo è" var x = plaintext;var y = custom (x);var z = aes (y);send (z); `- o ce l'ho al contrario?E potresti approfondire il motivo per cui ritieni che i due siano diversi in termini di forza crittografica perché non è chiaro perché lo senti.
Va bene, purché la crittografia homebrew utilizzi una chiave separata.Altrimenti rischi che il tuo algoritmo di crittografia in qualche modo annulli la crittografia originale o perda la chiave.
Questo è noto come "difesa in profondità" ed è un'ottima cosa.L'oscurità può essere una valida componente di tale strategia;il problema sta nel renderlo l '* unico * componente.
Risposta economica: finché c'è sicurezza e non è disturbata in alcun modo, c'è sicurezza.
Direi che la semplice spiegazione del termine è che "la sicurezza dall'oscurità è sempre di breve durata".Quindi, se la tua applicazione è ancora sicura dopo che la parte oscura è stata insultata dal mondo, è per definizione ancora sicura.Ovviamente il vero problema con la birra fatta in casa è la fuoriuscita involontaria di qualche informazione;quindi, inconsapevolmente rendendolo meno sicuro.
Un algoritmo di crittografia personalizzato non è "sicurezza attraverso l'oscurità".È quello ** se ti affidi al fatto dello stato segreto dell'algoritmo ** per sicurezza."Nessuno ha sentito parlare di questo algoritmo, quindi è sicuro" è la sicurezza attraverso l'oscurità.
Il problema più grande con l'oscurità è che impedisce la revisione tra pari che è immensamente utile in questo campo.
Consiglierei di porsi una domanda più o meno analoga: se hai già una buona pistola per autodifesa, puoi causare problemi in una situazione di vita reale fondendo i tuoi componenti fatti a mano sulla pistola con un cannello?La risposta è "sì, a meno che tu non sappia veramente cosa stai facendo" e la crittografia è simile.
Non sono sicuro che l'analogia si adatti.Tuttavia, anche se andiamo d'accordo, la domanda è: "Se hai una buona pistola per la difesa personale in una mano e un'arma su misura nell'altra, ti farà davvero male e, se sì, come?"Finora la risposta sembra essere che dipende da quanto sia sciocca la tua arma personalizzata.Potrebbe aiutare ma potrebbe anche ucciderti.La discussione sui vari modi in cui ciò può accadere mi è stata finora molto utile.
Sedici risposte:
forest
2018-05-31 06:47:42 UTC
view on stackexchange narkive permalink

Non utilizzare la tua crittografia!

Da un punto di vista puramente crittografico, qualsiasi funzione biiettiva che preserva la lunghezza non può ridurre la sicurezza. In effetti, anche la funzione di identità, definita come f (x) = x , non ridurrà la sicurezza, assumendo che le chiavi utilizzate per la cifratura standard e la tua cifratura homebrew siano reciprocamente indipendente. L'unico modo possibile per ridurre la sicurezza è se la tua funzione homebrew non usa una chiave diversa e indipendente e perde la chiave nel testo cifrato, ad esempio con f k sub > (x) = x ⊕ k fatto su ogni singolo blocco di input x , un classico cifrario XOR vulnerabile agli attacchi di testo in chiaro noto.

Da un punto di vista pratico , ci sono trucchi che possono essere importanti. Ho menzionato la conservazione della lunghezza sopra per una buona ragione. Una funzione di compressione è ancora una funzione e talvolta la compressione e la crittografia possono portare a risultati molto negativi. Questo è in parte il motivo per cui il tuo secondo esempio, con il tuo algoritmo personalizzato applicato prima della crittografia standard, è davvero peggiore. Può far trapelare informazioni sul testo in chiaro per tutta la lunghezza. Possono anche esserci bug nella tua implementazione che provocano altre vulnerabilità di sicurezza. Da un punto di vista puramente teorico, sono fuori campo.


In un commento mi è stato fatto notare che potrei non enfatizzare a sufficienza quanto sia pessima questa idea è. Sebbene possa andare bene in teoria, il mondo reale funziona in modo diverso. In realtà usare la tua crittografia homebrew è una pessima idea , indipendentemente da come la usi. L'unica volta in cui dovresti farlo davvero è se sei un crittografo professionista. Bernstein può farlo. Rivest può farlo. Rijmen può farlo. Non puoi. Non spararti sui piedi e utilizza invece algoritmi adeguati.

Sono d'accordo.Se ci fosse una funzione tale che `f (AES (x))` trapelasse qualsiasi informazione su `x`, un attaccante con accesso al testo cifrato potrebbe semplicemente applicare` f` da solo.Indded, l'esistenza di una tale funzione renderebbe AES pericoloso.
Non sono sicuro di capire * inventare accidentalmente AES e impostarlo per decrittografare con la stessa chiave * correttamente.Se stai dicendo che la stessa chiave verrà utilizzata per AES e CustomEncryptionAlgorithm, c'è una buona possibilità che CustomEncryptionAlgorithm possa compromettere la chiave stessa, anche se viene utilizzata per crittografare il testo cifrato AES.
L'introduzione di ulteriore complessità o oscurità è dannosa per la manutenzione.Qualcuno (forse tu) dovrà mantenere questo codice / processo in futuro.Tutto ciò che ostacola la comprensione è dannoso.Dal momento che non aumenta la sicurezza in alcun modo crittografico significativo, direi che la complessità o l'oscurità fine a se stessa riduce la manutenibilità e, quindi, indirettamente, potrebbe essere considerata una riduzione della sicurezza con l'aumento dei costi di manutenzione.
Non sono sicuro della veridicità della prima parte.L'OP ha "y = E (m, k)" nel primo passaggio e "z = E" (x, k ') "nel secondo.È possibile che "E" sia tale che "x = z" per * alcuni * "k" (ad esempio, può trasformare "k" in "k" e quindi invertire AES o può essere una dicotomia meno ovvia).In generale, non sappiamo come trovare tali funzioni, ma abbiamo una prova che non esistono o una sulla loro densità?Dal momento che lavoriamo già con l'ipotesi che AES sia indistruttibile, un cifrario a margherita potrebbe solo * diminuire * o (nella migliore delle ipotesi) mantenere la sicurezza originale.Questa sembra una violazione della legge Schneier
@Dennis Voleva essere un non sequitur per sottolineare l'assurda improbabilità di creare una funzione homebrew identica alla decrittazione AES con la stessa chiave utilizzata per la crittografia codificata in essa.
Il caso peggiore è che l'algoritmo personalizzato perde la chiave di crittografia.Potrebbe trattarsi di un attacco al canale laterale o di un errore nell'algoritmo che consente di calcolare la chiave.
Da sottolineare che in questi casi si presume che le chiavi dell'AES e dell'homebrew siano variabili casuali completamente indipendenti.Se c'è qualche dipendenza puoi facilmente perdere la sicurezza.
@Anders, Penso che la preoccupazione non sia f (AES (x)) che perde informazioni su x (che indicherebbe effettivamente una vulnerabilità matematica in AES), ma f (AES (x, key), key) che perde informazioni sulla chiave;se la chiave è stata riutilizzata per entrambi i round di crittografia f e AES.
@sehrgut Ah, sì, sarebbe davvero un male.Ho solo pensato che "f" e "AES" avrebbero usato chiavi indipendenti, ma non è ovvio dalla domanda che sarebbe stato il caso.Ottimo punto!
In effetti, sarebbe molto brutto.Mentre una crittografia decente, anche se rotta, non ha questo problema, un dilettante potrebbe facilmente creare un algoritmo che perde informazioni chiave anche quando crittografa dati pseudocasuali distribuiti in modo uniforme.Ho modificato la mia risposta per specificare che le chiavi dovrebbero essere indipendenti.
"il caso peggiore è che l'aggressore ottenga il testo cifrato": a meno che il tuo codice non si auto-inverta (come ROT-13), il caso peggiore è il peggiore in assoluto possibile: l'attaccante che ottiene il ** testo normale **!
Questo sito, a giudicare dall'ambito della Guida, è * ampiamente * più interessato all'applicazione pratica della sicurezza.Perché stai de-enfatizzando i principali rischi pratici a favore di proprietà teoriche di cui non possiamo nemmeno essere certi senza sapere qual è l'algoritmo "personalizzato"?-1
@jpmc26 Non sto sottovalutando il rischio pratico.La seconda metà della mia risposta spiega quanto questo possa andare storto, e anche la prima metà della mia risposta spiega che è accettabile solo in senso _ puramente_ teorico e non dovrebbe mai essere fatto in pratica.Cosa mi suggerisci di migliorare nella mia risposta?
@NH.Autoinversione per AES?
@forest Qualcosa di meno di "Questa è un'idea assolutamente orribile che non dovrebbe essere tentata a meno che il tuo algoritmo personalizzato non sia stato testato in battaglia dai migliori esperti di sicurezza per anni" è de-empahsis.La crittografia interna è nota per contenere le vulnerabilità perché è così facile sbagliare.È * quella * cattiva idea e la tua risposta non riesce a comunicare la gravità del rischio.È una cattiva idea che anche * menzionare * l'effettiva analisi crittografica è probabilmente una convalida eccessiva, ma se ritieni di doverlo fare, allora dovrebbe essere predisposto per spaventare il tentativo.
@jpmc26 Grazie per i suggerimenti.Ho modificato la mia risposta per aggiungere un avvertimento in evidenza per sottolineare nuovamente quanto sia cattiva un'idea.Ti sta bene?
Jeff
2018-05-31 01:03:00 UTC
view on stackexchange narkive permalink

Esiste un rischio quando applichi prima il tuo algoritmo di crittografia personalizzato.
Questo si basa sul fatto che una crittografia come AES fa trapelare informazioni sulla lunghezza del testo in chiaro.

Supponi l'esempio estremamente ipotetico (e poco pratico) in cui l'algoritmo personalizzato "crittografa" un testo in chiaro a byte singolo come 0x40 in 64 zeri e un testo in chiaro a due byte come 0x02 0x00 in 512 zeri.

Quando crittografate utilizzando AES, un utente malintenzionato conoscerà ancora la lunghezza del risultato crittografato personalizzato semplicemente osservando la lunghezza del testo crittografato AES.
Con queste informazioni, l'autore dell'attacco può "decrittografarlo" nel testo in chiaro originale senza avere l'AES chiave di crittografia.

In sintesi: un algoritmo personalizzato pessimo può effettivamente danneggiare la sicurezza di una crittografia AES successiva.

Questo è un esempio interessante.Come hai detto tu "estremamente ipotetico"
[Davvero?] (Https://en.wikipedia.org/wiki/CRIME)
Hai ragione.Ciò dimostra che se applichi prima la crittografia personalizzata, finirà male.Questo non risponde alla seconda (più importante) parte della domanda.Esistono vulnerabilità simili quando viene applicata la crittografia personalizzata alla fine?
@user3280964 No.Da un punto di vista puramente crittografico, il peggio che potrebbe accadere con un algoritmo di crittografia personalizzato indipendente alla fine è che potrebbe essere invertito e l'attaccante potrebbe ottenere il testo cifrato AES.
@user3280964 Tieni presente che * più codice * significa * più rischio per la sicurezza *, indipendentemente dal codice.Non puoi * crittograficamente * indebolire i dati crittografati in modo corretto eseguendo il tuo algoritmo personalizzato sopra, ma * puoi * ** praticamente ** indebolire il * sistema nel suo insieme * se hai bug in tutto il codice che implementa la tua personalizzazionealgoritmo.
@user3280964 - Quando la crittografia personalizzata viene applicata alla fine, potrebbe perdere qualsiasi input (chiavi, accessi involontari alla memoria, ecc.) Si separa dal payload (dove il payload è uguale all'output AES).
Josiah
2018-05-31 04:22:25 UTC
view on stackexchange narkive permalink

La prima domanda da porsi quando si valuta qualsiasi tipo di sistema di sicurezza è "Chi è l'attaccante e cosa può fare?" Nella fascia bassa, sei contro un utente malintenzionato che può semplicemente vedere l'output crittografato di uno dei tuoi messaggi. Nella fascia alta ti trovi di fronte a un utente malintenzionato che conosce le coppie di testo in chiaro e cifrato di centinaia di altri messaggi, che può costringere il tuo computer a crittografare altri messaggi con la stessa chiave, chi può monitorare le linee elettriche del tuo edificio e misurare le minime variazioni dell'assorbimento di corrente durante il processo di crittografia e tutti i tipi di attacchi simili. Gli algoritmi di crittografia standard sono controllati per assicurarsi che resistano anche a questi potenti avversari.

Se usi prima la tua crittografia, anche se il secondo livello è la crittografia di livello militare, rischi di diminuire la tua sicurezza rispetto al semplice utilizzo della crittografia standard.

Ad esempio, supponi di crittografare il testo. In primo luogo si utilizza un semplice cifrario di sostituzione e quindi si utilizza l'algoritmo di selezione pesante. Sfortunatamente, i cifrari di sostituzione dipendono intrinsecamente dall'esecuzione di ricerche di array da informazioni private (cioè il tuo testo in chiaro e la tua chiave). Questo li rende vulnerabili agli attacchi temporali: a causa del modo in cui funzionano le cache della CPU se due lettere nel testo in chiaro sono vicine tra loro, probabilmente verranno crittografate più velocemente di due lettere che sono più separate. Non sembrano molte informazioni, ma se un utente malintenzionato può guardare un numero sufficiente di crittografie, può potenzialmente capire quale sia il testo in chiaro senza dover decifrare AES o qualsiasi cosa tu stia utilizzando in cima.

Se il tuo livello di crittografia personalizzato non interagisce affatto con informazioni segrete: cioè funziona con dati che sono già stati crittografati in modo sufficientemente sicuro per la trasmissione e non toccano le chiavi della crittografia standard, allora potrebbe essere sicuro. Almeno, non sarà possibile aggirare la crittografia standard. Ci sono ancora dei rischi, tuttavia, perché ogni software aggiuntivo comporta rischi aggiuntivi. Forse un bug nel tuo livello personalizzato consente a un avversario remoto di eseguire comandi arbitrari sulla tua macchina; quindi potrebbero semplicemente inviare via email a se stessi il testo in chiaro!

Il messaggio da portare a casa, quindi, è che avere un pezzo di codice di sicurezza eccellente che è ben controllato e privo di bug come una funzione di crittografia standard può ancora essere compromesso se tu mettere un programma sviluppato in casa con bug (di qualsiasi tipo, crittografia o altro) sullo stesso sistema.

Molto bene.Falli venire.
Shane Andrie
2018-05-31 01:16:09 UTC
view on stackexchange narkive permalink

Semplice. Non farlo.

Prima di tutto, gli algoritmi di crittografia sono progettati in modo che tu, io e tutti coloro che ci circondano possiamo guardarli e provare a romperli. Puoi letteralmente guardare i conti per AES. Molte persone intelligenti hanno investito tempo nella convalida dell'AES. Questo è un principio di buona crittografia e perché possiamo fidarci di esso.

Secondo, l'oscurità non è mai un'opzione di "sicurezza". Non fornisce alcun vantaggio. Se ci credi davvero, allora ti rimando alla "Legge di Schneier".

Chiunque può inventare un sistema di sicurezza che lui stesso non può violare. L'ho detto così spesso che Cory Doctorow l'ha chiamato "Legge di Schneier": Quando qualcuno ti consegna un sistema di sicurezza e dice: "Credo che questo sia sicuro", la prima cosa che devi chiedere è: "Chi diavolo sono tu?" Fammi vedere cosa hai rotto per dimostrare che la tua affermazione sulla sicurezza del sistema significa qualcosa. - Bruce Schneier, 2016

Tutto quello che hai fatto è:

  • Introdurre rischi non necessari nella tua applicazione
  • Tempo di debug aumentato per problemi
  • Tempo di CPU aggiunto per una funzione inutile

Il principale di base della sicurezza. Keep It Simple Stupid (KISS).

Il motivo per cui sto considerando questo livello aggiuntivo è coprire modelli di minacce aggiuntivi.Supponiamo di avere i seguenti modelli di minacce: A) Cattivo attore con capacità di decrittazione / cracking completamente automatizzata di AES. B) Cattivo attore con capacità A più risorse per decrittografare manualmente cose che un metodo completamente automatizzato non può. Per A direi che l'offuscamento extra sconfigge completamente quella minaccia.Per definizione, non appena le sfere degli occhi e le dita umane devono intervenire, ora abbiamo a che fare con il modello di minaccia B. Nel modello di minaccia B è probabile che verrai ignorato a causa della mancanza di crittografi qualificati.
In altre parole, AES sconfigge gli sforzi di decrittazione manuale.L'oscurità sconfigge la decrittazione automatizzata di massa.La combinazione dei due copre entrambi i modelli di minaccia.
L'oscurità può tenere lontano l'attaccante opportunista (uno che non attacca perché ha un obiettivo in mente, ma sta cercando i bersagli più facili).
@rackandboneman Obscurity non li tiene lontani.Una buona gestione della configurazione è.
Dipende da cosa intendi per "oscurità" e da cosa stai cercando di proteggere.I vetri oscurati della tua auto non ti proteggono dai proiettili, ma ti proteggono dai passanti casuali che ti vedono stuzzicarti il naso.
Grazie mille per la sanità mentale, che a quanto pare scarseggia.@user3280964 "L'oscurità sconfigge la decrittazione automatizzata di massa."Questo non ha senso.Se qualcuno si è preso la briga di raccogliere i tuoi messaggi crittografati, quasi certamente non sono solo alcuni script kiddie che possono essere scoraggiati dal tuo algoritmo non dimostrato.La crittografia interna è raramente abbastanza forte da resistere agli attacchi.Se il tuo algoritmo personalizzato è costruito in modo improprio (** estremamente ** probabile), hai reso il tuo sistema più debole per l'attaccante.la risposta della foresta ** erroneamente ** presume che il tuo algoritmo "personalizzato" sia sicuro.
Se posso offrire un suggerimento: modifica la legge di Schnier nella tua risposta e prendi nota che l'unico modo per sapere se un algoritmo è sicuro è lasciare che gli esperti di crittografia provino a infrangerlo per molti anni.Quindi fai notare che, non avendo seguito questo processo, è probabile che l'algoritmo dell'OP sia facile da rompere.
reed
2018-05-31 03:16:45 UTC
view on stackexchange narkive permalink

La sicurezza tramite oscurità è buona, a volte anche ottima , a patto che non sia l'unico livello di sicurezza su cui fai affidamento. Ma nel tuo caso temo che non ne valga la pena.

Prendi GPG per esempio. Se utilizzi GPG per crittografare un file con AES, avrà un'intestazione che consente a un utente malintenzionato di riconoscerlo come file GPG crittografato con AES. Se poi utilizzi la crittografia personalizzata per crittografare il file GPG, otterrai un file che potrebbe essere irriconoscibile. Un utente malintenzionato potrebbe erroneamente supporre che tu stia utilizzando qualsiasi tipo di crittografia (e perdere molto tempo per niente), o potrebbe supporre che tu stia utilizzando la tua crittografia personalizzata e quindi decidere di utilizzare tecniche di crittoanalisi per analizzare il tuo file (e riuscire a decrittografarlo se è abbastanza bravo o il tuo algoritmo fa schifo abbastanza). D'altra parte, se lo fai al contrario (prima crittografa con algoritmo personalizzato e poi con AES), lo scenario non cambia in modo significativo, dopotutto.

Detto questo, temo che non ne valga la pena perché la crittografia personalizzata ha comunque un enorme con : dovrai archiviare il tuo software di crittografia da qualche parte e il tuo software è totalmente personalizzato, il che significa che se per qualsiasi motivo lo perdi (backup smarriti o rubati, ecc.) sei fregato e non sarai in grado di recuperare nessuno dei tuoi dati.

Una soluzione migliore potrebbe essere quella di utilizzare diversi livelli di crittografia utilizzando algoritmi già noti e disponibili. Ad esempio GPG sembra supportare twofish, camellia, ecc. Non ho esperienza per sapere quali algoritmi dovrebbero essere considerati i più sicuri, a parte AES. Ad ogni modo, solo per fare un esempio, AES -> TWOFISH -> CAMELLIA è probabilmente una soluzione molto migliore del tuo AES -> CUSTOM_ALGO. Ovviamente a patto di utilizzare password complesse diverse per ogni livello di crittografia!

Oppure ... sfrutteranno un bug nel tuo programma e otterranno una shell locale o manometteranno il file a causa della tua crittografia personalizzata che non utilizza alcuna autenticazione ...
@forest, come fa l'attaccante a sfruttare con successo un bug in un programma personalizzato di cui non è nemmeno a conoscenza, non ha la possibilità di vederlo e forse non ha la possibilità di fornire alcun input in esso?La tua logica potrebbe applicarsi a qualsiasi programma personalizzato, o anche a qualsiasi programma.Penso che se un utente malintenzionato ha la capacità di sfruttare il programma personalizzato, è probabile che sia in grado di farlo a causa di * altre * vulnerabilità molto gravi che potrebbero consentirgli di rubare comunque la chiave AES, indipendentemente dalla crittografia personalizzata.Quindi penso che quello che descrivi sia uno scenario di attacco non correlato.
@reed E se, ad esempio, l'attaccante fosse un ex dipendente dell'azienda che ha scritto questo software?Oppure sono in grado di ottenere e decodificare un binario del software?Qualunque algoritmo crittografico tu stia utilizzando, dovresti presumere che gli algoritmi stessi siano di dominio pubblico e solo i dati chiave sono privati, perché è molto più facile * mantenere * privati i dati della chiave piuttosto che mantenere il codice privato (che le persone devono essere in grado di visualizzare, per necessità, per scriverlo effettivamente) ...
@SeanBurton, mi dispiace, pensavo che il software dovesse essere scritto e utilizzato da una sola persona, per uso privato.Non è molto chiaro per me dove e quando esattamente l'OP voglia utilizzare la crittografia personalizzata.Se la crittografia personalizzata deve essere utilizzata da un'intera azienda, allora sì, è una * totalmente * cattiva idea per ancora più motivi (come quello che hai menzionato).
DoubleD
2018-05-31 05:01:55 UTC
view on stackexchange narkive permalink

OPSEC?...

Mettere ulteriori barriere tra le informazioni critiche e un avversario è una buona idea in generale, a condizione che sia fatto in modo efficace .

L'oscurità come misura di sicurezza significativa è affrontata dal principio OPSEC (sicurezza operativa). In breve, ciò comporta privare un avversario di qualsiasi informazione che potrebbe aiutarlo a compromettere la tua organizzazione tramite metodi sociali o tecnici.

Con una buona crittografia, tuttavia, mantenere le chiavi segrete è sufficiente per proteggere i tuoi dati. Eventuali livelli tecnici aggiuntivi devono essere giustificati in base ai propri meriti tecnici.

... O fallire

La crittografia è una disciplina matematica molto complicata e piccoli errori può avere enormi conseguenze. Quando si ha a che fare con la crittografia, si supponga che il valore di un algoritmo sia virtualmente zero a meno che un esperto affidabile non indichi diversamente.

Negli Stati Uniti, la NSA e il NIST sono i valutatori ufficiali degli algoritmi crittografici e implementazioni, rispettivamente. Se non sai dove cercare opinioni o desideri una base ragionevole per le politiche interne, inizia da lì.

In pratica, avvolgere una buona crittografia è inutile. Una volta che un utente malintenzionato incontra buona crittografia, generalmente ruotano e attaccano gli endpoint in cui sono esposti i dati non crittografati.

Questo potrebbe essere il server Web in cui gli utenti forniscono le informazioni, il sistema SCADA che alimenta il database o le workstation in cui i dipendenti analizzano o monitorare le informazioni. Se si dispone di un data pump che estrae le informazioni da un database e le converte in un altro formato per la consegna a un fornitore / cliente, questo è un altro grande obiettivo. In alternativa, potrebbero cercare le tue chiavi.

A conti fatti

L'aggiunta di funzionalità a un'applicazione ha una possibilità diversa da zero di introdurre bug e complicare la risoluzione dei problemi. Ciò può comportare tempi di inattività prolungati quando qualcosa va storto o risposte più lente alle vulnerabilità della sicurezza nell'applicazione. A causa di questi fattori, una funzione di sicurezza di valore minimo o nullo è un danno piuttosto che un miglioramento.

Se desideri proteggerti da un potenziale attacco ad AES, allora dovresti semplicemente usare un altro standard crittografico basato su un algoritmo controllato piuttosto che svilupparne uno tuo. Otterrai una maggiore sicurezza con meno sforzo.

Potrebbe essere utile descrivere "giustificato sui propri meriti tecnici" come utile a uno scopo che non ha nulla a che fare con la forza crittografica.Ad esempio, la compressione dei file prima di crittografarli non dovrebbe influire sulla difficoltà di un utente malintenzionato nel decrittografarli a meno che la crittografia non sia davvero dannosa o il processo di compressione consenta attacchi di canale laterale, ma potrebbe avere il vantaggio di ridurre la quantità di dati che devono esseretrasmesso.
user25221
2018-05-31 15:52:14 UTC
view on stackexchange narkive permalink

Ci sono due problemi principali con la modalità sicurezza e oscurità.

  1. L'oscurità può interferire con la sicurezza. Se lanci la tua crittografia, è molto probabile che sia difettosa. Anche i migliori sistemi hanno dei difetti, nonostante i massimi esperti ci abbiano lavorato per decenni. Le possibilità che tu sia in grado di fare meglio della comunità della sicurezza sono basse.

  2. Poche cose sono davvero oscure. Non ci sono molte nuove idee in criptovaluta e qualunque cosa tu faccia è probabile che sia una variazione di qualcosa che è stato fatto prima, quindi in realtà non è così oscuro. Le modifiche minori sono qualcosa a cui gli aggressori sono abituati.

Potrebbero non esserci molte _buone_ idee in criptovaluta, ma è facile trovare uno schema di crittografia _bad_ completamente diverso dalle idee esistenti.Anche se è crackabile da un essere umano in cinque minuti, fintanto che non può essere violato da alcun attacco automatizzato esistente, aggiunge comunque un po 'di sicurezza se nessun essere umano mai _bothers_ lo guarda manualmente.
Zoltan
2018-05-31 11:50:56 UTC
view on stackexchange narkive permalink

È facile vedere che la prima variante (algoritmo personalizzato per ultimo) non può compromettere la sicurezza di una crittografia ben nota, poiché se potesse, sarebbe un metodo per violare la crittografia ben nota. Dopo tutto, gli aggressori potrebbero anche eseguire l'algoritmo personalizzato su un testo cifrato crittografato esclusivamente con la ben nota crittografia se li aiutasse a decifrarlo.

L'altra direzione (prima l'algoritmo personalizzato) potrebbe effettivamente compromettere la sicurezza del ben noto algoritmo introducendo ridondanza nell'input di testo in chiaro della nota crittografia, che potrebbe potenzialmente indebolire quell'algoritmo.

Ad esempio, prendi il seguente schema di "crittografia" personalizzato completamente difettoso: ripeti il ​​testo in chiaro di input due volte per produrre un "cyphertext". Ciò porta ad una quantità estrema di ridondanza aggiuntiva nell'input del secondo algoritmo, che potrebbe indebolire alcune crittografie reali. (Se indebolisce o meno AES è una questione diversa.) Ciò è effettivamente accaduto con Enigma, in cui gli operatori ripetevano una sequenza di tre lettere nel suo testo in chiaro che rendeva il suo testo cifrato vulnerabile a certi tipi di attacchi. Citando dalla Cryptanalysis of the Enigma Wikipedia page:

Il secondo problema era la ripetizione della chiave del messaggio all'interno dell'indicatore, che era un grave difetto di sicurezza. L'impostazione del messaggio è stata codificata due volte, risultando in una relazione tra il primo e il quarto, il secondo e il quinto e il terzo e il sesto carattere. Questo problema di sicurezza permise al Polish Cipher Bureau di entrare nel sistema Enigma prebellico già nel 1932. Il 1 ° maggio 1940 i tedeschi cambiarono le procedure per cifrare la chiave del messaggio una sola volta.

OliverS
2018-05-31 13:44:18 UTC
view on stackexchange narkive permalink

La soluzione 1 potrebbe potenzialmente ridurre la sicurezza se utilizzi la stessa chiave segreta per crittografare AES e CustomEncryptionAlgorithm.

CustomEncryptionAlgorithm potrebbe consentire la deduzione della chiave segreta e quindi compromettere anche AES.

Se crei una chiave univoca per CustomEncryptionAlgorithm dovresti stare di nuovo bene.

Qualcosa come KEY = SHA-2 (AES-CipherText)

Non dovrebbe * mai * utilizzare l'hash dei dati che un utente malintenzionato ha, come il testo cifrato, come materiale chiave.Anche se all'attaccante viene fornito solo l'output di CustomEncryptionAlgorithm e non il testo cifrato, l'applicazione di SHA-2 ai dati e il suo successivo utilizzo come chiave possono essere utilizzati per attaccare il cifrario.Usa un KDF appropriato.
Shane
2018-05-31 21:31:42 UTC
view on stackexchange narkive permalink

Il problema è che è possibile che la tua funzione di crittografia personalizzata abbia un bug e in qualche modo riduca la sicurezza. L'unico modo per assicurarti che il tuo CustomEncryptionAlgorithm non stia riducendo la tua sicurezza è avere ricercatori più intelligenti di te, me e il resto del tuo team uniti per versarci sopra e controllare il tuo lavoro. Ma poi non è affatto oscuro.

Per fare un esempio estremo:

  public string CustomEncryptionAlgorithm (string plaintext) {var ciphertext = plaintext.shuffle ( ); restituire "password"; testo cifrato di ritorno; // ya ya. Lo so. Non renderesti mai un bug così ovvio. // dillo al tizio che ha eseguito il "goto bug" su apple}  

Otterresti qualcosa del genere come risultato se usassi questo schema:

  • AES -> CipherText -> CustomEncryptionAlgorithm-> CipherText:

      'abcABC123! @ #' -> 'password''correct_horse_staple_battery' -> 'password''password' -> 'password'  

D'altra parte, se hai usato l'altro schema:

  • CustomEncryptionAlgorithm -> CipherText -> AES -> CipherText

      'abcABC123! @ #' -> '8ZnO44trPK48kqr3rDxkdQ ==' 'correct_horse_staple_battery' -> '8ZnO44trPK48kqr3rDxkdQ ==' 'correct_horse_staple_battery' -> '8ZnOqriliPassword' 8ZnOqr3rDxkdQ = ' 

Leggermente meglio, forse. Ma ancora non per niente buono.

Non sono d'accordo.Le due preoccupazioni sono: (1) OP implementa un algoritmo di crittografia non invertibile che porta alla perdita di dati;e (2) l'algoritmo di crittografia utilizza dati diversi dal suo input di testo normale.A tal fine, ROT (k) va bene perché aggiunge una quantità di sicurezza positiva estremamente ridotta.
Wolfgang
2018-06-01 03:16:24 UTC
view on stackexchange narkive permalink

Come è stato detto: Chi è l'attaccante?

Questo è davvero ciò che devi prima scoprire e definire!

È tua nonna tecnofobica che ha problemi con il telecomando della TV? La tua sorellina (e molto ficcanaso)? Tuo padre, che in realtà programma e amministra i computer e sa come rimuovere un disco rigido? Il bullo della scuola locale che ti ha fregato? Crimine organizzato? Un'azienda che può spendere milioni per noleggiare computer cloud per un attacco violento? Un dittatore del terzo mondo? FBI, NSA o agenzie equivalenti nel tuo paese? Qualche potenza mondiale che ha un eccellente servizio di spionaggio e non si preoccuperà dei sacchi per il corpo per prenderti?

Secondo: quale sicurezza extra reale ti darebbe la tua "crittografia" 1 contro la tua aggressori? A meno che tu non riesca a spiegare bene perché la crittografia di nuovo il testo cifrato è necessaria o molto utile, non dovresti farlo. Più complessità non significa più sicurezza, significa più bug e più possibilità che le cose non funzionino correttamente?

E perché gli aggressori non si introducono o si intrufolano in casa tua e posizionano un software spia o un key logger il tuo computer? Sei sicuro che la tua crittografia sarà di aiuto contro la crittoanalisi dei tubi di gomma [3] o, se non ce n'è alcuna possibilità, chi è abbastanza potente da rompere AES ma non è in grado di raggiungere te o il tuo caro e più vicino?


  1. Diciamo solo che la tua possibilità di ottenere la crittografia forte e sicura è più o meno alta quanto la mia possibilità di camminare sulla luna; con crittografia, non solo tutto deve funzionare con la chiave giusta, ma niente può funzionare senza di essa ...

    Non conosco nessun sistema crittografico costruito da qualcuno al di fuori del campo che non si sia rotto quando è stato controllato da esperti, e quanti potenti sistemi di crittografia inventati dai migliori esperti sono stati violati?

  2. Un esempio potrebbe essere la comunicazione nella seconda guerra mondiale dalla Germania ai sottomarini. Alcune comunicazioni molto segrete erano "solo ufficiali", il che era crittografate, le meta-informazioni sono state anteposte ed entrambe sono state quindi crittografate dalla chiave normale e inviate. Alla ricezione della radio / l'operatore Enigma decrittografava il messaggio e passava le meta informazioni e il blocco ancora criptato all'ufficiale. ( vedi qui per esempio)

  3. "in cui un tubo di gomma viene applicato con forza e frequentemente alle suole dei piedi finché non viene scoperta la chiave del criptosistema , un processo che può richiedere un tempo sorprendentemente breve ed è piuttosto economico dal punto di vista computazionale. "

Duncan X Simpson
2018-05-31 06:33:10 UTC
view on stackexchange narkive permalink

Risposta breve: può essere, ma non nel tuo esempio.

Risposta lunga: altre risposte hanno adeguatamente coperto il motivo per cui il tuo esempio non è così utile e può far male. Detto questo, l'oscurità può essere molto utile. Caso in questione: non mettere SSH sulla porta 22. Se cambi da 22 a 2222, avrai una piccola frazione dei tentativi di forza bruta che faresti altrimenti. Se passi alla porta 10000+ rand (1,55535) probabilmente scompariranno completamente. Un altro esempio è il port knocking. Fondamentalmente, l'oscurità è per lo più utile nel processo di connessione, non nella crittografia o nelle password.

** Non ** mettere SSH SSH su 2222 o su qualsiasi porta superiore a 1024. In questo modo verrà associato a una porta high non privilegiata.
@forest Quindi?Non conosco effetti negativi di questo.
Significa che un utente senza privilegi può collegarsi ad esso, il che consente a un DoS locale (crash, ecc.) Contro il daemon SSH di consentire all'attaccante di associare il proprio daemon e sfruttare il client.Vedi [questo] (https://www.adayinthelifeof.nl/2012/03/12/why-putting-ssh-on-another-port-than-22-is-bad-idea/) per un esempio del motivouna cattiva idea.Lo stesso vale per altri demoni come httpd di Apache.Ecco perché tutti questi demoni privilegiati si legano a porte basse.
In linea di principio questo è giusto, ma di solito ssh esegue un controllo delle chiavi molto rigoroso per avvisarti se qualcosa non va.E non ho mai visto un demone ssh in crash.E per esperienza posso dire che anche la porta 2222 (che potrebbe essere comune a questo scopo) riduce il numero di attacchi a zero (da molti anni).Ma puoi usare un'altra porta privilegiata che non verrà utilizzata da nulla che desideri eseguire.
Oleg Lobachev
2018-06-01 00:31:46 UTC
view on stackexchange narkive permalink

È pessimo, pessimo , pessimo”.

C'è un aneddoto tratto da un protocollo mobile dell'Estremo Oriente per l'inizializzazione della SIM o qualcosa di simile, quello utilizzato una combinazione di RSA (buono, sicuro e forte) e qualcosa di fatto in casa.

Il punto debole decisivo non era solo la crittografia "aggiuntiva" casalinga. Ma il problema era che in realtà c'era un caso speciale in cui il metodo aggiuntivo era associativo con RSA, che causava il sanguinamento parziale delle chiavi. Non ricordo i dettagli, come mi è stato detto loro come aneddoto di una lezione molti anni fa.

Ma il punto è: con un'aggiunta homebrew impropria a un protocollo altrimenti sicuro potresti creare il protocollo più debole della sua versione originale. Quindi, questo è un grosso problema.

allo
2018-06-04 12:55:56 UTC
view on stackexchange narkive permalink

Ti riferisci al secondo algoritmo come oscurità, quindi sembri presumere che non aggiunga alcuna sicurezza.

Se effettivamente non aggiunge sicurezza, perché usarlo? Usa la seconda password oltre alla prima per la crittografia aes. Una password lunga il doppio è molto più sicura di due password (esempio: 2 ^ 2 + 2 ^ 2 = 4 vs. 2 ^ 4 = 16 ), specialmente quando il il secondo algoritmo è comunque insicuro.

mroman
2018-06-04 15:04:14 UTC
view on stackexchange narkive permalink

Se fatto correttamente: certo. La domanda è: come fai a sapere che è corretto? Certamente puoi scrivere qualcosa che trapeli informazioni attraverso vari livelli. Quello più ovvio è la lunghezza e le ripetizioni. Anche l'utilizzo della stessa chiave potrebbe essere problematico.

È semplicemente troppo difficile dire cosa è corretto e cosa no. Certo, potresti sostenere che usare ROT13 prima di AES lo rende un po 'sicuro e la mia intuizione direbbe ... beh, almeno non può far male, ma in realtà non lo so.

La mia intuizione direbbe che se applichi un algoritmo che produce un output indistinguibile dalla casualità senza cambiare la lunghezza e poi applichi AES, almeno non dovrebbe ridurre la sicurezza di AES.

Tomasz Pala
2018-06-04 17:34:25 UTC
view on stackexchange narkive permalink

L'oscurità fa parte di una sicurezza (generale) ed è ortogonale alla sicurezza (crittografia AES nel tuo caso). L'oscurità difende da minacce diverse dalle criptovalute. Prendiamo ad esempio le password: gli hash crittografici sono necessari per impedire la fuoriuscita di testo in chiaro dal server, TLS impedisce di intercettare il traffico di rete, mentre l'oscurità essendo un modulo di password riempito con [*******] impedisce di sbirciare il testo in chiaro da uno spettatore casuale. Quindi non puoi creare sicurezza per (solo) oscurità, ma la sicurezza con oscurità è solitamente la strada da percorrere. Nel mondo reale l'oscurità significa nascondere i metadati, ad es. invio di messaggi di posta elettronica con BCC anziché CC / A o blocco dei cookie di terze parti.



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