asp.net - Udsted krypterende filer ved hjælp af Rijndael Managed

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har arbejdet på en Asp.Net applikation i et stykke tid. I denne applikation kan brugeren vedhæfte filer til nogle elementer. Jeg gemmer disse filer i en mappe inde i rodmappen.


Det har fungeret fint i mange forskellige Windows-miljøer (Windows Server 2008, 2010, 2012 ....)


Sidste måned rapporterede en ny bruger en fejl, da han forsøgte at vedhæfte filer. Applikationen returnerede en null undtagelsesfejl, jeg kunne ikke finde ud af, hvad der forårsagede det, og jeg kunne ikke simulere fejlen.


Jeg begyndte at mistanke om, at problemet var relateret til den kryptering, jeg bruger i ansøgningen. Brugeren fortalte også, at han havde kørt et script for at lave ændringer i Windows-registreringsdatabasen. Jeg tog et kig i .reg-filen, og han deaktiverede i grunden mange cifre og protokoller. Jeg har ikke tømt det her, fordi det har for mange linjer, men ingen nævner Rijndael algoritmen selv. Men her er nogle ting, han forsøgte at gøre:


    [HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphers]
"Triple DES 168"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersAES 128/128]
"Enabled"=dword:ffffffff

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersAES 256/256]
"Enabled"=dword:ffffffff

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersDES 168/168]
"Enabled"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersDES 56/56]
"Enabled"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersNULL]
"Enabled"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC2 128/128]
"Enabled"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC2 40/128]
"Enabled"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC2 56/128]
"Enabled"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC4 128/128]
"Enabled"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC4 40/128]
"Enabled"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC4 56/128]
"Enabled"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC4 64/128]
"Enabled"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersTriple DES 168]
"Enabled"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersTriple DES 168/168]
"Enabled"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCipherSuites]

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELHashes]

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELHashesMD5]
"Enabled"=dword:00000000

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELHashesSHA]
"Enabled"=dword:ffffffff

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELHashesSHA256]
"Enabled"=dword:ffffffff

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELHashesSHA384]
"Enabled"=dword:ffffffff

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELHashesSHA512]
"Enabled"=dword:ffffffff

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELKeyExchangeAlgorithms]

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELKeyExchangeAlgorithmsDiffie-Hellman]
"Enabled"=dword:ffffffff

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELKeyExchangeAlgorithmsECDH]
"Enabled"=dword:ffffffff

[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELKeyExchangeAlgorithmsPKCS]
"Enabled"=dword:ffffffff


Sådan implementerer jeg Rijndael i min kode:
Dette er Pascal med Asp.Net


    password := 'someRandomStringICreated';
    ue := UnicodeEncoding.Create();
    key := ue.GetBytes(password);
    fsCrypt := FileStream.Create(outputFile, FileMode.OpenOrCreate);
    SHA512 := Sha512.Create();
    RMCrypto := RijndaelManaged.Create();
    cs := CryptoStream.Create(fsCrypt,RMCrypto.CreateEncryptor(key, key),CryptoStreamMode.Write);
    fsin := FileStream.Create(inputFile, FileMode.Open);

    data := fsin.ReadByte();
    while data <> -1 do
    begin
      cs.WriteByte(convert.ToByte(data));
      data := fsin.ReadByte();
    end;


Gør jeg noget der ville forårsage et sådant problem?
Jeg har fundet denne post Rijndael kryptografi fungerer ikke på Windows Server 2012 og beskriver en mulig løsning.
Skal jeg fortsætte med at bruge Rijndael?
Er det en god praksis at blokere nogle af disse chypere i serveren?

Bedste reference