法律状态公告日
法律状态信息
法律状态
2022-09-16
实质审查的生效 IPC(主分类):G06V40/16 专利申请号:2022106032369 申请日:20220530
实质审查的生效
技术领域
本发明属于人脸识别领域,具体涉及一种融合欧氏距离和同态加密的人脸识别方法。
背景技术
基于人脸的认证系统被广泛应用在执法、支付、交通出行、门禁和电子政务等应用领域。相对于传统的身份认证机制,人脸识别具有不容易被遗忘和损坏、使用便捷的特点,可有效提高认证的效率。人脸认证普遍的攻击之一就是人脸特征模板库。例如,攻击者重建的原始人脸图像可被成功认证,也可以推测出年龄、性别等个人属性。这些人脸特征模板均涉及到隐私,存储在云端模板数据库上的特征模板数据存在泄漏的可能,通常的解决方案是将人脸特征模板加密,再将其上传到不受信任的第三方,但无法实现密文域上的特征匹配。
现如今的人脸识别,存放人脸的服务器安全系数相对薄弱,或是内部人员进行数据的买卖。服务器中的人脸数据在存放或是传输过程中被盗用之后容易被泄露、窃取,造成隐私泄露。然而传统的加密方法无法进行人脸特征匹配。这就需要使用基于同态加密的人脸识别。
发明内容
本发明的目的在于提供一种融合欧氏距离和同态加密的人脸识别方法,该方法有利于提高人脸识别的准确率和安全性,同时提高计算效率。
为实现上述目的,本发明采用的技术方案是:一种融合欧氏距离和同态加密的人脸识别方法,包括以下步骤:
步骤S1:用户进行身份识别时,本地获取人脸特征值,然后基于同态加密对人脸特征值加密,得到人脸特征值密文,再将人脸特征值密文、密钥发送至云端服务器;
步骤S2:云端服务器加载密钥及人脸特征值密文,对本地当前上传的人脸特征值密文与用户注册时上传的已知姓名的人脸特征值密文进行欧氏距离计算,获得密文差值;然后将计算得到的密文差值发送回本地进行后续计算;
步骤S3:本地对密文差值进行密文解密,再进行明文局部欧氏距离计算,得到人脸欧几里得距离,最后基于得到的人脸欧几里得距离给出用户身份识别结果。
进一步地,所述步骤S1中,按如下方法获取人脸特征值:
步骤S101:本地通过摄像头获得视频帧的图像,并调整图像的大小以加快人脸识别处理,然后将图像从BGR颜色转换为RGB颜色;
步骤S102:进行人脸检测,找出图像中的所有人脸;
步骤S103:利用面部特征点矫正姿态,将侧脸转为正脸;
步骤S104:根据面部特征点计算人脸特征值。
进一步地,所述步骤S1中,采用同态加密中的CKKS加密方案生成密钥,并将密钥的参数、私钥、公钥保存到本地;然后利用本地的公钥对人脸特征值进行同态加密,得到人脸特征值密文,再将人脸特征值密文以及密钥的公钥、参数发送至云端服务器。
进一步地,所述步骤S2中,利用封装好的密文减函数对本地当前上传的人脸特征值密文与数据库中保存的用户注册时上传的已知姓名的人脸特征值密文做减法计算;人脸特征值计算判断的欧几里得距离公式如下:
通过密文减函数,获得欧几里得距离中的(x
然后,将计算得到的密文差值发送回本地进行后续计算。
进一步地,所述步骤S3具体包括以下步骤:
步骤S301:本地采用密钥的私钥对密文差值进行密文解密,获得多维差值向量;
步骤S302:根据获得的欧几里得公式中的(x
步骤S303:对多维平方向量求和,获得
步骤S304:进行开方计算,即可获得人脸欧几里得距离:
步骤S305:由获得的人脸欧几里得距离更新字典,从字典中获得最小距离,判断距离是否小于基于实践得出的阈值,是则返回该数据字典中对应的姓名,否则视为识别失败。
与现有技术相比,本发明具有以下有益效果:提出了一种融合欧氏距离和同态加密的人脸识别方法,本方法利用CKKS同态加密技术对人脸特征进行加密,可以实现数据在加密条件下的计算存储与传输,既能实现人脸识别,又保证数据不泄露;本方法对于传统的在密文域上进行欧几里得距离计算方法进行改进,实现了在密文域上进行加密轻量计算,复杂度较高、耗时更长的计算在保证安全的情况下在明文域上计算,这样既保证了人脸识别的准确率与安全性,又极大地提高了计算效率,保证了实际应用场景的高效与实用性。
附图说明
图1是本发明实施例的方法实现原理图。
图2是本发明实施例的方法实现流程图。
具体实施方式
下面结合附图及实施例对本发明做进一步说明。
应该指出,以下详细说明都是示例性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
如图1、2所示,本实施例提供了一种融合欧氏距离和同态加密的人脸识别方法,包括以下步骤:
步骤S1:本地人脸特征值密文获取、发送
1.获取人脸特征值
Step1:摄像头画面的处理
通过摄像头获得每一帧的画面
ret,frame=video_capture.read()
调整视频帧的大小为1/4大小,以更快的人脸识别处理
small_frame=cv2.resize(frame,(0,0),fx=0.25,fy=0.25)
将图像从BGR颜色(OpenCV使用)转换为RGB颜色(face_recognition使用)
rgb_small_frame=small_frame[:,:,::-1]
Step2:人脸检测:找出画面中的所有的人脸
使用python中的Face Recognition库:
Face Recognition库主要封装了C++的dlib图形库,通过Python语言将它封装为可以实现人脸识别的API库。
使用的API接口为:
face_recognition.face_locations(img,number_of_times_to_upsample=1,model="hog")
可以找出其中所有的人脸。
Step3:利用特征点矫正姿态,将侧脸转为正脸
检测面部特征点:使用的API接口为:
face_landmarks(face_image,face_locations=None,model="large")
面部特征包括以下几个部分:chin(下巴)、left_eyebrow(左眼眉)、right_eyebrow(右眼眉)、nose_bridge(鼻梁)、left_eye、right_eye、nose_tip(人中或者下鼻部)、bottom_lip(下嘴唇)。以此获得人脸的68个特征点
Step4:获得人脸特征值
根据面部特征点计算这个面孔的特征值(特征向量)
使用的API接口为:
face_encodings(face_image,known_face_locations=None,num_jitters=1)
通过此API可以从画面中的人脸以此获得人脸的128维特征向量。
2.进行特征值的本地加密
Step1:本地密钥注册
MicrosoftSEAL是一个用C++实现,并提供BFV和CKKS算法的同态加密库,使得客户无需与服务共享密钥。在实际使用中,像需要真实数值、评估密文数据的机器学习模型、计算密文距离等应用场景中,CKKS算法较为适合。
使用同态加密中的CKKS加密方案,选择{60,40,40,60}作为CKKS加密方案的poly_modulus_degree参数。将密钥注册功能封装成函数registration()更方便之后的调用。
并利用封装函数parms.save(file_path),key.save(key_path)函数将参数、私钥、公钥等密钥都保存到本地。
Step2:特征值加密
利用本地的公钥public_key、context,并且利用封装好的encrypt(data,context,public_key_path)函数(scale设置为pow(2.0,40))将之前获得的人脸特征值进行同态加密成密文特征值。
3.密文、密钥的传输
利用socket TCP将人脸密文特征值以及公钥、参数发送至云端服务器处理。
步骤S2:云端密文计算
1.云端加载密钥
Step1:获取parms
同样使用SEAL库获取本地传输的parms构建参数容器:EncryptionParametersparms(scheme_type::ckks);
Step2:生成CKKS框架
用参数parms生成CKKS框架:contextSEALContext context(parms);
Step3:获取公钥public_key
通过本地传输,获取公钥。
Step4:构建模块
构建编码器,加密模块、运算器和解密模块:
Encryptor encryptor(context,public_key);
Evaluator evaluator(context);
Decryptor decryptor(context,secret_key);
CKKSEncoder encoder(context)。
2.云端加载密文
Step1:读取人脸密文
分别读取人脸用户注册时上传的已知姓名的人脸密文,以及当前本地发送的实时的人脸密文。
3.云端密文计算
Step1:计算密文之差
利用封装好的密文减函数sub_ciphertext(Ciphertext cip1,Ciphertext cip2,SEALContext context)对当前的人脸密文与数据库中的密文做减法计算。
这时的差值计算将在云端服务器中进行并行计算,提高密文计算效率。
人脸特征值计算判断的欧几里得距离公式如下:
通过密文减函数,可以获得欧几里得距离中的(x
利用密文的安全性来计算出差值,此时的差值已经无法可逆获得最初的人脸特征值,保障了信息的绝对安全性。欧几里得公式中的其他涉及到乘法计算的步骤可以在之后的本地明文计算,既保证了数据的安全性又保证了密文计算的效率。
Step2:传输差值密文
将先前计算得到的多组密文差值向量发送回本地进行后续计算。
步骤S3:本地密文解密与返回结果
Step1:密文解密
使用私钥secret_key,调用decrypt(cipher,context,secret_key_path)函数来将差值密文解密,获得差值明文128维向量。
Step2:明文局部欧氏距离计算
此时我们已经获得了欧几里得公式中的:
(x
接下来,在明文域将128维差值向量进行平方,获得:
(x
这一步在明文域计算所消耗的时间远小于其在密文域中计算消耗的时间。
接着将128维平方向量求和,获得:
在此步骤中,由于计算的是平方和,所以在之前服务器中,密文各维度的向量不必按照先前获得的人脸各特征值的相对顺序。
最后进行开方计算,即可获得最后的人脸欧几里得距离:
Step3:获得身份
由获得的人脸欧几里得距离更新字典,从字典中获得最小距离,判断距离是否小于基于实践得出的阈值。如若小于,返回该数据字典中对应的姓名,否则视为判断失败。
以上所述,仅是本发明的较佳实施例而已,并非是对本发明作其它形式的限制,任何熟悉本专业的技术人员可能利用上述揭示的技术内容加以变更或改型为等同变化的等效实施例。但是凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与改型,仍属于本发明技术方案的保护范围。
机译: 可计算同态性的公钥加密方法,可计算环同态性的公钥加密系统,发送设备,处理设备,接收设备,程序及其记录介质
机译: 同态加密的一种指令计算系统和方法
机译: 使用同态加密和基于配对的加密的加密数据的计算方法以及使用该方法的服务器