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?
risposta
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).
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
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. –
(risposta aggiornata con informazioni aggiuntive) –
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.
Il mio sito ha dovuto ottenere un waver per la conformità FIPS in .net.
Dove ha preso la rinuncia? – SwDevMan81
NETWARCOM? Questo è il comando della Marina che tramanda gli editti sulla sicurezza. –
- 1. Come verificare che un'applicazione Asp.NET sia compatibile con FIPS
- 2. Conformità FIPS per il mio progetto Android
- 3. AES (aes-cbc-128, aes-cbc-192, aes-cbc-256) crittografia/decrittografia con openssl C
- 4. AES (aes-ige-128, aes-ige-192, aes-ige-256) crittografia/decodifica con openssl C
- 5. encrypt- decrypt con AES utilizzando C/C++
- 6. C++ AES Encryption Class
- 7. TripleDESCryptoServiceProvider FIPS 140-2 Compliance
- 8. Problemi con algoritmi crittografici convalidati FIPS
- 9. Codifica RSA e AES
- 10. __proto__, quando sarà sparito? Alternative?
- 11. Classe enumerabile C# - compatibile con VBA
- 12. Libreria C++ URLencode (compatibile con Unicode)?
- 13. programma C++ compatibile con Windows 95
- 14. Libreria SSH conforme a FIPS per Java
- 15. Crittografia con AES-256 Java
- 16. Equivalente Java della crittografia C# AES
- 17. Quando IE6 non sarà più supportato?
- 18. Quando @Predestroy sarà invocato su bean con scope prototipo?
- 19. Cifra e decrittografa la stringa con C++, Openssl e aes
- 20. Test per istruzioni AES-NI da C#
- 21. È compatibile Boo 100% C#?
- 22. Quando sarà disponibile l'API "Office lens"
- 23. Quando sarà disponibile ES6 in IE?
- 24. Quando sarà ECMAScript v 6 diventare standard
- 25. Serializzazione compatibile PHP da C/C++
- 26. Utilizzo di HashSet in C# 2.0, compatibile con 3.5
- 27. È compatibile con devolution_authorization?
- 28. Swift non è compatibile con pre-ARC Objective-C?
- 29. Librerie C# per crittografare/decifrare usando AES
- 30. È compatibile con Android POSIX?
Domanda correlata: http: // stackoverflow.com/domande/371.534/fips asp-net-2-0-RijndaelManaged-crittografia-algoritmo-vs- –
Ho letto che si poteva mettere qualcosa di simile in un file di configurazione: configuration> Ma non sembrava funzionare, l'applicazione era ancora chiusa. –
SwDevMan81
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