Encrypting data is security-sensitive. It has led in the past to the following vulnerabilities:

Proper encryption requires both the encryption algorithm and the key to be strong. Obviously the private key needs to remain secret and be renewed regularly. However these are not the only means to defeat or weaken an encryption.

This rule flags function calls that initiate encryption/decryption.

Ask Yourself Whether

You are at risk if you answered yes to any of those questions.

Recommended Secure Coding Practices

Sensitive Code Example

Imports System
Imports System.Security.Cryptography

Namespace MyNamespace

    Public Class Class1

        Public Sub Main()

            Dim data As Byte() = {1, 1, 1}

            Dim myRSA As RSA = RSA.Create()
            Dim padding As RSAEncryptionPadding = RSAEncryptionPadding.CreateOaep(HashAlgorithmName.SHA1)

            ' Review all base RSA class' Encrypt/Decrypt calls
            myRSA.Encrypt(data, padding)  ' Sensitive
            myRSA.EncryptValue(data)      ' Sensitive
            myRSA.Decrypt(data, padding)  ' Sensitive
            myRSA.DecryptValue(data)      ' Sensitive

            Dim myRSAC As RSACryptoServiceProvider = New RSACryptoServiceProvider()
            ' Review the use of any TryEncrypt/TryDecrypt And specific Encrypt/Decrypt of RSA subclasses.
            myRSAC.Encrypt(data, False)    ' Sensitive
            myRSAC.Decrypt(data, False)    ' Sensitive

            Dim written As Integer
            myRSAC.TryEncrypt(data, Span<byte>.Empty, padding, out written) ' Sensitive
            myRSAC.TryDecrypt(data, Span<byte>.Empty, padding, out written) ' Sensitive

            Dim rgbKey As Byte() = {1, 2, 3}
            Dim rgbIV As Byte() = {4, 5, 6}
            Dim rijn = SymmetricAlgorithm.Create()

            ' Review the creation of Encryptors from any SymmetricAlgorithm instance.
            rijn.CreateEncryptor()   ' Sensitive
            rijn.CreateEncryptor(rgbKey, rgbIV)  ' Sensitive
            rijn.CreateDecryptor()  ' Sensitive
            rijn.CreateDecryptor(rgbKey, rgbIV)  ' Sensitive
        End Sub

        Public Class MyCrypto
            Inherits System.Security.Cryptography.AsymmetricAlgorithm ' Sensitive
            ' ...
        End Class

        Public Class MyCrypto2
            Inherits System.Security.Cryptography.SymmetricAlgorithm ' Sensitive
            ' ...
        End Class
    End Class
End Namespace

See

Deprecated

This rule is deprecated; use {rule:vbnet:S5542}, {rule:vbnet:S5547} instead.