Chuỗi bài viết đề tài “Giải pháp bảo mật cho thiết bị Datalogger” (P5)

Tại thiết bị Datalogger, mỗi khi vi điều khiển khởi động, chương trình bộ nạp khởi động sẽ được thực thi. Nguy cơ tấn công vào bộ khởi động của thiết bị Datalogger nói chung và các thiết bị Nhúng/IoTs nói riêng là rất cao. Kẻ tấn công thường xâm nhập vào Chương trình bộ nạp khởi động nhằm truy cập vào dữ liệu chương trình. Qua đó, có thể sửa đổi dữ liệu, thay đổi chế độ khởi động, thay đổi địa chỉ khởi động để truy cập ứng dụng người dùng và kiểm soát thiết bị qua bộ nạp khởi động, cổng gỡ lỗi hoặc chương trình được kẻ tấn công đưa vào RAM. Rủi ro cao nhất có thể xảy ra là kẻ tấn công có thể toàn quyền truy cập nội dung của vi điều khiển trên thiết bị. 

Tại bài viết này, chúng ta sẽ tìm hiểu về Giải pháp bảo mật Quá trình khởi động của thiết bị. 

Các bạn tham khảo nội dung các phần trước của chuỗi bài viết:

? Phần 1: Tổng quan vấn đề bảo mật trên các hệ thống IoT. Xem tại đây.

? Phần 2: Đề xuất giải pháp bảo mật cho thiết bị Datalogger. Xem tại đây.

? Phần 3: Giải pháp 1 – Bảo vệ chương trình ứng dụng và dữ liệu tại thiết bị. Xem tại đây.

? Phần 4. Giải pháp 2 – Bảo vệ khi giao tiếp cổng vật lý. Xem tại đây.

Phần 5. Giải pháp 3 – Bảo mật Quá trình khởi động của thiết bị

1. Thuật toán sử dụng 

a. Giới thiệu về mật mã học

Mật mã học là một lĩnh vực liên quan đến các phương pháp toán học nhằm đảm bảo an toàn thông tin, cụ thể là trong thông tin liên lạc. Mật mã học gắn liền với quá trình mã hóa và giải mã. 

  • Mã hóa là phương pháp biến đổi thông tin (chương trình, văn bản, hình ảnh…) từ định dạng rõ ràng sang dạng bản mã không thể đọc, hiểu được nếu không có các phương tiện, công cụ, phương pháp giải mã trong quá trình truyền thông tin đi. 
  • Giải mã là phương pháp ngược với mã hóa, biến bản mã (thông tin đã được mã hóa) về dạng thông tin ban đầu. 

Trong bài báo “Overview of Cryptography” [1], các thuộc tính được yêu cầu trong mật mã học bao gồm:  

  • Tính bí mật: chỉ có người nhận đã xác thực mới có thể đọc được nội dung của thông tin trong dạng rõ ràng của nó. Nói cách khác, kẻ tấn công không thể nhận được bất cứ thông tin gì về nội dung, dữ liệu ở dạng đã mã hóa. 
  • Tính toàn vẹn: người nhận có khả năng xác định được thông tin có bị thay đổi trên đường truyền thông tin hay không. 
  • Tính xác thực: Người nhận có khả năng xác định danh tính người gửi và ngược lại, nhằm đảm bảo rằng thông tin dữ liệu trong quá trình truyền, nhận là xác thực và an toàn.  

Một số thuật toán thường được sử dụng trong mật mã học như: mật mã khóa đối xứng, mật mã khóa bất đối xứng, hàm băm,…

b. Mật mã khóa đối xứng

Mật mã khóa đối xứng (hay Mã hóa đối xứng) là thuật toán sử dụng chung một khóa trong quá trình mã hóa, giải mã dữ liệu trên kênh truyền và đảm bảo thuộc tính bí mật và xác thực trong mật mã học. Vì vậy, khóa phải được chia sẻ cho cả bên truyền và bên nhận, khóa phải được giữ bí mật tuyệt đối, nên được gọi là khóa bí mật (còn gọi là khóa riêng tư). Mức độ bảo mật của các hệ thống mật mã khóa đối xứng sẽ phụ thuộc vào độ khó trong việc suy đoán ngẫu nhiên ra khóa đối xứng theo hình thức tấn công brute force. Thông thường, các khóa có độ dài tới 256-bit có thể được xem là có độ bảo mật cao tuyệt đối, có khả năng chống lại được hình thức tấn công brute force từ các máy tính lượng tử. Một số thuật toán mật mã khóa đối xứng phổ biến thường được sử dụng như AES, TDES, DES, RC4,…

Hình 1. Mô phỏng về Mật mã khóa đối xứng (Nguồn: st.com)

Cơ chế hoạt động của các thuật toán mật mã khóa đối xứng bao gồm các bước: (1) Bên truyền và bên nhận sẽ chia sẻ khóa bí mật sử dụng chung của hai bên; (2) Bên truyền sử dụng khóa bí mật cùng với thuật toán mã hóa để mã hóa dữ liệu; (3) Bên nhận sử dụng khóa chung với thuật toán giải mã để giải mã dữ liệu thành dạng rõ ràng. 

Ưu điểm của mật mã khóa đối xứng là quy trình mã hóa và giải mã nhanh, phù hợp cho dữ liệu thông tin lớn. Bên cạnh đó, một số nhược điểm đáng chú ý như: cần kênh thông tin mật để chia sẻ khóa bí mật giữa các bên ở lần đầu tiên trao đổi thông tin, dữ liệu; nếu khóa bị đánh cắp bởi kẻ tấn công thì mọi dữ liệu đều có thể bị đánh cắp; để đảm bảo trao đổi thông tin an toàn cho một nhóm nhiều người gồm n thành viên, tổng số lượng khóa cần sẽ là n(n-1)/2, số lượng khóa quá nhiều và khó khăn cho việc quản lý; từ đó sẽ khó ứng dụng trong các hệ thống mở. Để khắc phục những nhược điểm trên, mật mã khóa bất đối xứng ra đời.

c. Mật mã khóa bất đối xứng 

Mật mã khóa bất đối xứng (hay Mật mã khóa công khai) là thuật toán sử dụng hai khóa để mã hóa và giải mã dữ liệu, bao gồm khóa công khai và khóa bí mật; đảm bảo thuộc tính bí mật và xác thực trong mật mã học. Khóa công khai là khóa được chia sẻ giữa các bên liên lạc và thường được sử dụng để mã hóa dữ liệu. Khóa bí mật là khóa được giữ riêng tư giữa các bên và thường được sử dụng để giải mã dữ liệu. Rất khó để thu được khóa bí mật nếu bạn đang giữ khóa công khai. Nghĩa là một người nào đó có thể tự do gửi khóa công khai ra bên ngoài theo các kênh không an toàn, nhưng họ vẫn có thể chắc chắn chỉ họ mới có thể giải mã các dữ liệu đã mã hóa đó. Thuật toán mật mã khóa bất đối xứng phổ biến thường được sử dụng là RSA.

Hình 2. Mô phỏng về Mật mã khóa bất đối xứng (Nguồn: st.com)

Cơ chế hoạt động của các thuật toán mật mã khóa đối xứng bao gồm các bước: (1) Người gửi (A) sẽ nhận khóa công khai của người nhận (B) qua kênh truyền không bí mật; (2) Người gửi (A) sử dụng khóa công khai của (B) để mã hóa dữ liệu muốn gửi đi; (3) Người nhận (B) nhận được dữ liệu và thực hiện giải mã bằng khóa riêng tư của mình. 

Ưu điểm của mật mã khóa bất đối xứng là:

  • Khóa thực hiện việc mã hóa là khóa công khai, nên không cần chia sẻ khóa công khai một cách bí mật, dễ dàng hơn cho việc ứng dụng trong các hệ thống mở có nhiều thành viên.
  • Khóa thực hiện giải mã là khóa riêng tư của mỗi bên, mang tính bí mật cao hơn so với khóa riêng tư của Mật mã khóa đối xứng. 
  • Để đảm bảo trao đổi thông tin an toàn cho một nhóm nhiều người gồm n thành viên, chỉ cần sử dụng n cặp khóa, số lượng khóa tối ưu hơn nhiều so với Mật mã khóa đối xứng.

Bên cạnh những ưu điểm mạnh kể trên, một nhược điểm còn tồn tại của Mật mã khóa bất đối xứng là chưa có kênh an toàn để chia sẻ khóa công khai, từ đó có khả năng bị tấn công bởi dạng tấn công người đứng giữa. Tấn công người đứng giữa là những kẻ tấn công lợi dụng việc phân phối khóa công khai, họ đứng ở giữa hai bên trao đổi để nhận các gói tin, sau đó thực hiện giải mã, thay đổi dữ liệu và mã hóa với khóa công khai rồi tiếp tục gửi đến nơi nhận và không bị phát hiện. 

d. Mật mã hàm băm

Băm là quá trình chuyển đổi đầu vào gồm các chữ cái và ký tự có kích thước không cố định để tạo đầu ra có kích thước cố định thường được gọi là giá trị băm, mã băm, hash hay digest. Quá trình này được thực hiện bằng cách sử dụng các công thức toán học như các hàm băm. 

Thông thường, các thuật toán băm được thiết kế như các hàm băm chỉ hoạt động theo một chiều. Nghĩa là nếu chúng ta có giá trị đầu ra và biết được thuật toán băm sử dụng là gì, chúng ta cũng không thể nào tính toán và suy ra được dữ liệu đầu vào là gì. Đây là tính chất vô cùng quan trọng của hàm băm, với việc tính toán để tìm dữ liệu đầu vào càng cao thì tính bảo mật của thuật toán băm càng cao. Các hàm băm khác nhau sẽ tạo ra các kết quả đầu ra có kích thước khác nhau, nhưng kích thước của các kết quả đầu ra có thể nhận được luôn cố định và không đổi. Ví dụ, thuật toán SHA-256 chỉ có thể tạo ra các kết quả đầu ra có kích thước 256 bit, trong khi thuật toán SHA-1 sẽ luôn tạo ra một kết quả đại diện có kích thước 160-bit. Thuật toán mật mã hàm băm thường được sử dụng như MD5, SHA-1, SHA-256, SHA-512,…

Mật mã hàm băm là hàm băm triển khai các kỹ thuật mã hóa. Mật mã hàm băm cần đáp ứng được các tiêu chí sau:

  • Chống xung đột: xung đột xảy ra khi chúng ta có các dữ liệu đầu vào, qua thuật toán băm và tạo ra một mã băm giống nhau. Hàm băm mật mã mang đặc tính chống xung đột khi thuật toán đảm bảo với hai dữ liệu đầu vào khác nhau sẽ luôn không thể tạo ra cùng một giá trị băm. 
  • Chống nghịch ảnh: không thể khôi phục dữ liệu đầu vào dựa vào dữ liệu đầu ra với bất cứ công cụ hỗ trợ nào như hai giải pháp mật mã khóa đối xứng và mật mã khóa bất đối xứng.   

Mật mã hàm băm mang thuộc tính toàn vẹn của bảo mật. Cụ thể hơn, với các dữ liệu đầu vào khác nhau, qua thuật toán băm sẽ tạo ra các kết quả đầu ra khác nhau và các kết quả này không có liên hệ gì với nhau để kẻ tấn công có thể tìm kiếm được thông tin trong đó. Ví dụ với bảng 1, có thể thấy rằng, với một thay đổi nhỏ như thay đổi chữ cái đầu tiên, thuật toán lại sinh ra một giá trị băm hoàn toàn khác với giá trị ban đầu. Kết hợp với tiêu chí chống xung đột của mật mã hàm băm, điều này khẳng định rằng, khi dữ liệu bị thay đổi như thế nào, chắc chắn kết quả băm sinh ra từ thuật toán mật mã băm sẽ khác nhau, nhờ vậy mà hệ thống sử dụng hàm băm luôn luôn phát hiện được sự thay đổi của dữ liệu.

Bảng 1. Ví dụ về dữ liệu đầu vào và đầu ra của thuật toán băm SHA-256

SHA-256
Đầu vào Đầu ra (256 bits)
Secure.tapit 7ea7776c4a48e43e3ee6107759c49148f5b3491c1f97f334ede6fd582817071f
secure.tapit ec6028e3b1e96405ea630e1ba67e2d678eff003adccb9dcdaf82cab7d9d08796

Một số trường hợp thường sử dụng thuật toán băm như: chữ ký số, mã xác thực thông điệp và các hình thức xác thực khác như xác thực mật khẩu. 

2. Gói thư viện mật mã của STM32

Gói thư viện mật mã STM32 được xây dựng và phát triển bởi đội ngũ kỹ thuật của hãng ST. Gói thư viện bao gồm hầu hết tất cả các thuật toán yêu cầu trong bảo mật như thuật toán mã hóa, thuật toán băm, thuật toán xác thực tin nhắn và thuật toán chữ ký số, nhằm cho phép các nhà phát triển với dòng ST đáp ứng được các yêu cầu bảo mật chương trình phần mềm như tính bí mật, tính toàn vẹn, tính xác thực. Gói thư viện này được thiết kế và biên dịch để chạy trên các vi điều khiển hãng ST với lõi ARM Cortex-M. 

Tại đề tài này, gói thư viện mật mã của hãng ST được sử dụng để hỗ trợ cho việc triển khai giải pháp bảo mật quá trình khởi động của thiết bị và giải pháp bảo mật cập nhật chương trình từ xa. 

Hình 4. Các thuật toán mà gói thư viện mật mã hỗ trợ

3. Bảo mật quá trình khởi động

a. Quá trình khởi động là gì?

Mỗi khi thiết bị được cấp nguồn, hoặc khi người dùng nhấn nút khởi động lại trên thiết bị hoặc trong một số trường hợp hoạt động của chương trình như khi chương trình ứng dụng phát hiện có phiên bản cập nhật mới thì vi điều khiển sẽ được yêu cầu thực hiện khởi động lại. Quá trình khởi động được diễn ra tại bộ nạp khởi động của thiết bị, thường bắt đầu ở vị trí bắt đầu của bộ nhớ Flash. Chương trình tại bộ nạp khởi động là một chương trình độc lập, tách biệt với chương trình ứng dụng thực thi các chức năng chính của thiết bị. 

Các bạn tham khảo bài viết Quá trình khởi động của vi điều khiển lõi ARM Cortex M để nắm rõ hơn về quá trình này.

Tại thiết bị Datalogger, mỗi khi vi điều khiển khởi động, chương trình bộ nạp khởi động sẽ được thực thi, thông qua các biến liên kết, bộ nạp khởi động sẽ lựa chọn thực thi Chương trình OTA hay Chương trình ứng dụng cho lần khởi động này. 

Hình 5. Vị trí chương trình Bộ nạp khởi động trong bộ nhớ Flash

Kẻ tấn công thường xâm nhập vào Chương trình bộ nạp khởi động nhằm truy cập vào dữ liệu chương trình. Qua đó, có thể sửa đổi dữ liệu, thay đổi chế độ khởi động, thay đổi địa chỉ khởi động để truy cập ứng dụng người dùng và kiểm soát thiết bị qua bộ nạp khởi động, cổng gỡ lỗi hoặc chương trình được kẻ tấn công đưa vào RAM. Rủi ro cao nhất có thể xảy ra là kẻ tấn công có thể toàn quyền truy cập nội dung của vi điều khiển trên thiết bị. 

b. Bảo mật quá trình khởi động là gì?

Nguy cơ tấn công vào bộ khởi động của thiết bị Datalogger nói chung và các thiết bị Nhúng/IoTs nói riêng là rất cao, nên việc bảo mật quá trình khởi động khỏi những kẻ tấn công là một mục tiêu cần được ưu tiên để triển khai thực hiện. Vai trò chính của chương trình bảo mật quá trình khởi động là xác minh chương trình ứng dụng trước khi khởi chạy. Theo tài liệu “Introduction to STM32 microcontrollers security” của hãng ST, bảo mật khởi động cần đảm bảo hai thuộc tính: tính toàn vẹn và tính xác thực của chương trình ứng dụng. Trong đó:

  • Tính toàn vẹn của chương trình ứng dụng được thực hiện bằng cách sử dụng hàm băm (hashing) chương trình ứng dụng (với thuật toán băm MD5, SHA1 hoặc SHA256) và so sánh kết quả băm với kết quả đúng được kỳ vọng. Bằng cách này, chương trình ứng dụng được kiểm tra và đưa ra kết quả .
  • Tính xác thực được thực hiện bằng cách mã hóa dữ liệu với một khóa được chia sẻ giữa chủ sở hữu chương trình và thiết bị. Khóa này được lưu trữ trong vùng nhớ được bảo vệ của thiết bị.

Bảo mật quá trình khởi động cần được đảm bảo một số tiêu chí sau:

  • Chương trình tại bộ nạp khởi động phải là điểm vào duy nhất của luồng hoạt động khi thiết bị được khởi động. 
  • Chương trình tại bộ nạp khởi động phải là chương trình bất biến, không thể đọc, xóa hay sửa đổi bởi bất cứ người dùng nào.
  • Phải có quyền truy cập vào dữ liệu quan trọng (giá trị băm hay chữ ký chương trình ứng dụng) tại các vùng nhớ khác trên bộ nhớ Flash. 

Dựa trên các tiêu chí về khởi động an toàn. Các bước triển khai bảo mật cho bộ nạp khởi động được thực hiện như sau:

  1. Xây dựng một bộ nạp khởi động với điểm vào duy nhất
  2. Bảo vệ cho chương trình ở bộ nạp khởi động bất biến, không thể đọc, ghi , xoá hay sửa đổi
  3. Tạo một quy trình xác thực cho bộ nạp khởi động bằng việc so sánh giá trị băm và chữ ký của chương trình ứng dụng trước khi thực thi.

Hình 6. Quá trình thực hiện Khởi động an toàn

4. Triển khai giải pháp bảo mật quá trình khởi động

a. Xây dựng một bộ nạp khởi động với Unique Entry Point

Với dòng vi điều khiển STM32 lõi ARM Cortex-M, bộ nạp khởi động có thể khởi động từ ba vùng nhớ khác nhau: bộ nhớ Flash người dùng, bộ nạp khởi động mặc định của hệ thống và bộ nhớ RAM. Bộ nạp khởi động được chúng tôi lựa chọn sử dụng và kết hợp giải pháp bảo mật là bộ nạp khởi động được lưu ở bộ nhớ Flash. Khác với bộ nạp khởi động có sẵn ở hệ thống, bộ nạp khởi động ở bộ nhớ Flash có thể được người dùng xây dựng và phát triển tùy vào nhu cầu người sử dụng. Mục tiêu của việc xây dựng bộ nạp khởi động với Unique Entry Point nhằm đảm bảo không có bất cứ ai có thể thay đổi chế độ khởi động, địa chỉ khởi động với mục đích kiểm soát thiết bị.  

Vi điều khiển STM32F303RCT6 mà thiết bị Datalogger đang sử dụng có thể làm được điều này bằng cách áp dụng bảo vệ đọc cấp độ 2 vào thiết bị. 

Hình 7. Thiết lập chọn đầu vào duy nhất sau khi thiết bị khởi động lại

b. Bảo vệ cho chương trình ở bộ nạp khởi động bất biến

Chương trình bộ nạp ngoài việc chứa các khóa phục vụ cho việc xác minh trong quá trình xác thực thì còn chứa các đoạn mã chương trình quan trọng có ảnh hưởng trực tiếp tới chương trình chính. Triển khai bảo vệ đọc cấp độ và và bảo vệ ghi ở vùng nhớ chứa bộ nạp khởi động làm cho chương trình bộ nạp khởi động trở nên bất biến- không thể ghi, đọc, sửa đổi. Vì vậy ngoài việc sử dụng bảo vệ đọc cấp 2 cho toàn thiết bị (trong đó có bộ nạp khởi động), vùng nhớ chứa bộ nạp khởi động phải được thiết lập bảo vệ ghi bộ nhớ Flash.

Bản chất của việc cấu hình chế độ bảo vệ đọc và bảo vệ ghi là việc thiết lập giá trị của Option bytes trong vi điều khiển. Cụ thể, Option bytes là tập hợp các byte được dùng để cấu hình các chế độ bảo vệ đọc/ghi (read/write protection), mức độ BOR, watchdog phần mềm/phần cứng và reset lại MCU nếu thiết bị ở chế độ Standby hoặc Stop mode. Chương trình thuật toán kết hợp bảo vệ đọc và bảo vệ ghi được đề cập tại mục 3.3.3. 

c. Tạo một quy trình xác thực chương trình ứng dụng tại bộ nạp khởi động

Tại bước này, chúng tôi sử dụng gói thư viện mã hóa STM32 (X-CUBE- CRYPTOLIB) bao gồm tất cả các thuật toán bảo mật chính để mã hóa, băm, xác thực tin nhắn và ký kỹ thuật số, cho phép các nhà phát triển đáp ứng các yêu cầu ứng dụng đối với bất kỳ sự kết hợp nào về tính toàn vẹn, bảo mật, nhận dạng/xác thực. Hầu hết các thuật toán được sử dụng trong thư viện đều được chứng nhận theo chương trình xác thực thuật toán mật mã của Hoa Kỳ (CAVP) [2]. 

Ngoài ra, chúng tôi sử dụng công cụ Host Tool [3] của hãng ST để thực hiện việc tính toán giá trị băm, tạo cặp khóa và kết hợp các loại dữ liệu để sinh ra một tệp chương trình ứng dụng hoàn chỉnh. Quá trình xác thực cho bộ nạp được chia thành hai quy trình: Quy trình tạo chương trình ứng dụng và Quy trình xác minh chương trình.

Tại giải pháp này, chúng tôi đề cập đến một thuật ngữ là Dữ liệu Meta. Dữ liệu Meta được đặt ngay trước vị trí của mỗi chương trình ứng dụng. Dữ liệu Meta mang các thông tin nhằm xác thực chương trình ứng dụng có đúng là chương trình mà người dùng mong muốn. Kích thước của dữ liệu Meta là 128 Byteyte, bao gồm các thành phần: Firmware magic là loại dữ liệu không đổi, được sử dụng để xác minh dữ liệu chương trình ứng dụng, Firmware size là kích thước của chương trình ứng dụng, Firmware version là phiên bản chương trình ứng dụng, Firmware tag lưu giá trị băm của chương trình ứng dụng, Reserved là vùng dữ liệu trống để người dùng có thể thêm các thông tin về chương trình, Meta tag chứa giá trị băm của một số dữ liệu Meta, Meta signature chứa chữ ký của dữ liệu Meta.

Hình 8. Cấu trúc thành phần của dữ liệu Meta 

  • Quy trình tạo chương trình ứng dụng (6 bước)

Hình 9. Quy trình tạo chương trình ứng dụng

  • Bước 1: Tạo khóa công khai và khóa riêng tư bằng công cụ Host Tool

Hình 10. Tạo khóa bằng công cụ Host tool

  • Bước 2: Lưu khóa công khai vào vùng nhớ chương trình khởi động an toàn
  • Bước 3: Thực hiện hàm băm với chương trình ứng dụng để tạo ra Giá trị băm của chương trình ứng dụng
  • Bước 4: Thực hiện băm với khối dữ liệu gồm Giá trị băm của chương trình ứng dụng với một phần dữ liệu Meta (magic, size, version).

Hình 11. Host tool tạo một số thành phần dữ liệu Meta data và Meta data hash

  • Bước 5: Thực hiện ký lên chuỗi giá trị băm dữ liệu Meta vừa nhận được bằng khóa bí mật, ta được chuỗi giá trị chữ ký dữ liệu Meta.

Hình 12. Host tool ký lên Meta data hash tạo dữ liệu Meta data signature

  • Bước 6: Lưu các chuỗi dữ liệu gồm giá trị băm của chương trình ứng dụng, giá trị băm của dữ liệu Meta và chữ ký dữ liệu Meta vào đầu chương trình ứng dụng trong bộ nhớ.

Hình 13. Dữ liệu Meta và chữ ký được lưu tại đầu chương trình ứng dụng

  • Quy trình xác minh chương trình ứng dụng

Hình 14. Quy trình xác minh chương trình ứng dụng tại khởi động an toàn

  • Bước 1: Tính giá trị băm của dữ liệu Meta bằng cách băm chuỗi dữ liệu Meta và chữ ký dữ liệu Meta.
  • Bước 2: Sử dụng khóa công khai để ký lên chuỗi giá trị băm của dữ liệu Meta để tạo ra chữ ký dữ liệu Meta. Thực hiện so sánh với chuỗi chữ ký dữ liệu Meta được lưu tại thành phần Meta signature trong quá trình tạo chương trình ứng dụng. Nếu so sánh thành công, đến bước 3. Nếu so sánh thất bại, đến bước 5.
  • Bước 3: Tính giá trị Fw digest bằng cách thực hiện băm chương trình ứng dụng. 
  • Bước 4: So sánh giá trị Fw digest vừa tính được với giá trị Fw digest đã được lưu trữ tại Meta data trong quá trình tạo chương trình. Nếu so sánh thành công, đến bước 5. Nếu so sánh thất bại, đến bước 6.
  • Bước 5: Thực thi chương trình ứng dụng đã xác thực thành công.
  • Bước 6: Thực hiện chương trình OTA để tải lại bản chương trình mới nhất vào vị trí chương trình hiện tại.

Trong bài viết này, mình tiếp tục hướng dẫn các bạn các bước triển khai của giải pháp bảo mật thứ 3 – Bảo mật Quá trình khởi động của thiết bị. Các bạn nhớ đón chờ Giải pháp thứ 4 – Giải pháp bảo mật cập nhật chương trình từ xa trong phần tiếp theo nhé!

Chúc các bạn thành công!

Nguyễn Thùy Nhiên – Đề tài Capstone Project tại TAPIT

Tìm hiểu thêm:
Fanpage TAPIT: TAPIT – AIoT Learning