RNGCryptoServiceProvider и нули?

просматривая некоторые материалы по криптографии, я увидел, что RNGCryptoServiceProvider имеет 2 метода:

ссылка

RNGCryptoServiceProvider.GetNonZeroBytes

и

RNGCryptoServiceProvider.GetBytes 

И поэтому я спрашиваю:

Что странного в заполнении массива байтов криптографически стойкой последовательностью случайных значений, некоторые из которых (0 или более) являются нулями? (это случайные значения и видимо нулей много не будет, а ведь ноль тоже обычное число)

почему они создали отличительные?


person Royi Namir    schedule 03.10.2012    source источник


Ответы (1)


В среде .NET GetNonZeroBytes(byte[] ) используется при создании заполнения PKCS#1 для шифрования RSA, которое использует 0x00 в качестве разделителя.

Используя такой инструмент, как Reflector, вы можете увидеть его использование в RSAPKCS1KeyExchangeFormatter.CreateKeyExchange(byte[]) для реализации заполнения в соответствии с RFC 2313, раздел 8.1.2 (RFC 3218 содержит красивую иллюстрацию ASCII, которая более четко демонстрирует расположение байтов).

GetNonZeroBytes(byte[]) может также использоваться для производства соли. На сайте Cryptography StackExchange есть похожий вопрос, в котором предлагается избегать 0x00 должен помочь с библиотеками и API, которые могут обрабатывать соль как строку с нулевым символом в конце, что может случайно обрезать соль. Однако, если не используется P/Invoke, это вряд ли будет проблемой в .NET.

person Ashley Ross    schedule 03.10.2012
comment
соль только усложняет радужную таблицу. это можно сделать и с GetBytes .... верно? - person Royi Namir; 04.10.2012
comment
Правильно, если вы уверены, что ни в одном из мест, где используется или хранится соль, нет проблем с 0x00. Если вы не уверены, вы всегда можете сначала проверить это с помощью соли, которая конкретно содержит 0x00 байта. - person Ashley Ross; 04.10.2012