2009-06-02 12 views
16

In questo momento, l'unico modo per ottenere l'algoritmo RijndaelManaged per lavorare su un computer con l'impostazione di protezione locale per FIPS attivata, è disable it. È un computer governativo, quindi non sono sicuro di come possa volare. Ho visto post sul msdn blog sites che dicono che stanno lavorando su una versione compatibile con FIPS AES, ma non riesco a trovare altro. Qualcuno sa quando questo potrebbe accadere?Quando l'algoritmo C# AES sarà compatibile con FIPS?

+0

Domanda correlata: http: // stackoverflow.com/domande/371.534/fips asp-net-2-0-RijndaelManaged-crittografia-algoritmo-vs- –

+0

Ho letto che si poteva mettere qualcosa di simile in un file di configurazione: Ma non sembrava funzionare, l'applicazione era ancora chiusa. – SwDevMan81

+1

Ok, ho ottenuto il flag enforceFIPSPolicy per funzionare, risulta che avevo bisogno di aggiungerlo sotto tutti i tag nella sezione di configurazione del file exe.config, non sembra funzionare in alto sopra le configSections e userSettings. Spero che aiuti gli altri. – SwDevMan81

risposta

16

Non l'ho mai capito prima di questa domanda, ma hai ragione. Il costruttore ha questo:

public RijndaelManaged() 
{ 
    if (Utils.FipsAlgorithmPolicy == 1) 
    { 
     throw new InvalidOperationException(Environment.GetResourceString("Cryptography_NonCompliantFIPSAlgorithm")); 
    } 
} 

System.Security.Cryptography.AesManaged ha qualcosa di simile:

public AesManaged() 
{ 
    if (CoreCryptoConfig.EnforceFipsAlgorithms) 
    { 
     throw new InvalidOperationException(SR.GetString("Cryptography_NonCompliantFIPSAlgorithm")); 
    } 
    this.m_rijndael = new RijndaelManaged(); 
    this.m_rijndael.BlockSize = this.BlockSize; 
    this.m_rijndael.KeySize = this.KeySize; 
} 

Hai provato System.Security.Cryptography.AesCryptoServiceProvider? Dovrebbe funzionare poiché utilizza l'implementazione FIPS AIPS basata su CAPI incorporata in Windows.

This question nel forum Microsoft di base della libreria di classi .NET discute quali algoritmi sono conformi FIPS e ha buoni collegamenti.

Sembra che Microsoft sta facendo a consistent effort to obey the setting di HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Lsa \ FIPSAlgorithmPolicy su macchine pre-Vista e l'uso del BCryptGetFipsAlgorithmMode API per la post-Vista.

Suppongo che ci sia uno sforzo non banale per certificare un'implementazione conforme a FIPS, motivo per cui Microsoft probabilmente non vuole ripetere il processo e offre solo AesCryptoServiceProvider per i clienti che hanno assolutamente bisogno di questo requisito.

This MSDN blog post ha un commento che lo rende più chiaro:

Il modo più semplice per capire se un algoritmo è compatibile o non è a sguardo al suffisso. Nessuno dei tipi gestiti * è certificato FIPS. I tipi * CryptoServiceProvider e * Cng tuttavia, potrebbero essere certificati FIPS . Se implementano un algoritmo consentito da FIPS e sono utilizzando i provider Microsoft predefiniti, lo saranno .

Ad esempio, SHA256Managed non è (perché è * Gestito). SHA256CryptoServiceProvider e SHA256Cng sono.
MD5CryptoServiceProvider non è (poiché MD5 non è un algoritmo FIPS).

+0

Abbiamo provato prima AesCryptoServiceProvider, ma non siamo riusciti a ottenere i risultati di crittografia/decrittografia desiderati e non penso che sia supportato nel framework compatto. Tutto con RijndealManaged sembrava ok, finché non ci siamo imbattuti in questo problema – SwDevMan81

+0

Per "risultati", intendi le prestazioni? Sembra che Microsoft non voglia passare attraverso un processo di convalida dell'implementazione per qualcosa che va oltre il CAPI per l'ora corrente. Microsoft si è chiaramente impegnata a (probabilmente) ad adeguarsi ai clienti federali che volevano un singolo bit di politica che potevano impostare per proibire soluzioni non FIPS. È possibile utilizzare una libreria come BouncyCastle (http://www.bouncycastle.org/csharp/index.html) che ignora questo bit se si desidera semplicemente utilizzare un'implementazione FIPS gestita. –

+0

(risposta aggiornata con informazioni aggiuntive) –

1

L'utente non gestito AesCryptoServiceProvider è certificato se il sistema operativo stesso è certificato poiché chiama il sistema operativo. E sarà anche un sito dannatamente più veloce, a costo della compatibilità multipiattaforma.

1

Il mio sito ha dovuto ottenere un waver per la conformità FIPS in .net.

+0

Dove ha preso la rinuncia? – SwDevMan81

+0

NETWARCOM? Questo è il comando della Marina che tramanda gli editti sulla sicurezza. –

Problemi correlati