Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Georeactor/encrypted-geofence
testing out homomorphic encryption
https://github.com/Georeactor/encrypted-geofence
encryption geofences homomorphic-encryption paillier
Last synced: about 2 months ago
JSON representation
testing out homomorphic encryption
- Host: GitHub
- URL: https://github.com/Georeactor/encrypted-geofence
- Owner: Georeactor
- Created: 2016-07-17T00:56:47.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2019-04-10T18:37:23.000Z (over 5 years ago)
- Last Synced: 2024-08-04T00:04:04.053Z (5 months ago)
- Topics: encryption, geofences, homomorphic-encryption, paillier
- Language: JavaScript
- Size: 42 KB
- Stars: 36
- Watchers: 9
- Forks: 6
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-he - crypto-geofence - Geo-fencing demo application based on Paillier scheme. (Applications)
README
# crypto-geofence
Is it possible for me to check if I'm inside a geofence, without revealing my location to
the server, and without the server giving me the true geofence?Video at DEF-CON Crypto & Privacy Village 2018: https://www.youtube.com/watch?v=ySl2ywGiFkw
## What is homomorphic encryption?
Homomorphic encryption is a new technique where you can perform arithmetic operations on
encrypted numbers. It's possible with a few different algorithms, including the factoring-based one
used here (Paillier). In the future it might be better to use a quantum-resistent algorithm
based on lattice cryptography.If you send the encrypted numbers and a public key, another computer can perform arithmetic on
the number and scalar values without seeing the actual values.## Applying it to Geofences
Encrypted coordinates and the public key are POSTed to the server
Originally I was hoping to find if you were in the box by testing this:
```python
latitude_offset = (north - latitude) * (south-latitude)
```The number would be negative for ```south < latitude < north```, and positive in any other
condition. It would also be difficult to find north and south by factoring the result.
Unfortunately, multiplying encrypting numbers is not possible in the Paillier
cryptosystem. I got this funny error:Anyway, you can obfuscate offsets by multiplying by a random scalar instead:
```python
north_offset = (north - latitude) * random()
south_offset = (south - latitude) * random()
```One of the offsets should be positive and the other negative, but the random factor makes
it difficult to figure out the true offset to the geofence. Combined with rate-limiting,
this could make your fence exta-secret.### Going forward
I would like to:
- calculate geofences for more complex shapes, by breaking them into rectangles or triangles
- calculate distance, using a different cryptosystem which allows multiplication## Libraries used
Using Brian Thorne's homomorphicjs on the client,
and Australia NICTA's Python-Paillier
on the server## License
MIT license