A collection of scripts to help me with my Attribute-Based Encryption (ABE) paper.
The code is split into different folders for each individual sub-application.
This folder contains the conceptual system implementation, split into client, database, and authority.
Benchmark results for encoding schemes, upload / download times, and space overhead can be found in the results
folder.
For the system to work, the key authority
, the database
and postgreSQL
must be running in the background for a client
to be able to upload and download files.
(Technically, the key authority
only has to be online for private key exchange, which is a desirable feature for key authorities
)
Each application can be run by executing go run .
in each relevant folder.
For PostgreSQL, the Docker image can be used (docker pull postgres
) with the following command:
docker run --name postgres-container -e POSTGRES_PASSWORD=pwd -p 5432:5432 -d postgres
This folder contains the code for benchmarking the large ABE libraries.
The benchmarks cover setup
, key generation
, AND encryption
, OR encryption
, AND decryption
, OR decryption
and ciphertext size
for the libraries Charm
, GoFE
, CIRCL
, Rabe
and OpenABE
.
Precomputed results can be found in the results
folder.
The rust library Rabe
and the go libraries GoFE
and CIRCL
should run without problems with the dependency versions defined in their respective configuration files.
The Charm
library does not work on the newest Python version, so downgrading to an older version (e.g. 3.7.5) is the most frictionless solution.
OpenABE
is quite difficult to set up, as the underlying math library has updated a considerable amount since OpenABE
has stopped being maintained. The easiest way of running OpenABE
is using a Docker image,
such as this one by Lorenzo
This folder contains functions for generating pseudodata of variable length that mimics real-world data and can be used for the scheme and system benchmarks. Pseudodata generated by these functions will look something like this:
{
"id": "18953729",
"name": {
"name_prefix": "",
"first_name": "Gladyce",
"last_name": "Eichmann"
},
"date_of_birth": "1946-02-04T15:29:57.197003575Z",
"address": "314 South Groveport, San Bernardino, Wisconsin 41828",
"phone": "6225754615",
"email": "kenyonhaag@cartwright.biz",
"insurance": "Humana",
"emergency_contact": {
"name": {
"name_prefix": "",
"first_name": "Wilhelmine",
"last_name": "Labadie"
},
"phone": "5073005250",
"email": "tiffanypowlowski@crooks.name",
"address": "990 Port Portville, Henderson, New Hampshire 92329"
},
"created_date": "1926-07-04T22:06:58.092104116Z",
"records": [
{
"patient_id": "18953729",
"provider_id": "859335",
"date": "2011-09-01T10:43:15.980530897Z",
"notes": "Id veniam excepturi dolorum voluptatem iste magni.",
"cancer_type": "Glioblastoma",
"tumor_location": "Et non dolorem nesciunt.",
"biomarkers": "Doloremque assumenda laboriosam debitis.",
"treatment_plan": "Quo aliquam nulla at rerum provident quo ab repudiandae fuga itaque facere modi eveniet id sit quidem quod et.",
"last_treatment_date": "1962-05-13T00:49:52.889744714Z"
}
]
}
This folder contains tests in three different fully homomorphic encryption libraries. There are no rigorous benchmarking functions, but time recording for basic arithmetic and gate functions over encrypted data.