2.2 Giao thức cập nhập
2.2.2. Giao thức cập nhật từ xa an toàn
Giao thức cập nhật từ xa an tồn bao gồm hai thuật tốn tương ứng với hai phía của một hệ thống: Thuật tốn 1 cho phía FPGA (tức là phía người sử dụng) và thuật tốn 2 cho phía nhà cung cấp dịch vụ. Đầu tiên, chúng ta tập trung thảo luận về thuật tốn 1 ở phía FPGA, đây là thuật toán chạy trên thiết bị với nhiều hạn chế về tài nguyên phần cứng.
Các tham số trong giao thức được lưu trữ trong cơ sở dữ liệu hồ sơ người d ng của nhà cung cấp dịch vụ và bên phía người sử dụng. Các tham số đó là:
SKS: Khóa bảo mật được chia sẻ bởi SuM
F: Số định danh của FPGA
Pi: Số định danh của phân v ng cấu hình lại được trong FPGA
VPi: Số phiên bản của bitstream hiện đang hoạt động
Lmax: Độ dài tối đa của bitstream từng phần của phân v ng Pi
AE: Thuật tốn mã hóa được sử dụng
AC: Thuật toán nén được sử dụng
VPiNVM: Số phiên bản bitsream lưu trữ trong bộ nhớ không bay hơi
NCuM: Giá trị bộ đếm lưu trong bộ nhớ không bay hơi của CuM
44
NPiLS: Số bản quyền của bitstream từng phần
VPiU: Số phiên bản của bitstream được tải lên
NSuM: Số Nonce được tạo bởi SuM
Fe, Pe, Ve: Giá trị được mong đợi của F, Pi, VPi
Nmax: Giới hạn trên của NNVM
PB: Bitstream từng phần ở dạng nén
Mx: Các giá trị MACs
2.2.2.1. Thuật tốn 1 - Thuật tốn bên phía người dùng FPGA
1. Start:
2. Receive(C, Fe, Pi, VPie, LPiU, Nmax, NSuM, M0) 3. if LPiU Lmax then goto 34
4. if C ≠ “GetUpdate” then goto Start:
5. VPiNVM := VPi
6. ReadNVM(NCuM)
7. M’0 = MAC(C, Fe, Pi, VPie, LPiU, Nmax, NSuM)
8. S := (M0 = M’0) (VPie = VPi) (Fe = F) (NCuM < Nmax) 9. if S then
10. NCuM := NCuM + 1 11. WriteNVM(NCuM) 12. else goto Start:
13. end if
14. MK := MAC(F, Pi, VPi, SKS) 15. MLS := MAC(F, Pi, VPi, NPiLS)
16. M1 := MAC(“ResUpdate”, F, Pi, VPi, Lmax, NCuM, AE, AC, MK, MLS, M0) 17. Send(“ResUpdate”, F, Pi, VPi, Lmax, NCuM, AE, AC, MK, MLS, M1) 18. Receive(C, M2)
19. if M2 ≠ MAC(C, M1) then goto Start: 20. if C = “Update” then
21. Receive(PB, M3)
22. If M3 ≠ MAC(PB, M2) then goto Start: 23. Receive(“UpFinish”, VPiU, M4)
24. if M4 ≠ MAC(“UpFinish”, VPiU, M3) then goto Start: 25. Decrypt() 26. Decompress() 27. ReconfCtr() 28. VPiNVM := VPi 29. M5 = MAC(“UpConfirm”, VPiNVM, M4) 30. Send(“UpConfirm”, VPiNVM, M5) 31. end if
32. if C= “Abort” then goto Start:
33. UpUserprofile(F, Pi, VPi, Lmax, NCuM, AE, AC)
45
Trong đó:
- GetUpdate, Update, UpFinish, Abort là các bản tin được gửi từ máy chủ cập nhật. - ResUpdate, UpConfirm là các bản tin được gửi từ FPGA đến máy chủ cập nhật. - Decrypt(), Decompress(), ReconfCtr() là các hàm giải mã, giải nén và cấu hình lại. - UpUserprofile là chỉ thị lệnh cập nhật hồ sơ người d ng.
Số chỉ d ng một lần NsuM được tạo ra bởi SuM phải là một số ngẫu nhiên khơng thể đốn trước và cũng khơng có cơ hội để lặp lại. Điều này ngăn chặn những kẻ tấn công phát lại dữ liệu của các phiên trước đó. Số chỉ d ng một lần NCuM được tạo ra bởi CuM là một bộ đếm đơn điệu được duy trì trong bộ nhớ khơng bay hơi NVM. Để bảo vệ chống tràn bộ đếm này vượt ra ngoài khả năng lưu trữ của NVM, CuM sẽ thực hiện tăng lên khi nhận được chỉ thị của SuM. Vì lý do này, bản tin khởi tạo "GetUpdate" bao gồm một ràng buộc giới hạn trên NMax. Trong thuật tốn 1, giao thức khơng thể tiến hành tiếp tục đến bản tin
phản hồi "ResUpdate" nếu giá trị của NVM không tăng lên 1.
Trao đổi ban đầu đảm bảo rằng cả hai bên đồng ý giá trị của các tham số F, V, P, L, N. CuM sẽ khơng thể tiếp tục vượt ra ngồi bản tin "ResUpdate" trừ khi các giá trị là ph hợp. Điều này đảm bảo rằng kẻ tấn công không thể tái sử dụng bản tin "GetUpdate" với một FPGA cụ thể để cập nhật một FPGA khác.
Trong giao thức đã đề xuất, các tham số Lmax, LPiU, Pi, VPi là các tham số đặc trưng cho hệ thống cấu hình lại được từng phần. Một cập nhật an tồn và thành cơng khi các tham số trên của giao thức phải được thỏa mãn các yêu cầu đặt ra. Cũng trong giao thức này các tham số AE, AC đặt trưng cho việc trao đổi và lựa chọn thuật toán trong một phiên cập nhật. Đây cũng là một điểm mới của giao thức, cho phép lựa chọn linh hoạt các thuật mã hóa và nén bitstream khi cập nhật từ xa qua mạng Internet.
Các tham số của hệ thống, bao gồm cả khóa bí mật được sử dụng như một dữ liệu đầu vào để tạo ra các mã xác thực bản tin MAC. Các giá trị MAC M0, M1, M2, M3, M4, M5 đảm bảo sự tươi mới và liên tục của các giao dịch giữa hai bên trong một phiên. Một kẻ tấn công không thể tạo ra một bản tin bất kỳ chen vào giữa phiên giao dịch của SuM và CuM, bởi vì tất cả các giao dịch của giao thức đều được xác thực. Sau mỗi lần cập nhật thành công, giá trị của các tham số sẽ được cập nhật và lưu trữ trong hồ sơ dữ liệu người d ng để cho các phiên cập nhật mới trong tương lai.
Bây giờ chúng ta thảo luận về các thuật tốn của giao thức ở phía nhà cung cấp dịch vụ, thuật tốn 2. Bất cứ khi nào có một phiên bản bitsream một phần mới, SuM bắt đầu lấy giá trị của các tham số tương ứng cho bitstream này từ cơ sở dữ liệu hồ sơ người dùng bằng các lệnh “Get(.)”. Nếu chúng khơng có, giá trị của các tham số được thiết lập là 0. Sau đó, SuM tạo ra số sử dụng một lần NSuM, tính HMAC M0 và gửi một bản tin "GetUpdate" c ng các tham số cần thiết đến hệ thống FPGA cụ thể. T y thuộc vào bản tin
46 trả lời "ResUpdate" nhận được từ FPGA, SuM sẽ quyết định có nên tiếp tục một phiên cập nhật hay không.
2.2.2.2. Thuật tốn 2 - Thuật tốn bên phía máy chủ của nhà cung cấp
1. Fe := Get(“FPGA/System ID”) or „0‟ 2. Pe := Get(“partial partition ID”) or „0‟
3. VPie := Get(“current version”, Fe, Pi) or „0‟
4. SKS := Get(“update logic key”, Fe, Pi, VPie) or „0‟
5. NPiLS := Get(“partial bitstream license”, Fe, Pi, VPie) or „0‟
6. Nmax := Get(“NCuM”, Fe) or „0‟
HandShake:
7. Generate(NSuM)
8. M0 = MAC(“GetUpdate”, Fe, Pi, VPie, LPiU, Nmax, NSuM)
9. Send(“GetUpdate”, Fe, Pi, VPie, LPiU, Nmax, NSuM, M0)
10. Receive(“ResUpdate”, F, Pi, VPi, Lmax, NCuM, AE, AC, MK, MLS, M1)
GetKey&License:
11. while (SKS = 0) (NPiLS = 0) do 12. Save(Fe, Pi, VPie)
13. if (Fe =0) then Fe := F
14. if (VPie =0) then VPie := VPi
15. SKS := Get(“update logic key”, Fe, Pi, VPie) or „0‟
16. NPiLS := Get(“partial bitstream license”, Fe, Pi, VPie) or „0‟ 17. M’K := MAC(F, Pi, VPi, SKS)
18. M’LS := MAC(F, Pi, VPi, NPiLS) 19. KEY_Ok := [MK = M’K] 20. LS_Ok := [MLS = M’LS] 21. if (KEY_Ok) then 22. SKS := 0
23. Restore(Fe, Pi, VPie) 24. goto GetKey&License: 25. end if
26. if (LS_Ok) then 27. NPiLS := 0
28. Restore(Fe, Pi, VPie) 29. goto GetKey&License: 30. end if
31. end while
32. MAC_Ok := [M1 = MAC(“ResUpdate”, F, Pi, VPi, Lmax, NCuM, AE, AC, M’K, M’LS,
M0)
33. While MAC_Ok (F ≠ Fe) (Pi ≠ Pe) (VPi ≠ Ve) (NCuM ≥ Nmax) do 34. if MAC_Ok then
35. if (F ≠ Fe) then
36. Abort(“FPGA/System ID mismatch”) 37. end if
38. if (Pi ≠ Pe) then
39. Abort(“Partition ID mismatch”) 40. end if
47 41. if (VPi ≠ Ve) then
42. Warn(“Version mismatch”) 43. Ve := VPi
44. end if
45. if (NCuM ≥ Nmax) then 46. Nmax := NCuM + 1 47. end if 48. end if 49. goto HandShake: 50. end while UpDate: 51. do 52. M2:= MAC(“Update”, M1) 53. Send(“Update”, M2) 54. M3 = MAC(PB, M2) 55. Send(PB, M3) 56. M4 := MAC(“UpFinish”, VPiU, M3) 57. Send(“UpFinish”, VPiU, M4) 58. Receive(“UpConfirm”, VPiNVM, M5)
59. Up_Ok := [M5 = MAC(“UpConfirm”, VPiNVM, M4)] 60. while Up_Ok
61. UpUserprofile(F, Pi, VPi, NCuM)
2.2.3. Phân tích bảo mật
2.2.3.1. Tính bí mật và tính xác thực
Trong giao thức đã đề xuất, ở phía FPGA, bộ giải mã và bộ xác thực luôn luôn được thực hiện và có thể thực hiện trong phần cứng hoặc phần mềm nhúng. Do vậy, bitstream một phần được chuyển giao thông qua Internet ln được mã hóa để chống lại các cuộc tấn công nhân bản hoặc kỹ thuật đảo ngược. Các bước trong q trình trao đổi này ln được xác thực để đảm bảo tính tươi mới, tính tồn vẹn và tính chính gốc của bitstream, nhằm ngăn chặn các cuộc tấn cơng phát lại.
- Tính xác thực:
Như đã trình bày ở trên, đầu tiên, các tham số trong cơ sở dữ liệu người d ng c ng với số chỉ sử dụng một lần NSuM xác định cho mỗi phiên giao dịch được d ng để tính tốn giá trị MAC ban đầu, được gọi là M0. Sau đó M0 được sử dụng như một tham số mới để tính tốn giá trị MAC tiếp theo, được gọi là M1. Cứ thế, các giá trị MAC lồng vào nhau cho đến khi kết thúc phiên giao dịch. Như vậy, các tham số chỉ đưa vào tính tốn MAC một lần nhưng sẽ ảnh hưởng đến toàn bộ các giá trị MAC trong phiên, đảm bảo tính tươi mới và tính liên tục của phiên giao dịch. Việc sử dụng các giá trị MAC trong suốt phiên cập nhật sẽ ngăn chặn hình thức tấn cơng phát lại bitstream cũ hoặc bitstream với mã độc hại, một trong những dạng tấn công ở giữa (man-in-the-middle) [20]. Trong giao thức đã đề xuất
48 với hai thuật tốn 1 và 2 ở hai phía, luận án này xây dựng và sử dụng hàm băm SHA-512 để thực hiện tính tốn các giá trị MAC này.
Việc sử dụng các giá trị MAC trong giao thức của luận án này nhằm phát hiện và xử lý cả dữ liệu độc hại và dữ liệu lỗi ngẫu nhiên như lỗi tổn thất gói tin trên đường truyền. Tuy nhiên, nó chỉ đơn giản là hủy bỏ và khởi động lại toàn bộ phiên giao dịch nếu nó phát hiện một hành vi vi phạm tồn vẹn dữ liệu, chứ khơng cố gắng để truyền lại các gói tin bị mất. Vì vậy, để đạt được hiệu suất tốt trên các kênh không đáng tin cậy, giao thức đề xuất cần được chạy trên một lớp giao thức sửa lỗi khác như giao thức TCP/IP chẳng hạn.
- Tính bí mật:
Khóa SKS cần phải được sử dụng trong giao thức để mã hóa và giải mã các bitstream, và cũng được d ng như một tham số bí mật để tính tốn mã xác thực các bản tin, MK. Khóa là một tham số bí mật, chỉ trao đổi giữa hai bên thơng qua một quy trình an tồn riêng biệt, ví dụ như việc trao đổi thông qua một trung tâm đáng tin cậy (TAut), thiết lập một kênh an tồn riêng hoặc thơng qua các giao thức trao đổi khóa an tồn.
Trong giao thức, giấy phép bản quyền của bitstream từng phần, NPiLS, cũng được coi như là một khóa bí mật thứ hai và được đưa vào tính tốn MAC, làm cho giao thức trở nên an toàn hơn.
Số chỉ sử dụng một lần “nonce”, NSuM, là một con số được tạo ra cho việc sử dụng cụ thể, chẳng hạn như xác thực phiên giao dịch. Thông thường, giá trị của một nonce thay đổi theo thời gian và là một số ngẫu nhiên rất lớn nên việc tái tạo lại nó là vơ c ng khó khăn. Nonce là một tham số đặc biệt được sử dụng nhằm hạn chế hoặc ngăn chặn sự tấn công phát lại hoặc tái tạo một tập tin trái phép. Việc bổ sung một nonce từ phía người sử dụng NCuM giúp cải thiện mức độ an tồn cho cả hai phía trong giao thức cập nhật từ xa.
Các thuật tốn bảo mật AES-265 với độ dài khóa 256bit đủ để bảo vệ các dữ liệu bí mật và hàm băm SHA-512 với mã xác thực 512bit được coi là an toàn trong thời điểm hiện nay.
2.2.3.2. Giá trị của các tham số
NSuM là số ngẫu nhiên đủ lớn để việc tái hiện lại nó trong thực tế là khơng thể. Saar
Drimer và đồng sự [23] chỉ ra rằng, việc sử dụng một từ 64-bit cho NSuM sẽ đảm bảo rằng một kẻ tấn công với năng lực thực hiện 103 truy vấn mỗi giây phải mất vài thập kỷ để tìm ra một giá trị tr ng lặp.
Giao thức đề xuất sử dụng khóa SKS dài 256-bit cho thuật tốn mã hóa AES. Thuật tốn AES cho đến nay vẫn được coi là an tồn, có nghĩa là trong hiện tại dữ liệu được mã
49 hóa với thuật tốn AES đã khơng bị phá vỡ. Chiều dài khóa 256-bit của thuật toán AES là đủ để bảo vệ thơng tin thuộc loại bí mật.
Các giá trị MAC M0, M1, M2, M3,v.v. được tạo ra bởi hàm băm SHA-512 có chiều dài
512-bit. Các giá trị MAC này cung cấp một mức an toàn cao đối với các cuộc tấn cơng dị tuần tự.
Các tham số khác như Pi, Vi, LMax, v.v. là các tham số phục vụ cho việc cấu hình lại từng phần. Kích thước của chúng phụ thuộc vào các ứng dụng và định nghĩa của người dùng.
2.2.3.3. Điểm mới của giao thức
Giao thức của luận án như đã trình bày ở trên sử dụng các thuật toán trong vùng tài nguyên logic cấu hình lại được và kết hợp với phần mềm nhúng thay vì sử dụng logic phần cứng cố định thiếu tính linh hoạt. Cách tiếp cận của luận án này có thể được áp dụng với hầu hết các FPGA hiện có. Đặc biệt, luận án này xem xét trên các hệ thống nhúng cấu hình lại được từng phần dựa trên FPGA, đây là các nền tảng phần cứng đang được phát triển rất nhanh trong hiện tại và tương lai. Các điểm mới của giao thức được thể hiện trong Bảng 2.3 sau: Bảng 2.3 So sánh các giao thức cập nhật an tồn Các nghiên cứu Mã hóa và xác thực bitstream Ngăn ngừa tấn công phát lại Ngăn ngừa tấn cơng xen giữa Lựa chọn các thuật tốn mã Hỗ trợ cấu hình từng phần Hổ trợ hệ thống nhúng [23] Có Có Có Cố định Khơng Khơng Của luận án này Có Có Có Thay đổi linh hoạt Có Có Trong đó:
- Tính linh hoạt trong việc thay đổi các thuật tốn mã hóa được thể hiện bởi các trao đổi thông tin lựa chọn thuật tốn mã hóa AE và nén AC trước mỗi phiên giao dịch,
dòng 17 trong Thuật tốn 1 và dịng 10 trong Thuật tốn 2.
- Việc hỗ trợ cấu hình lại được từng phần được quyết định bởi các tham số Pi, VPi, Lmax, LPiU, NPiLS, … như đã trình bày trong giao thức.
- Việc hỗ trợ hệ thống nhúng được thực hiện trên vi xử lý nhúng và các bộ mã hóa AES-256, bộ xác thực SHA-512 và bộ giải RLE được thực hiện bằng phần mềm code C.
50
2.3 Giao thức trao đổi khóa
Sự an tồn của dữ liệu trong mật mã hiện đại phụ thuộc vào hai khía cạnh: Sức mạnh của thuật tốn mã hóa và khóa bảo mật. Sức mạnh của thuật tốn mã hóa được thể hiện ở độ phức tạp trong tính tốn của thuật tốn đó nhằm mục đính ngăn ngừa các cuộc tấn phân tích mã. Khóa bảo mật d ng để mã hóa và giải mã dữ liệu. Khóa càng dài thì độ an tồn trước các cuộc tấn công thử tuần tự càng cao.
Trong thực tế, các thuật tốn mã hóa thường đã được tiêu chuẩn hóa và cơng bố cơng khai. Khóa là thành phần quan trọng duy nhất cịn lại của quy trình bảo mật cần phải được giữ bí mật. Tuy nhiên, để đảm bảo tính khả dụng của dữ liệu thì khóa cần phải được chia sẻ và trao đổi giữa hai phía mã hóa và giải mã. Sự chia sẻ và trao đổi này dẫn đến các nguy cơ làm sai lệch hoặc tiết lộ khóa ra bên ngồi.
Để giải quyết vấn đề này, người ta có thể thiết lập kênh riêng an tồn để trao đổi khóa nhưng chi phí sẽ cao và cần các thiết bị đắt tiền kèm theo. Hoặc người ta sử dụng mạng cơng cộng, ví như mạng Internet chẳng hạn, với giải pháp xác thực an tồn [89]. Xu hướng cơng nghệ hiện đại ứng dụng cho các giao dịch thương mại là trao đổi khóa qua mơi trường mạng cơng cộng khơng đáng tin cậy này. Vì vậy, cần phải có các giải pháp an tồn để bảo vệ khóa trong các phiên giao dịch. Giải pháp đầu tiên trong lĩnh vực này là giao thức trao đổi khóa Diffie-Hellman được cơng bố bởi Whitfield Diffie và Martin Hellman vào năm 1976 [90]. Trao đổi khóa Diffie-Hellman là một phương pháp trao đổi khóa được phát minh sớm nhất trong mật mã học hiện đại. Phương pháp trao đổi khóa này cho phép hai bên thiết lập một khóa bí mật chung để mã hóa dữ liệu sử dụng trên kênh truyền khơng an tồn mà khơng cần có sự thỏa thuận trước về khóa bí mật. Khóa bí mật tạo ra sẽ được sử dụng để mã hóa dữ liệu với phương pháp mã hóa khóa đối xứng.