Build a Trust Zone Protected IoT Device (Trust Raspberry PI)

English 简体中文 繁体中文 Tiếng Việt
Summary

The article details building a secure "Trust IoT" device on a Raspberry Pi 3B+ by leveraging ARM TrustZone and OP-TEE to establish a Trusted Execution Environment (TEE). This setup isolates critical functions, such as device UDID verification and PATT firmware attestation, along with sensitive data like encryption keys, within the Secure World to prevent reverse engineering and data leaks. A "Trust Client" on the device interacts with a cloud-based "Trust IoT Firmware Attestation Server," where the TEE handles secure communication, performs integrity checks, and encrypts results before transmission. This architecture effectively mitigates firmware attacks, replay attacks, and Man-in-the-Middle vulnerabilities by ensuring core security operations remain protected and verifiable.

Trong nghiên cứu điển hình này, tôi sẽ trình bày ứng dụng của công nghệ Arm Trust-Zone trong việc xây dựng một thiết bị "Trust IoT". Mục tiêu chính là bảo vệ dữ liệu quan trọng, bao gồm các khóa mã hóa cho các kênh liên lạc và chương trình chứng thực firmware IoT, chống lại các rò rỉ thông tin tiềm ẩn và các cuộc tấn công firmware.

Thiết kế dự án: Mục tiêu chính của dự án này là sử dụng Raspberry Pi làm nền tảng cơ bản để xây dựng một "thiết bị Trust IoT" an toàn, sử dụng công nghệ ARM Trust-Zone để bảo vệ dữ liệu quan trọng như khóa mã hóa cho các kênh liên lạc và chương trình chứng thực firmware IoT khỏi các rò rỉ thông tin tiềm ẩn và các cuộc tấn công firmware. Để đạt được điều này, chúng tôi sẽ phát triển một chương trình "Trust Client" và sử dụng thư viện OPTEE (Open Portable Trusted Execution Environment) để thiết lập Môi trường Thực thi Tin cậy (TEE) trên Raspberry Pi 3B+. Các chức năng Trust sẽ chạy trong TEE này để đảm bảo an ninh. Mã chứng thực firmware sẽ được tích hợp vào một chức năng trust chạy trong Trust-Zone, để xác minh tính toàn vẹn của firmware có thể thực thi trên thiết bị IoT (Raspberry Pi Model 3).

Hệ thống bao gồm hai thành phần chính:

  • Trust IoT Firmware Attestation Server: Chương trình máy chủ này hoạt động ở phía trung tâm điều khiển IoT (đám mây). Nó chịu trách nhiệm truyền các yêu cầu và tham số PATT (Physics-based Attestation) được mã hóa đến Trust-Client tương ứng. Sau đó, nó xác minh phản hồi từ Trust Client để xác định xem thiết bị IoT có bị xâm phạm hay không.
  • Trust IoT Firmware Attestation Client: Chương trình Trust-Client được triển khai trên thiết bị IoT (Raspberry Pi 3B+) và hoạt động trong cả Normal World và TrustZone Secure World. Mô-đun giao tiếp trong Normal World chuyển tiếp các tin nhắn được mã hóa từ Trust Firmware Attestation Server đến chức năng secure world. Sau đó, nó thực hiện kiểm tra PATT cho chương trình Firmware/Application mục tiêu dựa trên yêu cầu của máy chủ. Sau khi hoàn thành, Trust Client gửi kết quả được mã hóa trở lại máy chủ để xác minh.
version:     v_0.1.2
Copyright:   Copyright (c) 2021 LiuYuancheng
License:     MIT License  

Giới thiệu

Với sự tiến bộ của các kỹ thuật đảo ngược, tin tặc có thể dễ dàng trích xuất một phần mã nguồn từ các thiết bị IoT dựa trên Linux bằng cách mổ xẻ các tệp firmware loại ứng dụng. Ví dụ: hãy xem xét một kịch bản trong đó chúng ta sử dụng pyInstaller để biên dịch chương trình phân tích CV của chúng ta thành một tệp thực thi trên Raspbian OS và triển khai nó trên Raspberry Pi để tạo một camera phát hiện chuyển động. Nếu một tin tặc có được một camera như vậy, họ có thể sử dụng các công cụ như pyinstxtractor để giải nén firmware và sau đó sử dụng uncompyle6 để dịch ngược nó, do đó có được quyền truy cập vào một phần mã nguồn. Sau đó, được trang bị kiến thức này, họ có thể tạo ra các chương trình firmware độc hại để khởi động các cuộc tấn công. Ngay cả khi chúng ta kết hợp một chương trình chứng thực firmware trong các thiết bị IoT của chúng ta, tin tặc cũng có thể cố gắng dịch ngược nó để xác định các lỗ hổng và bỏ qua các biện pháp bảo mật.

Để giảm thiểu những rủi ro này, chúng tôi đề xuất di chuyển các chức năng quan trọng (chẳng hạn như logic chứng thực firmware) đến ARM Trust-Zone của Raspberry Pi. Bằng cách đó, chúng ta làm cho chương trình chứng thực không bị ảnh hưởng bởi các nỗ lực dịch ngược của tin tặc. Ngoài ra, chúng tôi sẽ lưu trữ an toàn Device identification UDID duy nhất của chip Arm và khóa mã hóa RSA tin nhắn chứng thực của chúng tôi trong Trust-Zone. Chương trình xác minh chip ARM hoạt động trong Trust-Zone sẽ truy xuất Device identification UDID của ARM và so sánh nó với các bản ghi đã lưu trữ. Nếu chúng không khớp, quá trình chứng thực sẽ thất bại. Vì vậy, ngay cả khi một tin tặc sao chép tất cả các thành phần lên một Raspberry Pi khác, họ vẫn sẽ không thể thực hiện một cuộc tấn công phát lại.

Hơn nữa, kết quả chứng thực sẽ được mã hóa trong môi trường trust bằng khóa mã hóa được lưu trữ trong Trust-Zone. Điều này đảm bảo rằng ngay cả khi tin tặc chặn liên lạc giữa máy chủ trung tâm IoT và thiết bị, họ sẽ không thể giải mã các tin nhắn và khởi động một cuộc tấn công Man-in-the-Middle (MITM).

Quy trình làm việc của trust client chung được hiển thị bên dưới:

Chương trình Trust Client trên Raspberry Pi bao gồm ba phần chính:

  • Normal World Program: Phân đoạn này hoạt động trong Normal World cấp ứng dụng, xử lý hầu hết các chức năng chương trình, tạo điều kiện truyền thông tin đến IoT Control Hub và chuyển dữ liệu đến chức năng trust trong Secure World.

  • Trust Storage Constants: Tất cả thông tin và tham số quan trọng, chẳng hạn như kết quả chứng thực firmware, Device identification UDID và khóa mã hóa RSA, sẽ được lưu trữ dưới dạng các hằng số hoặc chữ ký trong Secure World để sử dụng cho chức năng trust.

  • Trust Execution Functions: Thành phần này hoạt động trong Secure World, chứa mã chức năng an toàn thiết yếu, chẳng hạn như mã hóa RSA tin nhắn, mã xác minh UDID chip Arm và chức năng thuật toán chứng thực, để giảm thiểu rủi ro tấn công đảo ngược.

Kiến thức nền tảng

ARM Trust Zone

Trust-Zone là một công nghệ được phát triển bởi ARM Holdings cung cấp các tính năng bảo mật dựa trên phần cứng trên các bộ xử lý dựa trên ARM. Nó tạo ra hai môi trường thực thi riêng biệt: "Normal World" và "Secure World". Các môi trường này chạy đồng thời trên cùng một bộ xử lý, nhưng với các mức truy cập và đặc quyền khác nhau. Mỗi world hoạt động độc lập, với bộ tài nguyên, đặc quyền và môi trường thực thi riêng. Dưới đây là một cái nhìn tổng quan cơ bản về cách ARM Trust-Zone hoạt động:

  1. Normal World: Đây là nơi hệ điều hành thông thường (chẳng hạn như Android, Linux hoặc RTOS khác) chạy cùng với các ứng dụng người dùng. Nó hoạt động ở trạng thái không an toàn và có quyền truy cập vào các tài nguyên và bộ nhớ thông thường.

  2. Secure World: Đây là một môi trường riêng biệt, biệt lập chạy một hệ điều hành tin cậy, thường được gọi là "Secure Monitor" hoặc "Secure Kernel". Secure World có các đặc quyền cao hơn và quyền truy cập vào các tài nguyên an toàn như các chức năng mật mã, bộ nhớ an toàn và các cơ chế khởi động an toàn. Nó đảm bảo rằng các chức năng hệ thống quan trọng và dữ liệu nhạy cảm được bảo vệ khỏi truy cập hoặc giả mạo trái phép.

Công nghệ Trust-Zone cho phép khởi động an toàn, lưu trữ an toàn, các kênh liên lạc an toàn và môi trường thực thi an toàn cho các ứng dụng yêu cầu mức độ bảo mật cao, chẳng hạn như hệ thống thanh toán di động, quản lý quyền kỹ thuật số (DRM) và các giải pháp bảo mật doanh nghiệp. Nó cung cấp một nền tảng để xây dựng các môi trường thực thi tin cậy (TEE) nơi các hoạt động nhạy cảm có thể được thực hiện với mức độ đảm bảo cao chống lại các cuộc tấn công.

Tham khảo: https://www.arm.com/technologies/trustzone-for-cortex-m#:~:text=Arm%20TrustZone%20technology%20is%20used,to%20as%20the%20secure%20monitor

 

Trust Execution Environment và OP-TEE

Trusted Execution Environment (TEE): Trusted Execution Environment (TEE) là một khu vực an toàn trong môi trường Trust-Zone nơi các ứng dụng tin cậy có thể chạy với mức độ bảo mật và bảo mật cao hơn. Trust-Zone chia bộ xử lý ARM thành hai world riêng biệt: Normal World và Secure World. TEE là một môi trường thực thi an toàn để chạy các chức năng bảo mật quan trọng và các ứng dụng tin cậy trong Secure World. Nó là một môi trường hoạt động tin cậy cung cấp sự cô lập và bảo vệ cho các hoạt động và ứng dụng nhạy cảm. TEE cung cấp một môi trường thời gian chạy an toàn nơi các ứng dụng tin cậy, chẳng hạn như các giải pháp thanh toán an toàn, hệ thống quản lý quyền kỹ thuật số (DRM) và các cơ chế xác thực an toàn, có thể chạy với tính bảo mật, tính toàn vẹn và độ tin cậy.

Về bản chất, Trust-Zone cung cấp hỗ trợ phần cứng cần thiết để tạo ra một môi trường thực thi an toàn, trong khi TEE sử dụng môi trường này để chạy các ứng dụng tin cậy và thực hiện các chức năng bảo mật quan trọng. TEE tận dụng các tính năng bảo mật được cung cấp bởi Trust-Zone, chẳng hạn như cô lập phần cứng, khởi động an toàn, lưu trữ an toàn và các kênh liên lạc an toàn, để đảm bảo tính bảo mật và tính toàn vẹn của dữ liệu và hoạt động nhạy cảm.

OP-TEE là một Trusted Execution Environment (TEE) được thiết kế như một người bạn đồng hành với một kernel Linux không an toàn chạy trên Arm; Lõi Cortex-A sử dụng công nghệ Trust-Zone. OP-TEE triển khai TEE Internal Core API v1.1.x là API được hiển thị cho Trusted Applications và TEE Client API v1.0, là API mô tả cách giao tiếp với TEE. Các API này được xác định trong các thông số kỹ thuật của Global Platform API.

Tham khảo: https://www.trustedfirmware.org/projects/op-tee/

 

Cách Trust-Zone Đảm bảo An ninh

Việc truy cập dữ liệu được lưu trữ trong bộ nhớ Trust-Zone là rất khó khăn đối với tin tặc do các cơ chế bảo mật mạnh mẽ được áp dụng. Trust-Zone cung cấp sự cô lập được thực thi bằng phần cứng giữa Normal World và Secure World, đảm bảo rằng dữ liệu được lưu trữ trong Secure World được bảo vệ khỏi truy cập trái phép.

Dưới đây là một số lý do tại sao tin tặc khó truy cập dữ liệu được lưu trong bộ nhớ Trust-Zone:

  1. Hardware Isolation: Trust-Zone sử dụng các cơ chế cô lập được thực thi bằng phần cứng để tách Normal World và Secure World. Điều này ngăn mã chạy trong Normal World truy cập trực tiếp hoặc giả mạo dữ liệu được lưu trữ trong Secure World.

  2. Secure Boot: Trust-Zone hỗ trợ các cơ chế khởi động an toàn, đảm bảo rằng chỉ mã được xác thực và tin cậy mới có thể được tải và thực thi trong Secure World. Điều này ngăn mã trái phép truy cập dữ liệu được lưu trữ trong bộ nhớ Trust-Zone.

  3. Secure Storage: Dữ liệu được lưu trữ trong bộ nhớ Trust-Zone được mã hóa và bảo vệ bởi các thuật toán mật mã. Ngay cả khi một tin tặc cố gắng truy cập vào bộ nhớ vật lý, họ vẫn cần phải giải mã dữ liệu, điều này thường khó khăn nếu không có các khóa mật mã thích hợp.

  4. Secure Monitor: Secure Monitor, một phần firmware tin cậy chịu trách nhiệm quản lý các chuyển đổi giữa Normal World và Secure World, giúp đảm bảo tính toàn vẹn và bảo mật của dữ liệu được lưu trữ trong bộ nhớ Trust-Zone.

Mặc dù về mặt lý thuyết, những kẻ tấn công tinh vi có thể khai thác các lỗ hổng trong Trust-Zone hoặc firmware Secure Monitor, nhưng làm như vậy sẽ đòi hỏi chuyên môn, tài nguyên và quyền truy cập vào thiết bị chuyên dụng đáng kể. Ngoài ra, các nhà sản xuất liên tục làm việc để cải thiện tính bảo mật của Trust-Zone và giải quyết mọi lỗ hổng được phát hiện thông qua các bản cập nhật và bản vá phần mềm. Nhìn chung, Trust-Zone cung cấp mức độ bảo mật cao cho dữ liệu được lưu trữ trong Secure World, khiến tin tặc cực kỳ khó truy cập.

Thiết kế dự án

Chương trình chứng thực firmware trust IoT tuân theo sơ đồ quy trình làm việc được nêu dưới đây, mà chúng ta sẽ chia thành ba bước riêng biệt để minh họa một vòng chứng thực firmware duy nhất:

  1. Device Verification and Server Connection: Trong bước ban đầu này, chương trình xác minh thiết bị và thiết lập kết nối với máy chủ. Nó liên quan đến việc xác thực tính toàn vẹn của máy chủ và đảm bảo sự tin tưởng lẫn nhau giữa thiết bị và máy chủ.

  2. Verification Result Upload and Firmware Attestation Parameters Fetch: Sau khi xác minh thiết bị, chương trình tải kết quả xác minh lên máy chủ và truy xuất các tham số chứng thực firmware. Bước này rất quan trọng để có được dữ liệu và hướng dẫn cần thiết để tiến hành quá trình chứng thực firmware.

  3. Run PATT Firmware Attestation and Upload the Result: Cuối cùng, chương trình thực thi thuật toán chứng thực firmware bằng cách sử dụng các tham số đã tìm nạp. Sau đó, nó tải kết quả chứng thực lên máy chủ để xác minh. Bước này đảm bảo tính toàn vẹn của firmware và tăng cường bảo mật tổng thể của thiết bị.

Device Verification and Server Connection

Trong quá trình khởi tạo chương trình Trust Client, mô-đun chứng thực firmware trust IoT tải tệp cấu hình IoT và đăng ký thông tin IoT với Trust Server. Điều này cho phép máy chủ chuẩn bị khóa và tham số chứng thực tương ứng. Sau đó, chương trình đọc Device identification UDID của chip ARM của Raspberry Pi và khởi tạo một phiên OPTEE để truyền UDID đến môi trường trust. Nếu UDID khớp với dữ liệu đã lưu trước trong Trust Zone Storage, quá trình xác minh thiết bị thành công, mở khóa các chức năng chứng thực firmware PATT cho bước tiếp theo. Ngược lại, nếu không có sự trùng khớp, cho thấy một nỗ lực nhân bản tiềm năng (trong đó một tin tặc sao chép nội dung từ một IoT hợp pháp sang một Raspberry Pi mới), chức năng trust coi IoT là trái phép. Do đó, nó từ chối mọi yêu cầu kết nối OPTEE tiếp theo từ Normal World. Quy trình làm việc của quá trình xác minh thiết bị được hiển thị bên dưới:

Trong trường hợp máy chủ không nhận được tin nhắn xác thực thiết bị được mã hóa trong khoảng thời gian chờ được chỉ định sau khi đăng ký IoT, nó sẽ gắn cờ thiết bị IoT là có rủi ro cao hoặc bị xâm phạm.

 

Verification Result Upload and Firmware Attestation Parameters Fetch

Trust Client sẽ thực hiện 3 Bước để tải kết quả xác minh chip lên máy chủ và tìm nạp các tham số chứng thực firmware để chạy thuật toán PATT. Quá trình này sẽ tuân theo quy trình làm việc bên dưới:

 

Step1: Sau khi hoàn thành xác minh ARM chip UDID, chức năng Trust-Zone tạo một số ngẫu nhiên 256-bit và xây dựng một chuỗi xác minh kết hợp các yếu tố khác nhau: message index, message element sequence type, verification result checksum, firmware information, và chính random number#1. Sau đó, chức năng Trust mã hóa chuỗi này bằng khóa RSA 2048-bit được lưu trữ trong bộ nhớ trust. Dữ liệu được mã hóa kết quả sau đó được truyền đến phía máy chủ bằng cách sử dụng mô-đun giao tiếp hoạt động trong Normal World của Raspberry Pi.

Step2: Sau khi nhận được dữ liệu được mã hóa, máy chủ giải mã tin nhắn để trích xuất thông tin firmware IoT. Sau đó, nó trích xuất random number #1 từ chức năng trust IoT, nối thêm một số ngẫu nhiên 256-bit khác ( random number #2 ) và bao gồm tất cả các tham số thực thi PATT (chẳng hạn như seed bắt đầu địa chỉ bộ nhớ ngẫu nhiên) để tạo chuỗi yêu cầu chứng thực firmware. Chuỗi yêu cầu này cũng được mã hóa bằng RSA2048 trước khi được gửi đến Trust Client.

Step3: Sau khi nhận được chứng thực firmware được mã hóa từ mô-đun giao tiếp của Trust Client, môi trường Trust giải mã tin nhắn. Sau đó, chức năng Trust xác minh xem tin nhắn có chứa số ngẫu nhiên (random number #1) mà nó đã tạo hay không, do đó xác thực danh tính của máy chủ và ngăn chặn các cuộc tấn công phát lại tiềm năng của tin tặc cố gắng khai thác máy chủ lỗi thời.

Running PATT Firmware Attestation and Uploading the Result

Khi phía máy chủ đã được xác minh là chính xác và đáng tin cậy, chức năng Trust tiến hành thực thi thuật toán chứng thực firmware PATT bằng cách sử dụng các tham số được cung cấp. Sau đó, nó gửi địa chỉ bộ nhớ đến Trust Client, nơi truy xuất dữ liệu từ bộ nhớ và chuyển tiếp nó đến chức năng Trust.

Sau khi hoàn thành vòng lặp PATT, kết quả cuối cùng được kết hợp với Random Number #2 (được tạo bởi máy chủ trust trong phần Firmware Attestation Parameters Fetch) để tạo chuỗi kết quả. Chức năng Trust mã hóa tin nhắn này bằng RSA-2048 và mô-đun giao tiếp của trust client sẽ gửi nó đến máy chủ trust.

Ở phía máy chủ, Firmware được thực thi trong môi trường mô phỏng IoT bằng cách sử dụng các tham số PATT tương tự để có được giá trị PATT. Sau khi nhận và giải mã tin nhắn kết quả từ Trust Client, máy chủ xác minh rằng Random Number #2 khớp với số được tạo trong phần trước. Sau đó, nó so sánh giá trị PATT thu được với giá trị được tính toán cục bộ. Nếu cả hai giá trị khớp nhau, thiết bị IoT được xác định là "thiết bị Trust"; nếu không, nó được đánh dấu là trái phép với rủi ro bảo mật cao.

Quy trình làm việc được hiển thị bên dưới:

Nhận xét: Các số ngẫu nhiên, được gắn nhãn là Random Number #1Random Number #2, đóng vai trò là mật khẩu một lần (OTP) để thiết lập sự tin tưởng lẫn nhau giữa thiết bị IoT và máy chủ. Các OTP này được sử dụng để xác thực cả hai bên: đảm bảo rằng thiết bị IoT có thể tin tưởng máy chủ và ngược lại, máy chủ có thể tin tưởng thiết bị IoT. Thư viện tạo số ngẫu nhiên được sử dụng trong dự án là: Linear congruential random generator 

Thiết lập chương trình

Nhu cầu phần cứng

Raspberry PI 3B+ và cảm biến IoT:

Các bước cấu hình chi tiết

Thực hiện theo các bước sau để xây dựng một thiết bị Trust IoT:

Bước 1: Chuẩn bị Raspberry PI (mode 3) đã cài đặt hệ thống Raspbian

Dev Env: Windows 10/7

  1. Cắm thẻ SD 16GB vào máy Windows và sử dụng “SD Memory card formatter” để định dạng thẻ SD. Tải xuống trình định dạng thẻ nhớ SD từ https://www.sdcard.org/downloads/formatter/ và làm theo tất cả các cài đặt mặc định.

  2. Tải xuống Raspberry PI Raspbian OS (32-bit) từ https://www.raspberrypi.org/downloads/raspbian/.

  3. Tải xuống FlashFlawless từ https://www.balena.io/etcher/ và flash image Raspbian vào thẻ SD, lắp thẻ SD vào Raspberry PI để xác nhận lại xem nó có hoạt động bình thường không.

Bước 2: Xây dựng Raspbian với Trust Environment được kích hoạt

Dev Env: Ubuntu 20.04

2.1 Cài đặt các gói cần thiết để bắt đầu tạo OPTEE:

$ sudo apt-get install android-tools-adb android-tools-fastboot autoconf \
     automake bc bison build-essential cscope curl device-tree-compiler \
     expect flex ftp-upload gdisk iasl libattr1-dev libc6:i386 libcap-dev \
     libfdt-dev libftdi-dev libglib2.0-dev libhidapi-dev libncurses5-dev \
     libpixman-1-dev libssl-dev libstdc++6:i386 libtool libz1:i386 make \
     mtools netcat python-crypto python-serial python-wand unzip uuid-dev \
     xdg-utils xterm xz-utils zlib1g-dev

2.2 Tải xuống và cài đặt Cross Build Toolchain:

  • Cả Lib AARCH64 & AARCH32 đều cần thiết, và phiên bản AARCH32 phải > 6.0 từ trang web chính thức của linaro: https://releases.linaro.org/components/toolchain/binaries/

  • Cài đặt chuỗi công cụ cross build bên dưới: arm-linux-gnueabihfaarch64-linux-gnu và đặt đường dẫn trong tệp cấu hình cmake config.mk:

2.3 Tải xuống dự án Raspbian có hỗ trợ OPTEE và làm theo các bước trong liên kết: https://github.com/benhaz1024/raspbian-tee và thiết lập tệp cấu hình (Config.mk) như sau:

export CROSS_COMPILE := /path/to/your/linaro/aarch32/bin/arm-linux-gnueabihf-
export CROSS_COMPILE_AARCH64 := /path/to/your/linaro/aarch64/bin/aarch64-linux-gnu-

2.4 Cài đặt gói công cụ xây dựng:

$ sudo apt-install u-boot-tools

2.5 Xây dựng và kiểm tra kết quả:

$ ./prepare-env.sh # if your had download all packages, skip this.
$ make patch # this will patch linux kernel & ATF, if you have done before, skip this.
$ make
Bước 3: Tạo một OPTEE Trust Application mới và Kiểm tra

3.1 Sao chép tệp OPTEE đã định cấu hình vào thư mục khởi động Raspberry PI Raspbian OS

$ cp ./out/boot/* /media/user/boot
$ sudo cp -r ./out/rootfs/* /media/user/rootfs

3.2 Tải xuống ví dụ OPTEE simple trust App từ https://github.com/linaro-swg/hello_world và đặt thư mục trong thư mục raspbian-optee dev/teepriv #. Xác định các toolchain và biến môi trường với tất cả các cài đặt 32-bit và make:

$ export TEEC_EXPORT=$PWD/../optee_client/out/export
$ export HOST_CROSS_COMPILE=$[The arm-linux-gnueabihf position in <2.2>]/aarch32/bin/arm-linux-gnueabihf-
$ export TA_CROSS_COMPILE=$[The arm-linux-gnueabihf position in <2.2>/aarch32/bin/arm-linux-gnueabihf-
$ export TA_DEV_KIT_DIR=$PWD/../optee_os/out/arm/export-ta_arm32
$ make

3.3 Sao chép tệp vào hệ thống và kiểm tra: 1. Sao chép chương trình normal world host\hello_world vào thư mục \media\user\rootfs\bin và sao chép tệp secure world ta\7aaaf200-2450-11e4-abe2-0002a5d5c51b.ta vào thư mục \media\user\rootfs\lib\optee_armtz\. Cấu trúc hệ thống tệp của thư mục khởi động Raspbian OS sẽ như sau:

3.4 Lắp thẻ SD vào Raspberry PI và khởi động. Khi bạn đăng nhập, hãy kiểm tra xem chức năng tăng số có chạy trong môi trường trust hay không:

$ ls /dev/tee*
/dev/tee0 /dev/teepriv0 # this prove tee driver & optee-os works.
$ sudo tee-supplicant &
$ sudo optee_example_hello_world

Nếu trong normal word, trust function gửi lại dữ liệu như bên dưới, điều đó có nghĩa là trust environment hoạt động bình thường, OPTEE đã được thiết lập thành công:

Bây giờ chúng ta có thể thiết lập trust client chứng thực firmware của mình trên Raspberry PI.

Thực thi chương trình

Xây dựng Trust Client

Bước 1: Thiết lập hằng số xác minh thiết bị

Chúng ta có thể sửa đổi ví dụ OPTEE trust từ https://github.com/linaro-swg/hello_world để xây dựng trust client của mình. Trước khi chúng ta biên dịch trust function của mình, chúng ta cần lấy UDIP của chip Arm của Raspberry PI, chạy chương trình python đơn giản bên dưới để lấy giá trị UDID:

import subprocess
import uuid

def get_raspberry_pi_uuid():
    # Execute command to get CPU serial number
    serial = subprocess.check_output(["cat", "/proc/cpuinfo"]).decode().split("\n")[1].split(":")[1].strip()
    
    # Generate UUID based on serial number
    mac = ':'.join(['{:02x}'.format((uuid.getnode() >> elements) & 0xff) for elements in range(0,2*6,2)][::-1])
    mac = mac.replace("ff", "00")
    return mac + "-" + serial

if __name__ == "__main__":
    raspberry_pi_uuid = get_raspberry_pi_uuid()
    print("Raspberry Pi UDID:", raspberry_pi_uuid)

Đảm bảo bạn có các quyền cần thiết để truy cập /proc/cpuinfo khi chạy script này. Ngoài ra, lưu ý rằng số serial CPU có thể khác nhau tùy thuộc vào model Raspberry Pi và các bản sửa đổi phần cứng.

Sau đó, chúng ta hard code Arm Chip UDID làm hằng số trong tệp mã nguồn của trust client main.c Sau khi thay đổi host main.c và chương trình ta\hello_world_ta.c Chúng ta cần đặt UUID của trust function trong tệp để ta không xung đột với ta đã tồn tại, đặt UUID trong ta\Android.mkta\Makefile

LOCAL_PATH := $(call my-dir)

local_module_UUID := 7aaaf200-2450-11e4-abe2-0002a5d5c51b.ta
include $(BUILD_OPTEE_MK)

Để tạo UUID, bạn có thể sử dụng công cụ trực tuyến này: https://www.uuidgenerator.net/

Bước 2: Xây dựng Dự án và sao chép Trust Client vào thẻ SD Raspberry PI

Xác định các toolchain và biến môi trường với tất cả các cài đặt 32bit và biên dịch trust application:

export TEEC_EXPORT=$PWD/../optee_client/out/export
export HOST_CROSS_COMPILE=$[The arm-linux-gnueabihf position in <2.2> ]/aarch32/bin/arm-linux-gnueabihf-
export TA_CROSS_COMPILE=$[The arm-linux-gnueabihf position in <2.2> /aarch32/bin/arm-linux-gnueabihf-
export TA_DEV_KIT_DIR=$PWD/../optee_os/out/arm/export-ta_arm32
make

Sao chép tệp thực thi normal world vào thư mục bin của Raspbian OS, từ host\hello_world đến thư mục \media\user\rootfs\bin

Sao chép tệp nhị phân trust function ta\ 7aaaf200-2450-11e4-abe2-0002a5d5c51b.ta đến \media\user\rootfs\lib\optee_armtz

Khởi động Raspberry PI và kiểm tra kết quả:

Bước 3: Chạy Trust Client Normal World Module

Đặt tệp Config và chạy trình bao bọc python trust client normal world:

python3 IOT_Att.py

Chạy Trust Server

Ở phía máy chủ, chạy chương trình attestation trust server

python3 firmwTAServer.py

Tham khảo

Tính năng kỹ thuật chính và Tham khảo của Dự án

Như đã giới thiệu trong phần trước, dự án bao gồm một số tính năng kỹ thuật chính được nêu dưới đây:

Các tính năng kỹ thuật chính

  • Triển khai Open Portable Trusted Execution Environment (OPTEE) trên Raspberry Pi Model 3, thiết lập chức năng Trust Zone trong môi trường Raspbian.

  • Thiết lập giao tiếp client-server an toàn sử dụng TCP với mã hóa/giải mã RSA-2048 được hỗ trợ bởi Trust_Application.

  • Tính toán độc lập giá trị PATT (Platform Attestation Token) của tệp IoT trong cả Trust Zone của client và thành phần máy chủ, sau đó so sánh kết quả.

  • Truy xuất thông tin thực thi của chương trình đang chạy trong Raspbian, bao gồm các file descriptor và offset bộ nhớ liên quan.

Tài liệu hoặc dự án tham khảo liên quan mà chúng tôi đã theo dõi/sử dụng/học hỏi để hoàn thành dự án:

Cảm ơn bạn đã đọc, nếu bạn có bất kỳ câu hỏi và đề xuất nào, vui lòng nhắn tin cho tôi. Rất cảm ơn nếu bạn có thể đưa ra một số nhận xét và chia sẻ bất kỳ lời khuyên cải tiến nào để chúng tôi có thể làm cho công việc của mình tốt hơn ~


Last edit by LiuYuancheng([email protected]) at 30/10/2025, if you have any problem please free to message me.

  RELATED

No related programming articles found. Browse all programming tutorials and articles.

  COMMENTS

0

No comment for this article.