Articulo de referencia

ACE Encrypt

ACE (motor criptográfico avanzado) es un conjunto de unidades que implementan tanto un esquema de cifrado de clave pública como un esquema de firma digital. Estos esquemas se de...

ACE (motor criptográfico avanzado) es un conjunto de unidades que implementan tanto un esquema de cifrado de clave pública como un esquema de firma digital. Estos esquemas se denominan «ACE Encrypt» y «ACE Sign». Se basan en el esquema de cifrado de clave pública Cramer-Shoup y el esquema de firma Cramer-Shoup. Las variantes introducidas de estos esquemas buscan lograr un buen equilibrio entre el rendimiento y la seguridad del sistema de cifrado.

Autores

Todos los algoritmos implementados en ACE se basan en algoritmos desarrollados por Victor Shoup y Ronald Cramer . Victor Shoup redactó la especificación completa de los algoritmos. Thomas Schweinberger y Mehdi Nassehi se encargaron de la implementación, mientras que Victor Shoup se ocupó de su soporte y mantenimiento. Thomas Schweinberger participó en la elaboración del documento de especificación de ACE y también redactó un manual de usuario.

Ronald Cramer reside actualmente en la Universidad de Aarhus, Dinamarca . Trabajó en el proyecto ACE Encrypt durante su estancia en la ETH de Zúrich , Suiza .

Mehdi Nassehi y Thomas Schweinberger trabajaron en el proyecto ACE en el laboratorio de investigación de IBM en Zúrich , Suiza . Victor Shoup trabaja en el laboratorio de investigación de IBM en Zúrich , Suiza .

Seguridad

Se puede demostrar que el esquema de cifrado en ACE es seguro bajo supuestos de intratabilidad razonables y naturales. Estos cuatro supuestos son:

  • El supuesto de Diffie-Hellman decisional (DDH)
  • Suposición RSA fuerte
  • Resistencia a colisiones de preimagen de segundo SHA-1
  • Pseudoaleatoriedad en modo suma/contador de MARS

Terminología y notación básicas

A continuación, presentamos algunas notaciones que se utilizan en este artículo.

Notación matemática básica

Z{\displaystyle \mathbb {Z} }— El conjunto de los números enteros. F2[T]{\displaystyle F_{2}[T]}— El conjunto de polinomios univariados con coeficientes en el campo finitoF2{\displaystyle F_{2}}de cardinalidad 2. Amovimiento rápido del ojonorte{\displaystyle A\operatorname {rem} n}— enteror{0,,norte1}{\displaystyle r\in \left\{0,\dots ,n-1\right\}}de tal manera queAr(modnorte){\displaystyle A\equiv r{\pmod {n}}}para enteronorte>0{\displaystyle n>0}yAZ{\displaystyle A\in \mathbb {Z} }. Amovimiento rápido del ojoF{\displaystyle A\operatorname {rem} f}— polinomiorF2[T]{\displaystyle r\in F_{2}[T]}congrados(r)<grados(F){\displaystyle \deg(r)<\deg(f)}de tal manera queAr(modF){\displaystyle A\equiv r{\pmod {f}}}conA,FF2[T],F0{\displaystyle A,f\in F_{2}[T],f\neq 0}.

Notación básica de cadenas

A{\displaystyle A^{\ast }}— El conjunto de todas las cuerdas. Anorte{\displaystyle A^{n}}— El conjunto de todas las cadenas con longitud n. ParaincógnitaAL(incógnita){\displaystyle x\in A^{\ast }L(x)}— longitud de la cuerdaincógnita{\displaystyle x}La cadena de longitud cero se denotaλA{\displaystyle \lambda _{A}}. Paraincógnita,yA{\displaystyle x,y\in A^{\ast }}incógnitay{\displaystyle x\|y}— el resultado deincógnita{\displaystyle x}yy{\displaystyle y}concatenación.

Bits, Bytes, Palabras

b=definición{0,1}{\displaystyle b{\overset {\text{def}}{{}={}}}\left\{0,1\right\}}— El conjunto de bits. Tomemos todos los conjuntos de formab,bnorte1,(bnorte1)norte2,...{\displaystyle b,b^{n_{1}},(b^{n_{1}})^{n_{2}},...}Para un conjunto A de este tipo, definimos el "elemento cero":

0b=dmiF0b{\displaystyle 0_{b}{\stackrel {\mathrm {def} }{=}}0\in b};0Anorte=dmiF(0A,...,0A)Anorte{\displaystyle 0_{A^{n}}{\stackrel {\mathrm {def} }{=}}(0_{A},...,0_{A})\in A^{n}}paranorte>0{\displaystyle n>0}.

Nosotros definimosB=dmiFb8{\displaystyle B{\stackrel {\mathrm {def} }{{}={}}}b^{8}}como un conjunto de bytes, yW=dmiFb32{\displaystyle W{\stackrel {\mathrm {def} }{{}={}}}b^{32}}como un conjunto de palabras.

ParaincógnitaA{\displaystyle x\in A^{\ast }}conA{b,B,W}{\displaystyle A\in \left\{b,B,W\right\}}yl>0{\displaystyle l>0}Definimos un operador de relleno:

pagadl(incógnita)=dmiF{incógnita,L(incógnita)lincógnita||0AlL(incógnita),L(incógnita)<l{\displaystyle pad_{l}(x){\stackrel {\mathrm {def} }{=}}{\begin{cases}x,&L(x)\geq l\\x||0_{A^{lL(x)}},&L(x)<l\end{cases}}}.

Operador de conversión

Operador de conversiónIsrdodst:srdodst{\displaystyle I_{src}^{dst}:src\to dst}realiza una conversión entre elementosZ,F2[T],b,B,W{\displaystyle Z,F_{2}[T],b^{\ast },B^{\ast },W^{\ast }}.

Esquema de cifrado

Par de claves de cifrado

El esquema de cifrado emplea dos tipos de clave: clave pública ACE:(PAG,q,gramo1,gramo2,do,d,h1,h2,k1,k2){\displaystyle (P,q,g_{1},g_{2},c,d,h_{1},h_{2},k_{1},k_{2})} Clave privada ACE :(w,incógnita,y,z1,z2){\displaystyle (w,x,y,z_{1},z_{2})}Para un parámetro de tamaño dadometro{\displaystyle m}, de tal manera que1024metro16384{\displaystyle 1024\leq m\leq 16384}Los componentes clave se definen como: q{\displaystyle q}— un número primo de 256 bits. PAG{\displaystyle P}— un número primo de m bits, tal quePAG1(modq){\displaystyle P\equiv 1{\pmod {q}}}. gramo1,gramo2,do,d,h1,h2{\displaystyle g_{1},g_{2},c,d,h_{1},h_{2}}— elementos{1,,PAG1}{\displaystyle \left\{1,\dots ,P-1\right\}}(cuyo orden multiplicativo móduloPAG{\displaystyle P}divideq{\displaystyle q}). w,incógnita,y,z1,z2{\displaystyle w,x,y,z_{1},z_{2}}— elementos{0,,q1}{\displaystyle \left\{0,\dots ,q-1\right\}}. k1,k2{\displaystyle k_{1},k_{2}}— elementosB{\displaystyle B^{\ast }}conL(k1)=20l+64{\displaystyle L(k_{1})=20l'+64}yL(k2)=32l/16+40{\displaystyle L(k_{2})=32\left\lceil l/16\right\rceil +40}, dóndel=metro/8{\displaystyle l=\left\lceil m/8\right\rceil }yl=Lb((2l/4+4)/16){\displaystyle l'=L_{b}(\left\lceil (2\left\lceil l/4\right\rceil +4)/16\right\rceil )}.

Generación de claves

Algoritmo. Generación de claves para el esquema de cifrado ACE. Entrada: un parámetro de tamaño.metro{\displaystyle m}, de tal manera que1024metro16384{\displaystyle 1024\leq m\leq 16384}Salida : un par de claves pública/privada.

  1. Genera un número primo aleatorioq{\displaystyle q}, de tal manera que2255<q<2256{\displaystyle 2^{255}<q<2^{256}}.
  2. Genera un número primo aleatorioPAG{\displaystyle P},2metro1<PAG<2metro{\displaystyle 2^{m-1}<P<2^{m}}, de tal manera quePAG1(metroodq){\displaystyle P\equiv 1(modq)}.
  3. Generar un número entero aleatoriogramo1{2,...,PAG1}{\displaystyle g_{1}\in \left\{2,...,P-1\right\}}, de tal manera quegramo1q1(metroodPAG){\displaystyle g_{1}^{q}\equiv 1(modP)}.
  4. Generar números enteros aleatoriosw{1,...,q1}{\displaystyle w\in \left\{1,...,q-1\right\}}yincógnita,y,z1,z2{0,...,q1}{\displaystyle x,y,z_{1},z_{2}\in \left\{0,...,q-1\right\}}
  5. Calcula los siguientes números enteros en{1,...,PAG1}{\displaystyle \left\{1,...,P-1\right\}}:
    gramo2gramo1wrmimetroPAG{\displaystyle g_{2}\leftarrow g_{1}^{w}remP},dogramo1incógnitarmimetroPAG{\displaystyle c\leftarrow g_{1}^{x}remP},dgramo1yrmimetroPAG{\displaystyle d\leftarrow g_{1}^{y}remP},h1gramo1z1rmimetroPAG{\displaystyle h_{1}\leftarrow g_{1}^{z_{1}}remP},h2gramo1z2rmimetroPAG{\displaystyle h_{2}\leftarrow g_{1}^{z_{2}}remP}.
  6. Generar cadenas de bytes aleatoriask1B20l+64{\displaystyle k_{1}\in B^{20l'+64}}yk2B2l/16+40{\displaystyle k_{2}\in B^{2\left\lceil l/16\right\rceil +40}}, dóndel=LB(PAG){\displaystyle l=L_{B}(P)}yl=LB((2l/4+4)/16){\displaystyle l'=L_{B}(\left\lceil (2\left\lceil l/4\right\rceil +4)/16\right\rceil )}.
  7. Devuelve el par clave pública/clave privada.
    ((PAG,q,gramo1,gramo2,do,d,h1,h2,k1,k2),(w,incógnita,y,z1,z2)){\displaystyle ((P,q,g_{1},g_{2},c,d,h_{1},h_{2},k_{1},k_{2}),(w,x,y,z_{1},z_{2}))}

Representación del texto cifrado

Un texto cifrado del esquema de cifrado ACE tiene la forma

(s,1,2,v,mi){\displaystyle (s,u_{1},u_{2},v,e)},

donde los componentes se definen como: 1,2,v{\displaystyle u_{1},u_{2},v}— números enteros de{1,...,PAG1}{\displaystyle \left\{1,...,P-1\right\}}(cuyo orden multiplicativo móduloPAG{\displaystyle P}divideq{\displaystyle q}). s{\displaystyle s}- elementoW4{\displaystyle W^{4}}. mi{\displaystyle e}- elementoB{\displaystyle B^{\ast }}. s,1,2,v{\displaystyle s,u_{1},u_{2},v}llamamos preámbulo ymi{\displaystyle e}— el criptograma . Si un texto plano es una cadena que consta del{\displaystyle l}байт, entonces la longitud demi{\displaystyle e}es igual al+16l/1024{\displaystyle l+16\left\lceil l/1024\right\rceil }Necesitamos introducir la funcióndominortedoodmi{\displaystyle CEncode}, que asigna un texto cifrado a su cadena de bytes

representación y la función inversa correspondientedoDmidoodmi{\displaystyle CDecode}Para el enterol>0{\displaystyle l>0}, cadena de palabrassW4{\displaystyle s\in W^{4}}, números enteros01,2,v<256l{\displaystyle 0\leq u_{1},u_{2},v<256^{l}}y cadena de bytesmiB{\displaystyle e\in B^{\ast }},

dominortedoodmi(l,s,1,2,v,mi)=dmiFIWB(s)||pagadl(IZB(1))||pagadl(IZB(2))||pagadl(IZB(v))||miB{\displaystyle CEncode(l,s,u_{1},u_{2},v,e){\stackrel {\mathrm {def} }{=}}I_{W^{\ast }}^{B^{\ast }}(s)||pad_{l}(I_{Z}^{B^{\ast }}(u_{1}))||pad_{l}(I_{Z}^{B^{\ast }}(u_{2}))||pad_{l}(I_{Z}^{B^{\ast }}(v))||e\in B^{\ast }}.

Para enterol>0{\displaystyle l>0}, cadena de bytesψB{\displaystyle \psi \in B^{\ast }}, de tal manera queL(ψ)3l+16{\displaystyle L(\psi )\geq 3l+16},

doDmidoodmi(l,ψ)=dmiF(IBW([ψ]016),IBZ([ψ]1616+l),IBZ([ψ]16+l16+2l),IBZ([ψ]16+2l16+3l),[ψ]16+3lL(ψ))W4×Z×Z×Z×B{\displaystyle CDecode(l,\psi ){\stackrel {\mathrm {def} }{=}}(I_{B^{\ast }}^{W^{\ast }}({\Bigl [}\psi {\Bigr ]}_{0}^{16}),I_{B^{\ast }}^{Z}({\Bigl [}\psi {\Bigr ]}_{16}^{16+l}),I_{B^{\ast }}^{Z}({\Bigl [}\psi {\Bigr ]}_{16+l}^{16+2l}),I_{B^{\ast }}^{Z}({\Bigl [}\psi {\Bigr ]}_{16+2l}^{16+3l}),{\Bigl [}\psi {\Bigr ]}_{16+3l}^{L(\psi )})\in W^{4}\times Z\times Z\times Z\times B^{\ast }}.

Proceso de cifrado

Algoritmo. Operación de cifrado asimétrico ACE. Entrada: clave pública(PAG,q,gramo1,gramo2,do,d,h1,h2,k1,k2){\displaystyle (P,q,g_{1},g_{2},c,d,h_{1},h_{2},k_{1},k_{2})}y cadena de bytesMETROB{\displaystyle M\in B^{\ast }}Salida : cadena de bytes — texto cifradoψ {\displaystyle \psi \ }deMETRO{\displaystyle M}.

  1. Generarr{0,...,q1}{\displaystyle r\in \left\{0,...,q-1\right\}}al azar.
  2. Generar el preámbulo del texto cifrado:
    1. GenerarsW4{\displaystyle s\in W^{4}}al azar.
    2. Calcular1gramo1rrmimetroPAG{\displaystyle u_{1}\leftarrow g_{1}^{r}remP},2gramo2rrmimetroPAG{\displaystyle u_{2}\leftarrow g_{2}^{r}remP}.
    3. Calcularα UOWHash(k1,LB(PAG),s,1,2)Z{\displaystyle \alpha \ \leftarrow UOWHash^{\prime }(k_{1},L_{B}(P),s,u_{1},u_{2})\in Z}; tenga en cuenta que0<α <2160{\displaystyle 0<\alpha \ <2^{160}}.
    4. Calcularvdordα rrmimetroPAG{\displaystyle v\leftarrow c^{r}d^{\alpha \ r}remP}.
  3. Calcula la clave para la operación de cifrado simétrico:
    1. h1~h1rrmimetroPAG{\displaystyle {\tilde {h_{1}}}\leftarrow h_{1}^{r}remP},h2~h2rrmimetroPAG{\displaystyle {\tilde {h_{2}}}\leftarrow h_{2}^{r}remP}.
    2. CalcularkmiSHash(k,LB(PAG),s,1,2,h1~,h2~)W8{\displaystyle k\leftarrow ESHash(k,L_{B}(P),s,u_{1},u_{2},{\tilde {h_{1}}},{\tilde {h_{2}}})\in W^{8}}.
  4. Calcular criptogramamiSminortedo(k,s,1024,METRO){\displaystyle e\leftarrow SEnc(k,s,1024,M)}.
  5. Codifique el texto cifrado:
    ψ dominortedoodmi(LB(PAG),s,1,2,v,mi){\displaystyle \psi \ \leftarrow CEncode(L_{B}(P),s,u_{1},u_{2},v,e)}.
  6. Devolverψ {\displaystyle \psi \ }.

Antes de iniciar el proceso de cifrado simétrico, el mensaje de entradaMETROB{\displaystyle M\in B^{\ast }}está dividido en bloquesMETRO1,...,METROt{\displaystyle M_{1},...,M_{t}}donde cada uno de los bloques, posiblemente excepto el último, tiene 1024 bytes. Cada bloque está cifrado mediante el cifrado de flujo. Para cada bloque cifradomii{\displaystyle E_{i}}Se calcula el código de autenticación de mensaje de 16 bytes. Obtenemos el criptograma.

mi=mi1||do1||...||mit||dot{\displaystyle e=E_{1}||C_{1}||...||E_{t}||C_{t}}.L(mi)=L(METRO)+16L(METRO)/metro{\displaystyle L(e)=L(M)+16\left\lceil L(M)/m\right\rceil }.

Tenga en cuenta que siL(METRO)=0{\displaystyle L(M)=0}, entoncesL(mi)=0{\displaystyle L(e)=0}.

Algoritmo. Proceso de cifrado asimétrico ACE. Entrada:(k,s,METRO,metro)W8×W4×Z×B{\displaystyle (k,s,M,m)\in W^{8}\times W^{4}\times Z\times B^{\ast }}metro>0{\displaystyle m>0} Producción:miBl{\displaystyle e\in B^{l}},l=L(METRO)+16L(norte)/metro{\displaystyle l=L(M)+16\left\lceil L(N)/m\right\rceil }.

  1. SiMETRO=λB{\displaystyle M=\lambda _{B}}, luego regresarλB{\displaystyle \lambda _{B}}.
  2. Inicializar un estado de generador pseudoaleatorio:
    gramominorteStatmiInorteitGRAMOminorte(k,s)GRAMOminorteStatmi{\displaystyle genState\leftarrow InitGen(k,s)\in GenState}
  3. Generar la clavekAincógnitaUAincógnitaUHash{\displaystyle k_{AXU}AXUHash}:
    (kAincógnitaU,gramominorteStatmi)GRAMOminorteWords((5Lb(metro/64)+24),gramominorteStatmi).{\displaystyle (k_{AXU},genState)\leftarrow GenWords((5L_{b}(\left\lceil m/64\right\rceil )+24),genState).}.
  4. miλB,i0{\displaystyle e\leftarrow \lambda _{B},i\leftarrow 0}.
  5. Mientrasi<L(METRO){\displaystyle i<L(M)}, haga lo siguiente:
    1. rmetroinorte(L(METRO)i,metro){\displaystyle r\leftarrow min(L(M)-i,m)}.
    2. Generar valores de máscara para el cifrado y el MAC:
      1. (metroaskmetro,gramominorteStatmi)GRAMOminorteWords(4,gramominorteStatmi){\displaystyle (mask_{m},genState)\leftarrow GenWords(4,genState)}.
      2. (metroaskmi,gramominorteStatmi)GRAMOminorteWords(r,gramominorteStatmi){\displaystyle (mask_{e},genState)\leftarrow GenWords(r,genState)}.
    3. Encriptar el texto plano:minortedo[METRO]ii+rmetroaskmi{\displaystyle enc\leftarrow {\Bigl [}M{\Bigr ]}_{i}^{i+r}\oplus mask_{e}}.
    4. Generar el código de autenticación del mensaje:
      1. Sii+r=L(METRO){\displaystyle i+r=L(M)}, entonceslastBlodok1{\displaystyle lastBlock\leftarrow 1}; demáslastBlodok0{\displaystyle lastBlock\leftarrow 0}.
      2. metroadoAincógnitaUHash(kAincógnitaU,lastBlodok,minortedo)W4{\displaystyle mac\leftarrow AXUHash(k_{AXU},lastBlock,enc)\in W^{4}}.
    5. Actualizar el texto cifrado:mimi||minortedo||IWB(metroadometroaskmetro){\displaystyle e\leftarrow e||enc||I_{W^{\ast }}^{B^{\ast }}(mac\oplus mask_{m})}.
    6. ii+r{\displaystyle i\leftarrow i+r}.
  6. Devolvermi{\displaystyle e}.

Proceso de descifrado

Algoritmo. Proceso de descifrado ACE. Entrada: clave pública(PAG,q,gramo1,gramo2,do,d,h1,h2,k1,k2){\displaystyle (P,q,g_{1},g_{2},c,d,h_{1},h_{2},k_{1},k_{2})}y la clave privada correspondiente(w,incógnita,y,z1,z2){\displaystyle (w,x,y,z_{1},z_{2})}, cadena de bytesψB{\displaystyle \psi \in B^{\ast }}Salida : Mensaje descifradoMETROBRmijmidot{\displaystyle M\in B^{\ast }\cup {Reject}}.

  1. Descifra el texto cifrado:
    1. SiL(ψ)<3LB(PAG)+16{\displaystyle L(\psi )<3L_{B}(P)+16}, luego regresarRmijmidot{\displaystyle Reject}.
    2. Calcular:
      (s,1,2,v,mi)doDmidoodmi(LB(PAG),ψ)W4×Z×Z×Z×B{\displaystyle (s,u_{1},u_{2},v,e)\leftarrow CDecode(L_{B}(P),\psi )\in W^{4}\times Z\times Z\times Z\times B^{\ast }};
      tenga en cuenta que01,2,v<256l{\displaystyle 0\leq u_{1},u_{2},v<256^{l}}, dóndel=LB(PAG){\displaystyle l=L_{B}(P)}.
  2. Verifique el preámbulo del texto cifrado:
    1. Si1PAG{\displaystyle u_{1}\geq P}o2PAG{\displaystyle u_{2}\geq P}ovPAG{\displaystyle v\geq P}, luego regresarRmijmidot{\displaystyle Reject}.
    2. Si1q1rmimetroPAG{\displaystyle u_{1}^{q}\neq 1remP}, luego regresarRmijmidot{\displaystyle Reject}.
    3. rmijmidot0{\displaystyle reject\leftarrow 0}.
    4. Si21wrmimetroPAG{\displaystyle u_{2}\neq u_{1}^{w}remP}, entoncesrmijmidot1{\displaystyle reject\leftarrow 1}.
    5. CalcularαUOWHash(k1,LB(PAG),s,1,2)Z{\displaystyle \alpha \leftarrow UOWHash^{\prime }(k_{1},L_{B}(P),s,u_{1},u_{2})\in Z}; tenga en cuenta que0α2160{\displaystyle 0\leq \alpha \leq 2^{160}}.
    6. Siv1incógnita+αyrmimetroPAG{\displaystyle v\neq u_{1}^{x+{\alpha }y}remP}, entoncesrmijmidot1{\displaystyle reject\leftarrow 1}.
    7. Sirmijmidot=1{\displaystyle reject=1}, luego regresarRmijmidot{\displaystyle Reject}.
  3. Calcula la clave para la operación de descifrado simétrico:
    1. h1~1z1rmimetroPAG{\displaystyle {\tilde {h_{1}}}\leftarrow u_{1}^{z_{1}}remP},h2~1z2rmimetroPAG{\displaystyle {\tilde {h_{2}}}\leftarrow u_{1}^{z_{2}}remP}.
    2. CalcularkmiSHash(k2,LB(PAG),s,1,h1~,h2~)W8{\displaystyle k\leftarrow ESHash(k_{2},L_{B}(P),s,u_{1},{\tilde {h_{1}}},{\tilde {h_{2}}})\in W^{8}}.
  4. CalcularMETROSDmido(k,s,1024,mi){\displaystyle M\leftarrow SDec(k,s,1024,e)};tenga en cuenta queSDmido{\displaystyle SDec}puede regresarRmijmidot{\displaystyle Reject}.
  5. DevolverMETRO{\displaystyle M}.

Algoritmo. Operación de descifrado.SDmido{\displaystyle SDec}. Aporte:(k,s,metro,mi)W8×W4×Z×B{\displaystyle (k,s,m,e)\in W^{8}\times W^{4}\times Z\times B^{\ast }}metro>0{\displaystyle m>0} Salida: Mensaje descifradoMETROBRmijmidot{\displaystyle M\in B^{\ast }\cup {Reject}}.

  1. Simi=λB{\displaystyle e=\lambda _{B}}, luego regresarλB{\displaystyle \lambda _{B}}.
  2. Inicializar un estado de generador pseudoaleatorio:
    gramominorteStatmiInorteitGRAMOminorte(k,s)GRAMOminorteStatmi{\displaystyle genState\leftarrow InitGen(k,s)\in GenState}
  3. Generar la clavekAincógnitaUAincógnitaUHash{\displaystyle k_{AXU}AXUHash}:
    (kAincógnitaU,gramominorteStatmi)GRAMOminorteWords((5Lb(metro/64)+24),gramominorteStatmi).{\displaystyle (k_{AXU},genState^{\prime })\leftarrow GenWords((5L_{b}(\left\lceil m/64\right\rceil )+24),genState).}.
  4. METROλB,i0{\displaystyle M\leftarrow \lambda _{B},i\leftarrow 0}.
  5. Mientrasi<L(mi){\displaystyle i<L(e)}, haga lo siguiente:
    1. rmetroinorte(L(mi)i,metro+16)16{\displaystyle r\leftarrow min(L(e)-i,m+16)-16}.
    2. Sir0{\displaystyle r\leq 0}, luego regresarRmijmidot{\displaystyle Reject}.
    3. Generar valores de máscara para el cifrado y el MAC:
      1. (metroaskmetro,gramominorteStatmi)GRAMOminorteWords(4,gramominorteStatmi){\displaystyle (mask_{m},genState)\leftarrow GenWords(4,genState)}.
      2. (metroaskmi,gramominorteStatmi)GRAMOminorteWords(r,gramominorteStatmi){\displaystyle (mask_{e},genState)\leftarrow GenWords(r,genState)}.
    4. Verifique el código de autenticación del mensaje:
      1. Sii+r+16=L(METRO){\displaystyle i+r+16=L(M)}, entonceslastblodok1{\displaystyle lastblock\leftarrow 1}; demáslastblodok0{\displaystyle lastblock\leftarrow 0}.
      2. metroadoAincógnitaUHash(kAincógnitaU,lastBlodok,[mi]ii+r)W4{\displaystyle mac\leftarrow AXUHash(k_{AXU},lastBlock,{\Bigl [}e{\Bigr ]}_{i}^{i+r})\in W^{4}}.
      3. Si[mi]ri+ri+r+16IWB(metroadometroaskmetro){\displaystyle {\Bigl [}e{\Big ]}r_{i+r}^{i+r+16}\neq I_{W^{\ast }}^{B^{\ast }}(mac\oplus mask_{m})}, luego regresarRmijmidot{\displaystyle Reject}.
    5. Actualizar el texto plano:METROMETRO||([mi]ii+r)metroaskmi){\displaystyle M\leftarrow M||({\Bigl [}e{\Bigr ]}_{i}^{i+r})\oplus mask_{e})}.
    6. ii+r+16{\displaystyle i\leftarrow i+r+16}.
  6. DevolverMETRO{\displaystyle M}.

Esquema de firmas

El esquema de firma emplea dos tipos de clave: Clave pública de firma ACE:(norte,h,incógnita,mi,k,s){\displaystyle (N,h,x,e',k',s)} Clave privada de firma ACE :(pag,q,a){\displaystyle (p,q,a)}Para el parámetro de tamaño dadometro{\displaystyle m}, de tal manera que1024metro16384{\displaystyle 1024\leq m\leq 16384}Los componentes clave se definen de la siguiente manera: pag{\displaystyle p}metro/2{\displaystyle \left\lfloor m/2\right\rfloor }Número primo de -bits con(pag1)/2{\displaystyle (p-1)/2}— también es un número primo. q{\displaystyle q}metro/2{\displaystyle \left\lfloor m/2\right\rfloor }Número primo de -bits con(q1)/2{\displaystyle (q-1)/2}— también es un número primo. norte{\displaystyle N}norte=pagq{\displaystyle N=pq}y tienemetro{\displaystyle m}ometro1{\displaystyle m-1}poco. h,incógnita{\displaystyle h,x}— elementos{1,...,norte1}{\displaystyle \left\{1,...,N-1\right\}}(residuos cuadráticos módulonorte{\displaystyle N}). mi{\displaystyle e'}— Número primo de 161 bits. a{\displaystyle a}- elemento{0,...,(pag1)(q1)/41}{\displaystyle \left\{0,...,(p-1)(q-1)/4-1\right\}}k{\displaystyle k'}— elementosB184{\displaystyle B^{184}}. s{\displaystyle s}— elementosB32{\displaystyle B^{32}}.

Generación de claves

Algoritmo. Generación de claves para el esquema de firma de clave pública ACE. Entrada: parámetro de tamaño.metro{\displaystyle m}, de tal manera que1024metro16384{\displaystyle 1024\leq m\leq 16384}Salida : par de claves pública/privada.

  1. Generar números primos aleatoriospag,q{\displaystyle p,q}, de tal manera que(pag1)/2{\displaystyle (p-1)/2}y(q1)/2{\displaystyle (q-1)/2}— también es un número primo, y
    2metro11<pag<2metro1{\displaystyle 2^{m_{1}-1}<p<2^{m_{1}}},2metro21<q<2metro2{\displaystyle 2^{m_{2}-1}<q<2^{m_{2}}}, ypagq{\displaystyle p\neq q}, dónde
    metro1=metro/2{\displaystyle m_{1}=\left\lfloor m/2\right\rfloor }ymetro1=metro/2{\displaystyle m_{1}=\left\lceil m/2\right\rceil }.
  2. Colocarnortepagq{\displaystyle N\leftarrow pq}.
  3. Generar un número primo aleatoriomi{\displaystyle e'}, donde2160mi2161{\displaystyle 2^{160}\leq e'\leq 2^{161}}.
  4. Generar aleatorioh{1,...,norte1}{\displaystyle h'\in \left\{1,...,N-1\right\}}, teniendo en cuentagramodod(h,norte)=1{\displaystyle gcd(h',N)=1}ygramodod(h±1,norte)=1{\displaystyle gcd(h'\pm 1,N)=1}y calcularh(h)2rmimetronorte{\displaystyle h\leftarrow (h')^{-2}remN}.
  5. Generar aleatorioa{0,...,(pag1)(q1)/41}{\displaystyle a\in \left\{0,...,(p-1)(q-1)/4-1\right\}}y calcularincógnitaharmimetronorte{\displaystyle x\leftarrow h^{a}remN}.
  6. Generar cadenas de bytes aleatoriaskB184{\displaystyle k'\in B^{184}}, ysB32{\displaystyle s\in B^{32}}.
  7. Devuelve el par de clave pública/clave privada.
    ((norte,h,incógnita,mi,k,s),(pag,q,a)){\displaystyle ((N,h,x,e',k',s),(p,q,a))}.

Representación de firmas

La firma en el esquema de firma ACE tiene la forma(d,w,y,y,k~){\displaystyle (d,w,y,y',{\tilde {k}})}donde los componentes se definen de la siguiente manera: d{\displaystyle d}- elementoB64{\displaystyle B^{64}}. w{\displaystyle w}— entero, tal que2160w2161{\displaystyle 2^{160}\leq w\leq 2^{161}}. y,y{\displaystyle y,y'}— elementos{1,...,norte1}{\displaystyle \left\{1,...,N-1\right\}}. k~{\displaystyle {\tilde {k}}}- elementoB{\displaystyle B^{\ast }};tenga en cuenta queL(k~)=64+20LB((L(METRO)+8)/64){\displaystyle L({\tilde {k}})=64+20L_{B}(\left\lceil (L(M)+8)/64\right\rceil )}, dóndeMETRO{\displaystyle M}— mensaje que se está firmando.

Necesitamos presentar elSminortedoodmi{\displaystyle SEncode}función, que asigna una firma a su representación de cadena de bytes, y la función inversa correspondiente.SDmidoodmi{\displaystyle SDecode}Para enterosl>0{\displaystyle l>0}, cadena de bytesdB64{\displaystyle d\in B^{64}}, números enteros0w25621{\displaystyle 0\leq w\leq 256^{21}}y0y,y<256l{\displaystyle 0\leq y,y'<256^{l}}y cadena de bytesk~B{\displaystyle {\tilde {k}}\in B^{\ast }},

Sminortedoodmi(l,d,w,y,y,k~)=dmiFd||pagad21(IZB(w))||pagadl(IZB(y))||pagadl(IZB(y))||k~B{\displaystyle SEncode(l,d,w,y,y',{\tilde {k}}){\stackrel {\mathrm {def} }{=}}d||pad_{21}(I_{Z}^{B^{\ast }}(w))||pad_{l}(I_{Z}^{B^{\ast }}(y))||pad_{l}(I_{Z}^{B^{\ast }}(y'))||{\tilde {k}}\in B^{\ast }}.

Para enterol>0{\displaystyle l>0}, cadena de bytesσB{\displaystyle \sigma \in B^{\ast }}, dóndeL(σ)2l+53{\displaystyle L(\sigma )\geq 2l+53},

doSmidoodmi(l,σ)=dmiF([σ]064,IBZ([σ]6485),IBZ([σ]8585+l),IBZ([σ]85+l85+2l),[σ]85+2lL(σ))B64×Z×Z×Z×B{\displaystyle CSecode(l,\sigma ){\stackrel {\mathrm {def} }{=}}({\Bigl [}\sigma {\Bigr ]}_{0}^{64},I_{B^{\ast }}^{Z}({\Bigl [}\sigma {\Bigr ]}_{64}^{85}),I_{B^{\ast }}^{Z}({\Bigl [}\sigma {\Bigr ]}_{85}^{85+l}),I_{B^{\ast }}^{Z}({\Bigl [}\sigma {\Bigr ]}_{85+l}^{85+2l}),{\Bigl [}\sigma {\Bigr ]}_{85+2l}^{L(\sigma )})\in B^{64}\times Z\times Z\times Z\times B^{\ast }}.

Proceso de generación de firmas

Algoritmo. Proceso de generación de firma ACE. Entrada: clave pública(norte,h,incógnita,mi,k,s){\displaystyle (N,h,x,e',k',s)}y la clave privada correspondiente(pag,q,a){\displaystyle (p,q,a)}y cadena de bytesMETROB{\displaystyle M\in B^{\ast }},0L(METRO)264{\displaystyle 0\leq L(M)\leq 2^{64}}Salida : cadena de bytes — firma digitalσB{\displaystyle \sigma \in B^{\ast }}.

  1. Realice los siguientes pasos para aplicar el hash a los datos de entrada:
    1. Generar una clave hashk~B20metro+64{\displaystyle {\tilde {k}}\in B^{20m+64}}al azar, de tal manera quemetro=Lb((L(METRO)+8)/64){\displaystyle m=L_{b}(\left\lceil (L(M)+8)/64\right\rceil )}.
    2. CalcularmetrohIWZ(UOWHash(k~,METRO)){\displaystyle m_{h}\leftarrow I_{W^{\ast }}^{Z}(UOWHash^{\prime \prime }({\tilde {k}},M))}.
  2. Seleccionary~{1,...,norte1}{\displaystyle {\tilde {y}}\in \left\{1,...,N-1\right\}}al azar y calcularyy~2rmimetronorte{\displaystyle y'\leftarrow {\tilde {y}}^{2}remN}.
  3. Calcularincógnita(y)rhmetrohrmimetronorte{\displaystyle x'\leftarrow (y')^{r'}h^{m_{h}}remN}.
  4. Genera un número primo aleatoriomi{\displaystyle e},2160mi2161{\displaystyle 2^{160}\leq e\leq 2^{161}}y su certificado de exactitud(w,d){\displaystyle (w,d)}:(mi,w,d)GRAMOminortedomirtPAGrimetromi(s){\displaystyle (e,w,d)\leftarrow GenCertPrime(s)}. Repita este paso hastamimi{\displaystyle e\neq e'}.
  5. ColocarrUOWHash(k,LB(norte),incógnita,k~)Z{\displaystyle r\leftarrow UOWHash^{\prime \prime \prime }(k',L_{B}(N),x',{\tilde {k}})\in Z}; tenga en cuenta que0r<2160{\displaystyle 0\leq r<2^{160}}.
  6. Calcularyhbrmimetronorte{\displaystyle y\leftarrow h^{b}remN}, dónde
    bmi1(ar)rmimetro(pagq){\displaystyle b\leftarrow e^{-1}(a-r)rem(p'q')},
    y dóndepag=(pag1)/2{\displaystyle p'=(p-1)/2}yq=(q1)/2{\displaystyle q'=(q-1)/2}.
  7. Codifique la firma:
    σSminortedoodmi(LB(norte),d,w,y,y,k~){\displaystyle \sigma \leftarrow SEncode(L_{B}(N),d,w,y,y',{\tilde {k}})}.
  8. Devolverσ{\displaystyle \sigma }

Notas

En la definición del proceso de cifrado ACE y del proceso de firma ACE se utilizan algunas funciones auxiliares (por ejemplo, UOWHash, ESHash y otras), cuya definición va más allá del alcance de este artículo. Para obtener más detalles, consulte [ 1 ] .

Implementación, utilización y rendimiento

El esquema de cifrado ACE está recomendado por NESSIE (Nuevos Esquemas Europeos para Firmas, Integridad y Cifrado) como esquema de cifrado asimétrico. El comunicado de prensa data de febrero de 2003.

Ambos esquemas se implementaron en ANSI C, utilizando la biblioteca GNU GMP. Las pruebas se realizaron en dos plataformas: Power PC 604 modelo 43P bajo el sistema AIX y  Pentium de 266 MHz bajo el sistema Windows NT. Tablas de resultados:

Literatura

  1. ACE: El motor criptográfico avanzado, T. Schweinberger y V. Shoup, manuscrito 2000
  • http://www.alphaworks.ibm.com/tech/ace
  • http://www.zurich.ibm.com/security/ace/
  • Portafolio NESSIE de primitivas criptográficas recomendadas