11 Bảng so sánh thời gian thực hiện của thuật toán PRESENT với AES và
2.2 Các vấn đề thiết kế cho PRESENT
Bên cạnh vấn đề về bảo mật và hiệu quả thực hiện thì mục tiêu chính khi thiết kế mật mã khối là sự đơn giản. Sự đơn giản thể hiện ở việc lựa chọn thiết kế cho lớp thay thế (lớp phi tuyến) và lớp hốn vị (lớp tuyến tính) nhưng vẫn phải thỏa mãn tính chất "gây lẫn" (confusion) và "khuếch tán" (diffusion). Những yêu cầu này được thể hiện dưới đây:
Lớp thay thế: Bao gồm một số hộp -S được thực hiện song song trong mỗi vòng. Ta thấy trong tiêu chuẩn mã hóa AES thì việc lựa chọn các hộp-S 8 × 8 được coi là tốt, nhưng đối với thuật tốn mã hóa PRESENT thì sử dụng hộp-S 4 × 4 lại là sự lựa chọn phù hợp vì thuật tốn được xây dựng trên nhu cầu ứng dụng vào các thiết bị hạn chế về điều khiển phần cứng, cũng như tốc độ xử lý, bởi vì các hộp-S 4 bít u cầu ít hơn một phần tư diện tích so với các hơp-S 8 bít (25 GE so với 120 GE trong cài đặt cứng hóa). Tuy nhiên, các hơp-S 4 bít phải được lựa chọn hết sức cẩn thận để có thể thu được một mức độ an tồn phù hợp (vì về mật mã chúng yếu hơn rất nhiều so với các hơp-S 8 bít). Bên cạnh việc được lựa chọn để phù hợp với việc triển khai phần cứng hiệu quả, thì hộp-S PRESENT cũng đc lựa chọn để đáp ứng một số điều kiện làm cho PRESENT chống lại các thám mã vi sai và tuyến tính. Cụ thể, hộp - S sử dụng trong mật mã khối PRESENT là hộp - S4×4bít được chọn từ tậpS : F42 → F4
đặc tính vi sai (dùng cho thám mã vi sai) thì hộp - S phải thỏa mãn điều kiện sau, với∆X =X0⊕X00và∆Y =Y0⊕Y00là các vi sai đầu vào và vi sai đầu ra ta có:
1. Xác suất để một vi sai đầu vào∆X 6= 0,∆X ∈F4
2có một vi sai đầu ra∆Y 6= 0, ∆Y ∈F4
2 làP r(∆X,∆Y)≤ 1
4 với tất cả∆X và∆Y. 2. Cho các vi sai đầu vào ∆X 6= 0, ∆X ∈ F4
2 và các vi sai đầu ra ∆Y 6= 0, ∆Y ∈ F4
2 với trọng số Hamming wt của các vi sai là wt(∆X) = wt(∆Y) = 1,
P r(∆X,∆Y) = 0.
Để xây dựng được bảng xấp xỉ tuyến tính (dùng trong thám mã tuyến tính) thì hộp - S thỏa mãn điều kiện sau: Choa, blà hai véc tơ thuộcF42,x= (x3 kx2 kx1 kx0)là bít đầu vào của hộp-S được xác định bởi a, vàS(x) = (S3(x)kS2(x)kS1(x)kS0(x)) là bít đầu ra của hộp-S được xác định bởib, ta có:
3. Quan hệ xấp xỉ< b, S(x)>bởi< a, x >,C(a, b)≤ 1 2.
4. Cho tất cả véc tơ đầu vàoa6= 0,a ∈F42 và véc tơ đầu rab 6= 0,b ∈F42 với trọng số Hamming 1,C(a, b) = ±1
4.
Chúng ta sẽ xem xét rõ ràng hơn trong phần đánh giá bảo mật của PRESENT, những điều kiện này sẽ đảm bảo rằng PRESENT chống lại với các cuộc tấn công vi sai và tuyến tính.
Lớp hốn vị: Khi lựa chọn lớp hốn vị, chúng ta tập trung vào hiệu suất phần cứng đòi hỏi một lớp tuyến tính có thể được thực hiện với một số lượng các phần tử tối thiểu được xử lý. Điều này dẫn đến việc thực hiện hoán vị trực tiếp. Với sự tập trung về tính đơn giản, chúng ta đã chọn một hốn vị bít phù hợp, điều này cũng là bắt buộc để chống lại các tấn cống thám mã tuyến tính và vi sai.
2.3 Mơ tả thuật tốn mã hóa của PRESENT
Thuật tốn PRESENT thực hiện ba phép biến đổi trên nhiều lần với 31 vịng biến đổi như hình dưới.
Hình 4: Sơ đồ thuật tốn mã hóa của PRESENT
2.3.1 Phép tốn trộn khóa
Trong phép tốn trộn khóa, cho khóa vịngKi = [k63, k62, ..., k1, k0], và một trạng
thái hiện hành của khối dữ liệu bi = [b63, b62, ..., b1, b0]. Lần lượt từng bít của trạng thái
(STATE) 64 bít sẽ được thực hiện phép cộng⊕(XOR) với từng bít tương ứng trong khóa vịng (khóa được sinh ra từ khóa chínhK thơng qua hàm sinh khóa) của chu kỳ (vòng) hiện hành. Phép tốn được mơ tả dưới đây
bj →bj⊕kji với1≤i≤32 0≤j ≤63
Vì sử dụng phép cộng⊕(XOR) nên phép biến đổi ngược của phép tốn trộn khóa cũng chính là phép tốn trộn khóa. Kết quả của thao tác này ta thu được một mảng trạng thái có độ dài bằng với độ dài của khối bản rõ.
Ví dụ: Cho bản rõ (Plaintext) và khóa (key) sau khi chuyển đổi sang ASCII, chuyển đổi từ bản rõ (ASCII sang hệ Hex) và chuyển đổi khóa (ASCII sang hệ Hex).
Bản rõ (Plaintext): 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Khóa (key): 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Thực hiện phép trộn khóa như sau:
Bản mã: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
⊕
Khóa(K1): 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
STATE: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2.3.2 Phép toán thay thế
Phép toán thay thế sử dụng một hộp-S (S-box) 4 bít duy nhất được áp dụng 16 lần song song trong mỗi vịng. Bảng dưới trình bày nội dung bảng thay thế hộp-S (S-box) cho giá trị ở vị trí tương ứng{x}ở dạng thập lục phân của PRESENT sau khi tính tốn:
x 0 1 2 3 4 5 6 7 8 9 A B C D E F
S[x] C 5 6 B 9 0 A D 3 E F 8 4 7 1 2
Bảng 3: Bảng thay thế hộp-S của PRESENT
Bản rõ ban đầu sau khi được thực hiện phép cộng⊕(XOR) với khóa con ban đầu ta thu được một mảng trạng tháiSTATE, và thực hện phép thay thế phi tuyến (SBoxlayer)
bằng cách thay thế từng phần tử trong mảng trạng thái (chuyển sang hệ Hexa) tương ứng với các phần tử (chuyển sang hệ Hexa) trong bảng hộp-S ở trên với việc thay thế
{0} → {C}ta thu được kết quả sau:
Khóa XOR: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 hộp-S: C C C C C C C C C C C C C C C C
2.3.3 Phép toán hoán vị
Phép tốn hốn vị đảm bảo rằng 4 bít đầu ra của hộp-S sẽ được phân tán ra 4 hộp-S khác nhau ở vòng tiếp theo để đảm bảo tính chất khuếch tán và đạt được sau khi thực hiện một số vịng tối thiểu.
Vì mã hóa PRESENT sử dụng mơ hình mạng SPN nên theo cấu trúc SPN ta gọi
blà kích thước khối (block size),slà số bít hộp-S vàP(i)là vị trí bít sau khi hốn vị, ta có phép tốn hốn vị bít tổng qt sau:
P(i) = (b
s ×i mod b−1 với0≤i≤b−2,
b−1 vớii=b−1,
Trong mã hóa PRESENT sử dụng khối 64 bít (b= 64), và số bít hộp-S là 4×4 (s = 4), từ phép tốn tổng qt ở trên, ta có phép tốn hốn vị của PRESENT như sau:
P(i) = (
16×i mod63 với0≤i≤62,
63 vớii= 63,
Với phép tốn hốn vị trên ta có được bảng hốn vị của PRESENT bảng 4.
i P(i) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 16 32 48 1 17 33 49 2 18 34 50 3 19 35 51 i P(i) 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 4 20 36 52 5 21 37 53 6 22 38 54 7 23 39 55 i P(i) 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 8 24 40 56 9 25 41 57 10 26 42 58 11 27 43 59 i P(i) 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 12 28 44 60 13 29 45 61 14 30 46 62 15 31 47 63
Bảng 4: Bảng lớp hoán vị của PRESENT
Trong phép toán hoán vị của thuật toán PRESENT ta thực hiện hai lần phép biến đổi cho mảng trạng thái và kết quả thu được là một mảng trạng thái, mảng trạng thái này là kết quả của vòng thứ nhất (vòng 1) và cũng là đầu vào cho lần thực hiện thứ 2 (vịng 2). Q trình thực hiện tương tự như vịng 1.
Ví dụ: Sau khi thực hiện phép toán thay thế (SBoxlayer) ở trên ta thu được một mảng trạng thái có kết quả như sau:
hộp-S: C C C C C C C C C C C C C C C C
Dựa vào bảng hốn vị đã được tính tốn ở trên ta thực hiện phép toán hoán vị (pLayer) như sau: Với mảng trạng thái gồm 16 đoạn con, mỗi đoạn con là 4 bít ở dạng nhị phân có dạng như sau:
i P(i) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 i P(i) 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 i P(i) 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 i P(i) 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
Thực hiện phép thay thế lần một cho các bít tương ứng trong mảng trạng thái ta thu được kết quả sau:
F F 0 0 F F 0 0 F F 0 0 F F 0 0
Tương tự như vậy thực hiện phép thay thế lần thứ hai ta thu được kết quả là mảng trạng thái (STATE) của vòng thứ nhất. Kết quả này cũng là đầu vào cho vòng thứ hai của phép mã hóa.
P-layer: F F F F F F F F 0 0 0 0 0 0 0 0
2.3.4 Vòng lặp cuối
Vịng lặp cuối cùng là một phép tốn ⊕ (XOR) của mảng trạng thái thu được sau 31 vịng với khóaK32. Phép tốn này cịn gọi là phép toán cho việc làm "trắng sau"
(post-whitening), cuối cùng ta thu được bản mã.
Trong ví dụ đang xét, kết thúc vịng 32 ta thu được kết quả cuối cùng là bản mã:
2.4 Mơ tả thuật tốn giải mã của PRESENT
Thuật tốn giải mã được mơ tả trong hình dưới đây:
Hình 5: Sơ đồ thuật toán giải mã của PRESENT
Các bước thực hiện giải mã chính là các q trình ngược lại của q trình mã hóa được trình bày ở trên. Và q trình giải mã sẽ được trình bày chi tiết trong mục này:
2.4.1 Phép tốn trộn khóa
Trong phép tốn trộn khóa, cho khóa vịngKi = [k63, k62, ..., k1, k0], và một trạng
thái hiện hành của khối dữ liệubi = [b63, b62, ..., b1, b0]. Lần lượt, từng bít của trạng thái
(STATE) 64 bít sẽ được thực hiện phép cộng⊕(XOR) với bít tương ứng trong khóa vịng (khóa được sinh ra từ khóa chính K thơng qua hàm sinh khóa) của chu kỳ hiện hành. Phép tốn được mơ tả dưới đây
bj →bj⊕kji với1≤i≤32 0≤j ≤63
thực hiện phép tốn cộng⊕với khóa được sinh ra tại vịng lặp cuối (khóaK32) thu được
mảng trạng thái (STATE) tương ứng, mảng trạng thái này chính là đầu vào cho vịng giải mã tiếp theo, và phép toán được minh họa dưới đây.
Thực hiện phép trộn khóa cho phép giải mã như sau:
Bản mã: 5 5 7 9 C 1 3 8 7 B 2 2 8 4 4 5
⊕
Khóa(K32): 6 D A B 3 1 7 4 4 F 4 1 D 7 0 0
STATE: 3 8 D 2 F 0 4 C 3 4 6 3 5 3 4 5
Quá trình thực hiện tương tự cho các vịng tiếp theo.
2.4.2 Phép tốn hốn vị nghịch đảo
Vì mã hóa PRESENT sử dụng mơ hình mạng SPN nên theo cấu trúc SPN ta có phép tốn hốn vị bít theo chiều ngược lại (nghịch đảo) sau:
P−1(i) = (
s×i mod b−1 với0≤i≤b−2,
b−1 vớii=b−1,
Trong mã hóa PRESENT sử dụng khối dữ liệu 64 bít (b= 64), và số bít hộp-S là 4×4 (s= 4) và P−1(i)là vị trí bít sau khi hốn vị, thay vào phép tốn tổng quát ở trên, ta có phép tốn hốn vị nghịch đảo của PRESENT như sau:
P−1(i) = (
4×i mod63 với0≤i≤62,
63 vớii= 63,
i P(i) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 i P(i) 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 i P(i) 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 2 6 10 14 18 22 26 30 34 38 42 46 50 54 58 62 i P(i) 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 3 7 11 15 19 23 27 31 35 39 43 47 51 55 59 63
Sau khi thực hiện phép tốn cộng⊕giữa bản mã và khóa hiện hành tại vịng lặp thứ nhất ta có được mảng trạng thái sau:
STATE: 3 8 D 2 F 0 4 C 3 4 6 3 5 3 4 5
Dựa vào bảng nghịch đảo hốn vị đã được tính tốn ở trên ta thực hiện phép toán hoán vị nghịch đảo (InvpLayer) và thu được kết quả với mảng trạng thái như sau:
InvP-box: 4 5 E F 8 2 1 1 8 F 2 8 4 5 A 3
2.4.3 Phép tốn thay thế nghịch đảo
Hình dưới trình bày nội dung bảng nghịch đảo hộp-S (IS- box) sau khi tính tốn:
x 0 1 2 3 4 5 6 7 8 9 A B C D E F
S[x] 5 E F 8 C 1 2 D B 4 6 3 0 7 9 A
Phép toán thay thế nghịch đảo được thực hiện như sau: Mỗi bít trong mảng trạng thái (STATE) S dưới dạng thập lục phân, được thay thế bằng giá trị trong bảng hộp-S nghịch đảo tại vị trí tương ứng. Mảng trạng thái (STATE) thu được ở phép toán hoán vị nghịch đảo trên như sau:
InvP-box: 4 5 E F 8 2 1 1 8 F 2 8 4 5 A 3
Sau khi thực hiện phép thay thế dựa vào bảng hộp-S (InvS-box) nghịch đảo đã trình bày ở trên với việc thay thế{4} → {C}ta được kết quả :
Quá trình thực hiện tương tự cho các vòng tiếp theo.
Trong thuật tốn PRESENT ta thấy cả hai q trình mã hóa và giải mã đều bao gồm một thuật tốn và một khóa nào đó. Khóa (key) là một giá trị không phụ thuộc vào bản rõ, khóa được giữ bí mật mà chỉ có người gửi và người nhận được biết. Trong mỗi q trình mã hóa/giải mã bao gồm nhiều vòng thực hiện, tại mỗi vòng sẽ có một khóa con được đưa vào (khóa con được sinh ra từ khóa chínhKthơng qua hàm sinh khóa). Kết quả đạt được, khi thực hiện thuật toán, phụ thuộc vào việc sử dụng khóa. Vì vậy việc lựa chọn khóa và q trình sinh khóa là một cơng việc hết sức quan trong trong thiết kế mã hóa/giải mã. Trong mỗi thuật tốn sẽ có các yêu cầu về khóa và hàm sinh khóa khác nhau với thuật tốn PRESENT khóa được sử dụng có kích thước là 80 bít q trình sinh khóa được thực hiện theo một số trình tự nhất định. Phần tiếp theo của chương sẽ trình bày chi tiết về q trình sinh khóa của thuật tốn PRESENT.
2.5 Sinh khóa của mật mã khối PRESENT
Thiết kế hàm sinh khóa nhằm cung cấp khả năng chống lại các cuộc tấn công, đồng thời cung cấp rất nhiều sự linh hoạt trong việc thực hiện. Trong suốt q trình mã hóa, hàm sinh khóa được thực hiện một cách gọn nhẹ, điều này cho phép thực hiện bộ nhớ rất thấp và triển khai một cách nhanh chóng. Trong việc triển khai với bộ nhớ nhiều hơn, tất cả các khóa con có thể được tính trước để cải thiện hiệu suất.
Lược đồ khóa của PRESENT có hai phiên bản khóa là 80 bít và 128 bít. Tuy nhiên, trong luận văn này ta tập trung vào phiên bản khóa 80 bít. Đầu tiên, khóa (key)K
ban đầu cung cấp để sử dụng, được lưu trữ trong một thanh ghi khóa và được biểu diễn như sau:k79k78...k0. Với khóa vịng 80 bít ta sử dụng 64 bít tận cùng bên trái cho vịng
khóa thứi,Ki =k63k62...k0và được biểu diễn tương ứng như sau [8]: Tại vịng thứita có:
Ki =k63k62...k0=k79k78...k16.
KhóaK sẽ được cập nhật sau mỗi lần tham gia vào quá trình thực hiện theo trình tự như sau:
1. [k79k78...k1k0]=[k18k17...k20k19]
2. [k79k78k77k76]=S[k79k78k77k76]
3. [k19k18k17k16k15]=[k19k18k17k16k15]⊕round_counter
Do đó, sinh khóa bao gồm 3 hoạt động: (1) thanh ghi khóa được xoay 61 bít vị trí sang trái, (2) bốn bít cuối cùng bên trái được chuyển qua hộp-S của PRESENT, và (3) giá trịiround_counterđược thực hiện phép⊕(XOR) với các bítk19k18k17k16k15 củaK.
Q trình thực hiện sinh khóa sẽ được trình bày chi tiết trong ví dụ dưới đây: Ta có khóaK = 80 bít ban đầu:
Khóa K: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Để thực hiện cho khóa vịng 1, khóaK1 được lấy 64 bít tận cùng bên trái từ khóa chính