Разница во времени шифрования между 128-битным AES и 256-битным AES?

Я разрабатываю программу, которая шифрует USB-накопители с использованием метода RijndaelManaged на C # с возможностью выбора между размером ключа 128/192/256 бит. Я предполагаю, что шифрование с 256-битным ключом должно занимать больше времени, однако даже с большим количеством файлов процесс занимает то же время, что и со 128-битным ключом. Вы думаете, что это ошибка программирования?

Я генерирую свой ключ и iv из пароля, используя эту функцию:

private List<byte[]> GenerateKeys(string password, int strength)
{
    byte[] key;
    byte[] iv;

    List<byte[]> result = new List<byte[]>();

    Rfc2898DeriveBytes rfcDb = new Rfc2898DeriveBytes(password, System.Text.Encoding.UTF8.GetBytes(password));

    key = rfcDb.GetBytes(strength); // strength value can be 16, 24 or 32 depending
    iv = rfcDb.GetBytes(strength);  // on the user choice


    result.Add(key);
    result.Add(iv);

    return result;
}

Затем я использую свой метод RijndaelManaged следующим образом:

RijndaelManaged rijndael = new RijndaelManaged();
rijndael.Mode = CipherMode.CBC;
rijndael.BlockSize = Strenght * 8;
rijndael.KeySize = Strenght * 8;
ICryptoTransform aesEncryptor = rijndael.CreateEncryptor(key, iv); // key and iv from the other method

Вы видите что-то не так?


person Community    schedule 10.02.2015    source источник
comment
Если вы читаете файлы, время, вероятно, будет зависеть от дискового ввода-вывода, поэтому различия во времени кодирования могут быть незначительными.   -  person Matthew Watson    schedule 10.02.2015
comment
@MatthewWatson: я тоже так подумал, поэтому я попробовал использовать свой жесткий диск вместо USB-накопителя (скорость чтения / записи ограничена), и это было то же самое. Я буду исследовать дальше. ArtjomB. : спасибо за точность.   -  person    schedule 10.02.2015


Ответы (1)


AES-256 использует 14 раундов, а AES-128 использует 10 раундов. Ключевой график, конечно, имеет больший вклад, но это не должно иметь большого значения. Размер состояния при шифровании / дешифровании такой же (как и размер блока). Таким образом, вы должны ожидать не более разницы в скорости около 40 процентов или около того.

Для файлов меньшего размера: Rfc2898DeriveBytes использует HMAC с SHA-1 и 1000 (!) Итераций. Это будет намного медленнее, чем шифрование AES. Кроме того, вам придется беспокоиться о времени поиска диска и вызовах операционной системы.

Для файлов большего размера вы вполне можете быть ограничены дисковым вводом-выводом, особенно для медленных носителей, таких как жесткий диск или USB-2. Замена флэш-накопителя USB-2 жестким диском вам не сильно поможет (если таковая имеется).

Чтобы проверить скорость AES, зашифруйте память (или даже один и тот же буфер снова и снова), используйте RAM-диск или купите SSD (в порядке предпочтения для тестирования я всегда предлагаю купить SSD).

person Maarten Bodewes    schedule 11.02.2015