¿Cuándo hay que preocuparse por filtrar información de tiempo en .NET?

5

De acuerdo con esta publicación, Dominick Baier estaba comparando dos firmas de HMACSHA256 y se estaba filtrando en una oportunidad sin éxito. .

Cuando se trabaja con clases criptográficas .NET, ¿cuándo se debe adoptar un enfoque similar y dormir durante un período de tiempo aleatorio? ¿Qué cantidad de tiempo es suficiente?

[MethodImpl(MethodImplOptions.NoOptimization)]
public static bool IsEqual(string s1, string s2)
{
    if (s1 == null && s2 == null)
    {
        return true;
    }

    if (s1 == null || s2 == null)
    {
        return false;
    }

    if (s1.Length != s2.Length)
    {
        return false;
    }

    var s1chars = s1.ToCharArray();
    var s2chars = s2.ToCharArray();

    int hits = 0;
    for (int i = 0; i < s1.Length; i++)
    {
        if (s1chars[i].Equals(s2chars[i]))
        {
            hits += 2;
        }
        else
        {
            hits += 1;
        }
    }

    bool same = (hits == s1.Length * 2);

    if (!same)
    {
        var rnd = new CryptoRandom();
        Thread.Sleep(rnd.Next(0, 10));
    }

    return same;
}
    
pregunta random65537 23.01.2011 - 15:04
fuente

1 respuesta

6

Dormir una cantidad aleatoria de tiempo no detiene totalmente la fuga de información: si el ataque se puede repetir, la parte aleatoria promediará una constante. En su lugar, debe asegurarse de que la operación siempre lleve la misma cantidad de tiempo.

    
respondido por el Wim Coenen 23.01.2011 - 16:36
fuente

Lea otras preguntas en las etiquetas