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à quá 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 toá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 hoán vị, thay vào phép toá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ả :
Q 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 tố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 ban đầu.
Vịng 1 (K1): 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Thực hiện xoay 61 bít vị trí khóa sang tráik18k17...k20k19. Sau đó thực hiện phép
thay thế bốn bítk79k78k77k76 với bảng thay thế hộp-S (S-box) ở dạng hex tương ứng cho các bít với {0} → {C} đồng thời các bít k19k18k17k16k15 thực hiện phép tốn cộng ⊕
(XOR) với round_ counter (00001) cho vịng thứ nhất ta được kết quả sau:
K1: C 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 Khóa được sinh ra cho lần lặp thứ nhất là khóa được đưa vào thực hiện cho phép tốn cộng với mảng trạng thái cho vịng lặp thứ 2, tương tự như vậy kết quả sinh khóa của vịng lặp này là khóa đầu vào cho vịng lặp sau. Thực hiện tương tự như vậy cho vịng khóa 2 ta được kết quả như sau:
K2: 5 0 0 0 1 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Thực hiện tương tự cho 30 vòng tiếp theo, cuối cùng ta thu được 32 khóa vịng được sử dụng cho 32 vịng lặp trong các q trình mã hóa và giải mã của thuật tốn. Trong đó khóa vịngK32 được sử dụng cho q trình làm "trắng sau" của thuật tốn mã hóa và cho q trình cộng khóa đầu tiên cho phần giải mã.
2.6 Đánh giá bảo mật của mật mã khối PRESENT
2.6.1 Thám mã vi sai và thám mã tuyến tính
Thám mã vi sai [9] và tuyến tính [25] là một trong những kỹ thuật mạnh mẽ nhất có thể sử dụng cho thám mã. Để đánh giá độ kháng lại của PRESENT đối với việc thám mã vi sai và tuyến tính, ta có một số rằng buộc hạn chế đối với số lượng hoạt động của hộp-S liên quan đến một đặc tính vi sai (hoặc tuyến tính).
Chúng ta phân chia 16 hộp-S thành bốn nhóm (hình 7) và bằng cách kiểm tra lớp hốn vị ta đưa ra một số nhận xét sau [8]:
(1) Các bít đầu vào cho một hộp-S được lấy từ bốn hộp-S riêng biệt trong cùng một nhóm.
(2) Các bít đầu vào cho một nhóm bốn hộp-S được lấy từ 16 hộp-S khác nhau.
(3) Bốn bít đầu ra của một hộp-S cụ thể có đầu vào là bốn hộp-S riêng biệt, mỗi hộp là giá trị đầu vào của một nhóm hộp khác trong vịng tiếp theo.
(4) Các bít đầu ra của các hộp-S trong các nhóm riêng biệt là đầu vào của các hộp-S riêng biệt. Chúng ta sẽ sử dụng những nhận xét này để chứng minh cho phần sau:
Hình 7: Phân nhóm các hộp-S trong PRESENT cho mục đích thám mã
Thám mã vi sai
Thám mã vi sai khai thác khả năng xảy ra cao của các vi sai bản rõ và các vi sai được đưa vào vòng cuối cùng của mật mã.
Ví dụ: Xét một hệ thống với đầu vàoX = [X1X2...Xn]và đầu raY = [Y1Y2...Yn].
vào là∆X =X0⊕X00, ở đây”⊕”là toán tử XOR giữa từng cặp bít của hai véc tơn bít, do vậy
∆X = [∆X1∆X2...∆Xn]
ở đây ∆X =X0⊕X”với X0và X”là bít thứ i tương ứng củaX0vàX”. Cũng như vậy,
∆Y =Y0⊕Y”là vi sai đầu ra và
∆Y = [∆Y1∆Y2...∆Yn]
ở đây∆Y =Y0⊕Y”.Trong một mật mã bất kỳ lý tưởng, khả năng xảy ra của một vi sai đầu ra∆Y khi cho một vi sai đầu vào ∆X là1/2n ở đây n là số lượng bít của X. Thám mã vi sai cố gắng tìm kiếm một kịch bản, đó là một cặp∆Y xảy ra khi cho vi sai đầu vào
∆X với khả năng xảy ra xác suất (PD) cao (tức làPD >1/2n). Cặp (∆X,∆Y) được gọi là vi sai. Thám mã vi sai là kĩ thuật tấn cơng bản rõ lựa chọn, nghĩa là người tấn cơng có thể lựa chọn các đầu vào và xác định được các đầu ra, từ đó cố gắng trích rút ra được khóa. Với thám mã vi sai, người tấn cơng sẽ lựa chọn các cặp đầu vàoX0vàX00thỏa mãn một∆Xthì khi đó giá trị∆Y xảy ra với khả năng rất cao.
Để xây dựng được các đặc tính vi sai đúng có khả năng xảy ra cao thì ta xác định các đặc điểm của từng hộp-S và dùng các đặc điểm đó để tìm các đặc tính vi sai tốt. Cụ thể là ta xét các vi sai đầu vào và đầu ra của các hộp-S để từ đó xác định cặp vi sai khả năng xảy ra cao. Sau đó kết hợp các cặp vi sai hộp-S từ vịng tới vịng (các bít vi sai đầu ra khác khơng từ một vịng tương ứng với các bít vi sai đầu vào khác khơng của vịng kế tiếp) thì cho phép chúng ta tìm được đặc tính vi sai xảy ra cao của vi sai bản mã và vi sai đầu vào cho vịng cuối cùng. Các bít khóa con sẽ khơng xuất hiện trong biểu thức vi sai vì các bít khóa con nằm trong các tập dữ liệu và do vậy xét ảnh hưởng của các bít khóa con đến các vi sai bởi toán tử XOR và 0, nghĩa là các bít khóa con khơng ảnh hưởng đến các vi sai.
Để xác định các cặp vi sai của một hộp-S. Xét hộp-S4×4được mơ tả trong phần trên với đầu vào X = [X1X2...Xn]và đầu ra Y = [Y1Y2...Yn]. Tất cả các cặp vi sai (∆X, ∆Y) của một hộp-S có thể được xác định và khả năng xảy ra của∆Y khi cho ∆X có thể được lấy bằng cách xét các cặp đầu vào(X0, X00)sao choX0⊕X00= ∆X. Với một hộp-S 4×4, chúng ta chỉ cần xét 16 giá trị choX0 và sau đó dùng giá trị của ∆X để tìm X” sao choX” = X0⊕∆X. Xét hộp-S trong mật mã, ta có thể lấy các giá trị của ∆Y đối với mỗi cặp đầu vào (X0, X00 = X0⊕∆X). Với các giá trị nhị phân của X, Y và các giá trị tương ứng với∆Y khi cho các cặp đầu vào (X0, X0 ⊕∆X) chúng ta có thể xếp thành
bảng dữ liệu hồn chỉnh cho một hộp-S trong một bảng phân phối vi sai trong đó các cột biểu diễn các giá trị∆X (trong hệ Hexa) và các dòng biểu diễn các giá trị∆Y (trong hệ Hexa). Bảng phân phối vi sai cho hộp-S được mô tả trong bảng 5 dưới đây (theo tài liệu của Axel York Poschmann, năm 2009 [8] ).
∆X 0 1 2 3 4 5 6 7 8 9 A B C D E F ∆Y 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 2 0 2 0 4 0 0 0 2 0 2 0 4 2 0 0 0 0 0 0 2 2 0 2 2 0 2 4 2 0 3 0 4 2 2 0 0 0 0 2 0 2 0 0 2 2 0 4 0 0 0 2 0 2 0 0 0 4 0 2 0 2 0 4 5 0 0 4 0 4 0 0 0 0 0 4 0 4 0 0 0 6 0 0 2 4 2 0 2 2 0 2 0 0 0 0 2 0 7 0 4 0 2 2 0 0 0 2 0 0 0 2 2 2 0 8 0 0 0 0 0 0 2 2 0 2 2 4 2 0 2 0 9 0 4 0 0 2 2 0 0 2 0 0 2 2 0 2 0 A 0 0 2 2 2 2 0 0 0 0 2 2 2 2 0 0 B 0 0 0 2 0 2 4 0 4 0 0 2 0 2 0 0 C 0 0 2 0 2 4 2 2 0 2 0 0 0 0 2 0 D 0 4 2 0 0 2 0 0 2 0 2 2 0 0 2 0 E 0 0 2 0 2 0 0 0 0 4 2 0 2 0 0 4 F 0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 4
Bảng 5: Bảng phân phối vi sai của hơp-S PRESENT
Có vài đặc điểm về bảng phân phối vi sai được đề cặp ở trên. Đầu tiên, số phần tử trong một hàng bằng số phần tử trong một cột và bằng2n = 16 phần tử. Tiếp theo, tất cả các giá trị của phần tử trong bảng là chẵn. Kết quả này là vì một cặp giá trị đầu vào
(X0, X00)(hoặc cặp giá trị đầu ra) có giá trị∆X giống như cặp giá trị vào(X00, X0), nghĩa
là∆X =X0⊕X00 =X00⊕X0. Tiếp theo, vi sai đầu vào∆X = 0 sẽ phải dẫn đến vi sai đầu ra∆Y = 0 cho ánh xạ 1 tới 1 của hộp-S. Do vậy, góc trái trên cùng của bảng 5 có giá trị của 2n = 16và tất cả các giá trị khác trong dòng đầu tiên và cột đầu tiên là 0. Cuối cùng, nếu chúng ta xây dựng một hộp-S lý tưởng (không cho thông tin sai về đầu ra khi
cho giá trị đầu vào) thì hộp-S sẽ có tất cả các phần tử trong bảng 5 bằng 1 và khả năng xảy ra của một giá trị∆Y khi cho một giá trị∆X sẽ là 1/2n = 1/16. Tuy nhiên, các đặc
điểm được thảo luận ở trên phải được duy trì, điều này là rõ ràng, nếu không, không thể thực hiện được.
Sử dụng sự kết hợp của các đặc tính vi sai hộp-S để lấy ra các đặc tính vi sai và đánh giá của một đặc tính vi sai tốt để dùng cho tấn cơng. Để thực hiện việc đó ta sẽ xét việc xây dựng các đặc tính vi sai như sau:
Từ bảng phân phối vi sai của hộp-S, một bít vi sai đầu vào sẽ gây ra ít nhất là hai bít vi sai đầu ra. Điều này sẽ gây ra hai hoạt động của hộp-S trong vịng tiếp theo. Sau đó, mỗi hoạt động của hộp-S sẽ có ít nhất hai bít vi sai đầu ra, sẽ gây ra ít nhất bốn hoạt động hộp-S trong vịng tiếp theo. Từ đó ta có định lý sau:
Định lý 2.1. Với bất kỳ đặc tính vi sai nào của 5 vịng trong PRESENT sẽ có ít
nhất là 10 hoạt động của hộp-S.
Chứng minh định lý:Với 31 vòng được đánh số từ 1 đến 31. Xét 5 vòng liên tiếp của PRESENT vớii= 2đếni+ 2choi∈[3...29]. ChoDj là số lần hoạt động của hộp-S trongj vịng. NếuDj ≥2, choi−2≤j ≤i+ 2, thì định lý là khơng đúng. Vì vậy, giả sử