From 82615408886dc7ddb54349405fc8a190005549ee Mon Sep 17 00:00:00 2001 From: jbagnara Date: Fri, 14 Aug 2020 18:29:06 -0400 Subject: [PATCH 1/2] Change encryptor to accept passphrase for AES to generate pbkdf2 across constant salt string --- src/jetson/AES.py | 6 +++--- src/jetson/encryptor.py | 4 ++-- src/jetson/main.py | 6 +++++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/jetson/AES.py b/src/jetson/AES.py index 6ceba351..8dd24584 100644 --- a/src/jetson/AES.py +++ b/src/jetson/AES.py @@ -9,14 +9,14 @@ class Encryption(): - def __init__(self): + def __init__(self, passwd): ''' This class handles encryption to prevent identifiable information (facial data) from leaving the camera. It also generates a random key that will be used by authorized personnel to acces the data. ''' - self.salt = os.urandom(16) #Salt variable (Generates a random byte string) - self.key = PBKDF2("passphrase", self.salt).read(16) #Creates key using KDF scheme + self.salt = "Embedded2" + self.key = PBKDF2(passwd, self.salt).read(16) #Creates key using KDF scheme def encrypt(self, coordinates: List[Tuple[int]], diff --git a/src/jetson/encryptor.py b/src/jetson/encryptor.py index 9a7ec575..fe37e44c 100644 --- a/src/jetson/encryptor.py +++ b/src/jetson/encryptor.py @@ -3,11 +3,11 @@ from typing import List, Tuple class Encryptor(object): - def __init__(self): + def __init__(self, passwd): """ This class acts as a wrapper for the AES encryptor in AES.py and stores the encryption key for decrypting """ - self.encryptor = AESEncryptor() + self.encryptor = AESEncryptor(passwd) self.key = self.encryptor.key def encryptFace(self, coordinates: List[Tuple[int]], diff --git a/src/jetson/main.py b/src/jetson/main.py index 0e0dfde3..ca9f06ee 100644 --- a/src/jetson/main.py +++ b/src/jetson/main.py @@ -3,6 +3,7 @@ import datetime import warnings import json +import getpass from multiprocessing import Process, Queue, Value import cv2 @@ -122,7 +123,10 @@ def drawFrame(boxes, frame, fps): detector = FaceDetector(detector=detector, detector_type=detector_type, cuda=cuda and torch.cuda.is_available(), set_default_dev=True) classifier = Classifier(classifier_model, cuda) - encryptor = Encryptor() + + passwd = getpass.getpass("Enter password to use for image encryption:") + encryptor = Encryptor(passwd) + del passwd run_face_detection: bool = True while run_face_detection: # main video detection loop that will iterate until ESC key is entered From e3ae465b39ef301f84d639b9bfbc498086132ac3 Mon Sep 17 00:00:00 2001 From: jbagnara Date: Fri, 14 Aug 2020 19:32:23 -0400 Subject: [PATCH 2/2] Change encryptor init to match new constructor --- tests/test_main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_main.py b/tests/test_main.py index 9b77c581..88ffb31a 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -15,7 +15,7 @@ def setup(self): self.img = np.zeros((300,300,3),np.uint8) self.img[:] = (0, 0, 255) self.output_dir = "test_output" - self.encryptor = Encryptor() + self.encryptor = Encryptor("frog") self.boxes = [(10, 10, 20, 20)] def test_writeImg(self):