c# - RNGCryptoServiceProvider y Zeros?
encryption .net-4.0 (1)
caminando por algunas cosas de criptografía, vi que RNGCryptoServiceProvider
tiene 2 métodos:
RNGCryptoServiceProvider.GetNonZeroBytes
y
RNGCryptoServiceProvider.GetBytes
Y entonces pregunto:
¿Qué tiene de extraño llenar un conjunto de bytes con una secuencia criptográficamente fuerte de valor aleatorio que algunos (0 o más) de ellos son ceros? (Son valores aleatorios y aparentemente no habrá muchos ceros, y aún cero es también un número regular)
¿Por qué crearon la distinción?
Dentro del marco de .NET, GetNonZeroBytes (byte []) se utiliza al generar el relleno PKCS # 1 para el cifrado RSA, que usa 0x00
como separador.
Usando una herramienta como Reflector, puede ver que se usa en RSAPKCS1KeyExchangeFormatter.CreateKeyExchange (byte []) para implementar el relleno según RFC 2313 , sección 8.1.2 ( RFC 3218 tiene un buen arte ASCII que demuestra el diseño de bytes con mayor claridad).
GetNonZeroBytes (byte []) también se podría usar para generar sal. El sitio Cryptography StackExchange tiene una pregunta similar que sugiere que evitar 0x00
es ayudar con bibliotecas y API que pueden tratar la sal como una cadena terminada en cero, lo que accidentalmente truncaría la sal. Sin embargo, a menos que uno esté usando P / Invoke , es poco probable que esto sea una preocupación en .NET.