/Secure-Face-Recognition-System-based-on-Fully-Homomorphic-Encryption

基于全同态加密的安全人脸识别系统/Secure Face Recognition System based on Fully Homomorphic Encryption

Primary LanguagePython

基于全同态加密的安全人脸识别系统

本人个人主页:https://devillost.gitee.io/

指导老师:陈智罡(Zhigang Chen), 个人网站:https://zhigang-chen.github.io/

本项目获得第十二届全国大学生信息安全竞赛国家级二等奖。

特点说明:

随着人脸识别技术广泛使用,人脸数据安全问题的严重性也日益增长。

我们采用了全同态加密的方法来保证数据的安全性。

全同态加密:全同态加密支持加密域中密文的计算。那么全同态加密的提出就能够很好的解决计算隐私的问题。我们都知道人脸识别或者说机器学习甚至是整个人工智能,归根到底都是统计数学方法,那么就避不开计算,如此一来,我们就可以先用公钥将数据进行加密,加密后的密文进行数据传输和数值计算,计算结果还是为密文,用户收到密文结果后用私钥进行解密。这样就很好的保证了数据的隐私安全性。

项目难点:

1、Python和C++的跨平台开发,密码学的全同态加密算法采用C++语言编写,人工智能中的人脸识别算法采用Python编写;

2、Python和C++的科学计算数据精度匹配问题,这将直接导致密文模型的识别阈值与原明文模型的识别阈值不同;

3、谷歌的Facenet人脸识别模型训练强度计算需求太大,跑一个完整轮次的训练需要十小时,而整个项目需要1000轮次;

4、谷歌的Facenet人脸识别模型中采用的识别方法是高维欧氏空间向量距离计算,需要用到开根号的计算方法,而全同态加密只支持加密域中的加法和乘法计算,

我们的解决方法是采用数学中的逼近论方法,采用信息论中的汉明距离来对高维欧氏空间向量距离进行近似计算,效果显著,既实现了密文的人脸识别模型,又保证了较高的识别精度。

方法说明:本项目提出了一种基于全同态加密的安全人脸识别协议。分为两个操作:登记操作和比对操作。

登记操作:用户本地生成密钥对,使用公钥将人脸特征向量(用户选中人脸照片后系统会先计算出512维人脸特征向量)加密后,将密文人脸特征向量和用户身份证明(UID)上传至服务器数据库。私钥保留在用户本地。

比对操作:用户使用公钥把要进行比对的人脸特征向量加密后连同用户身份证明(UID)上传至服务器。服务器根据UID在数据库中进行检索,将检索到的用户之前登记的密文人脸特征向量以及新上传的密文人脸特征向量进行密文下的同态人脸识别计算。将计算结果(仍旧是密文)回传给用户,用户收到密文计算结果后使用私钥解密,得到人脸识别结果(明文)。

项目说明:本项目分为三个模块:web模块、全同态加密模块和人脸识别模块

web模块:我们采用python的web模块,框架轻量,可塑性高。

全同态加密模块:我们采用CKKS方案,使用微软的SEAL库(Microsoft Simple Encrypted Arithmetic Library,Microsoft SEAL)。用C++语言编写,编写完函数功能代码后,编译成动态链接库以便python环境下可以被调用。SEAL库链接:https://github.com/microsoft/SEAL

人脸识别模块:我们采用谷歌的FaceNet人脸识别模型,此模型基于谷歌的Inception-ResNet神经网络,使用python的TensorFlow模块实现。我们使用LFW人脸数据集进行模型的训练和测试。FaceNet提出了一种将人脸照片直接映射到网格中,通过计算人脸特征向量的欧式空间向量距离来进行人脸匹配的方法。使用Triplet Loss(三联子损失函数)。人脸特征向量距离阈值为1.0左右(即两张人脸图片距离小于1.0为同一人,大于1.0为不同的人)。FaceNet链接:https://github.com/davidsandberg/facenet LFW人脸数据集链接:http://vis-www.cs.umass.edu/lfw/

使用说明:

1、解压展开本项目;

2、根据requirements.txt安装Python第三方库;

3、根据根目录下的config.py和documents目录下的face.sql配置好本地数据库;

4、解压application/face/src/20180408-102900目录下的分卷压缩包(只需解压一个就会联动解压),这个是谷歌基于lfw数据集的预训练模型;

5、运行根目录下的main.py。