This repository provides a proof-of-concept implementation of Blindfold. Blindfold protects sensitive user application data from the untrusted operating system, mainly leveraging a trusted software called Guardian running at a higher privilege level.
- Raspberry Pi 4 Model B with 8GB DRAM
- TF card
- Raspberry Pi Imager
- This github repo
-
Install Raspberry Pi OS on the TF card with Raspberry Pi Imager.
We tested the following steps on Raspberry Pi 4 (RPI4) using Raspberry Pi OS Lite (64-bit) released on 2024-11-19.
-
Set up user name and password. We assume the user name is "usr" in the following steps.
To use a different user name, please change line 29 of device/rpi/flash.sh of this repo accordingly.
-
Install Rust.
-
Clone this repo to local and enter the Blindfold folder.
-
Build Blindfold and flash the TF card.
sudo apt install make gcc flex bison gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libssl-dev -y cd ./device/rpi ./build.sh sudo ./flash.sh -
Boot up RPI4 with the TF card, connect it to ethernet, and build benchmark. Do not run this command with root privilege.
./run_me.sh
Evaluation on native Linux:
- Run LMbench and print the aggregative results.
./batch_test_lmbench.sh nat ./print_lmbench_result.py nat
- Run LTP system call testcases.
./test_syscalls.py -n
- Evaluate app latency, e.g., run OTP for 100 times.
./test_app.py 100 ./otp
- Run other application, e.g., test fork/clone/futex/signal.
./test
- Nano benchmark of mode switching overhead.
Before measurement, please uncomment line 48~56 of linux/arch/arm64/kernel/entry.S, rebuild and reflash the linux kernel. Please uncomment this code only for nano benchmark as it is unsafe. After reflash and reboot, run the following command:
./nano -n
Evaluation with Blindfold enabled:
-
Enable Blindfold. This command has to be run with root privilege.
sudo ./run_me.sh
-
Run LMbench and print the aggregative results.
2.1 For non-sensitive configuration:
./batch_test_lmbench.sh non ./print_lmbench_result.py non
2.2 For sensitive configuration:
./batch_test_lmbench.sh sen ./print_lmbench_result.py sen
-
Run LTP system call testcases.
./test_syscalls.py -a
-
Evaluate app latency, e.g., run OTP for 100 times.
4.1 For non-sensitive configuration:
./test_app.py 100 ./otp
4.2 For sensitive configuration:
./test_app.py 100 ./adapted_otp
-
Run other application, e.g., test fork/clone/futex/signal.
5.1 For non-sensitive configuration:
./test
5.2 For sensitive configuration:
./adapted_test
GPL-2.0 License