2021-01-27 13:42:22 +01:00
The use of a non-standard algorithm is dangerous because a determined attacker may be able to break the algorithm and compromise whatever data has been protected. Standard algorithms like ``++AES++``, ``++RSA++``, ``++SHA++``, ... should be used instead.
2021-02-02 15:02:10 +01:00
2021-01-27 13:42:22 +01:00
This rule tracks custom implementation of these types from ``++System.Security.Cryptography++`` namespace:
* ``++AsymmetricAlgorithm++``
* ``++AsymmetricKeyExchangeDeformatter++``
* ``++AsymmetricKeyExchangeFormatter++``
* ``++AsymmetricSignatureDeformatter++``
* ``++AsymmetricSignatureFormatter++``
* ``++DeriveBytes++``
* ``++HashAlgorithm++``
* ``++ICryptoTransform++``
* ``++SymmetricAlgorithm++``
2020-12-21 15:38:52 +01:00
include::../recommended.adoc[]
== Sensitive Code Example
----
public class CustomHash : HashAlgorithm // Noncompliant
{
private byte[] result;
public override void Initialize() => result = null;
protected override byte[] HashFinal() => result;
protected override void HashCore(byte[] array, int ibStart, int cbSize) =>
result ??= array.Take(8).ToArray();
}
----
== Compliant Solution
2022-02-04 17:28:24 +01:00
[source,csharp]
2020-12-21 15:38:52 +01:00
----
SHA256 mySHA256 = SHA256.Create()
----
include::../see.adoc[]
2021-09-20 15:38:42 +02:00
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
include::../message.adoc[]
endif::env-github,rspecator-view[]