2013-08-22 8 views
7

I 'm lavorando sulla mia sicurezza delle applicazioni web e volete sapere se io uso questo:quale configurazione di machineKey è migliore?

<machineKey validationKey="AutoGenerate,IsolateApps" 
compatibilityMode="Framework45" decryptionKey="AutoGenerate,IsolateApps" 
validation="SHA1"/> 

nel mio web.config, ora primo utente invia prima richiesta al mio sito e in questo tempo validationKey verrà a creare e dopo che il secondo utente invia la seconda richiesta, la chiave di convalida verrà nuovamente creata o cosa?

e sono le stesse chiavi di convalida per tutti gli utenti?

cos'è la deferenza tra quella configurazione e questa?

<machineKey compatibilityMode="Framework45" 
validationKey="37BAD4B702C65CF39B1ED514AC4B3D88990DDF784AA0895659 
B528ED95F8CA0A9CD1AF5ED92A2599362684CB8D204AC30D07E6BF0CF65194A5129" 
decryptionKey="B450FB3271C49E6BA89A0C5C8D06B61875BCE4916A40474ED" 
validation="SHA1" decryption="AES" /> 

quale è meglio usare?

risposta

12

AutoGenerate significa che la vostra chiave è auto generato volta e quindi memorizzato (dal servizio di protezione locale) - in altre parole, non cambia tra le richieste - in realtà, non dovrebbe mai cambiare sulla stessa macchina .

IsolateApps significa che ogni applicazione (ETA: principalmente, vedi sotto) riceve la propria chiave di validazione/decifratura - piuttosto che tutte le applicazioni sulla macchina condivisione di un singolo tasto. Tuttavia, la chiave viene generata e quindi memorizzata la prima volta che è necessaria e verrà riutilizzata per tutte le richieste successive.

Aggiornamento 2017: ASP.NET 4.5 aggiunto IsolateByAppId, che aggiunge ulteriore isolamento rispetto a IsolateApps. IsolateApps crea una chiave diversa per ogni app in base al suo percorso di directory virtuale. Ciò significa che se due app sullo stesso server hanno lo stesso percorso virtuale (ad esempio /), solo essendo distinte per essere ospitate su porte o nomi host diversi, riceveranno comunque la stessa chiave, anche con abilitato per IsolateApps. IsolateByAppId creerà chiavi diverse in base all'applicazione AppDomainAppID. (Fine dell'aggiornamento)

Tuttavia, se l'applicazione è ospitato su un web farm, nel cloud, su un cluster, ecc - in cui le richieste possono essere trattati da macchine diverse, è necessario il chiave per essere la stessa per tutte quelle macchine - da qui le chiavi pre-generate nel tuo secondo esempio. Ricorda che devi generarli da solo (e generarli correttamente), piuttosto che riutilizzare quelli di qualcun altro.

Here's an easy way to generate the keys with IIS 7

ETA: Per evitare legame marciume, ecco una sinossi del link qui sopra: IIS 7 e versioni successive include la macchina la generazione di chiavi nella Gestione utente IIS: Sotto Machine Key per il tuo sito (trovato in ASP Sezione .NET), troverai un'azione Generate Keys nel pannello delle azioni. Questo utilizza RNGCryptoServiceProvider per generare chiavi di decodifica e convalida per te.

(Una volta, apparentemente lo SQLMembershipProvider si lamentava delle chiavi generate automaticamente, ma solo per evitare il problema precedente se l'applicazione dovesse finire non ospitata su un singolo server).

Microsoft consiglia di utilizzare i valori predefiniti se la situazione di cui sopra non si applica a voi, ad es.:

  • Se l'applicazione è ospitato su un singolo server: Usa AutoGenerate,IsolateApps
  • Se l'applicazione è su un/servizio cloud rete web farm/cluster: utilizzare una chiave generata manualmente.

(Si specifica anche "AES" come algoritmo di decrittografia nel secondo esempio, ma poiché AES è il valore predefinito, non è una differenza tra i due).

Aggiornamento 2017: Perché dovrei utilizzare IsolateApps (e/o IsolateByAppId)?

La domanda dovrebbe davvero essere, perché non sarebbe voi? È attivo per impostazione predefinita. Essendo un host senza di esso e ospitando più applicazioni, ogni applicazione otterrebbe la stessa chiave, che non è lo scenario migliore, se non si ha il controllo di tutte le applicazioni (ad esempio un host condiviso).

Ha degli svantaggi (oltre a essere inutile per Web farm/cloud/cluster)? Sì, un po '. IsolateApps ridurrà l'entropia della chiave di crittografia di 32 bit (da 192 bit a 160), perché 32 bit della chiave saranno un hash della tua directory virtuale, che è noto a un utente malintenzionato (ad esempio, se la tua app è a la radice del dominio, questi 32 bit sarà 4e ba 98 b2. IsolateByAppId riduce ulteriormente di altri 32 a 128 bit.

che si lascia con quello (fondamentalmente) ammonta a 128 bit AES anziché 192 bit AES per la chiave di decrittazione.Analogamente, la chiave di convalida sarà ridotta da una entropia di 256 bit a 192 bit

Disclaimer: Il seguente paragrafo è un pericolo La cosa più importante da dire in crittografia, quindi fare ulteriori ricerche piuttosto che fidarsi se si sta facendo un lavoro di sicurezza fondamentale - e in particolare se si stanno utilizzando le chiavi per i dati con valore informativo oltre il prossimo decennio.

In ogni caso: se non si conoscono le implicazioni delle riduzioni di entropia di cui sopra, è improbabile che tali implicazioni ti mordino. La sicurezza a 128 bit con AES e l'entropia a 192 bit per la chiave di convalida (un hash) è, nel 2017, più che "abbastanza buona". (Quindi perché questo non è completamente documentato in primo luogo). (Fine aggiornamento)

+0

grazie, ottima risposta – motevalizadeh

+0

Thx per la risposta, ma voglio ancora capire qualcosa: perché mi piacerebbe utilizzare IsolateApps? e inoltre, qual è il problema se ricevo più app con chiavi diverse (stessa chiave per la stessa app su tutti gli host del cluster ma diversa da un'app all'altra)? – DestyNova

+1

@DestyNova: aggiunti ulteriori commenti su IsolateApps e vari aggiornamenti sulle altre informazioni. Come ho scritto sopra, la domanda è quando * non lo * vuoi usare? L'altra domanda è in realtà una domanda diversa (quindi dovresti crearne una), ma normalmente non dovresti avere problemi con più app con chiavi diverse, a meno che tu non abbia esplicitamente bisogno di condividere per es. crea un'autenticazione tra di loro (in modo che l'accesso a un'app possa accedere all'altra). – JimmiTh

Problemi correlati