В PBKDF2 INT (i) подписан?

На стр. 11 RFC 2898 говорится, что для U_1 = PRF (P, S || INT (i)) INT (i) представляет собой четырехоктетное кодирование целого числа i, в первую очередь самый старший октет.

Означает ли это, что я значение со знаком, и если так, что происходит при переполнении?

2 ответа

Ничто не говорит о том, что оно будет подписано. Дело в том, что dkLen ограничен (2^32 - 1) * hLen предполагает, что это целое число без знака и что оно не может перевернуться с 0xFFFFFFFF (2^32 - 1) до 0x00000000,

Конечно, PBKDF2(MD5) не достигнет 2^31, пока вы не попросите 34 359 738 368 байт. Это очень много байтов.

  • SHA-1: 42 949 672 960
  • SHA-2-256 / SHA-3-256: 68 719 476 736
  • SHA-2-384 / SHA-3-384: 103,079,215,104
  • SHA-2-512 / SHA-3-512: 137 438 953 472

Поскольку реализация.NET (в Rfc2898DeriveBytes) является итеративным потоком, она может быть опрошена на 32 ГБ с помощью (длинной) серии вызовов. Большинство платформ представляют PBKDF2 как единичный снимок, поэтому вам нужно предоставить им диапазон памяти 32 ГБ (или более), чтобы определить, есть ли у них ошибка, которая так далеко. Так что, даже если большинство платформ неправильно понимают знак... это не имеет значения.

PBKDF2 - это KDF (функция вывода ключей), поэтому она используется для получения ключей. AES-256 - это 32 байта, или 48, если вы используете тот же PBKDF2 для генерации IV (что вам действительно не следует). Генерация закрытого ключа для кривой ECC с простым числом 34,093 - это (если я правильно сделал математику) 14,157 байт. Значительно ниже отметки 32 ГБ.

i колеблется от 1 до l = CEIL (dkLen / hLen), а также dkLen а также hLen являются положительными целыми числами. Следовательно, i строго положительно.

Вы можете, однако, хранить i в 32-разрядном целочисленном типе со знаком без какой-либо специальной обработки. Если i переворачивается (увеличивается с 0x7FFFFFFF в 0xF0000000), он будет продолжать кодироваться правильно и продолжать корректно увеличиваться. При кодировании с дополнением до двух битовые результаты сложения, вычитания и умножения одинаковы до тех пор, пока все значения обрабатываются как со знаком или без знака.

Другие вопросы по тегам