Pregunta

He estado jugando con la implementación de RSA (API Ligera) del castillo hinchable y tiene los fundamentos descubierto. En cuanto a su especificación de implementación del proveedor JCE me di cuenta que los esquemas de relleno diferentes se pueden utilizar con RSA. Por lo que entiendo, es utilizado por el relleno nulo por defecto. Así que empecé a explorar el relleno OAEP, particularmente OAEPWithSHA512AndMGF1Padding. Búsqueda con Google no ha sido muy útil, así que comenzó a cavar a través del código fuente de la Columbia Británica y encontré org.bouncycastle.jce.provider.JCERSACipher clase. Pero al mirar a initFromSpec rápidamente me dio un dolor de cabeza ... En concreto, no entiendo lo que los dos últimos parámetros que se pueden pasar al constructor OAEPEncoding son. De acuerdo con la API OAEPEncoding constructor que permite cuatro parámetros acepta Digest mgf1Hash y byte[] encodingParams de BC como los dos últimos argumentos. Esto me perplejo porque no tengo ni idea de cómo obtener una bodega de una instancia del algoritmo de generación de máscaras ni me entiendo el propósito detrás de la matriz de bytes se denomina encodingParams. Cuáles deben ser los valores de arg3 y arg4 en el código de abajo?

RSABlindedEngine rsa = new RSABlindedEngine();
SHA512Diges sha512 = new SHA512Digest();
Digest arg3 = ???;
byte[] arg4 = ???;
AsymmetricBlockCipher cipher = new OAEPEncoding(rsa, sha512, arg3, arg4);
¿Fue útil?

Solución

OAEP se especifica por PKCS # 1, sección 7.1 .

OAEP requiere los siguientes parámetros:

  • una función hash;
  • una "función de generación de máscaras", que puede ser pensado como una función hash con longitud de salida ilimitada;
  • una "etiqueta" (una secuencia arbitraria de bytes).

Sólo hay una función de generación de máscara definida, llamada MGF1, y que la función está construido sobre una función hash. Por lo que su arg3 es la función hash, que utilizará MGF1. Puede ser la misma función hash que el primero (no estoy seguro de que puede ser la misma instancia Digest en la API Castillo Hinchable, estoy hablando matemáticamente aquí). También puede ser otra función hash.

La etiqueta se puede utilizar como una especie de distinguishers entre instancias (por ejemplo, se podría cifrar los datos con un "propósito" explícito codificado en la etiqueta). Es muy útil en algunas pruebas matemáticas, pero en este momento PKCS # 1 recomienda el uso de una cadena vacía y hacerse con él. Para los fines descritos en PKCS # 1, una etiqueta vacía es tan buena como cualquier otra.

El proceso de descifrado debe conocer los parámetros para operar. Es habitual para codificar en la estructura que viene junto con el mensaje cifrado y dice "esto se cifra con RSA / OAEP"; Eso es lo que sucede en CMS .

En caso de duda, utilizar la misma función de hash como primer parámetro y para MGF1, y el uso de una etiqueta vacía.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top