CA5373: Jangan gunakan fungsi turunan kunci yang usang
Properti | Nilai |
---|---|
ID Aturan | CA5373 |
Judul | Jangan gunakan fungsi derivasi kunci usang |
Golongan | Keamanan |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | No |
Penyebab
Metode derivasi kunci yang lemah secara kriptografis System.Security.Cryptography.PasswordDeriveBytes dan/atau Rfc2898DeriveBytes.CryptDeriveKey digunakan untuk menghasilkan kunci.
Deskripsi aturan
Aturan ini mendeteksi pemanggilan metode turunan kunci lemah System.Security.Cryptography.PasswordDeriveBytes dan Rfc2898DeriveBytes.CryptDeriveKey.
System.Security.Cryptography.PasswordDeriveBytes menggunakan algoritma lemah PBKDF1.
Rfc2898DeriveBytes.CryptDeriveKey tidak menggunakan jumlah iterasi dan garam dari Rfc2898DeriveBytes
objek, yang membuatnya lemah.
Cara memperbaiki pelanggaran
Derivasi kunci berbasis kata sandi harus menggunakan algoritma PBKDF2 dengan hashing SHA-2. Rfc2898DeriveBytes.GetBytes dapat digunakan untuk mencapainya.
Kapan harus menekan peringatan
Tekan peringatan jika risiko yang terkait dengan penggunaan PBKDF1 ditinjau dan diterima dengan hati-hati.
Menyembunyikan peringatan
Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.
#pragma warning disable CA5373
// The code that's violating the rule is on this line.
#pragma warning restore CA5373
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA5373.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Contoh kode semu
Pelanggaran
Pada saat penulisan ini, sampel kode pseudo berikut mengilustrasikan pola yang terdeteksi oleh aturan ini.
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);
}
}
Solusi
using System;
using System.Security.Cryptography;
class TestClass
{
public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes)
{
rfc2898DeriveBytes.GetBytes(1);
}
}