ACE (advanced cryptographic engine) is the collection of units, implementing both a public key encryption scheme and a digital signature scheme. Corresponding names for these schemes — «ACE Encrypt» and «ACE Sign». Schemes are based on Cramer-Shoup public key encryption scheme and Cramer-Shoup signature scheme. Introduced variants of these schemes are intended to achieve a good balance between performance and security of the whole encryption system.
All the algorithms, implemented in ACE are based on algorithms developed by Victor Shoup and Ronald Cramer. The full algorithms specification is written by Victor Shoup. Implementation of algorithms is done by Thomas Schweinberger and Mehdi Nassehi, its supporting and maintaining is done by Victor Shoup. Thomas Schweinberger participated in construction of ACE specification document and also wrote a user manual.
Ronald Cramer currently stays in the university of Aarhus, Denmark. He worked on the project of ACE Encrypt while his staying in ETH in Zürich, Switzerland.
Mehdi Nassehi and Thomas Schweinberger worked on ACE project in the IBM research lab in Zürich, Switzerland.
Victor Shoup works in the IBM research lab in Zürich, Switzerland.
The encryption scheme in ACE can be proven secure under reasonable and naturalintractability assumptions.These four assumptions are:
Here we introduce some notations, being used in this article.
\Z
F2[T]
F2
A\operatorname{rem}n
r\in\left\{0,...,n-1\right\}
A\equivr\pmodn
n>0
A\in\Z
A\operatorname{rem}f
r\inF2[T]
\deg(r)<\deg(f)
A\equivr\pmodf
A,f\inF2[T],f\ne0
A\ast
An
x\inA\astL(x)
x
λA
x,y\inA\ast
x\|y
x
y
b\overset{def
b,
n1 | |
b |
,
n1 | |
(b |
n2 | |
) |
,...
We define
B\stackrel{def
W\stackrel{def
For
x\inA\ast
A\in\left\{b,B,W\right\}
l>0
Conversion operator
dst | |
I | |
src |
:src\todst
\ast | |
Z,F | |
2[T],b |
,B\ast,W\ast
The encryption scheme employs two key types:
ACE public key:
(P,q,g1,g2,c,d,h1,h2,k1,k2)
(w,x,y,z1,z2)
m
1024\lem\le16384
q
P
P\equiv1\pmodq
g1,g2,c,d,h1,h2
\left\{1,...,P-1\right\}
P
q
w,x,y,z1,z2
\left\{0,...,q-1\right\}
k1,k2
B\ast
L(k1)=20l'+64
L(k2)=32\left\lceill/16\right\rceil+40
l=\left\lceilm/8\right\rceil
l'=Lb(\left\lceil(2\left\lceill/4\right\rceil+4)/16\right\rceil)
Algorithm. Key Generation for ACE encryption scheme.
Input: a size parameter
m
1024\lem\le16384
q
2255<q<2256
P
2m-1<P<2m
P\equiv1(modq)
g1\in\left\{2,...,P-1\right\}
q\equiv1(mod | |
g | |
1 |
P)
w\in\left\{1,...,q-1\right\}
x,y,z1,z2\in\left\{0,...,q-1\right\}
\left\{1,...,P-1\right\}
k1\inB20l'+64
k2\inB2\left\lceil
l=LB(P)
l'=LB(\left\lceil(2\left\lceill/4\right\rceil+4)/16\right\rceil)
A ciphertext of the ACE encryption scheme has the form
where the components are defined as:
u1,u2,v
\left\{1,...,P-1\right\}
P
q
s
W4
e
B\ast
s,u1,u2,v
e
l
e
l+16\left\lceill/1024\right\rceil
CEncode
CDecode
l>0
s\inW4
0\leu1,u
l | |
2,v<256 |
e\inB\ast
l>0
\psi\inB\ast
L(\psi)\ge3l+16
Algorithm. ACE asymmetric encryption operation.
input: public key
(P,q,g1,g2,c,d,h1,h2,k1,k2)
M\inB\ast
\psi
M
r\in\left\{0,...,q-1\right\}
s\inW4
u1\leftarrow
r | |
g | |
1 |
remP
u2\leftarrow
r | |
g | |
2 |
remP
\alpha \leftarrowUOWHash\prime(k1,LB(P),s,u1,u2)\inZ
0<\alpha <2160
v\leftarrowcrd\alpha rremP
\tilde{h1}\leftarrow
r | |
h | |
1 |
remP
\tilde{h2}\leftarrow
r | |
h | |
2 |
remP
k\leftarrowESHash(k,LB(P),s,u1,u2,\tilde{h1},\tilde{h2})\inW8
e\leftarrowSEnc(k,s,1024,M)
\psi
M\inB\ast
M1,...,Mt
Ei
L(M)=0
L(e)=0
(k,s,M,m)\inW8 x W4 x Z x B\ast
m>0
e\inBl
l=L(M)+16\left\lceilL(N)/m\right\rceil
M=λB
λB
kAXUAXUHash
e\leftarrowλB,i\leftarrow0
i<L(M)
r\leftarrowmin(L(M)-i,m)
(maskm,genState)\leftarrowGenWords(4,genState)
(maske,genState)\leftarrowGenWords(r,genState)
enc\leftarrow
i+r | |
l[Mr] | |
i |
⊕ maske
i+r=L(M)
lastBlock\leftarrow1
lastBlock\leftarrow0
mac\leftarrowAXUHash(kAXU,lastBlock,enc)\inW4
e\leftarrow
B\ast | |
e||enc||I | |
W\ast |
(mac ⊕ maskm)
i\leftarrowi+r
e
Algorithm. ACE decryption process.
Input: public key
(P,q,g1,g2,c,d,h1,h2,k1,k2)
(w,x,y,z1,z2)
\psi\inB\ast
M\inB\ast\cup{Reject}
L(\psi)<3LB(P)+16
Reject
0\leu1,u
l | |
2,v<256 |
l=LB(P)
u1\geP
u2\geP
v\geP
Reject
q | |
u | |
1 |
\ne1remP
Reject
reject\leftarrow0
u2\ne
w | |
u | |
1 |
remP
reject\leftarrow1
\alpha\leftarrowUOWHash\prime(k1,LB(P),s,u1,u2)\inZ
0\le\alpha\le2160
v\ne
x+{\alpha | |
u | |
1 |
y}remP
reject\leftarrow1
reject=1
Reject
\tilde{h1}\leftarrow
z1 | |
u | |
1 |
remP
\tilde{h2}\leftarrow
z2 | |
u | |
1 |
remP
k\leftarrowESHash(k2,LB(P),s,u1,\tilde{h1},\tilde{h2})\inW8
M\leftarrowSDec(k,s,1024,e)
SDec
Reject
M
SDec
(k,s,m,e)\inW8 x W4 x Z x B\ast
m>0
M\inB\ast\cup{Reject}
e=λB
λB
kAXUAXUHash
M\leftarrowλB,i\leftarrow0
i<L(e)
r\leftarrowmin(L(e)-i,m+16)-16
r\le0
Reject
(maskm,genState)\leftarrowGenWords(4,genState)
(maske,genState)\leftarrowGenWords(r,genState)
i+r+16=L(M)
lastblock\leftarrow1
lastblock\leftarrow0
mac\leftarrowAXUHash(kAXU
i+r | |
,lastBlock,l[er] | |
i |
)\inW4
i+r+16 | |
l[e]r | |
i+r |
\ne
B\ast | |
I | |
W\ast |
(mac ⊕ maskm)
Reject
M\leftarrow
i+r | |
M||(l[er] | |
i |
) ⊕ maske)
i\leftarrowi+r+16
M
The signature scheme employs two key types:
ACE Signature public key:
(N,h,x,e',k',s)
(p,q,a)
m
1024\lem\le16384
p
\left\lfloorm/2\right\rfloor
(p-1)/2
q
\left\lfloorm/2\right\rfloor
(q-1)/2
N
N=pq
m
m-1
h,x
\left\{1,...,N-1\right\}
N
e'
a
\left\{0,...,(p-1)(q-1)/4-1\right\}
k'
B184
s
B32
Algorithm. Key generation for the ACE public-key signature scheme.
Input: size parameter
m
1024\lem\le16384
p,q
(p-1)/2
(q-1)/2
m1=\left\lfloorm/2\right\rfloor
m1=\left\lceilm/2\right\rceil
N\leftarrowpq
e'
2160\lee'\le2161
h'\in\left\{1,...,N-1\right\}
gcd(h',N)=1
gcd(h'\pm1,N)=1
h\leftarrow(h')-2remN
a\in\left\{0,...,(p-1)(q-1)/4-1\right\}
x\leftarrowharemN
k'\inB184
s\inB32
The signature in the ACE signature scheme has the form
(d,w,y,y',\tilde{k})
d
B64
w
2160\lew\le2161
y,y'
\left\{1,...,N-1\right\}
\tilde{k}
B\ast
L(\tilde{k})=64+20LB(\left\lceil(L(M)+8)/64\right\rceil)
M
SEncode
SDecode
l>0
d\inB64
0\lew\le25621
0\ley,y'<256l
\tilde{k}\inB\ast
l>0
\sigma\inB\ast
L(\sigma)\ge2l+53
Algorithm. ACE Signature Generation Process.
Input: public key
(N,h,x,e',k',s)
(p,q,a)
M\inB\ast
0\leL(M)\le264
\sigma\inB\ast
\tilde{k}\inB20m+64
m=Lb(\left\lceil(L(M)+8)/64\right\rceil)
mh\leftarrow
Z | |
I | |
W\ast |
(UOWHash\prime\prime(\tilde{k},M))
\tilde{y}\in\left\{1,...,N-1\right\}
y'\leftarrow\tilde{y}2remN
x'\leftarrow(y')r'
mh | |
h |
remN
e
2160\lee\le2161
(w,d)
(e,w,d)\leftarrowGenCertPrime(s)
e\nee'
r\leftarrowUOWHash\prime\prime\prime(k',LB(N),x',\tilde{k})\inZ
0\ler<2160
y\leftarrowhbremN
p'=(p-1)/2
q'=(q-1)/2
\sigma
In the definition of ACE Encryption process and ACE Signature process some auxiliary function (e.g. UOWHash, ESHash and some other) are being used, definition of which goes beyond this article. More details about it can be found in в.[1]
ACE Encryption scheme is recommended by NESSIE (New European Schemes for Signatures, Integrity and Encryption) as asymmetric encryption scheme. Press-release is dated by February 2003.
Both schemes were implemented in ANSI C, with the use of GNU GMP library. Tests were done on two platforms: Power PC 604 model 43P under AIX system and 266 MHz Pentium under Windows NT system. Result tables:
Power PC | Pentium | - | Operand size(byte) | Operand size(byte) | - | 512 | 1024 | 512 | 1024 | - | Multiplication | - | Squaring | - | Exponentiation |
Power PC | Pentium | - | Fixed costs (ms) | MBit/sec | Fixed costs (ms) | MBit/sec | - | Encrypt | 160 | 18 | 230 | 16 | - | Decrypt | 68 | 18 | 97 | 14 | - | Sign | 48 | 64 | 62 | 52 | - | Sign set-up | 29 | 41 | - | Verify | 52 | 65 | 73 | 53 |