TIÊU CHUẨN QUỐC GIA TCVN 12854-3:2020 (ISO/IEC 29192-3:2012) VỀ CÔNG NGHỆ THÔNG TIN – CÁC KỸ THUẬT AN TOÀN – MẬT MÃ HẠNG NHẸ – PHẦN 3: MÃ DÒNG
TIÊU CHUẨN QUỐC GIA
TCVN 12854-3:2020
ISO/IEC 29192-3:2012
CÔNG NGHỆ THÔNG TIN – CÁC KỸ THUẬT AN TOÀN – MẬT MÃ HẠNG NHẸ – PHẦN 3: MÃ DÒNG
Information technology – Security techniques – Lightweight cryptography – Part 3: stream ciphers
Lời nói đầu
TCVN 12854-3 : 2020 hoàn toàn tương đương với ISO/IEC 29192- 3:2012.
TCVN 12854-3 : 2020 do Cục Quản lý mật mã dân sự và Kiểm định sản phẩm mật mã biên soạn, Ban Cơ yếu Chính phủ đề nghị, Tổng cục Tiêu chuẩn Đo lường Chất lượng thẩm định, Bộ Khoa học và Công nghệ công bố.
Bộ tiêu chuẩn TCVN 12854 (ISO/IEC 29192) Công nghệ thông tin – Các kỹ thuật an toàn – Mật mã hạng nhẹ gồm các tiêu chuẩn sau:
– TCVN 12854-1 : 2020 (ISO/IEC 29192-1:2012) Phần 1: Tổng quan
– TCVN 12854-2 : 2020 (ISO/IEC 29192-2:2012) Phần 2: Mã khối
– TCVN 12854-3 : 2020 (ISO/IEC 29192-3:2012) Phần 3: Mã dòng
– TCVN 12854-4 : 2020 (ISO/IEC 29192-4:2013) Phần 4: Cơ chế sử dụng kỹ thuật phi đối xứng.
CÔNG NGHỆ THÔNG TIN – CÁC KỸ THUẬT AN TOÀN – MẬT MÃ HẠNG NHẸ – PHẦN 3: MÃ DÒNG
Information technology – Security techniques – Lightweight cryptography – Part 3: Stream ciphers
1 Phạm vi áp dụng
Tiêu chuẩn này quy định hai bộ tạo dòng khóa cho mã dòng hạng nhẹ:
– Enocoro: Một bộ tạo dòng khóa hạng nhẹ với kích thước khóa 80 hoặc 128 bit;
– Trivium: Một bộ tạo dòng khóa hạng nhẹ với kích thước khóa 80 bit.
2 Tài liệu viện dẫn
Các tài liệu viện dẫn sau rất cần thiết cho việc áp dụng tiêu chuẩn này. Đối với những tài liệu viện dẫn có năm công bố, thì áp dụng phiên bản được nêu. Đối với tài liệu viện dẫn không ghi năm công bố, thì áp dụng phiên bản mới nhất (bao gồm cả các sửa đổi, bổ sung).
TCVN 12854-1 (ISO/IEC 29192-1), Công nghệ thông tin – Các kỹ thuật an toàn – Mật mã hạng nhẹ – Phần 1: Tổng quan.
3 Thuật ngữ và định nghĩa
Tiêu chuẩn này áp dụng các thuật ngữ và định nghĩa sau đây:
3.1
big-endian (big-endian)
Phương pháp lưu trữ các số nhiều byte với byte có trọng số cao nhất tại các địa chỉ bộ nhớ thấp nhất. [TCVN 11367-4 (ISO/IEC 18033-4)]
3.2
Bản mã (ciphertext)
Dữ liệu đã được biến đổi để che giấu nội dung thông tin trong đó.
[TCVN 11357-1 (ISC/IEC 18033-1)]
3.3
Giải mã (decryption)
Phép ngược của phép mã hóa tương ứng [TCVN 11367-1 (ISO/IEC 18033-1)]
3.4
Mã hóa (encryption)
Phép biến đổi (khả nghịch) dữ liệu bởi một thuật toán mật mã để tạo ra bản mã, tức là giấu nội dung thông tin của dữ liệu
[TCVN 11367-1 (ISO/IEC 18033-1)]
3.5
Giá trị khởi tạo (initialization value)
Giá trị được sử dụng để xác định điểm khởi đầu của quá trình mã hóa [TCVN 11367-4 (ISO/IEC 18033-4)]
3.6
Khóa (key)
Dãy các kí tự điều khiển sự vận hành của các thuật toán mật mã (ví dụ mã hóa, giải mã)
[TCVN 11367-1 (ISO/IEC 18033-1)]
3.7
Hàm dòng khóa (keystream function)
Hàm nhận đầu vào là trạng thái hiện tại của bộ tạo dòng khóa và một phần của bản mã được tạo ra trước đó (tùy chọn) và đưa ra là phần tiếp theo của dòng khóa.
[TCVN 11367-4 (ISO/IEC 18033-4)]
3.8
Bộ tạo dòng khóa (keystream generator)
Quá trình dựa trên trạng thái (nghĩa là máy trạng thái hữu hạn) nhận đầu vào là một khóa, một véc tơ khởi tạo, và bản mã nếu cần thiết, và đưa ra đầu ra là một dòng khóa (nghĩa là một dãy các bit hoặc các khối bit) có độ dài tùy ý.
[TCVN 11367-4 (ISO/IEC 18033-4)]
3.9
Hàm trạng thái tiếp theo (next-state function)
Hàm nhận đầu vào là trạng thái hiện tại của bộ tạo dòng khóa và một phần của bản mã đã tạo ra trước đó (tùy chọn) và tạo ra đầu ra là một trạng thái mới cho bộ tạo dòng khóa
[TCVN 11367-4 (ISO/IEC 18033-4)]
3.10
Bản rõ (plaintext)
Thông tin chưa được mã hóa [TCVN 11367-1 (ISO/IEC 18033-1)]
3.11
Khóa bí mật (secret key)
Khóa được sử dụng với kỹ thuật mật mã đối xứng bởi một tập các thực thể cụ thể.
[TCVN 11367-1 (ISO/IEC 18033-1)]
3.12
Trạng thái (state)
Trạng thái bên trong của bộ tạo dòng khóa
4 Ký hiệu
0x | Tiền tố cho các giá trị thập lục phân. |
0(n) | Biến n-bit mà 0 được gán cho mọi bít. |
AND | Phép toán logic AND từng bit. |
ai | Biến tạo thành một phần trạng thái trong của bộ tạo dòng khóa. |
bi | Biến tạo thành một phần trạng thái trong của bộ tạo dòng khóa. |
Ci | Khối bản mã |
F[x] | Vành đa thức trên trường hữu hạn F |
GF(2n) | Trường hữu hạn của 2n phần tử |
Init | Hàm tạo ra trạng thái khởi tạo bên trong của bộ tạo dòng khóa |
IV | Véc tơ khởi tạo |
K | Khóa |
Next | Hàm trạng thái tiếp theo của bộ tạo dòng khóa |
n | Độ dài khối |
OR | Phép toán logic OR theo từng bit |
Out | Hàm đầu ra kết hợp với dòng khóa và bản rõ để tạo ra bản mã |
P | Bản rõ |
Pi | Khối bản rõ |
Strm | Hàm dòng khóa của bộ tạo dòng khóa |
Si | Trạng thái bên trong của bộ tạo dòng khóa |
Z | Dòng khóa |
Zi | Khối dòng khóa |
[x] | Số nguyên nhỏ nhất lớn hơn hoặc bằng số thực x |
¬x | Phép toán bù theo từng bit |
• | Phép nhân đa thức |
‖ | Phép ghép theo bit |
+m | Phép cộng số nguyên modulo 2m. |
Phép toán XOR (loại trừ OR) theo từng bit. | |
Phép dịch trái t-bit trong thanh ghi n-bit. | |
Phép dịch phải t-bit trong thanh ghi n-bit. | |
Phép dịch vòng sang trái t– bit trong thanh ghi n-bit. | |
Phép dịch vòng sang phải t– bit trong thanh ghi n-bit. | |
Phép nhân cho các phần tử trong trường hữu hạn GF(2n). |
CHÚ THÍCH Ví dụ cho phép nhân của các phần tử trong trường hữu hạn GF(2n) được đưa ra trong Phụ lục A.
5 Mô hình tổng quát cho mã dòng
5.1 Tổng quan
Điều này mô tả mô hình tổng quát cho các mã dòng [TCVN 11367-4 (ISO/IEC 18033-4)]
5.2 Bộ tạo dòng khóa đồng bộ
Bộ tạo dòng khóa đồng bộ là một máy trạng thái hữu hạn. Nó được xác định bởi:
- Hàm khởi tạo, Init lấy đầu vào là một khóa K và một véc tơ khởi tạo IV, và đưa ra một trạng thái khởi tạo S0 cho bộ tạo dòng khóa. Véc tơ khởi tạo phải được chọn sao cho không có hai thông điệp nào được mã hóa sử dụng cùng khóa và cùng véc tơ khởi tạo IV.
- Hàm trạng thái tiếp theo Next, lấy đầu vào là trạng thái hiện tại Si của bộ tạo dòng khóa, và đưa ra trạng thái tiếp theo Si+1 của bộ tạo dòng khóa.
- Hàm dòng khóa Strm, lấy đầu vào là một trạng thái Si của bộ tạo dòng khóa, và đưa ra một khối dòng khóa Zi
Khi bộ tạo dòng khóa đồng bộ được khởi tạo lần đầu tiên, ta sẽ nhập vào một trạng thái khởi tạo S0 được xác định bởi:
S0 = Init (IV, K)
Tùy theo yêu cầu, bộ tạo dòng khóa đồng bộ sẽ thực hiện với i = 0,1,….
- Đưa ra một khối dòng khóa Zi = Strm (Si, K)
- Cập nhật trạng thái của máy Si+1 = Next (Si, K).
Vì thế để định nghĩa một bộ tạo dòng khóa đồng bộ, ta chỉ cần xác định các hàm Init, Next và Strm, bao gồm cả độ dài và bảng chữ cái của khóa, véc tơ khởi tạo, trạng thái, và khối đầu ra.
5.3 Các hàm đầu ra
5.3.1 Mô hình tổng quát cho hàm đầu ra
Điều này quy định một hàm đầu ra của mã dòng, tức là một kỹ thuật được sử dụng trong một mã dòng để kết hợp một dòng khóa với bản rõ để tạo ra bản mã.
Một hàm đầu ra cho mã dòng đồng độ hoặc tự đồng bộ là một hàm khả nghịch Out, kết hợp một khối bản rõ Pi, một khối dòng khóa Zi để đưa ra một khối bản mã Ci (i ≥ 0). Mô hình tổng quát cho một hàm đầu ra của một mã dòng được định nghĩa như sau.
Mã hóa một khối bản rõ Pi bởi một khối dòng khóa Zi.
Ci = Out (Pi,Zi),
và giải mã một khối bản mã Ci bởi một khối dòng khóa Zi được cho bởi:
Pi = Out-1(Ci,Zi)
Hàm đầu ra phải thỏa mãn là với mọi khối dòng khóa Zi, và khối bản rõ Pi nào, chúng ta có:
Pi = Out-1(Out (Pi,Zi),Zi)
5.3.2 Hàm đầu ra nhị phân cộng tính
Một mã dòng nhị phân cộng tính là một mã dòng trong đó các khối dòng khóa, bản rõ, và bản mã là các số nhị phân, và phép toán để kết hợp bản rõ với dòng khóa là phép toán cộng XOR theo từng bit. Cho n Telia độ dài bit của Pi. Hàm này được xác định bởi:
Phép toán Out–1 được xác định bởi:
6 Bộ tạo dòng khóa chuyên dụng
6.1 Bộ tạo dòng khóa Enocoro-128v2
6.1.1 Giới thiệu Enocoro-128v2
Enocoro-128v2 là một bộ tạo dòng khóa sử dụng một khóa bí mật K128 bit, một véc tơ khởi tạo IV 64 bit, và một biến trạng thái Si (i > 0) bao gồm 34 byte, và đưa ra một khối dòng khóa Zi độ dài một byte tại mỗi vòng lặp của hàm Strm.
CHÚ THÍCH Bộ tạo dòng khóa được đề xuất ban đầu trong [5],
Biến trạng thái Si được chia nhỏ thành một biến 2 byte:
với aj(i) là một byte (j = 0, 1) và một biến 32 byte:
với bj(i)là một byte (j= 0, 1,…, 31).
Hàm Init định nghĩa chi tiết trong 6.1.2, lấy đầu vào là khóa K 128 bit và véc tơ khởi tạo IV 64 bít, và tạo ra giá trị khởi tạo của biến trạng thái S0 = (a(0), b(0)).
Hàm Next, định nghĩa chi tiết trong 6.1.3, lấy đầu vào là biến trạng thái 34 byte Si = (a(i),b(i)) và tạo ra giá trị tiếp theo của biến trạng thái Si+1 = (a(i+1),b(i+1)).
Hàm Strm, định nghĩa chi tiết trong 6.1.4, nhận đầu vào là biến trạng thái 34 byte Si = (a(i),b(i))và tạo ra khối dòng khóa Zi.
Enocoro-128v2 sử dụng các phép toán trên trường hữu hạn GF(28). Trong biểu diễn dạng đa thức, GF(28) được thực hiện như GF(2)[x]/ψ8432(x), với ψ8432 (x) là đa thức bất khả quy bậc 8 được xác định trên trường GF(2). Bộ tạo dòng khóa Enocoro-128v2 sử dụng đa thức bất khả quy dưới đây:
ψ8432 (x) =x8 + x4 + x3 + x2 + 1
6.1.2 Hàm khởi tạo Init
Việc khởi tạo của Enocoro-128v2 được chia thành 6 bước. Trong quá trình khởi tạo Enocoro-128v2, trạng thái được cập nhật như phác họa trong hình 1.
Hàm khởi tạo Init như sau:
Đầu vào: Khóa 128 bit K, véc tơ khởi tạo 64 bit IV.
Đầu ra: giá trị khởi tạo của biến trạng thái S0 = (a(0),b(0)).
- a) Sử dụng khóa K để thiết lập phần của biến trạng thái bj(-96) như sau:
– Đặt (K0 ‖ K1‖…‖ K15) = K, với Kj là 8 bit với j = 0, 1, 2,…, 15.
– Với j = 0, 1, 2, …, 15, đặt bj(-96) = Kj
- b) Sử dụng véc tơ khởi tạo IV để thiết lập phần của biến trạng thái bj(-96) như sau:
– Đặt (I0 ‖ I1 ‖ … ‖ I7) = IV, với Ij là 8 bit với j = 0, 1, 2,…, 7.
– Với j = 0,1,2, …, 7, đặt = Ij
- c) Sử dụng các hằng số C0, C1,… C9 để thiết lập phần của biến trạng thái aj(-96) và bj(-96) như sau:
– Đặt = C0 = 0x66,
– Đặt = C1 = 0xe9,
– Đặt = C2 = 0x4b,
– Đặt = C3 = 0xd4,
– Đặt = C4 = 0xef,
– Đặt = C5 = 0x8a,
– Đặt = C6 = 0x2c,
– Đặt = C7 = 0x3b,
– Đặt = C8 = 0x88,
– Đặt = C9 = 0x4c,
- d) Đặt bộ đếm 8 bit ctr = 1.
- e) Thực hiện các bước dưới đây với i = -96, -95, …, -1:
– Đặt Si+1 = Next (Si)
- f) Đưa ra S0.
Hình 1 – Cập nhật trạng thái quá trình khởi tạo của Enocoro-128v2
6.1.3 Hàm trạng thái tiếp theo Next
Hàm trạng thái của Enocoro-128v2 được định nghĩa sử dụng các hàm p và λ được xác định trong 6.1.5 và 6.1.6 tương ứng. Hàm trạng thái tiếp theo Next của Enocoro-128v2 như sau:
Đầu vào: Biến trạng thái Si = (a(i),b(i)).
Đầu ra: Giá trị tiếp theo của biển trạng thái Si+1 = (a(i+1),b(i+1)).
– Đặt a(i+1) = p(a(i),b(i))
– Đặt b(i+1) = λ(b(i), a0(i))
– Đặt Si+1 = (a(i+1),b(i+1))
– Đưa ra Si+1.
6.1.4 Hàm dòng khóa Strm
Hàm dòng khóa Strm như sau:
Đầu vào: Biến trạng thái Si.
Đầu ra: Khối dòng khóa Zi.
– Đặt Zi = a1(i).
– Đưa ra Zi.
Trạng thái được cập nhật và dòng khóa được sinh như minh họa hình 2.
Hình 2 – Cập nhật trạng trong quá trình sinh dòng khóa của Enocoro-128v2
6.1.5 Hàm ρ
Hàm ρ bao gồm các phép XOR, một biến đổi phi tuyến sử dụng hàm S8, và một biến đổi tuyến tính sử dụng ma trận L8432. Hàm ρ được cho như sau:
Đầu vào: Biến trạng thái Si = (a(i),b(i)).
Đầu ra: giá trị tiếp theo của biến trạng thái a(i+1)
– Đặt
– Đặt
– Đặt (v0,v1) = L8432(u0,u1),
– Đặt
– Đặt
– Đưa ra a(i+1)
6.1.6 Hàm λ
Hàm λ như sau:
Đầu vào: Biến trạng thái Si = (a(i),b(i)).
Đầu ra: Giá trị tiếp theo của biến trạng thái b(i+1)
– Đặt = với j≠0, 3, 8, 17
– Đặt
– Đặt
– Đặt
– Đặt
– Đưa ra b(i+1)
6.1.7 Hàm L8432
Hàm L8432 là hàm bên trong của hàm p. Ký hiệu đầu vào và đầu ra của hàm L8432 là U và V tương ứng. Hàm L8432 như sau:
Đầu vào: Xâu 16 bit U.
Đầu ra: Xâu 16 bit V.
– Đặt (u0,u1) = U, với ui là xâu 8 bít và là phần tử của trường GF(28)
– Đặt
– Đặt V = v0 ‖ vi.
– Đưa ra V.
6.1.8 Hàm S8
Hàm S8 sử dụng phép toán trên trường hữu hạn GF(24). Trong biểu diễn đa thức, GF(24) được thực hiện như GF(2)[x]/ø41(x), với ø>41(x) là đa thức bất khả quy bậc 4 được xác định trên trường GF(2). Bộ tạo H dòng khóa Enocoro-128v2 sử dụng đa thức bất khả quy sau:
ø41(x) = x4 + x + 1
Hàm S8 là một hoán vị mà ánh xạ từ các đầu vào 8 bit tới các đầu ra 8 bit. Nó có cấu trúc SPS (thay thế, hoán vị, thay thế) và nó bao gồm 4 S-hộp nhỏ s4, ánh xạ từ các đầu vào 4 bit tới các đầu ra 4 bit và một biến đổi tuyến tính l xác định bởi một ma trận 2×2 trên trường GF(24). Biến đổi tuyến tính l được xác định:
Ký hiệu đầu vào và đầu ra của hàm S8 bởi X và Y tương ứng. Hàm S8 như sau:
Đầu vào: Xâu X 8 bit.
Đầu ra: Xâu Z 8 bit.
– Đặt (x0,xi) = với xi là một xâu 4 bít và là phần tử của trường GF(24)
– Đặt
với 0x4, 0x5 là biểu diễn các phần tử của trường GF(24) ở hệ thập lục phân, và S4 được xác định như sau:
S4[16] = {1,3,9,10,5,14,7,2,13,0,12,15,4,8,6,11}.
– Đặt
– Đưa ra Z.
Hình 3 – Shộp S8
Hàm S8 được xác định bằng cách sử dụng một bảng thay thế sau:
6.2 Bộ tạo dòng khóa Enocoro-80
6.2.1 Giới thiệu Enocoro-80
Enocoro-80 là một bộ tạo dòng khóa sử dụng một khóa bí mật K 80 bit, một véc tơ khởi tạo IV 64 bit, và một biến trạng thái Si (i ≥ 0) bao gồm 22 byte, và đưa ra một khối dòng khóa Zi tại mỗi vòng lặp của hàm Strm.
CHÚ THÍCH Bộ tạo dòng khóa được đề xuất ban đầu trong [6],
Biến trạng thái Si được chia nhỏ thành một biến 2 byte:
với aj(i) là một byte (j = 0, 1) và một biến 20 byte:
với bj(i) là một byte (j= 0, 1,…, 19).
Hàm Init định nghĩa chi tiết trong 6.2.2, nhận đầu vào là khóa K 80 bit và véc tơ khởi tạo IV 64 bit, và tạo ra giá trị khởi tạo của biến trạng thái S0 = (a(0), b(0)).
Hàm Next, định nghĩa chi tiết trong 6.2.3, nhận đầu vào biến trạng thái 22 byte Si = (a(i), b(i)) và tạo ra giá trị tiếp theo của biến trạng thái Si+1 = (a(i+1), b(i+1)).
Hàm Strm, định nghĩa chi tiết trong 6.3.5, nhận đầu vào biến trạng thái 22 byte Si = (a(i), b(i)) và tạo ra khối dòng khóa Zi.
Hàm L8431 sử dụng các phép toán trên trường hữu hạn GF(28). Trong biểu diễn đa thức, GF(28) được thực hiện như GF(2)[x]/ψ8431(x), với ψ8431(x) là đa thức bất khả quy bậc 8 được xác định trên trường GF(2). Bộ tạo dòng khóa Enocoro-80 sử dụng đa thức bất khả quy dưới đây:
ψ8431(x) =x8 + x4 + x3 + x + 1
6.2.2 Hàm khởi tạo Init
Việc khởi tạo Enocoro-80 được chia thành 5 bước. Hàm khởi tạo Init như sau:
Đầu vào: Khóa K 80 bit, véc tơ khởi tạo IV 64 bit.
Đầu ra: giá trị khởi tạo của biến khởi tạo S0 = (a(0), b(0)).
- a) Sử dụng khóa K để thiết lập phần của biến trạng thái bj(-40) như sau:
– Đặt (K0 ‖ K1 ‖ … ‖ K9) = K, với Kj là 8 bit với j = 0, 1, 2,…, 9.
– Với j = 0,1,2, …, 9, đặt bj(-40)= Kj
- b) Sử dụng véc tơ khởi tạo IV để thiết lập phần của biến trạng thái bj(-40) như sau:
– Đặt (I0 ‖ I1 ‖ … ‖ I7) = IV, với Ij là 8 bit với j = 0, 1, 2,…, 7.
– Với j = 0,1,2, …, 7, đặt = Ij
- c) Sử dụng các hằng số C0,C1,C2,C3 để thiết lập một phần của biến trạng thái aj(-40) và bj(-40) như sau:
– Đặt b18(-40) = C0 = 0x66,
– Đặt b19(-40) = C1 = 0xe9,
– Đặt a0(-40) = C2 = 0x4b,
– Đặt a0(-40) = C3 = 0x4d,
- d) Thực hiện các bước dưới đây với i = -40, -39,…, -1:
– Đặt Si+1 = Next (Si)
- f) Đưa ra S0.
6.2.3 Hàm trạng thái tiếp theo Next
Hàm trạng thái tiếp theo của Enocoro-80 được xác định sử dụng các hàm ρ và λ được định nghĩa trong 6.2.5 và 6.2.6 tương ứng. Hàm trạng thái tiếp theo Next của Enocoro-80 như sau:
Đầu vào: Biến trạng thái Si = (a(i), b(i)).
Đầu ra: Giá trị tiếp theo của biến trạng thái Si+1 = (a(i+1), b(i+1)).
– Đặt a(i+1) = ρ(a(i), b(i))
– Đặt b(i+1) = λ(b(i), a0(i))
– Đặt Si+1 = (a(i+1), b(i+1)).
– Đưa ra Si+1.
6.2.4 Hàm dòng khóa Strm
Hàm dòng khóa Strm như sau:
Đầu vào: Biến trạng thái Si.
Đầu ra: Khối dòng khóa Zi.
– Đặt Zi = a1(i).
Đưa ra Zi.
6.2.5 Hàm ρ
Hàm ρ bao gồm các phép XOR, một biến đổi phi tuyến sử dụng hàm S8, và một biến đổi tuyến tính sử dụng ma trận L8431. Hàm S8 được mô tả trong 6.1.8. Hàm ρ được cho như sau:
Đầu vào: Biến trạng thái Si = (a(i), b(i)).
Đầu ra: giá trị tiếp theo của biến trạng thái a(i+1)
– Đặt
– Đặt
– Đặt (v0,v1) = L8431(u0,u1),
– Đặt
– Đặt
– Đưa ra a(i+1)
6.2.6 Hàm λ
Hàm λ như sau:
Đầu vào: Biến trạng thái Si = (a(i), b(i)).
Đầu ra: Giá trị tiếp theo của biến trạng thái b(i+1)
– Đặt bj(i+1) = bj-1(i) với j≠0, 2, 5, 7
– Đặt
– Đặt
– Đặt
– Đặt
– Đưa ra b(i+1).
6.2.7 Hàm L8431
Hàm L8431 là hàm bên trong của hàm ρ. Ký hiệu đầu vào và đầu ra của hàm L8431 là U và V tương ứng. Hàm L8431 như sau:
Đầu vào: Xâu 16 bit U.
Đầu ra: Xâu 16 bit V.
– Đặt (u0,u1)= U, với ui là một xâu 8 bit và là phần tử của trường GF(28)
– Đặt
– Đặt V = v0 ‖ v1.
– Đưa ra V.
6.3 Bộ tạo dòng khóa Trivium
6.3.1 Tổng quan
TRIVIUM là bộ tạo dòng khóa lấy đầu vào là khóa bí mật 80 bit K = (K0, …,K79), véc tơ khởi tạo 80 bit IV IV = (IV0, …,IV79), và tạo ra đến 264 bit dòng khóa z0,z1,…,zN-1
CHÚ THÍCH Bộ tạo dòng khóa này được giới thiệu ban đầu trong [7]
Các bit dòng khóa zi được tính toán bằng cách kết hợp các phần tử của ba dãy bit bên trong {ai}, {bi} và {ci}, mà bản thân chúng được tạo ra bằng cách lặp ba quan hệ truy hồi phi tuyến. Chi tiết các quan hệ được mô tả trong 6.3.4.
288 bit dãy đầu tiên trong phép truy hồi được khởi tạo sử dụng khóa bí mật, véc tơ khởi tạo, và một số bít hằng số. 1152 bộ ba tiếp theo (ai, bi, ci), bắt đầu từ chỉ số i = -1152, được tính toán truy hồi, nhưng không tạo ra bất kỳ đầu ra nào. Việc lặp 1152 lần này được xem như là các vòng trống.
Mỗi lần lặp sau đó, bắt đầu từ i = 0, đưa ra một bit dòng khóa zi, được tính toán bởi phép cộng XOR của một tập con 6 bit dãy. Quá trình này được lặp lại cho đến khi tạo ra đủ tất cả các bít dòng khóa được yêu cầu.
Trong các phần tiếp theo, thuật toán tạo dòng khóa đầy đủ được mô tả chính thức hơn sử dụng khung đã giới thiệu trong Điều 5. Trạng thái bên trong Si được xác định trong 6.3.2, và các hàm Init, Next, và Strm được mô tả trong 6.3.3, 6.3.4, 6.3.5.
6.3.2 Trạng thái bên trong
Vì mỗi bộ ba mới (ai, bi, ci) chỉ phụ thuộc vào một số hạn chế của các bit dãy trước đó, không cần giữ toàn các dãy trong bộ nhớ. Tại điểm bất kỳ trong thời gian i, nó đủ để thuật toán duy trì trạng thái bên trong Si bao gồm 288 dãy bit sau:
Si = (ai-1,…, ai-93, bi-1,…, bi-84, ci-1,… ci-111).
CHÚ THÍCH Trong cài đặt phần cứng đơn giản của TRIVIUM, trạng thái bên trong này có thể được lưu trữ trong các thanh ghi dịch như minh họa trong Hình 4. Các bít trong các thanh ghi (được biểu diễn bởi các hộp trong hình) được di chuyển theo chiều kim đồng hồ sau mỗi lần lặp.
Hình 4 – Một cài đặt của TRIVIUM sử dụng thanh ghi dịch
6.3.3 Hàm khởi tạo Init
Trạng thái bên trong của TRIVIUM được khởi tạo sử dụng hàm Init như sau:
Đầu vào: Khóa 80 bit K, véc tơ khởi tạo 80 bit IV.
Đầu ra: Giá trị khởi tạo của trạng thái bên trong S0 = (a–1, …,a–93, b–1,… ,b–84, c–1, …. c–111).
- a) Đặt i = -1152, và khởi tạo 288 bit của Si như sau:
– Đặt (ai–93, …, ai–1) = (0, …, 0, K0, …, K79).
– Đặt (ai–84,…, bi–1) = (0, …, 0, IV0,…, IV79).
– Đặt (ci–111,…, ci–1) = (1,1,1,0,…, 0).
- b) Với i = -1151, -1150,…, -1,0:
– Đặt Si = Next (Si-1)
- c) Đưa ra S0.
6.3.4 Hàm trạng thái tiếp theo Next
Hàm trạng thái tiếp theo Next được xác định như sau:
Đầu vào: Trạng thái bên trong Si = (ai-1,…, ai-93, bi-1,…, bi-84, ci-1,… ci-111).
Đầu ra: Giá trị tiếp theo của trạng thái bên trong Si+1 = (ai,…, ai-92, bi,…, bi-83, ci,… ci-110).
- a) Tính toán các bit ai, bi, và ci:
– Đặt
– Đặt
– Đặt
- b) Đưa ra Si+1 = (ai,…, ai-92, bi,…, bi-83, ci,… ci-110).
6.3.5 Hàm dòng khóa Strm
Hàm đầu ra Strm được xác định như sau:
Đầu vào: Trạng thái bên trong Si = (ai-1,…, ai-93, bi-1,…, bi-84, ci-1,… ci-111).
Đầu ra: Bit dòng khóa zi.
Đưa ra
Phụ lục A
(quy định)
Các định danh đối tượng
Phụ lục này liệt kê các định danh đối tượng được gán cho các thuật toán được quy định trong tiêu chuẩn này và xác định các cấu trúc tham số thuật toán.
Phụ lục B
(tham khảo)
Các véc tơ kiểm tra
B.1 Véc tơ kiểm tra cho Enocoro-128v2
B.1.1 Khóa, véc tơ khởi tạo, và bộ ba dòng khóa
Điều này cung cấp các véc tơ kiểm tra số học bao gồm một khóa 128 bit, một véc tơ khởi tạo 64 bit, và 256 bit dòng khóa đầu tiên tương ứng được sinh ra bởi Enonoro-128v2.
B.1.2 Các trạng thái trong mẫu
Các giá trị trung gian của trạng thái và bộ đệm được sử dụng để tạo một dãy dòng khóa được liệt kê dưới đây:
B.2 Véc tơ kiểm tra của Enocoro-80
B.2.1 Khóa, véc tơ khởi tạo, và bộ ba dòng khóa
Điều này cung cấp các véc tơ kiểm tra số bao gồm một khóa 80 bit, một véc tơ khởi tạo 64 bit, và 128 bit dòng khóa đầu tiên tương ứng được tạo ra bởi Enccoro-80.
B.2.2 Các trạng thái mẫu 22
Các giá trị trung gian của trạng thái và bộ đệm được sử dụng để tạo một dòng khóa được liệt kê bên dưới:
B.3 Véc tơ kiểm tra của Trivium
B.3.1 Khóa, véc tơ khởi tạo, và bộ ba dòng khóa
Điều này cung cấp một véc tơ kiểm tra số học bao gồm một khóa 80 bit, véc tơ khởi tạo 80 bit, và 128 bit dòng khóa đầu tiên tương ứng được sinh bởi Trivium.
Chú ý rằng Trivium được quy định ở mức bit, và không khác biệt đến thứ tự mà các bit này được nhóm thành các byte. Để đơn giản hóa việc kiểm tra của véc tơ kiểm tra trên các nền tảng phần mềm với các quy ước khác nhau, mỗi nhóm 8 bit được in theo hai dạng thập lục phân khác nhau. Dạng đầu tiên ánh xạ bít đầu tiên của mỗi byte thành bit có trọng số cao nhất, và phù hợp hơn cho nền tảng big-endian; Dạng thứ hai sử dụng thứ tự ngược, và phù hợp hơn với nền tảng little-endian.
B.3.2 Các bit dãy bên trong
Các giá trị của các bít dãy bên trong ai, bi và ci được tính toán để sinh ra véc tơ kiểm tra ở trên, được liệt kê bên dưới:
B.3.3 Trạng thái bên trong
Như được đề cập trong 6.3.2, một cài đặt điển hình của TRIVIUM chỉ cần duy trì trạng thái bên trong của 288 bit. Nội dung của trạng thái bên trong S0 sau khi thực hiện 1152 vòng trống được liệt kê bên dưới:
B.3.4 Song song hóa
Véc tơ kiểm tra dưới đây minh họa cách cài đặt cho phép tính toán song song hóa của TRIVIUM 64 bit của bi, cùng lúc sử dụng 3 phép toán XOR 64 bit và một phép toán AND 64 bit.
Phụ lục C
(tham khảo)
Hướng dẫn cài đặt và sử dụng
C.1 Trivium
C.1.1 Song song hóa
Một tính năng của các quan hệ truy hồi được sử dụng trong TRIVIUM là các bit được tính toán tại một thời điểm cho trước chỉ ảnh hưởng đến các tính toán tuần tự sau một độ trễ ít nhất là 66 lần lặp. Do đó, việc lặp tới 66 lần liên tiếp (lựa chọn thông thường là 8, 16, 32, hoặc 64) có thể được tính toán song song mà không cần bất kỳ cản trở nào. Một minh họa cho tính chất này được đưa ra trong B.3.4.
CHÚ THÍCH Chú ý rằng không nhiều ứng dụng của TRIVIUM mà nó sẽ không có ý nghĩa để khai thác tính song song này ở mức độ nào đó. Việc triển khai phần cứng song song có thể đạt được mức tiêu thụ điện năng thấp hơn đáng kể hoặc thông lượng cao hơn để đổi lấy mức tăng khiêm tốn trong khu vực. Trong phần mềm, song song hóa của TRIVIUM làm cho nó có thể tận dụng lợi thế của kích thước từ lớn nhất có sẵn trên một kiến trúc nhất định
C.1.2 Khuyến nghị sử dụng các giá trị khởi tạo
Phần này đưa ra các khuyến nghị về cách sử dụng các véc tơ khởi tạo một cách hiệu quả nhất. Do đó, kỹ thuật này có thể được áp dụng cho tất cả các mã dòng được quy định trong tiêu chuẩn này. Các phần còn lại, chúng ta chỉ xem xét đến một ví dụ về Trivium. Trên thực tế, Trivium sử dụng một khóa bí mật 80 bit tương đối ngắn, việc sử dụng không đúng cách các véc tơ khởi tạo có thể làm giảm độ an toàn của nó xuống mức nguy hiểm thấp. Điều quan trọng cần chú ý là các véc tơ khởi tạo của Trivium phục vụ hai mục đích:
- a) Cho phép dữ liệu được mã hóa với cùng một khóa bí mật, được chia thành các đoạn có thể được giải mã theo thứ tự tùy ý.
- b) Làm tăng độ an toàn kháng lại các tấn công thông thường.
Để cho thấy rõ hơn hai mục đích khác nhau này, ta chia véc tơ khởi tạo 80 bit IV thành hai thành phần, I và V:
Thành phần đầu tiên I là một bộ đếm n-bit đơn giản để xác định duy nhất từng đoạn dữ liệu. Ta giả sử nó được biết đến công khai, và nếu giá trị của nó không thể nhận được theo cách bất kỳ nào khác, thì nó cần được truyền đi cho mỗi đoạn. Độ dài n của nó phụ thuộc vào số lượng tối đa các đoạn dữ liệu có thể truy cập ngẫu nhiên mà ứng dụng có thể mã hóa với một khóa đơn. Chú ý rằng ta thường không cần n quá lớn, như minh họa trong các ví dụ dưới đây.
VÍ DỤ 1 Một ổ đĩa DVD tốc độ 1x đọc dữ liệu là 10Mbit/s và có thời gian truy cập điển hình là 100ms. Để truy cập các phần tùy ý của một đĩa đã mã hóa mà không gây ra bất kỳ độ trễ nào, thiết bị giải mã sẽ phải tạo ra dòng khóa với tốc độ 10Mbit/s, và có thể truy cập tới dòng khóa tại điểm bất kỳ trong vòng 100ms. Yêu cầu này có thể dễ dàng đạt được đáp ứng bằng cách khởi tạo lại Trivium với một giá trị khác của 1 sau mỗi khối 1Mbit. Trong trường hợp này, một biến đếm 16 bit / đủ để mã hóa một đĩa 4.7GB.
VÍ DỤ 2 Trong các ứng dụng liên quan đến liên lạc thời gian thực (như liên lạc thoại), thường không có ý nghĩa khi giải mã dữ liệu theo thứ tự khác với thứ tự đã được sử dụng trong quá trình mã hóa. Toàn bộ cuộc trao đổi có thể được mã hóa như một dòng đơn, loại bỏ cần thiết cho biến đếm, như n = 0. Tuy nhiên, để bù lại cho các khác biệt về đồng bộ, hoặc cho các gói dữ liệu đến chưa đúng thứ tự hoặc bị bỏ qua, thì các bít dòng khóa sẽ có thể cần được tạo ra ở tốc độ cao hơn so với tốc độ truyền và được giữ tạm thời trong bộ đệm.
Thành phần thứ hai V có thể được sử dụng để làm tăng khả năng chống lại các tấn công tổng quát của TRIVIUM, và cách hiệu quả nhất để làm điều đó là coi nó như khóa bí mật bổ sung, có nghĩa là, khi nào một khóa mới được yêu cầu, cả K và V đều được khởi tạo cùng lúc sử dụng khóa bí mật lớn hơn 160 bit K‘.
Điều quan trọng để thực hiện là sử dụng một khóa mở rộng K’ như vậy sẽ không làm tăng độ an toàn của TRIVIUM chống lại các tấn công chuyên dụng.Tấn công đoán và xác định được đề xuất bởi Maximov và Biryukov [4], là một trường hợp yêu cầu độ phức tạp đương với việc tìm kiếm vét cạn trên không gian khóa 90 bít, và điều này không phụ thuộc vào cách khởi tạo của TRIVIUM. Mặt khác, các tấn công vét cạn đòi hỏi nguồn lực tính toán lớn hơn, đặc biệt khi n có thể giữ ở mức tương đối nhỏ. Trên thực tế, các tấn công chuyên dụng hiệu quả nhất đòi hỏi đối phương phải chặn bắt một lượng lớn dữ liệu (cỡ hàng trăm petabyte trong trường hợp của [4]), sử dụng một khóa mở rộng sẽ làm tăng đáng kể hành lang an toàn của TRIVIUM trong thực hành.
Người dùng sẽ quyết định, vì những ràng buộc cụ thể của ứng dụng, có thể làm chệch thủ tục được khuyến nghị đưa ra bên trên, khi đó họ nên ít nhất thực hiện các biện pháp để đảm bảo các quy tắc sau:
- a) Hai dòng dữ liệu khác nhau không bao giờ được mã hóa với cùng một khóa K, và cùng một véc tơ khởi tạo IV. Vi phạm quy tắc này sẽ làm lộ phép XOR của hai bản rõ cho kẻ tấn công. Nếu hai dòng dữ chứa độ dư thừa thông tin thì thông tin này sẽ đủ để khôi phục lại cả hai.
- b) Không nên sử dụng lại cùng véc tơ khởi tạo với một số lượng lớn khóa khác nhau. Giả sử rằng một véc tơ khởi tạo đơn đã biết công khai sẽ được sử dụng với 224 (16 triệu) các khóa bí mật 80 bit khác nhau. Trong trường hợp này, việc khôi phục ít nhất một trong số các khóa 80 bit trên sẽ không khó hơn việc khôi phục một khóa đơn 56 bit.
C.2 Enocoro
C.2.1 Khuyến nghị sử dụng các giá trị khởi tạo mở rộng
Trong một số ứng dụng, không gian véc tơ khởi tạo được yêu cầu lớn hơn không gian véc tơ của mã dòng được quy định trong tiêu chuẩn này.
Phần này cung cấp các khuyến nghị về cách sử dụng bản mã cho véc tơ khởi tạo mở rộng theo một cách an toàn. Do đó kỹ thuật này có thể được áp dụng cho tất cả các mã dòng được quy định trong tiêu chuẩn này. Trong phần còn lại của điều này, chúng ta xem xét đến ví dụ của Enocoro-128v2 mà sử dụng một véc tơ khởi tạo 64 bit tương đối ngắn. Sau đây, chúng tôi mô tả trường hợp sử dụng véc tơ khởi tạo 128 bít mở rộng IV của Enocoro-128v2.
Theo mở rộng này, các thay đổi này chỉ được thực hiện ở bước b) và c) trong hàm khởi tạo Init được quy định trong 6.1.2 như sau:
- b) Thiết lập véc tơ khởi tạo IV vào phần của biến trạng thái bj(-96) như sau:
– Đặt (I0 ‖ I1 ‖ … ‖ I15) = IV, với Ij là 8 bit với j = 0, 1, 2,…, 15.
– Với j = 0,1,2, …, 15, đặt = Ij
- c) Đặt các hằng số vào phần của biến trạng thái aj(-96) như sau:
– Đặt a0(-96) = C8= 0x88
– Đặt a1(-96) = C9= 0x4c.
Phụ lục D
(tham khảo)
Bảng tính năng
Phụ lục này chỉ ra các thuộc tính hạng nhẹ của các thuật toán mật mã được mô tả trong TCVN XXX-1 Phụ lục C đưa ra các tính năng phần cứng của mã dòng hạng nhẹ. Dựa trên các chỉ số, các thuộc tính hạng nhẹ của Enocoro và Trivium được tổng hợp trong Bảng sau:
Bảng D.1 – Các thuộc tính hạng nhẹ của Enocoro và Trivium
Tên thuật toán | |||
Enocoro | Trivium | ||
Kích thước khóa [bit] | 80 | 128 | 80 |
Bề mặt chip [GE] | 2700 | 4100 | 2599 |
Số chu kỳ để khởi tạo [CLK] | 40 | 96 | 1152 |
Số bít trên mỗi chu kỳ [bit/CLK] | 8 | 8 | 1 |
Năng lượnga [GE] | 2700 | 4100 | 2599 |
Năng lượnga [GE*CLK] | 2700 | 4100 | 2599 |
Năng lượng trên mỗi bita [GE*CLK/bit] | 338 | 513 | 2599 |
Công nghệ [µm] | 0,18 | 0,09 | 0,13 |
Tham chiếu | [6] | [5] | [3] |
a ước lượng sử dụng chỉ số phần cứng cho mật mã hạng nhẹ trong phụ lục C của TCVN 12854-1 |
Phụ lục E
(tham khảo)
Tính toán trên trường hữu hạn
VÍ DỤ C = AÄB: Trong phép toán này, trường hữu hạn được biểu diễn bằng cách chọn một đa thức bất khả quy F(x) bậc n với các hệ số nhị phân, các khối n bit A = {an–1,an–2, …,a0} và B = {bn–1, bn–2, …, b0} (trong đó ai và bi là các bit) được biểu diễn như các đa thức, A(x) = an–1xn–1, an–2xn–2,…. a0 và B(x) = bn–1xn–1, bn–2xn–2,…. b0 tương ứng. Cho C(x) = A(x) • B(x)mod F(x), với C(x) là đa thức bậc cao nhất là n-1 nhận được bởi phép nhân A(x) và B(x), chia kết quả cho F(x) và lấy phần dư. Nếu C(x) = cn–1xn–1, cn–2xn–2,…. c0 (với ci là các bit). Khi đó gọi C là khối n bit {cn–1, cn–2, c0}. Với trường hợp này, chúng tôi giới thiệu một hàm Xtime mà nó thực hiện phép nhân 2 trong trường GF(28) sử dụng đa thức bất khả quy ψ8431(x)= x8 + x4 + x3 + x + 1 được biểu diễn dưới dạng 0x11b. Xtime có thể được cài đặt như sau:
Thư mục tài liệu tham khảo
[1] TCVN 11367-1 (ISO/IEC 18033-1), Công nghệ thông tin – Các kỹ thuật an toàn – Thuật toán mật mã – Phần 1: Tổng quan
[2] TCVN 11367-4 (ISO/IEC 18033-4), Công nghệ thông tin – Các kỹ thuật an toàn – Thuật toán mật mã – Phần 4: Mã dòng
[3] T. Good and M. Benaissa, “Hardware results of selected stream cipher candidates”, available at http://www.ecrypt.eu.orq/stream/pa ersdir/2007/023. df
[4] A. Maximov and A. Biryukov, “Two Trivial Attacks on TRIVIUM”. In C. M. Adams, A. Miri, and M. J. Wiener, editors, Selected Areas in Cryptography, SAC 2007, volume 4876 of Lecture Notes in Computer Science, pages 36-55. Springer-Verlag, 2007
[5] Hitachi, Ltd, “Stream Cipher Enocoro Evaluation Report”. CRYPTREC submission package. http://www.hitachi.com/rd/yrl/crypto/enocoro/
[6] D. Watanabe, K. Ideguchi, J. Kitahara, K. Muto, H. Furuichi, T. Kaneko, “Enocoro-80: A Hardware Oriented stream Cipher”. ARES 2008: pages 1294-1300
[7] C. De Canniere and B. Preneel, “Trivium Specifications”. eSTREAM submission package. http://www.ecrypt.eu.orci/stream/p3ciphers/trivium/trivium p3.pdf
Mục lục
Lời nói đầu
1 Phạm vi áp dụng
2 Tài liệu viện dẫn
3 Thuật ngữ và định nghĩa
4 Ký hiệu
5 Mô hình tổng quát cho mã dòng
5.1 Tổng quan
5.2 Bộ tạo dòng khóa đồng bộ
5.3 Các hàm đầu ra
6 Bộ tạo dòng khóa chuyên dụng
6.1 Bộ tạo dòng khóa Enocoro-128v2
6.2 Bộ tạo dòng khóa Enocoro-80
6.3 Bộ tạo dòng khóa Trivium
Phụ lục A (quy định) Các định danh đối tượng
Phụ lục B (tham khảo) Các véc tơ kiểm tra
Phụ lục C (tham khảo) Hướng dẫn cài đặt và sử dụng
Phụ lục D (tham khảo) Bảng tính năng
Phụ lục E (tham khảo) Tính toán trên trường hữu hạn
Thư mục tài liệu tham khảo
TIÊU CHUẨN QUỐC GIA TCVN 12854-3:2020 (ISO/IEC 29192-3:2012) VỀ CÔNG NGHỆ THÔNG TIN – CÁC KỸ THUẬT AN TOÀN – MẬT MÃ HẠNG NHẸ – PHẦN 3: MÃ DÒNG | |||
Số, ký hiệu văn bản | TCVN12854-3:2020 | Ngày hiệu lực | |
Loại văn bản | Tiêu chuẩn Việt Nam | Ngày đăng công báo | |
Lĩnh vực |
Giao dịch điện tử |
Ngày ban hành | 01/01/2020 |
Cơ quan ban hành | Tình trạng |
Các văn bản liên kết
Văn bản được hướng dẫn | Văn bản hướng dẫn | ||
Văn bản được hợp nhất | Văn bản hợp nhất | ||
Văn bản bị sửa đổi, bổ sung | Văn bản sửa đổi, bổ sung | ||
Văn bản bị đính chính | Văn bản đính chính | ||
Văn bản bị thay thế | Văn bản thay thế | ||
Văn bản được dẫn chiếu | Văn bản căn cứ |