Học viện Công nghệ Bưu chính Viễn Thông Khoa công nghệ thông tin 1 BÁO CÁO BÀI TẬP LỚN MÔN MẬT MÃ HỌC CƠ SỞ Đề tài Tìm hiểu về Mật Mã Dòng Mục Lục I Giới thiệu 2 1 Mô tả về khóa luồng 2 2 Mô tả Achter[.]
Trang 1Học viện Công nghệ Bưu chính Viễn Thông
Khoa công nghệ thông tin 1
-BÁO CÁO BÀI TẬP LỚN
MÔN: MẬT MÃ HỌC CƠ SỞ
Đề tài: Tìm hiểu về Mật Mã Dòng
Trang 2Mục Lục
I Giới thiệu 2
1 Mô tả về khóa luồng 2
2 Mô tả Achterbahn 2
II Mô tả chi tiết về keystream generation 4
1 The keystream generation 4
2 The Boolean combining function 6
3 The feedback shift registers 7
4 The linear feedforward funtions 9
III The key-loading algorithm 11
IV Vấn đề bảo mật 15
1 Về thiết kế 15
2 Độ phức tạp tuyến tính 15
3 Ý tưởng cải tiến 16
Trang 3I Giới thiệu
1 Mô tả về khóa luồng
Khoá luồng xử lý plaintext theo từng bits hoặc theo từng nhóm nhỏ (8 bits – 1byte)
Stream cypher được xây dựng:
o Khoá đóng vai trò làm input cho bộ sinh khoá (keystream generator - KG)
o Output của KG được gọi là keystream
o Keystream được tổ hợp với plaintext để tạo thành ciphertext
Thường áp dụng cho khoá luồng đối xứng
Khóa gồm 2 loại:
o Đối xứng: đồng bộ (Achterbahn thuộc loại này) , không đồng
bộ, định kỳ
o Không đối xứng: Blum-Goldwasser probabilistic publickey encryption
Khi thiết kế cần chú ý:
o Tính ngẫu nhiên của KG
o Kích thước khóa
2 Mô tả Achterbahn
Mật mã luồng Achterbahn là mật mã luồng tổ hợp nhị phân Trong một mật
mã luồng tổ hợp nhị phân, bản rõ được cung cấp dưới dạng chuỗi m0, m1…
thuộc trường hữu hạn F2 Keystream là một chuỗi nhị phân giả ngẫu nhiên
z0, z1, … Người gửi mã hóa thông điệp bản rõ theo quy tắc c t=m t+z t với mọi
t ≥ 0 Bản mã c0, c1, … được máy thu giải mã bằng cách cộng từng bit luồng khóa z0, z1, …vào chuỗi bản mã đã nhận c0, c1, …
Người gửi và người nhận tạo ra luồng khóa z0, z1, … thông qua các bản sao giống hệt nhau của KG
Trang 4Bộ tạo khoá luồng là một máy trạng thái hữu hạn có một số hữu hạn P ở các trạng thái bên trong khác nhau S0, S1, …, S P−1 Các hàm trạng thái tiếp theo Λ điều chỉnh tiến trình trạng thái có dạng S t +1= Λ (S t) với t = 0, 1, , P - 2 Như vậy trạng thái bên trong tại thời điểm t + 1 chỉ phụ thuộc vào trạng thái bên trong tại thời điểm t Trạng thái bên trong ban đầu S0 có nguồn gốc từ khóa bí mật K ∈ F2k và giá trị công khai ban đầu IV ∈ F2l Ví dụ độ dài khóa
k được yêu cầu là k = 80 (đối với ACHTERBAHN-80) Độ dài của vectơ giá trị ban đầu (vectơ IV) có thể giả sử bất kỳ số nguyên nào giá trị từ 0 đến
64 chia hết cho 8 (tại sao chia hết cho 8 thì là mã hoá 1 byte và đạt tốc độ cao triển khai trình tạo luồng khóa) Trong quá trình triển khai tốc độ cao, một byte của luồng khóa được tạo mỗi chu kỳ đồng hồ
Tuy nhiên, tất cả độ dài khóa từ 40 bit đến 80 bit và từ 40 bit đến 128 bit, tương ứng, có thể được sử dụng, với điều kiện là khóa độ dài chia hết cho tám ACHTERBAHN-80 đáp ứng các điểm mạnh IV 0, 8, 16 , , 72, 80 ACHTERBAHN-128 đáp ứng các độ mạnh IV 0, 8, 16 , , 120, 128 Các khóa ngắn hơn hoặc độ dài IV dẫn đến thời gian tải và đồng bộ hóa lại khóa ngắn hơn
Ví dụ: thay vì sử dụng ACHTERBAHN-128 với 128-bit khóa bí mật và giá trị ban đầu 128 bit, trong một số ứng dụng, nó có thể đủ để sử dụng khóa 96 bit và giá trị ban đầu 64 bit Điều này sẽ làm giảm quá trình đồng bộ hóa lại thời gian khoảng 30% hoặc cụ thể hơn là từ 337 chu kỳ đồng hồ đến 241 chu kỳ đồng hồ trong việc triển khai 1 bit và từ 43 chu kỳ đồng hồ đến 31 chu kỳ đồng hồ trong việc triển khai 8-bit của trình tạo luồng khóa
Hàm đầu ra λ của bộ tạo luồng khóa được tham số hóa bởi khóa K và vectơ giá trị ban đầu IV Ta có z t=λ K , IV(S t)với t = 0, 1, , P - 1 Đối với bất kỳ cặp cố định nào (K, IV) của khóa và vectơ IV, bit luồng khóa được tạo ra z t
tại thời điểm t chỉ phụ thuộc vào trạng thái bên trong S t tại thời điểm t Vì các bit của luồng khóa được tạo ra độc lập với bản rõ, mật mã luồng được
đề xuất thuộc về mật mã luồng đồng bộ.
II Mô tả chi tiết về keystream generation
1 The keystream generation
Trang 5Bộ tạo luồng khóa của ACHTERBAHN-128 bao gồm mười ba thanh ghi dịch chuyển phản hồi phi tuyến cơ bản nhị phân có độ dài từ 21 đến 33 và một hàm kết hợp Boolean F : F_2^13 → F_2 Hàm F kết hợp các chuỗi đầu ra của mười ba thanh ghi dịch chuyển phản hồi để tạo ra luồng khóa ζ = (z0, z1, ) Trong suốt đề xuất này, chúng tôi sẽ
sử dụng các chữ cái viết hoa Aj, j = 0, 1 , , 12, để chỉ định FSR nguyên thủy và lạm dụng ký hiệu một chút, cũng để chỉ định các chức năng phản hồi của các thanh ghi dịch chuyển Chiều dài của thanh ghi dịch chuyển Aj được ký hiệu là Nj Chúng ta có:
N j = 21 + j với j = 0, 1 , , 12
Bất kỳ chuỗi đầu ra khác nào của thanh ghi dịch Aj sẽ được ký hiệu là
σj, 0 ≤ j ≤ 12 Đa thức nhỏ nhất, chu kỳ và độ phức tạp tuyến tính của thanh ghi dịch Aj (theo nghĩa của Định nghĩa 2) sẽ được ký hiệu là
mj , pj và Lj, tương ứng Chúng ta có:
p j = per(σ j ) = 2N j – 1 với j = 0, 1 , , 12
Hãy để trạng thái ban đầu của thanh ghi dịch chuyển Aj trước khi mã hóa được cung cấp bởi vectơ hàng:
r0 = (r0, r1, , r N j−1) ∈ F2N j 2 Vectơ hàng r0 có nguồn gốc từ khóa bí mật K và giá trị ban đầu IV sử dụng thuật toán nạp khóa được mô tả trong Phần 3.5 Thuật toán tải khóa đảm bảo rằng r0 sẽ không phải là vectơ 0 cho dù cặp (K, IV) nào được sử dụng để khởi tạo.
Trình tự đầu ra tiêu chuẩn của thanh ghi dịch chuyển Aj được định nghĩa là nhị phân dãy ρ = (r n)n=0 ∞ , được định nghĩa bởi:
r n +N
j = A j (r n, r n +1, , r n +N j−1) với n = 0, 1,
Tuy nhiên, chúng tôi sẽ không sử dụng trình tự ρ làm trình tự đầu vào cho Boolean kết hợp chức năng nhưng là một phiên bản dịch chuyển của ρ Chúng ta sẽ sử dụng trình tự σ j = TN j−16ρ, trong đó T là toán tử shift trên F2∞ Nói cách khác, chúng ta sử dụng dãy σ j = (S n(j))n=0 ∞ với cho n ≥ 0 là chuỗi đầu vào thứ j để hàm kết hợp Boolean và chúng ta sẽ gọi chuỗi này là chuỗi đầu
ra của thanh ghi thay đổi Aj
Cho 0 ≤ j ≤ 12, σj = (S n(j)
)n=0 ∞ , là trình tự đầu ra của thanh ghi dịch chuyển A j Sau đó luồng khóa ζ = (z n)n=0 ∞ , của ACHTERBAHN-128 được xác định bởi:
z n = F(sn(0), Sn(1 ) , , Sn(12) ) với n = 0, 1,
Thay vì (5), chúng ta sẽ sử dụng ký hiệu nhỏ gọn hơn trong phần tiếp theo:
ζ = F(σ0, σ1, , σ12).
Trang 6Bộ tạo luồng khóa của ACHTERBAHN-80 bao gồm mười một chuyển dịch đăng ký A1 , , A11, cũng được sử dụng trong trình tạo luồng khóa của ACHTERBAHN-128 và có hàm kết hợp Boolean G: F211 → F2 là một chức năng con của của hàm kết hợp ACHTERBAHN-128:
G(x1, , x11) = F(0, x1, , x11, 0)
Nói cách khác, trình tạo luồng khóa của ACHTERBAHN-128 chứa trình tạo luồng khóa của ACHTERBAHN-80 như một cấu trúc con Thiết kế gợi nhớ đến một bộ búp bê Nga
ACHTERBAHN-128 tương thích xuống ACHTERBAHN-80: Nếu chúng tôi tải thanh ghi ca đầu tiên và thanh ghi dịch chuyển cuối cùng (tức là thanh ghi dịch chuyển A_0 và A_12) thành số 0 trạng thái và nếu chúng ta tải các thanh ghi shift còn lại với cùng một khóa và giá trị ban đầu là ACHTERBAHN-80, thì ACHTERBAHN-128 sẽ tạo ra cùng một luồng khóa dưới dạng ACHTERBAHN-80
z0 z1
Hình 3: Bộ tạo luồng khóa của ACHTERBAHN-128/8
NLFSR A 12
NLFSR A 11
NLFSR A 1O
NLFSR A 9
NLFSR A 8
NLFSR A 7
NLFSR A 6
NLFSR A 5
NLFSR A 4
NLFSR A 3
NLFSR A 2
NLFSR A 1
NLFSR A O
G F
Trang 7Những gì chúng tôi đã mô tả cho đến nay là triển khai 1-bit của Achterbahn Trong triển khai này, 1 bit của luồng khóa được tạo ra trên mỗi chu kỳ đồng
hồ Một yêu cầu áp dụng cho các thanh ghi dịch chuyển A_0, A_1 , , A_12 là họ nên tạo điều kiện song song triển khai của trình tạo luồng khóa Trong Phần 6.1, chúng tôi sẽ mô tả 2-bit, triển khai 4 bit và 8 bit của
Achterbahn Trong triển khai 8 bit, 1 byte của luồng khóa được tạo trên mỗi chu kỳ đồng hồ Sau đó có thể cung cấp trong thời gian thực tất cả tám (= acht) luồng (= Bahnen) của một bus với các bit luồng khóa Tính năng này
là lý do chọn tên ACHTERBAHN Bản dịch đơn giản của tiếng Đức từ Achterbahn là tàu lượn siêu tốc
2 The Boolean combining function
The Boolean combining function R: F28→ F2 có bậc 3 và phi tuyến tính 64 Dạng chuẩn tắc của R là:
R(y1, y2, ,y8) = y1 + y2 + y3 + y4+ y5y7 + y6y7 + y6y8+ y5y6y7
+ y6y7y8 Ngoài ra, bằng cách sử dụng ký hiệu OR ( logic ˅ ) Hàm R có thể được biểu diễn bằng:
R(y1, y2, ,y8) = y1 + y2 + y3 + y4 + y5y7 ∨ y6 y7 ∨ y6y8 Bậc đại số 3 của hàm Boolean R đủ lớn để đảm bảo rằng luồng khóa được tạo ra ζ sẽ có độ phức tạp tuyến tính ≥ 2^85 Thứ tự của miễn nhiễm tương quan 4 là giá trị lớn nhất có thể cho cân bằng, 8 biến, các hàm Boolean bậc
3 theo Siegenthaler [33] Có 8 biến khác các hàm boolean của đại số bậc 3
có bậc phục hồi 4 Đặc biệt một trong (4) được chọn chủ yếu vì đại diện thay thế của nó (5) có một nhận thức đơn giản trong phần cứng Xem hình sau:
3 The feedback shift registers
Các mục chính của KSG là tám thanh ghi dịch chuyển phản hồi phi tuyến nguyên thủy nhị phân Xuyên suốt đề xuất, các NLFSR này được gắn nhãn
Trang 8bằng các chữ cái in hoa A, B, C, , H Độ dài, chu kỳ, độ phức tạp tuyến tính và phi tuyến tính của tám NLFSR được đưa ra trong bảng sau
Tất nhiên, việc liệt kê các chu kỳ là dư thừa, vì FSR nhị phân nguyên thủy
có độ dài N, theo định nghĩa, có chu kỳ 2N - 1 Lưu ý rằng các thanh ghi dịch chuyển G và H có cùng độ phi tuyến tính
Đối với NLFSR A và B, chúng tôi tìm thấy L A= 222 - 13 và L B = 223 - 2, tương ứng Giới hạn trên cho độ phức tạp tuyến tính của FSR nguyên thủy nhị phân giai đoạn N là 2N - 2 Đây là hệ quả tức thì của Định lý 16 Giới hạn trên 2N −2 dường như cũng là một giá trị điển hình cho độ phức tạp tuyến tính của giai đoạn N nhị phân nguyên thủy NLFSR's Bằng cách điều tra hơn 100 Triệu NLFSR giai đoạn N nhị phân được chọn ngẫu nhiên với 4
≤ N ≤ 20, chúng tôi nhận thấy rằng giới hạn trên 2N - 2 đối với độ phức tạp tuyến tính đã đạt được đối với hơn một nửa số chuỗi được tạo ra bởi
NLFSR’s được tìm thấy Hầu hết tất cả các trình tự đều có độ phức tạp tuyến tính đóng các giai đoạn
Ở bất kỳ tỷ lệ nào, vì không có giới hạn nào thấp hơn đối với độ phức tạp tuyến tính của nhịp nhị phân N, chu kỳ 2N−1 trình tự đã được công bố cho đến nay, độ phức tạp tuyến tính của bảy NLFSR dẫn động còn lại được sử dụng trong KSG của chúng tôi phải được tính toán Cuối cùng, công thức của Laksov kết hợp với việc triển khai nhanh chóng thuật toán Euclide cho
đa thức nhị phân được quan tâm
Hiện tại, chúng tôi sẽ rất thận trọng khi giả định rằng độ phức tạp tuyến tính của NLFSR nguyên thủy được giải phóng lớn hơn một nửa chu kỳ Do đó, chúng ta sẽ giả sử rằng L C ≥ 224, L D ≥ 225, L E ≥ 226, L F ≥ 227, L G ≥ 228 và L H ≥
230 Chúng ta đã biết rằng L A = 222 - 13 L B = 223 - 2
Trang 9Các chức năng phản hồi của 8 NLFSR điều khiển được cung cấp bởi
Có một NLFSR khác có trong mật mã luồng được đề xuất NLFSR này được gắn nhãn bằng chữ V viết hoa NLFSR V là nonsingular nhưng không phải là nguyên thủy Độ dài của thanh ghi dịch chuyển này là 64 Nội dung của thanh ghi dịch chuyển V không bị thay đổi trong quá trình mã hóa Nó chỉ được sử dụng trong quá trình tải khóa và IV Khóa bí mật K và khóa IV công khai được đưa vào thanh ghi V, sau đó thực hiện một vài ca thay đổi Nội dung cuối cùng của thanh ghi V xác định các cấu hình của lôgic đầu ra chuyển tiếp tuyến tính của NLFSR điều khiển Chức năng phản hồi của NLFSR V là:
Trang 104 The linear feedforward funtions
Mỗi NLFSR điều khiển A, B, C, , H được trang bị một chức năng đầu ra chuyển tiếp tuyến tính có thể định cấu hình Chức năng đầu ra nạp tiếp tuyến tính có thể được mô tả bằng đa thức bộ lọc (xem Phần 2) Đa thức bộ lọc nhị phân a (x) cho NLFSR A có tối đa bậc 6 Tất cả các đa thức bộ lọc
sẽ có các số hạng không đổi Như vậy đa thức a ∈ F2 [x] có dạng
a ( x )=a6x6+a5x5+a4x4+a3x3+a2x2+a1x+1(6)
Có 64 cách chọn đa thức a ( x ) Với NLFSR A, mô tả tình huống trong hình sau:
Nếu phóng to phần bên phải ta có:
Các đa thức bộ lọc sẽ xác định giá trị đầu ra của tám NLFSR A, B, C, , H được chỉ định bởi a (x), b (x), c (x), , h (x), tương ứng Đối với mỗi bộ lọc
đa thức, mức độ tối đa cho phép được đưa ra trong bảng sau
Trang 11Lưu ý: tổng các độ tối đa cho phép của tất cả tám đa thức bộ lọc là 64 Do
đó, KSG có 264 cấu hình khác nhau cho chức năng đầu ra của nó
Định lý 1 Nếu A, B, C, , H của NLFSR được tải bằng bất kỳ vectơ trạng
thái ban đầu khác không, thì đối với tất cả các đa thức lọc a (x), b (x), c (x), , h (x), các chuỗi đầu ra được tạo ra τA, τB, , τH có chu kỳ 2N - 1, A, τA, τB, , τH có chu kỳ 2N - 1, B, , τA, τB, , τH có chu kỳ 2N - 1, H có chu kỳ 2N - 1, trong đó N là độ dài của NLFSR tương ứng
Định lý 2 Nếu A, B, C, , H của NLFSR được tải bằng bất kỳ vectơ trạng thái ban đầu khác không, thì đối với tất cả các đa thức lọc a (x), b (x), c (x), , h (x), các chuỗi đầu ra được tạo ra τA, τB, , τH có chu kỳ 2N - 1, A, τA, τB, , τH có chu kỳ 2N - 1, B, τA, τB, , τH có chu kỳ 2N - 1, C, , τA, τB, , τH có chu kỳ 2N - 1, H có độ phức tạp tuyến tính lớn hơn hoặc bằng L ' A, L B ',…, L ' H, trong đó những con số này được đưa ra trong bảng dưới đây
III The key-loading algorithm
Trang 12ACHTERBAHN-80 có thể được sử dụng với độ dài khóa 40, 48, 56, 64,
72 và 80 Tất cả IV - độ dài từ 0 đến 80 có thể được sử dụng với điều kiện
là độ mạnh IV có thể chia được bởi tám ACHTERBAHN-128 đáp ứng tất cả các độ dài khóa từ 40 đến 128 và tất cả IV-độ dài từ 0 đến 128 là bội số của tám Chúng tôi sẽ sử dụng các chữ cái k và l để biểu thị độ dài khóa và IV tương ứng Giả sử rằng bí mật khóa K được cho dưới dạng chuỗi bit K = u0u1 uk − 1 và giá trị ban đầu (hoặc vectơ ban đầu) được cho là IV = v0v1 vl − 1 Thuật toán tải khóa và IV là được định nghĩa như sau:
Bước 1 Các ô nhớ D0, D1, , DNj-1 của thanh ghi shift Aj được lấp đầy bởi các bit khóa Nj đầu tiên u0u1 uNj − 1 Điều này được thực hiện cho tất cả mười ba thanh ghi dịch chuyển trong trình tạo dòng khóa của ACHTERBAHN-128 và cho tất cả mười một thanh ghi dịch chuyển trong trình tạo dòng khóa của ACHTERBAHN-80.
Bước 2 Với mỗi thanh ghi dịch chuyển Aj sau lần nạp đầu tiên sẽ
còn lại k-Nj các bit khóa uNj, uNj − 1, , uk − 1 được truyền vào Aj lần lượt theo Hình 4.
Bước 3 Với mỗi thanh ghi dịch chuyển Aj, tất cả l bit giá trị ban
đầu VI: V0, v1, , vl-1 được truyền vào theo cách tương tự như đã được mô tả cho các bit khóa trong Bước 2.
Bước 4 Mỗi thanh ghi dịch chuyển Aj phát ra một bit Mười ba bit
thanh ghi dịch chuyển sau đó là được nén bởi hàm kết hợp Boolean
F thành một bit đầu ra Đầu ra này bit ngay lập tức được đưa trở lại vào mỗi thanh ghi dịch chuyển như được mô tả trong Hình 4 cùng một bit đầu ra được đưa vào tất cả mười ba thanh ghi dịch chuyển Hoạt động này được lặp lại 32 lần Trong trường hợp
Achterbahn-80, tất nhiên, chỉ có 11 thanh ghi dịch chuyển A1, , A11 có liên quan và hàm sử dụng kết hợp là hàm G được xác định trong Phần
dịch chuyển.
Bước 5 Nội dung của ô nhớ D0 trong mỗi thanh ghi dịch chuyển
dịch chuyển nào được khởi tạo giá trị với toàn trạng thái 0.
Bước 6 Mỗi thanh ghi dịch chuyển Aj được dịch 64 lần mà không phát ra bất kỳ bit đầu ra (Warmup).