基于全同态加密的安全人脸识别系统
指导老师:陈智罡(Zhigang Chen), 个人网站:https://zhigang-chen.github.io/
特点说明:
随着人脸识别技术广泛使用,人脸数据安全问题的严重性也日益增长。
我们采用了全同态加密的方法来保证数据的安全性。
全同态加密:全同态加密支持加密域中密文的计算。那么全同态加密的提出就能够很好的解决计算隐私的问题。我们都知道人脸识别或者说机器学习甚至是整个人工智能,归根到底都是统计数学方法,那么就避不开计算,如此一来,我们就可以先用公钥将数据进行加密,加密后的密文进行数据传输和数值计算,计算结果还是为密文,用户收到密文结果后用私钥进行解密。这样就很好的保证了数据的隐私安全性。
方法说明:本项目提出了一种基于全同态加密的安全人脸识别协议。分为两个操作:登记操作和比对操作。
登记操作:用户本地生成密钥对,使用公钥将人脸特征向量(用户选中人脸照片后系统会先计算出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。