Megosztás a következőn keresztül:


CA5373: Ne használjon elavult kulcs származtatási függvényt

Tulajdonság Érték
Szabályazonosító CA5373
Cím Ne használjon elavult kulcs származtatási függvényt
Kategória Biztonság
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

Ok

Kriptográfiailag gyenge kulcs származtatási módszerei System.Security.Cryptography.PasswordDeriveBytes és/vagy Rfc2898DeriveBytes.CryptDeriveKey kulcs létrehozására szolgálnak.

Szabály leírása

Ez a szabály észleli a gyenge kulcs származtatási módszereinek System.Security.Cryptography.PasswordDeriveBytes és Rfc2898DeriveBytes.CryptDeriveKeya . System.Security.Cryptography.PasswordDeriveBytes a PBKDF1 gyenge algoritmust használt. Rfc2898DeriveBytes.CryptDeriveKey nem használja az objektum iterációs számát és sóját Rfc2898DeriveBytes , ami gyengévé teszi.

Szabálysértések kijavítása

A jelszóalapú kulcs származtatásának a PBKDF2 algoritmust kell használnia SHA-2 kivonatolással. Rfc2898DeriveBytes.GetBytes ezt a célt szolgálhatja.

Mikor kell letiltani a figyelmeztetéseket?

A figyelmeztetés mellőzése, ha a PBKDF1 használatával kapcsolatos kockázatot gondosan áttekintik és elfogadják.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

#pragma warning disable CA5373
// The code that's violating the rule is on this line.
#pragma warning restore CA5373

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

[*.{cs,vb}]
dotnet_diagnostic.CA5373.severity = none

További információ: Kódelemzési figyelmeztetések letiltása.

Példák pszeudokódokra

Megsértése

Az írás idejére az alábbi pszeudokód-minta a szabály által észlelt mintát mutatja be.

using System;
using System.Security.Cryptography;
class TestClass
{
    public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes, string algname, string alghashname, int keySize, byte[] rgbIV)
    {
        rfc2898DeriveBytes.CryptDeriveKey(algname, alghashname, keySize, rgbIV);
    }
}

Megoldás

using System;
using System.Security.Cryptography;
class TestClass
{
    public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes)
    {
        rfc2898DeriveBytes.GetBytes(1);
    }
}