Share via


CA5373: 사용되지 않는 키 파생 함수를 사용하지 마세요.

속성
규칙 ID CA5373
타이틀 사용되지 않는 키 파생 함수를 사용하지 마세요.
범주 보안
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 아니요

원인

암호화가 취약한 키 파생 메서드 System.Security.Cryptography.PasswordDeriveBytes 및/또는 Rfc2898DeriveBytes.CryptDeriveKey가 키를 생성하는 데 사용됩니다.

규칙 설명

이 규칙은 취약한 키 파생 메서드 System.Security.Cryptography.PasswordDeriveBytesRfc2898DeriveBytes.CryptDeriveKey의 호출을 탐지합니다. System.Security.Cryptography.PasswordDeriveBytes에서 취약한 알고리즘 PBKDF1을 사용했습니다. Rfc2898DeriveBytes.CryptDeriveKeyRfc2898DeriveBytes 개체에서 반복 횟수 및 솔트를 사용하지 않아 취약하게 만듭니다.

위반 문제를 해결하는 방법

암호 기반 키 파생은 SHA-2 해시와 함께 PBKDF2 알고리즘을 사용해야 합니다. Rfc2898DeriveBytes.GetBytes를 사용하여 수행할 수 있습니다.

경고를 표시하지 않는 경우

PBKDF1 사용과 관련된 위험을 신중하게 검토하고 허용되는 경우 경고를 표시하지 않습니다.

경고 표시 안 함

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

#pragma warning disable CA5373
// The code that's violating the rule is on this line.
#pragma warning restore CA5373

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none으로 설정합니다.

[*.{cs,vb}]
dotnet_diagnostic.CA5373.severity = none

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

의사 코드 예제

위반

다음 의사 코드 샘플에서는 이 문서를 작성할 당시 이 규칙에 의해 검색되는 패턴을 보여 줍니다.

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

해결 방법

using System;
using System.Security.Cryptography;
class TestClass
{
    public void TestMethod(Rfc2898DeriveBytes rfc2898DeriveBytes)
    {
        rfc2898DeriveBytes.GetBytes(1);
    }
}