Privacy Preserving Set-Based Estimation Using Partially Homomorphic Encryption
This repo cotains the code and data for our paper "Privacy Preserving Set-Based Estimation Using Partially Homomorphic Encryption"
We propose privacy-preserving set-based estimation protocols using partially homomorphic encryption. Set-based estimation constructs a set that guarantees the inclusion of the system state. We represent sets by zonotopes and constrained zonotopes as they can compactly represent high-dimensional sets and are closed under linear maps and Minkowski addition. By selectively encrypting some parameters of the used set representations, we are able to intersect sets in the encrypted domain, which enables guaranteed state estimation while ensuring the privacy goals. In particular, we show that our protocols achieve computational privacy using formal cryptographic definitions of computational indistinguishability. We demonstrate the efficiency of our approach by localizing a mobile quadcopter using custom ultra-wideband wireless devices.
We consider two problem setups:
1- Distributed sensor
The setup is as follows:
Aggregator collects encrypted strips from each sensor and intersects them with the previous estimated set to obtain a new corrected set.
2- Distributed sensor groups
@misc{alanwar2020privacy,
title={Privacy Preserving Set-Based Estimation Using Partially Homomorphic Encryption},
author={Amr Alanwar and Victor Gassmann and Xingkang He and Hazem Said and Henrik Sandberg and Karl Henrik Johansson and Matthias Althoff},
year={2020},
eprint={2010.11097},
archivePrefix={arXiv},
primaryClass={cs.CR}
}
## Building
1- install Visual Studio Code
2- add extention c/c++
3- clone this repo
4- open Visual Studio Code
5- file--> open folder (open the repo folder)
6- Make sure that your matlab path are correct in the makefile CXXFLAGS line
7- view --> terminal
8- sudo apt install libeigen3-dev
9- sudo apt-get install libboost-dev
10- sudo apt-get install libntl-dev
11- sudo apt-get install libgmp-dev
12- make all
(for debugging)
make debug
Running
File ZonoStrips.cpp for protocol 1 with zonotopes.
File ZonoEntities.cpp for protocol 2 with zonotopes.
File ConZonoStrips.cpp for protocol 1 with constrained zonotopes.
File ConZonoEntities.cpp for protocol 2 with constrained zonotopes.
copy the required file to main cpp then make all
1- This will run main.cpp
./HW
2- This will generate file under "MATLAB/CMatFiles/FILENAME"
3- run the correspoding file in matlab
4- This will generate file under "cache/FILENAME"
5- run
A-plot_ZS_cppAndMat
B-plot_ZE_cppAndMat