ZUC

ZUC

General Information

Status
Published
Publication Date
04-Aug-2020
Current Stage
5060 - Close of voting Proof returned by Secretariat
Start Date
20-Jul-2020
Completion Date
20-Jul-2020
Ref Project

RELATIONS

Buy Standard

Standard
ISO/IEC 18033-4:2011/Amd 1:2020 - ZUC
English language
12 pages
sale 15% off
Preview
sale 15% off
Preview

Standards Content (sample)

INTERNATIONAL ISO/IEC
STANDARD 18033-4
Second edition
2011-12-15
AMENDMENT 1
2020-08
Information technology —
Security techniques — Encryption
algorithms —
Part 4:
Stream ciphers
AMENDMENT 1: ZUC
Technologies de l'information — Techniques de sécurité —
Algorithmes de chiffrement —
Partie 4: Chiffrements en flot
AMENDEMENT 1: ZUC
Reference number
ISO/IEC 18033-4:2011/Amd.1:2020(E)
ISO/IEC 2020
---------------------- Page: 1 ----------------------
ISO/IEC 18033-4:2011/Amd.1:2020(E)
COPYRIGHT PROTECTED DOCUMENT
© ISO/IEC 2020

All rights reserved. Unless otherwise specified, or required in the context of its implementation, no part of this publication may

be reproduced or utilized otherwise in any form or by any means, electronic or mechanical, including photocopying, or posting

on the internet or an intranet, without prior written permission. Permission can be requested from either ISO at the address

below or ISO’s member body in the country of the requester.
ISO copyright office
CP 401 • Ch. de Blandonnet 8
CH-1214 Vernier, Geneva
Phone: +41 22 749 01 11
Email: copyright@iso.org
Website: www.iso.org
Published in Switzerland
ii © ISO/IEC 2020 – All rights reserved
---------------------- Page: 2 ----------------------
ISO/IEC 18033-4:2011/Amd.1:2020(E)
Foreword

ISO (the International Organization for Standardization) and IEC (the International Electrotechnical

Commission) form the specialized system for worldwide standardization. National bodies that

are members of ISO or IEC participate in the development of International Standards through

technical committees established by the respective organization to deal with particular fields of

technical activity. ISO and IEC technical committees collaborate in fields of mutual interest. Other

international organizations, governmental and non-governmental, in liaison with ISO and IEC, also

take part in the work.

The procedures used to develop this document and those intended for its further maintenance are

described in the ISO/IEC Directives, Part 1. In particular, the different approval criteria needed for

the different types of document should be noted. This document was drafted in accordance with the

editorial rules of the ISO/IEC Directives, Part 2 (see www .iso .org/ directives).

Attention is drawn to the possibility that some of the elements of this document may be the subject

of patent rights. ISO and IEC shall not be held responsible for identifying any or all such patent

rights. Details of any patent rights identified during the development of the document will be in the

Introduction and/or on the ISO list of patent declarations received (see www .iso .org/ patents) or the IEC

list of patent declarations received (see http:// patents .iec .ch).

Any trade name used in this document is information given for the convenience of users and does not

constitute an endorsement.

For an explanation of the voluntary nature of standards, the meaning of ISO specific terms and

expressions related to conformity assessment, as well as information about ISO's adherence to the

World Trade Organization (WTO) principles in the Technical Barriers to Trade (TBT), see www .iso .org/

iso/ foreword .html.

This document was prepared by Joint Technical Committee ISO/IEC JTC 1, Information technology,

Subcommittee SC 27, Information security, cybersecurity and privacy protection.
A list of all parts in the ISO/IEC 18033 series can be found on the ISO website.

Any feedback or questions on this document should be directed to the user’s national standards body. A

complete listing of these bodies can be found at www .iso .org/ members .html.
© ISO/IEC 2020 – All rights reserved iii
---------------------- Page: 3 ----------------------
ISO/IEC 18033-4:2011/Amd.1:2020(E)
Information technology — Security techniques —
Encryption algorithms —
Part 4:
Stream ciphers
AMENDMENT 1: ZUC
Introduction
Change the last paragraph as follows:
This document includes six dedicated keystream generators:
— MUGI keystream generator;
— SNOW 2.0 keystream generator;
— Rabbit keystream generator;
— Decim keystream generator;
— KCipher-2 (K2) keystream generator; and
— ZUC keystream generator.
4.1
Add the following symbols:
L Linear transform with index 1 used for ZUC.
L Linear transform with index 2 used for ZUC.
SS Subfunction used for ZUC.
SUB1 Lookup table with index 1 used for ZUC.
SUB2 Lookup table with index 2 used for ZUC.
8.6
Add new subclause 8.6 as follows:
8.6 ZUC keystream generator
8.6.1 Introduction to ZUC

ZUC is a keystream generator which uses as input a 128-bit secret key K and a 128-bit initialization

vector IV. These are used to initialize state variables S (i ≥ 0). The bit/byte order is big-endian, i.e., if

the key and initialization vector are given as a sequence of bits/bytes, the first/leftmost bit/byte is the

© ISO/IEC 2020 – All rights reserved 1
---------------------- Page: 4 ----------------------
ISO/IEC 18033-4:2011/Amd.1:2020(E)

most significant bit/byte of the corresponding data. It outputs a 32-bit keystream Z at every iteration

of the function Strm.

The state variable S consists of two components. The first consists of sixteen 31-bit variables:

(i) (i) (i) (i)
A = (A , A , …., A ),
15 14 0

and maintains the state of a linear feedback shift register. The second consists of two 32-bit variables:

(i) (i) (i)
R = (R , R ),
2 1

that maintains the state of a finite state machine. ZUC is summarised in Figure 15, which shows a

snapshot if its operation, at time i, omitting the time-dependent variable (i) from the notation.

Figure 15 — Schematic drawing of ZUC

The Init function, defined in detail in 8.6.2, takes as input the 128-bit key K and the 128-bit initialization

(0) (0)
vector IV, and produces the initial value of the state variable S = (A , R ).
(i) (i)

The Next function, defined in detail in 8.6.3, takes as input the state variable S = (A , R ) and produces

(i+1) (i+1)

as output the next value of the state variable S = (A , R ). The Next function runs in two modes,

i+1

depending on whether the iteration performed is part of the initialization mode or of the normal mode

of generating output.
(i) (i)

The Strm function, defined in detail in 8.6.4, takes as input the state variable S = (A , R ) and produces

as output the 32-bit keystream Z .

NOTE See document [20] for theoretical background on the design rationale for ZUC.

2 © ISO/IEC 2020 – All rights reserved
---------------------- Page: 5 ----------------------
ISO/IEC 18033-4:2011/Amd.1:2020(E)
A 240-bit constant D = d || d || … || d used in ZUC:
0 1 15

d = 100010011010111, d = 010011010111100, d = 110001001101011, d = 001001101011110,

0 1 2 3

d = 101011110001001, d = 011010111100010, d = 111000100110101, d = 000100110101111,

4 5 6 7

d = 100110101111000, d = 010111100010011, d = 110101111000100, d = 001101011110001,

8 9 10 11

d = 101111000100110, d = 011110001001101, d = 111100010011010, d = 100011110101100,

12 13 14 15
where for i = 0, 1, …, 15, d is a 15-bit variable in binary notation.

The description uses notations defined in Clause 4 of this part of ISO/IEC 18033. For a string A which

has at least 16 bits, the notation A represents the leftmost 16 bits of A and the notation A represents

H L

the rightmost 16 bits of A. For example, if A = 1000100110111110111110101111001 is a 31-bit string,

then A =1000100110111110 and A = 0111110101111001.
H L
8.6.2 Initialization function Init
The Initialization function Init is as follows.
Input: 128-bit key K, 128-bit initialization vector IV.
(0) (0)
Output: Initial value of state variable S = (A , R ).

a) Initialize the state variable S with the key K, the 128-bit initialization vector IV and the constant D.

-33

— Set (k , k , …, k ) = K; (iv , iv , …, iv ) = IV, where k and iv are bytes for i = 0, 1, …, 15.

0 1 15 0 1 15 i i
(-33)
— Set A = k || d || iv for i = 0, 1, …, 15.
i i i i
(-33) (-33) (32)
— Set R = R = 0
1 2 .
32 32

b) Set S = Next (S , INIT), where Next denotes 32 iterations of the Next function.

-1 -33
c) Set S = Next(S , null).
0 -1
d) Output S .
8.6.3 Next-state function Next
The Next function has two modes, and is defined as follows.
(i) (i)
Input: State variable S = (A , R ), mode ∈ {INIT, null}.
(i+1) (i+1)
Output: Next value of the state variable S = (A , R ).
i+1
Local variables: 32-bit strings W, W , W , X , X , X and 31-bit string V.
1 2 0 1 2
(i) (i) (i) (i) (i) (i)
a) Set X = A || A ; X = A || A ; X = A || A .
0 15 H 14 L 1 11 L 9 H 2 7 L 5 H
(i) (i) (i) (i) (i+1) (i+1)
b) Set W = (X ⊕ R ) + R ; W = R + X ; W = R ⊕ X ; R = SS(L (W || W )); R
0 1 32 2 1 1 32 1 2 2 2 1 1 1L 2H 2
=SS(L (W || W )).
2 2L 1H
15 (i) 17 (i) 21 (i) 20 (i) 8 (i) 31
c) Set V = 2 A + 2 A + 2 A + 2 A + (1+2 )A mod (2 -1).
15 13 10 4 0
(i+1) 31 (i+1) (i+1)

d) If mode = INIT, set A = V + (31~W) mod (2 -1). Otherwise, set A = V. If A = 0, set

15 15 15
(i+1) 31
A = 2 -1.
(i+1) (i)
e) Set A = A for j = 0, 1, …, 14.
j j+1
(i+1) (i+1)
f) Set S = (A , R ).
i+1
g) Output S .
i+1
© ISO/IEC 2020 – All rights reserved 3
---------------------- Page: 6 ----------------------
ISO/IEC 18033-4:2011/Amd.1:2020(E)
i 31 31 i j

NOTE For two 31-bit stings a and b, if b = 2 , then ab mod (2 -1) = a <<< i mod (2 - 1); if b = 2 +2 , then ab

31 31

mod (2 -1) = (a <<< i) + (a <<< j) mod (2 - 1). Reference C code for ZUC is given in document [21].

31 31
8.6.4 Keystream function Strm
The keystream function Strm is as follows:
Input: State variable S .
Output: 32-bit keystream Z .
Local variables: 32-bit strings X , X .
0 3
(i) (i) (i) (i)
a) Set X = A || A ; X = A || A .
0 15 H 14 L 3 2 L 0 H
(i) (i)
b) Set Z = ((X ⊕ R ) + R ) ⊕ X .
i 0 1 32 2 3
c) Output Z .
8.6.5 Function SS
The function SS is as follows:
Input: 32-bit string X.
Output: 32-bit string Y.
— Define X = x || x || x || x , where x is a byte for i = 0, 1, 2, 3.
3 2 1 0 i
— Set Y = SUB1[x ] || SUB2[x ] || SUB1[x ] || SUB2[x ].
3 2 1 0
— Output Y.
The functions SUB1 and SUB2 are defined by the following substitution tables:
SUB1 [256] = {
0x3e,0x72,0x5b,0x47,0xca,0xe0,0x00,0x33,0x04,0xd1,0x54,0x98,0x09,0xb9,0x6d,0xcb,
0x7b,0x1b,0xf9,0x32,0xaf,0x9d,0x6a,0xa5,0xb8,0x2d,0xfc,0x1d,0x08,0x53,0x03,0x90,
0x4d,0x4e,0x84,0x99,0xe4,0xce,0xd9,0x91,0xdd,0xb6,0x85,0x48,0x8b,0x29,0x6e,0xac,
0xcd,0xc1,0xf8,0x1e,0x73,0x43,0x69,0xc6,0xb5,0xbd,0xfd,0x39,0x63,0x20,0xd4,0x38,
0x76,0x7d,0xb2,0xa7,0xcf,0xed,0x57,0xc5,0xf3,0x2c,0xbb,0x14,0x21,0x06,0x55,0x9b,
0xe3,0xef,0x5e,0x31,0x4f,0x7f,0x5a,0xa4,0x0d,0x82,0x51,0x49,0x5f,0xba,0x58,0x1c,
0x4a,0x16,0xd5,0x17,0xa8,0x92,0x24,0x1f,0x8c,0xff,0xd8,0xae,0x2e,0x01,0xd3,0xad,
0x3b,0x4b,0xda,0x46,0xeb,0xc9,0xde,0x9a,0x8f,0x87,0xd7,0x3a,0x80,0x6f,0x2f,0xc8,
0xb1,0xb4,0x37,0xf7,0x0a,0x22,0x13,0x28,0x7c,0xcc,0x3c,0x89,0xc7,0xc3,0x96,0x56,
0x07,0xbf,0x7e,0xf0,0x0b,0x2b,0x97,0x52,0x35,0x41,0x79,0x61,0xa6,0x4c,0x10,0xfe,
0xbc,0x26,0x95,0x88,0x8a,0xb0,0xa3,0xfb,0xc0,0x18,0x94,0xf2,0xe1,0xe5,0xe9,0x5d,
0xd0,0xdc,0x11,0x66,0x64,0x5c,0xec,0x59,0x42,0x75,0x12,0xf5,0x74,0x9c,0xaa,0x23,
0x0e,0x86,0xab,0xbe,0x2a,0x02,0xe7,0x67,0xe6,0x44,0xa2,0x6c,0xc2,0x93,0x9f,0xf1,
0xf6,0xfa,0x36,0xd2,0x50,0x68,0x9e,0x62,0x71,0x15,0x3d,0xd6,0x40,0xc4,0xe2,0x0f,
0x8e,0x83,0x77,0x6b,0x25,0x05,0x3f,0x0c,0x30,0xea,0x70,0xb7,0xa1,0xe8,0xa9,0x65,

0x8d,0x27,0x1a,0xdb,0x81,0xb3,0xa0,0xf4,0x45,0x7a,0x19,0xdf,0xee,0x78,0x34,0x60};

SUB2 [256] = {
0x55,0xc2,0x63,0x71,0x3b,0xc8,0x47,0x86,0x9f,0x3c,0xda,0x5b,0x29,0xaa,0xfd,0x77,
0x8c,0xc5,0x94,0x0c,0xa6,0x1a,0x13,0x00,0xe3,0xa8,0x16,0x72,0x40,0xf9,0xf8,0x42,
0x44,0x26,0x68,0x96,0x81,0xd9,0x45,0x3e,0x10,0x76,0xc6,0xa7,0x8b,0x39,0x43,0xe1,
0x3a,0xb5,0x56,0x2a,0xc0,0x6d,0xb3,0x05,0x22,0x66,0xbf,0xdc,0x0b,0xfa,0x62,0x48,
0xdd,0x20,0x11,0x06,0x36,0xc9,0xc1,0xcf,0xf6,0x27,0x52,0xbb,0x69,0xf5,0xd4,0x87,
0x7f,0x84,0x4c,0xd2,0x9c,0x57,0xa4,0xbc,0x4f,0x9a,0xdf,0xfe,0xd6,0x8d,0x7a,0xeb,
0x2b,0x53,0xd8,0x5c,0xa1,0x14,0x17,0xfb,0x23,0xd5,0x7d,0x30,0x67,0x73,0x08,0x09,
0xee,0xb7,0x70,0x3f,0x61,0xb2,0x19,0x8e,0x4e,0xe5,0x4b,0x93,0x8f,0x5d,0xdb,0xa9,
0xad,0xf1,0xae,0x2e,0xcb,0x0d,0xfc,0xf4,0x2d,0x46,0x6e,0x1d,0x97,0xe8,0xd1,0xe9,
0x4d,0x37,0xa5,0x75,0x5e,0x83,0x9e,0xab,0x82,0x9d,0xb9,0x1c,0xe0,0xcd,0x49,0x89,
0x01,0xb6,0xbd,0x58,0x24,0xa2,0x5f,0x38,0x78,0x99,0x15,0x90,0x50,0xb8,0x95,0xe4,
0xd0,0x91,0xc7,0xce,0xed,0x0f,0xb4,0x6f,0xa0,0xcc,0xf0,0x02,0x4a,0x79,0xc3,0xde,
0xa3,0xef,0xea,0x51,0xe6,0x6b,0x18,0xec,0x1b,0x2c,0x80,0xf7,0x74,0xe7,0xff,0x21,
0x5a,0x6a,0x54,0x1e,0x41,0x31,0x92,0x35,0xc4,0x33,0x07,0x0a,0xba,0x7e,0x0e,0x34,
4 © ISO/IEC 2020 – All rights reserved
---------------------- Page: 7 ----------------------
ISO/IEC 18033-4:2011/Amd.1:2020(E)
0x88,0xb1,0x98,0x7c,0xf3,0x3d,0x60,0x6c,0x7b,0xca,0xd3,0x1f,0x32,0x65,0x04,0x28,

0x64,0xbe,0x85,0x9b,0x2f,0x59,0x8a,0xd7,0xb0,0x25,0xac,0xaf,0x12,0x03,0xe2,0xf2}.

8.6.6 Linear transforms L and L
1 2
Both L and L are linear transforms of 32-bit strings, defined as follows:
1 2
L (X) = X ⊕ (X <<< 2) ⊕ (X <<< 10) ⊕ (X <<< 18) ⊕ (X <<< 24),
1 32 32 32 32
L (X) = X ⊕ (X <<< 8) ⊕ (X <<< 14) ⊕ (X <<< 22) ⊕ (X <<< 30).
2 32 32 32 32
Annex A
Replace the object identifiers in Annex A as follows:
EncryptionAlgorithms-4 {
iso(1) standard(0) encryption-algorithms(18033) part(4)
asn1-module(0) algorithm-object-identifiers(0) }
DEFINITIONS EXPLICIT TAGS ::= BEGIN
-- EXPORTS All; --
-- IMPORTS None; --
OID ::= OBJECT IDENTIFIER -- Alias
-- Synonyms --
is18033-4 OID ::= { iso(1) standard(0) is18033(18033) part4(4) }
id-kg OID ::= { is18033-4 keystream-generator(1) }
id-scmode OID ::= { is18033-4 stream-cipher-mode(2) }
-- Assignments --
id-kg-mugi OID ::= { id-kg mugi(1) }
id-kg-snow OID ::= { id-kg snow(2) }
id-kg-rabbit OID ::= { id-kg rabbit(3) }
id-kg-decim2 OID ::= { id-kg decim2(4) }
id-kg-k2 OID ::= { id-kg k2(5) }
id-kg-zuc OID ::= { id-kg zuc(6) }
id-scmode-additive OID ::= { id-scmode additive(1) }
id-scmode-multis01 OID ::= { id-scmode multis01(2) }
-- Algorithms and parameters --
StreamCipher ::= AlgorithmIdentifier {{ StreamCipherAlgorithms }}
StreamCipherAlgorithms ALGORITHM ::= {
additiveStreamCipher |
multiS01StreamCipher,
... -- Expect additional algorithms --
additiveStreamCipher ALGORITHM ::= {
OID id-scmode-additive PARMS AdditiveStreamCipherParameters
AdditiveStreamCipherParameters ::= KeyGenerator
multiS01StreamCipher ALGORITHM ::= {
OID id-scmode-multis01 PARMS MultiS01StreamCipherParameters
MultiS01StreamCipherParameters ::= SEQUENCE {
keyGenerator KeyGenerator,
© ISO/IEC 2020 – All rights reserved 5
---------------------- Page: 8 ----------------------
ISO/IEC 18033-4:2011/Amd.1:2020(E)
securityParameter INTEGER DEFAULT 64,
irreduciblePolynoial BIT STRING,
redandancy BIT STRING,
publicParameterR BIT STRING
-- length determined by securityParameter
-- for full interoperability multis01 parameters should
-- include the padding method but they do not have object
-- identifiers. for the time being they will have to be
-- negotiated in an application-dependent way
KeyGenerator ALGORITHM ::= {
mugiKeyGenerator |
snowKeyGenerator |
rabbitKeyGenerator |
decim2KeyGenerator |
k2KeyGenerator |
zucKeyGenerator,
... -- Exp
...

Questions, Comments and Discussion

Ask us and Technical Secretary will try to provide an answer. You can facilitate discussion about the standard in here.