Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA5373 |
| Başlık | Eski anahtar türetme işlevini kullanmayın |
| Kategori | Güvenlik |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
Neden
Şifreleme açısından zayıf anahtar türetme yöntemleri System.Security.Cryptography.PasswordDeriveBytes ve/veya Rfc2898DeriveBytes.CryptDeriveKey anahtar oluşturmak için kullanılır.
Kural açıklaması
Bu kural, zayıf anahtar türetme yöntemlerinin System.Security.Cryptography.PasswordDeriveBytesçağrısınıRfc2898DeriveBytes.CryptDeriveKey algılar.
System.Security.Cryptography.PasswordDeriveBytes zayıf bir PBKDF1 algoritması kullandı.
Rfc2898DeriveBytes.CryptDeriveKey nesnesi, Rfc2898DeriveBytes nesnesinden yineleme sayısını ve tuzu kullanmaz, bu da onu zayıflatır.
İhlalleri düzeltme
Parola tabanlı anahtar türetmesi, SHA-2 karmasıyla PBKDF2 algoritmasını kullanmalıdır. Rfc2898DeriveBytes.GetBytes bunu başarmak için kullanılabilir.
Uyarıların ne zaman bastırılması gerekiyor?
PBKDF1 kullanımıyla ilgili risk dikkatle gözden geçirilir ve kabul edilirse uyarıyı bastırın.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA5373
// The code that's violating the rule is on this line.
#pragma warning restore CA5373
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA5373.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Sahte kod örnekleri
Ihlal
Bu yazı yazıldığı sırada, aşağıdaki sahte kod örneği bu kural tarafından algılanan şablonu gösterir.
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);
}
}
Çözüm
using System;
using System.Security.Cryptography;
class TestClass
{
public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes)
{
rfc2898DeriveBytes.GetBytes(1);
}
}