Terminología y notación básicas
A continuación, presentamos algunas notaciones que se utilizan en este artículo.
Bits, Bytes, Palabras
— El conjunto de bits. Tomemos todos los conjuntos de forma
Para un conjunto A de este tipo, definimos el "elemento cero":

;

para

.
Nosotros definimos
como un conjunto de bytes, y
como un conjunto de palabras.
Para
con
y
Definimos un operador de relleno:

.
Operador de conversión
Operador de conversión
realiza una conversión entre elementos
.
Esquema de cifrado
Par de claves de cifrado
El esquema de cifrado emplea dos tipos de clave: clave pública ACE:
Clave privada ACE :
Para un parámetro de tamaño dado
, de tal manera que
Los componentes clave se definen como:
— un número primo de 256 bits.
— un número primo de m bits, tal que
.
— elementos
(cuyo orden multiplicativo módulo
divide
).
— elementos
.
— elementos
con
y
, dónde
y
.
Generación de claves
Algoritmo. Generación de claves para el esquema de cifrado ACE. Entrada: un parámetro de tamaño.
, de tal manera que
Salida : un par de claves pública/privada.
- Genera un número primo aleatorio
, de tal manera que
. - Genera un número primo aleatorio
,
, de tal manera que
. - Generar un número entero aleatorio
, de tal manera que
. - Generar números enteros aleatorios
y
- Calcula los siguientes números enteros en
:
,

,

,

,

.
- Generar cadenas de bytes aleatorias
y
, dónde
y
. - Devuelve el par clave pública/clave privada.

Representación del texto cifrado
Un texto cifrado del esquema de cifrado ACE tiene la forma

,
donde los componentes se definen como:
— números enteros de
(cuyo orden multiplicativo módulo
divide
).
- elemento
.
- elemento
.
llamamos preámbulo y
— el criptograma . Si un texto plano es una cadena que consta de
байт, entonces la longitud de
es igual a
Necesitamos introducir la función
, que asigna un texto cifrado a su cadena de bytes
representación y la función inversa correspondiente
Para el entero
, cadena de palabras
, números enteros
y cadena de bytes
,

.
Para entero
, cadena de bytes
, de tal manera que
,
![{\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 }}](https://wikimedia.org/api/rest_v1/media/math/render/svg/03a79f952531c75a4cb655c8659a6aa5ec1f7ac6)
.
Proceso de cifrado
Algoritmo. Operación de cifrado asimétrico ACE. Entrada: clave pública
y cadena de bytes
Salida : cadena de bytes — texto cifrado
de
.
- Generar
al azar. - Generar el preámbulo del texto cifrado:
- Generar
al azar. - Calcular
,
. - Calcular
; tenga en cuenta que
. - Calcular
.
- Calcula la clave para la operación de cifrado simétrico:
,
.- Calcular
.
- Calcular criptograma
. - Codifique el texto cifrado:

.
- Devolver
.
Antes de iniciar el proceso de cifrado simétrico, el mensaje de entrada
está dividido en bloques
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 cifrado
Se calcula el código de autenticación de mensaje de 16 bytes. Obtenemos el criptograma.

.

.
Tenga en cuenta que si
, entonces
.
Algoritmo. Proceso de cifrado asimétrico ACE. Entrada:
Producción:
,
.
- Si
, luego regresar
. - Inicializar un estado de generador pseudoaleatorio:

- Generar la clave
:
.
.- Mientras
, haga lo siguiente:
.- Generar valores de máscara para el cifrado y el MAC:
.
.
- Encriptar el texto plano:
. - Generar el código de autenticación del mensaje:
- Si
, entonces
; demás
.
.
- Actualizar el texto cifrado:
.
.
- Devolver
.
Proceso de descifrado
Algoritmo. Proceso de descifrado ACE. Entrada: clave pública
y la clave privada correspondiente
, cadena de bytes
Salida : Mensaje descifrado
.
- Descifra el texto cifrado:
- Si
, luego regresar
. - Calcular:

;
tenga en cuenta que
, dónde
.
- Verifique el preámbulo del texto cifrado:
- Si
o
o
, luego regresar
. - Si
, luego regresar
.
.- Si
, entonces
. - Calcular
; tenga en cuenta que
. - Si
, entonces
. - Si
, luego regresar
.
- Calcula la clave para la operación de descifrado simétrico:
,
.- Calcular
.
- Calcular
;tenga en cuenta que
puede regresar
. - Devolver
.
Algoritmo. Operación de descifrado.
. Aporte:
Salida: Mensaje descifrado
.
- Si
, luego regresar
. - Inicializar un estado de generador pseudoaleatorio:

- Generar la clave
:
.
.- Mientras
, haga lo siguiente:
.- Si
, luego regresar
. - Generar valores de máscara para el cifrado y el MAC:
.
.
- Verifique el código de autenticación del mensaje:
- Si
, entonces
; demás
.
.- Si
, luego regresar
.
- Actualizar el texto plano:
.
.
- Devolver
.
Esquema de firmas
El esquema de firma emplea dos tipos de clave: Clave pública de firma ACE:
Clave privada de firma ACE :
Para el parámetro de tamaño dado
, de tal manera que
Los componentes clave se definen de la siguiente manera:
—
Número primo de -bits con
— también es un número primo.
—
Número primo de -bits con
— también es un número primo.
—
y tiene
o
poco.
— elementos
(residuos cuadráticos módulo
).
— Número primo de 161 bits.
- elemento
— elementos
.
— elementos
.
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.
, de tal manera que
Salida : par de claves pública/privada.
- Generar números primos aleatorios
, de tal manera que
y
— también es un número primo, y
,

, y

, dónde
y
. - Colocar
. - Generar un número primo aleatorio
, donde
. - Generar aleatorio
, teniendo en cuenta
y
y calcular
. - Generar aleatorio
y calcular
. - Generar cadenas de bytes aleatorias
, y
. - Devuelve el par de clave pública/clave privada.

.
Representación de firmas
La firma en el esquema de firma ACE tiene la forma
donde los componentes se definen de la siguiente manera:
- elemento
.
— entero, tal que
.
— elementos
.
- elemento
;tenga en cuenta que
, dónde
— mensaje que se está firmando.
Necesitamos presentar el
función, que asigna una firma a su representación de cadena de bytes, y la función inversa correspondiente.
Para enteros
, cadena de bytes
, números enteros
y
y cadena de bytes
,

.
Para entero
, cadena de bytes
, dónde
,
![{\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 }}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7b9da10ec5c5017b9db158078fbe0f7d55cfdef3)
.
Proceso de generación de firmas
Algoritmo. Proceso de generación de firma ACE. Entrada: clave pública
y la clave privada correspondiente
y cadena de bytes
,
Salida : cadena de bytes — firma digital
.
- Realice los siguientes pasos para aplicar el hash a los datos de entrada:
- Generar una clave hash
al azar, de tal manera que
. - Calcular
.
- Seleccionar
al azar y calcular
. - Calcular
. - Genera un número primo aleatorio
,
y su certificado de exactitud
:
. Repita este paso hasta
. - Colocar
; tenga en cuenta que
. - Calcular
, dónde
,
y dónde
y
. - Codifique la firma:

.
- Devolver
