Bagikan melalui


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 8 Tidak

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);
    }
}