PKCS # 1-1.5 encoding - ¿hay alguna razón para usar 00 en el tipo de bloque?

2

Para el bloque de cifrado que se ve así: EB = 00 || BT || PS || 00 || Datos donde BT - tipo de bloque y PS - cadena de relleno, He leído que usamos tres tipos de BT - 00, 01, 02. Ahora, ya que 00 y 01 son para operaciones de clave privada (donde se recomienda 01 - ¿por qué?), Como firma, y 02 es para operaciones de clave pública, como encriptación, me pregunto por qué no se recomienda usar el tipo de bloque '00' . Además, si no se recomienda, ¿por qué es posible?

Una vez más, discúlpate por ser un novato.

    
pregunta James Pond 30.05.2015 - 20:25
fuente

2 respuestas

4

PKCS # 1 solo define dos rellenos de "estilo antiguo" (también conocido como "v1.5" porque estos eran los dos rellenos definidos en PKCS # 1 v1.5, mientras que las versiones más modernas agregan otras opciones, conocidas como "OAEP" y "PSS"). Estos dos rellenos son el "tipo 1" y el "tipo 2". No hay un relleno de "tipo 0" definido; por supuesto, cualquier byte puede tener conceptualmente cualquier valor en el rango de 0 a 255, pero PKCS # 1 define solo dos rellenos, no tres o más.

Los dos rellenos no se diferencian solo por el "byte de tipo" (de valor 0x01 o 0x02). Los bytes subsiguientes (la cadena "PS") son muy importantes para la seguridad. En el relleno "tipo 1", la cadena "PS" consiste solo en bytes de valor 0xFF; es totalmente determinista En el relleno "tipo 2", la cadena "PS" consiste en bytes aleatorios (los bytes no deben tener el valor 0x00, pero de lo contrario deben generarse aleatoriamente en el rango 0x01..0xFF). Ellos no pueden ser usados indistintamente. El relleno de tipo 1 es para la firma, el tipo 2 es para el cifrado asimétrico. Si usa un relleno de tipo 2 para las firmas, obtendrá un esquema de firmas muy débil (debido a la maleabilidad inherente a las exponenciales modulares). Si utiliza un relleno de tipo 1 para el cifrado asimétrico, obtiene un esquema de cifrado débil (debido al determinismo del relleno de tipo 1, lo que permite un ataque de fuerza bruta en el texto sin formato).

El byte "BT" que identifica el tipo de relleno está allí principalmente (y en su mayoría) para hacer que los dos rellenos sean inequívocamente distintos. De lo contrario, uno tendría que preocuparse de que los atacantes usen una firma como mensaje cifrado o viceversa. Por lo tanto, los dos rellenos deben tener un valor "BT" distinto; los autores de PKCS # 1 podrían haber elegido que los dos valores sean 0 y 1, o 1 y 2, o 17 y 42, o cualquier otro par de valores distintos; eligieron 1 y 2. Esto es arbitrario.

En cualquier caso, la importancia del relleno no está en el byte "BT", sino en los bytes que siguen (la cadena "PS"). No se recomienda usar un relleno de "tipo 0" porque no existe el tipo de relleno de tipo 0 .

    
respondido por el Thomas Pornin 30.05.2015 - 20:59
fuente
0

En primer lugar, el tipo de bloque (BT) '00' y '01' es el relleno para la operación de clave privada, es decir, la firma. Los estándares definen que los 'datos' para la firma deben ser un hash (estructura DER DigestInfo) de los datos que se firman.

El relleno '01' tipo bloque (BT) agrega datos de relleno fijos hasta la longitud del módulo:

00 | 01 | FF .. FF | data

El relleno '00' de tipo de bloque (BT) significa que BT está configurado en 00 y la cadena de relleno en ceros, lo que efectivamente significa que no se aplica ningún relleno:

00 | 00 | 00 .. 00 | data

Ningún software compatible con los estándares aceptará la firma digital en este formulario. El relleno del tipo de bloque '00' solo es útil si desea realizar operaciones de exponenciación sin procesar con la clave privada o implementar un relleno más avanzado que el proporcionado por la biblioteca (por ejemplo, RSA-PSS).

    
respondido por el FaST4 25.04.2016 - 16:05
fuente

Lea otras preguntas en las etiquetas