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:

Subject Pronouns

Aggregator collects encrypted strips from each sensor and intersects them with the previous estimated set to obtain a new corrected set. 



Subject Pronouns

2- Distributed sensor groups



Subject Pronouns

Each sensor group manager collects a set of strips from its sensors and intersects them with previous sets. Then share with the aggregator an encrypted set. The aggregator collects encrypted sets from each sensor group and intersects them with the previous estimated set to obtain a new corrected set. 



Subject Pronouns

Please refer to the paper for more technical details. Our Bitex is as follows
@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