云计算安全 / 密码学 / 密码学理论 · 2022年3月4日 0

同态加密的人脸识别-方案探究篇

一、概述

1. 同态加密的概念

在1978年,Ron Rivest, Leonard Adleman, 以及Michael L. Dertouzos以银行为应用背景提出了同态加密(Homomorphic Encryption)。其中Ron Rivest和Leonard Adleman分别就是著名的RSA算法中的R和A。

同态加密是基于数学难题的计算复杂性理论的密码学技术。简单来说,对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。

“A way to delegate processing of your data, without giving away access to it.” ——一种不需要访问数据本身就可以加工数据的方法

2. 同态加密的分类

(1)根据运算分类

如果满足 f(A)+f(B)=f(A+B) f(A)+f(B)=f(A+B) , 我们将这种加密函数叫做加法同态

如果满足 f(A)×f(B)=f(A×B) f(A)×f(B)=f(A×B) ,我们将这种加密函数叫做乘法同态

如果一个加密函数f只满足加法同态,就只能进行加减法运算

如果一个加密函数f只满足乘法同态,就只能进行乘除法运算

如果一个加密函数同时满足加法同态和乘法同态,称为全同态加密。那么这个使用这个加密函数完成各种加密后的运算(加减乘除、多项式求值、指数、对数、三角函数)。

(2)根据“支持的运算范围”

半同态加密 (Partial Homomorphic Encryption, PHE):只支持某些特定的运算法则 f ,PHE 的优点是原理简单、易实现,缺点是仅支持一种运算(加法或乘法);

层次同态加密(Liveled HE,LHE):一般支持有限次数的加密算法,LHE 的优点是同时支持加法和乘法,并且因为出现时间比 PHE 晚,所以技术更加成熟、一般效率比 FHE 要高很多、和 PHE 效率接近或高于 PHE,缺点是支持的计算次数有限。

全同态加密 (Fully Homomorphic Encryption, FHE):支持无限次的任意运算法则 f,FHE 有以下类别:基于理想格的 FHE 方案、基于 LWE/RLWE 的 FHE 方案等等。FHE 的优点是支持的算子多并且运算次数没有限制,缺点是效率很低,目前还无法支撑大规模的计算。

3. Paillier算法概述

选择Paillier的原因:

欧氏距离的变体-平方欧氏距离公式中主要运算在于相加、广泛的应用性、最重要的:老师指定的hhh

(1) 密钥生成

a. 随机选择两个质数 p 和 q 满足 gcd( pq, (p – 1)(q – 1) ) = 1,这个条件保证了 p 和 q 的长度相等;

b. 计算 N=pq 和 λ=lcm(p−1,q−1),其中 lcm 表示最小公倍数;

c. 随机选择 g∈Z∗N^2,满足

后面会发现这里的 g = n+1。其中 Z 表示整数,下标表示该整数集合里有多少个元素;

公钥为( N, g );私钥为( λ, μ )。

(2) 加密过程

对于任意明文消息m,任意选择一随机数 r

计算得到密文 c :

(3) 解密过程

对于密文c,计算得到明文 m :

二、同态加密下的人脸识别方案探究

因比较熟悉直接调用dlib进行识别,因此暂以作为人脸识别部分的基础方案

1. 基本识别过程

(1)生成已知人脸数据库

计算已知人脸特征向量并保存

(2)识别

将待识别对象的人脸特征与数据库中的已知人脸特征计算欧氏距离,根据此先设计好的阈值判定是否为同一人。

2. 结合同态加密的识别过程

基本设想:

(1)本地生成人脸数据库的特征 mi,经加密后上传至云服务器人脸特征密文数据库 ci,i=1~n;

(2)待识别对象的特征向量mt在本地加密为ct,将ct上传至云服务器;

(3)云服务器中将ct与n个已有人脸特征ci计算欧氏距离,并根据阈值比较,从而返回结果。

ps:该方案大多为自己的设想,期间参考了论文:

《Improved Post-quantum-secure Face Template Protection System Based on Packed Homomorphic Encryption

但是我们有很多问题:

  • 特征向量往往为浮点型,因此我们应将其压缩量化为INT8的整型数据,否则无法满足同态加密中模运算;
  • 同态加密下的平方欧氏距离应该怎么实现;
  • ……

三、难点解决

1. 量化Quantization

根据Hiroto Tamiya等人在论文《Improved Post-quantum-secure Face Template Protection System Based on Packed Homomorphic Encryption》中所写:

该方法将浮点数通过max和min值归一化,按照文中意思我们应找取数据集中各特征的max与min值,由于该论文用的是Facenet模型,我尝试对其所用数据集进行提取,但需要做的工作因不熟而极其复杂,退而求其次,争取采用其他的量化方式。


由此基础,我在网上找寻到了这样的量化方式:

参考链接如下:https://blog.csdn.net/niaolianjiulin/article/details/82764511

四、实现尝试

一、量化(Quantization

暂且按照如图方案

利用python实现本方案:

# 量化 将FLOAT32特征转化为INT8
# Kisna 22.2.16

import cv2
import os
import dlib
from pandas import read_csv
from skimage import io
import csv
import numpy as np

# 量化参数
k = 1e17 # 或者80

class Quantization():
    def quan(x): # 简单的量化
        y = x*k
        y = int(y)
        return y

    def read_csv(): # 读取特征.csv入列表,方便统一量化输出
        # f = open('./data/features_all.csv', 'r')
        nd = np.genfromtxt('./data/features_all.csv', delimiter=',', skip_header=True)
        final_list = nd.tolist()
        return final_list

    def quantization():
        personlist = Quantization.read_csv()
        for i in range(0,128):
            personlist[i] = Quantization.quan(personlist[i])
        return personlist

personlist = Quantization.quantization()
print(personlist)

效果:

关于参数的选取:

很明显当前这个参数会使得之后的同态加密中代码实用性和效率变得特别低,不过这自然也是目前保护数据完整性的最好参数

后续可以根据情况酌情80、160甚至更高,直至调整出最好的参数

二、同态加密实现

摸鱼中…未完待续

最新的解决方案已出,详情移步下一篇文章