Articulo de referencia

KCDSA

KCDSA ( Algoritmo de firma digital basado en certificados coreanos ) es un algoritmo de firma digital creado por un equipo liderado por la Agencia de Seguridad e Internet de Cor...

KCDSA ( Algoritmo de firma digital basado en certificados coreanos ) es un algoritmo de firma digital creado por un equipo liderado por la Agencia de Seguridad e Internet de Corea (KISA). Es una variante de ElGamal , similar al Algoritmo de firma digital y GOST R 34.10-94. El algoritmo estándar se implementa enGRAMOF(pag){\displaystyle GF(p)}, pero también se especifica una variante de curva elíptica ( EC-KCDSA ).

KCDSA requiere una función hash criptográfica resistente a colisiones que pueda producir una salida de tamaño variable (de 128 a 256 bits, en incrementos de 32 bits). Se sugiere utilizar HAS-160 , otro estándar coreano.

Parámetros de dominio

  • pag{\displaystyle p}: un número primo grande tal que|pag|=512+256i{\displaystyle |p|=512+256i}parai=0,1,,6{\displaystyle i=0,1,\dots ,6}.
  • q{\displaystyle q}: un factor primo depag1{\displaystyle p-1}de tal manera que|q|=128+32j{\displaystyle |q|=128+32j}paraj=0,1,,4{\displaystyle j=0,1,\dots ,4}.
  • gramo{\displaystyle g}: un elemento básico del ordenq{\displaystyle q}enGF(pag){\displaystyle \operatorname {GF} (p)}.

La versión revisada de la especificación requiere adicionalmente que(pag1)/(2q){\displaystyle (p-1)/(2q)}ser primo o que todos sus factores primos sean mayores queq{\displaystyle q}.

Parámetros de usuario

  • incógnita{\displaystyle x}: clave de firma privada del firmante tal que0<incógnita<q{\displaystyle 0<x<q}.
  • y{\displaystyle y}: clave de verificación pública del firmante calculada pory=gramoincógnita¯(modpag),{\displaystyle y=g^{\bar {x}}{\pmod {p}},}dóndeincógnita¯=incógnita1(modq){\displaystyle {\bar {x}}=x^{-1}{\pmod {q}}}.
  • z{\displaystyle z}: un valor hash de datos de certificado , es decir,z=h(Datos del certificado){\displaystyle z=h({\text{Datos del certificado}})}.

La especificación de 1998 no aclara el formato exacto de los "Datos del Certificado". En la especificación revisada, z se define como los B bits inferiores de la clave pública y, donde B es el tamaño del bloque de la función hash en bits (normalmente 512 o 1024). Esto significa que el primer bloque de entrada corresponde a y mod 2^B.

  • z{\displaystyle z}: los B bits inferiores de y.

Función hash

  • h{\displaystyle h}: una función hash resistente a colisiones con resúmenes de |q| bits.

Firma

Para firmar un mensajemetro{\displaystyle m}:

  • El firmante elige un número entero al azar.0<k<q{\displaystyle 0<k<q}y calculaw=gramokmodpag{\displaystyle w=g^{k}\mod {p}}
  • Luego calcula la primera parte:r=h(w){\displaystyle r=h(w)}
  • Luego calcula la segunda parte:s=incógnita(krh(zmetro))(modq){\displaystyle s=x(kr\oplus h(z\parallel m)){\pmod {q}}}
  • Sis=0{\displaystyle s=0}, el proceso debe repetirse desde el principio.
  • La firma es(r,s){\displaystyle (r,s)}

La especificación es vaga sobre cómo el enterow{\displaystyle w}ser reinterpretado como una cadena de bytes de entrada para la función hash. En el ejemplo de la sección C.1 la interpretación es consistente conr=h(I2OSPAG(w,|q|/8)){\displaystyle r=h(I2OSP(w,|q|/8))}utilizando la definición de I2OSP de PKCS#1/RFC3447.

Verificando

Para verificar una firma(r,s){\displaystyle (r,s)}en un mensajemetro{\displaystyle m}:

  • El verificador comprueba que0r<2|q|{\displaystyle 0\leq r<2^{|q|}}y0<s<q{\displaystyle 0<s<q}y rechaza la firma como inválida si no lo es.
  • El verificador calculami=rh(zmetro){\displaystyle e=r\oplus h(z\parallel m)}
  • El verificador comprueba sir=h(ysgramomimodpag){\displaystyle r=h(y^{s}\cdot g^{e}\mod {p})}Si es así, la firma es válida; de lo contrario, no lo es.

EC-KCDSA

EC-KCDSA es esencialmente el mismo algoritmo, pero utilizando criptografía de curva elíptica en lugar de criptografía de logaritmo discreto.

Los parámetros del dominio son:

  • Una curva elípticami{\displaystyle E}sobre un cuerpo finito .
  • Un puntoGRAMO{\displaystyle G}enmi{\displaystyle E}generando un subgrupo cíclico de orden primoq{\displaystyle q}. (q{\displaystyle q}a menudo se denotanorte{\displaystyle n}en otros tratamientos de criptografía de curva elíptica.)

Los parámetros de usuario y los algoritmos son esencialmente los mismos que para el KCDSA logarítmico discreto, excepto que la exponenciación modular se reemplaza por la multiplicación de puntos. Las diferencias específicas son:

  • La clave pública esY=incógnita¯GRAMO{\displaystyle Y={\bar {x}}G}
  • En la generación de firmas,r=h(Wincógnita||Wy){\displaystyle r=h(W_{x}||W_{y})}dóndeW=kGRAMO{\displaystyle W=kG}
  • En la verificación de firmas, el verificador comprueba sir=h(sY+miGRAMO){\displaystyle r=h(sY+eG)}
  • Especificación y análisis de KCDSA