Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| 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 10 | 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);
}
}