From c7c6739c5f36c401da2bc0e25d5eca0b2e2fecd9 Mon Sep 17 00:00:00 2001 From: Sefik Ilkin Serengil Date: Fri, 14 Mar 2025 16:42:30 +0000 Subject: [PATCH] Update README.md phe snippet prettier --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 844fda9..ed569ae 100644 --- a/README.md +++ b/README.md @@ -303,14 +303,14 @@ Even though vector embeddings are not reversible to original images, they still ```python from lightphe import LightPHE +# build an additively homomorphic cryptosystem (e.g. Paillier) on-prem +cs = LightPHE(algorithm_name = "Paillier", precision = 19) + # define plain vectors for source and target alpha = DeepFace.represent("img1.jpg")[0]["embedding"] beta = DeepFace.represent("target.jpg")[0]["embedding"] -# build an additively homomorphic cryptosystem (e.g. Paillier) on-prem -cs = LightPHE(algorithm_name = "Paillier", precision = 19) - -# encrypt source embedding on-prem +# encrypt source embedding on-prem - private key not required encrypted_alpha = cs.encrypt(alpha) # dot product of encrypted & plain embedding in cloud - private key not required @@ -321,6 +321,9 @@ calculated_similarity = cs.decrypt(encrypted_cosine_similarity)[0] # verification print("same person" if calculated_similarity >= 1 - threshold else "different persons") + +# proof of work +assert abs(calculated_similarity - sum(x * y for x, y in zip(alpha, beta))) < 1e-2 ``` In this scheme, we leverage the computational power of the cloud to compute encrypted cosine similarity. However, the cloud has no knowledge of the actual calculations it performs. That's the **magic** of homomorphic encryption! Only the secret key holder on the on-premises side can decrypt the encrypted cosine similarity and determine whether the pair represents the same person or different individuals. Check out [`LightPHE`](https://github.com/serengil/LightPHE) library to find out more about partially homomorphic encryption.