CA5402: Gunakan CreateEncryptor dengan IV default
Properti | Nilai |
---|---|
ID Aturan | CA5402 |
Judul | Menggunakan CreateEncryptor dengan IV default |
Golongan | Keamanan |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | No |
Penyebab
rgbIV
bisa menjadi non-default saat menggunakan System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor.
Deskripsi aturan
Enkripsi simetris harus selalu menggunakan vektor inisialisasi yang tidak dapat diulang untuk mencegah serangan kamus.
Aturan ini mirip dengan CA5401, tetapi analisis tidak dapat menentukan bahwa vektor inisialisasi jelas merupakan default.
Cara memperbaiki pelanggaran
Gunakan nilai default rgbIV
secara eksplisit, yaitu, gunakan kelebihan beban System.Security.Cryptography.SymmetricAlgorithm.CreateEncryptor yang tidak memiliki parameter apa pun.
Kapan harus menekan peringatan
Aman untuk menyembunyikan peringatan dari aturan ini jika:
- Parameter
rgbIV
dihasilkan oleh System.Security.Cryptography.SymmetricAlgorithm.GenerateIV. - Anda yakin bahwa
rgbIV
parameternya benar-benar acak dan tidak dapat diulang. - Anda yakin bahwa vektor inisialisasi digunakan.
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 CA5402
// The code that's violating the rule is on this line.
#pragma warning restore CA5402
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA5402.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Contoh kode semu
using System;
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod(byte[] rgbIV)
{
AesCng aesCng = new AesCng();
Random r = new Random();
if (r.Next(6) == 4)
{
aesCng.IV = rgbIV;
}
aesCng.CreateEncryptor();
}
}
Solusi
using System.Security.Cryptography;
class ExampleClass
{
public void ExampleMethod()
{
AesCng aesCng = new AesCng();
aesCng.CreateEncryptor();
}
}