Quando è necessario preoccuparsi di perdere informazioni sui tempi in .NET?

5

In base al questo post, Dominick Baier stava confrontando due% di% di% di firme e stava perdendo informazioni sul tempo in seguito a un confronto infruttuoso .

Quando si lavora con le classi di crittografia .NET, quando si dovrebbe adottare un approccio simile e dormire per una quantità casuale di tempo? Che quantità di tempo è sufficiente?

[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;
}
    
posta random65537 23.01.2011 - 15:04
fonte

1 risposta

6

Dormire una quantità di tempo casuale non interrompe totalmente la perdita di informazioni: se l'attacco può essere ripetuto, la parte casuale si estenderà mediamente a una costante. Invece, dovresti assicurarti che l'operazione richieda sempre lo stesso tempo.

    
risposta data 23.01.2011 - 16:36
fonte

Leggi altre domande sui tag