Basic Terminology and Notation
[edit]
Here we introduce some notations, being used in this article.
— The set of bits.
Let us take all sets of form
. For such a set A we define the "zero element":

;

for

.
We define
as a set of bytes, and
as a set of words.
For
with
and
we define a padding operator:

.
Conversion operator
[edit]
Conversion operator
makes a conversion between elements
.
Encryption Key Pair
[edit]
The encryption scheme employs two key types:
ACE public key:
.
ACE private key:
.
For a given size parameter
, such that
, key components are defined as:
— a 256-bit prime number.
— a m-bit prime number, such that
.
— elements
(whose multiplicative order modulo
divides
).
— elements
.
— elements
with
and
, where
and
.
Algorithm. Key Generation for ACE encryption scheme.
Input: a size parameter
, such that
.
Output: a public/private key pair.
- Generate a random prime
, such that
.
- Generate a random prime
,
, such that
.
- Generate a random integer
, such that
.
- Generate random integers
and 
- Compute the following integers in
:
,

,

,

,

.
- Generate random byte strings
and
, where
and
.
- Return the public key/private key pair

Ciphertext Representation
[edit]
A ciphertext of the ACE encryption scheme has the form

,
where the components are defined as:
— integers from
(whose multiplicative order modulo
divides
).
— element
.
— element
.
we call the preamble, and
— the cryptogram. If a cleartext is a string consisting of
байт, then the length of
is equal to
.
We need to introduce the function
, which maps a ciphertext to its byte-string
representation, and the corresponding inverse function
. For the integer
, word string
, integers
, and byte string
,

.
For integer
, byte string
, such that
,
![{\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)
.
Algorithm. ACE asymmetric encryption operation.
input: public key
and byte string
.
Output: byte string — ciphertext
of
.
- Generate
at random.
- Generate the ciphertext preamble:
- Generate
at random.
- Compute
,
.
- Compute
; note that
.
- Compute
.
- Compute the key for the symmetric encryption operation:
,
.
- Compute
.
- Compute cryptogram
.
- Encode the ciphertext:

.
- Return
.
Before starting off the symmetric encryption process, the input message
is divided into blocks
, where each of the block, possibly except the last one, is of 1024 bytes. Each block is encrypted by the stream cipher. For each encrypted block
16-byte message authentication code is computed. We get the cryptogram

.

.
Note that if
, then
.
Algorithm. ACE asymmetric encryption process.
Input:

Output:
,
.
- If
, then return
.
- Initialize a pseudo-random generator state:

- Generate the key
: 
.
.
- While
, do the following:
.
- Generate mask values for the encryption and MAC:
.
.
- Encrypt the plaintext:
.
- Generate the message authentication code:
- If
, then
; else
.
.
- Update the ciphertext:
.
.
- Return
.
Algorithm. ACE decryption process.
Input: public key
and corresponding private key
, byt e string
.
Output: Decrypted message
.
- Decrypt the ciphertext:
- If
, then return
.
- Compute:

;
note that
, where
.
- Verify the ciphertext preamble:
- If
or
or
, then return
.
- If
, then return
.
.
- If
, then
.
- Compute
; note that
.
- If
, then
.
- If
, then return
.
- Compute the key for the symmetric decryption operation:
,
.
- Compute
.
- Compute
;note that
can return
.
- Return
.
Algorithm. Decryption operation
.
Input:

Output: Decrypted message
.
- If
, then return
.
- Initialize a pseudo-random generator state:

- Generate the key
: 
.
.
- While
, do the following:
.
- If
, then return
.
- Generate mask values for the encryption and MAC:
.
.
- Verify the message authentication code:
- If
, then
; else
.
.
- If
, then return
.
- Update the plaintext:
.
.
- Return
.
The signature scheme employs two key types:
ACE Signature public key:
.
ACE Signature private key:
.
For the given size parameter
, such that
, key components are defined the following way:
—
-bit prime number with
— is also a prime number.
—
-bit prime number with
— is also a prime number.
—
and has either
or
bit.
— elements
(quadratic residues modulo
).
— 161-bit prime number.
— element 
— elements
.
— elements
.
Algorithm. Key generation for the ACE public-key signature scheme.
Input: size parameter
, such that
.
Output: public/private key pair.
- Generate random prime numbers
, such that
and
— is also a prime number, and 
,

, и

,
where
and
.
- Set
.
- Generate random prime number
, где
.
- Generate random
, taking into account
and
, and compute
.
- Generate random
and compute
.
- Generate random byte strings
, and
.
- Return public key/private key pair

.
Signature Representation
[edit]
The signature in the ACE signature scheme has the form
, where the components are defined the following way:
— element
.
— integer, such that
.
— elements
.
— element
;note that
, where
— message being signed.
We need to introduce the
function, which maps a signature into its byte string representation, and the corresponding inverse function
. For integer
, byte string
, integers
and
, and byte string
,

.
For integer
, byte string
, where
,
![{\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)
.
Signature Generation Process
[edit]
Algorithm. ACE Signature Generation Process.
Input: public key
and corresponding private key
and byte string
,
.
Output: byte string — digital signature
.
- Perform the following steps to hash the input data:
- Generate a hash key
at random, such that
.
- Compute
.
- Select
at random, and compute
.
- Compute
.
- Generate a random prime
,
, and its certificate of correctness
:
. Repeat this step until
.
- Set
; note that
.
- Compute
, where 
,
and where
and
.
- Encode the signature:

.
- Return
