基于Numpy实现同态加密神经网络
- 格式:doc
- 大小:48.50 KB
- 文档页数:14
同态加密密文检索
同态加密是一种密码学技术,它允许我们在密文上进行运算,而不需要先解密。
这意味着我们可以在密文上执行各种操作,如加法、减法、乘法、除法等,而无需先解密原始数据。
这种技术非常有用,尤其是在需要保护敏感数据的场景下。
密文检索是指在加密数据中查找特定信息的过程。
在同态加密的场景下,密文检索可以直接在密文上进行,无需先解密。
这大大提高了数据检索的效率,同时也保证了数据的安全性。
具体的实现方式取决于所使用的同态加密算法和工具。
例如,使用Salsa20同态加密算法的客户端可以直接在密文上进行运算,然后将结果发送到服务端进行进一步处理。
服务端在接收到密文运算结果后,可以直接在密文上进行检索,而无需先解密。
这种方式可以大大提高数据检索的效率,同时也保证了数据的安全性。
需要注意的是,虽然同态加密可以提高数据检索的效率,但它并不能完全消除数据的安全风险。
在使用同态加密时,仍需要注意数据的安全存储和传输,以及采取其他必要的安全措施,如访问控制、入侵检测等。
同态加密1.背景加密的目的是保护数据的机密性。
加密分为对称加密和非对称加密。
对称加密是指加密和解密用的同一个密钥;而非对称加密在加密时用的是公钥,解密时用的是私钥。
非对称加密体制是基于数学难问题(比如大整数分解、离散对数),加密解密操作比对称加密要慢很多。
如果对加密数据(即密文)的操作是在不可信设备(untrusted device)上进行的,我们希望这些设备并不知道数据的真实值(即明文),只发回给我们对密文操作后的结果,并且我们可以解密这些操作后的结果。
举一个简单的例子,n个学生和1个老师通信,每个学生都有1个数据要发给老师,老师需要知道这n个数据之和,而学生们不想让老师知道每个数据的真实值。
为了解决这个问题,Rivest等在1978年提出了同态加密的思想。
2.定义同态加密[1]的定义如下:其中,M表示明文的集合,C表示密文的集合,←表示可以从右式计算得出左式。
特别地,有分别为加法同态、乘法同态。
所谓同态加密,是指在密文空间对密文的操作等同于在明文空间对明文操作后加密(据我自己的理解)。
同态加密在数据聚合(data aggregation)、隐私保护等方面有着重要的应用。
现在可以用同态加密解决前面提出的问题:每个学生可以用加法同态加密函数将各自数据加密,再将这密文发给老师;老师只需要把n个密文相加,再将相加后的结果(即密文之和)解密,即可得到n个数据之和(即明文之和)。
这样就保护了n个数据不被老师所知道,而且老师也得到了n个数据之和。
3.几个概念在[1]中,介绍了Semantics Security、polynomial security、nonmalleability几个概念。
(1)Semantics Security指对具有一定计算能力的敌手而言,密文没提供任何有关明文的有用信息。
比如,对加密操作c=E(m),c表示密文、E表示加密操作、m表示明文,敌手有可能猜到c而并不知道m。
(2)polynomial security定义:敌手选择两个明文,我们随机地选取其中的一个明文,并提供该明文相应的密文给敌手;敌手在多项式时间内,并不能得出我们所选取的明文是两个中的哪一个。
同态学习的加密算法介绍同态学习的加密算法是一种重要的数据加密技术,它具有许多非常有用的应用。
在本文中,我将介绍同态学习的基本概念和原理,以及一些常见的同态学习加密算法。
概念和原理同态学习是一种特殊的加密技术,它允许在加密状态下执行计算,并在解密后获得正确的结果。
换句话说,同态加密允许在加密状态下对数据进行操作,而无需解密它们。
这种特性对于安全地处理敏感数据非常有用,因为它可以避免在数据处理过程中暴露数据的明文。
同态学习的基本原理是利用数学上的同态性质,即在两个加密数据之间进行运算后,得到的结果与对应的明文数据进行运算后的结果是相同的。
这种性质使得同态加密能够在不暴露数据明文的情况下进行计算。
常见的同态学习加密算法目前,有许多不同的同态学习加密算法,每种算法都有其特定的优点和局限性。
以下是一些常见的同态学习加密算法:1. RSA同态加密算法RSA是一种非对称加密算法,它使用两个密钥对数据进行加密和解密。
RSA 同态加密算法利用RSA算法的数学性质来实现同态加密。
虽然RSA同态加密算法在理论上是可行的,但实际应用中面临着性能和安全性方面的挑战。
2. 阶梯同态加密算法阶梯同态加密算法是一种基于整数编码的同态加密方案,它利用离散对数问题和素数分解问题的困难性来实现同态性。
阶梯同态加密算法在实践中表现出良好的性能和安全性,因此被广泛应用于各种加密场景。
3. 基于椭圆曲线的同态加密算法基于椭圆曲线的同态加密算法利用椭圆曲线离散对数问题的困难性来实现同态性。
由于椭圆曲线算法在密钥长度较短的情况下提供了与RSA相当的安全性,因此基于椭圆曲线的同态加密算法被广泛应用于移动设备和物联网等资源受限的环境中。
应用场景同态学习的加密算法在许多领域都有着广泛的应用。
其中,医疗保健领域和金融领域是同态学习加密算法最为重要的应用场景之一。
在医疗保健领域,医疗数据的隐私和安全性是非常重要的。
同态学习的加密算法可以帮助医疗机构在不暴露患者敏感数据的情况下进行数据分析和共享,从而提高医疗数据的利用率和安全性。
多层感知器--MLP神经⽹络算法提到⼈⼯智能(Artificial Intelligence,AI),⼤家都不会陌⽣,在现今⾏业领起风潮,各⾏各业⽆不趋之若鹜,作为技术使⽤者,到底什么是AI,我们要有⾃⼰的理解.⽬前,在⼈⼯智能中,⽆可争议的是深度学习占据了统治地位,,其在图像识别,语⾳识别,⾃然语⾔处理,⽆⼈驾驶领域应⽤⼴泛.如此,我们要如何使⽤这门技术呢?下⾯我们来⼀起了解"多层感知器",即MLP算法,泛称为神经⽹络.神经⽹络顾名思义,就像我们⼈脑中的神经元⼀样,为了让机器来模拟⼈脑,我们在算法中设置⼀个个节点,在训练模型时,输⼊的特征与预测的结果⽤节点来表⽰,系数w(⼜称为"权重")⽤来连接节点,神经⽹络模型的学习就是⼀个调整权重的过程,训练模型⼀步步达到我们想要的效果.理解了原理,下⾯来上代码直观看⼀下:1.神经⽹络中的⾮线性矫正每个输⼊数据与输出数据之间都有⼀个或多个隐藏层,每个隐藏层包含多个隐藏单元.在输⼊数据和隐藏单元之间或隐藏单元和输出数据之间都有⼀个系数(权重).计算⼀系列的加权求和和计算单⼀的加权求和和普通的线性模型差不多.线性模型的⼀般公式:y = w[0]▪x[0]+w[1]▪x[1] + ▪▪▪ + w[p]▪x[p] + b为了使得模型⽐普通线性模型更强⼤,所以我们要进⾏⼀些处理,即⾮线性矫正(rectifying nonlinearity),简称为(rectified linear unit,relu).或是进⾏双曲正切处理(tangens hyperbolicus,tanh)############################# 神经⽹络中的⾮线性矫正 ########################################导⼊numpyimport numpy as np#导⼊画图⼯具import matplotlib.pyplot as plt#导⼊numpyimport numpy as py#导⼊画图⼯具import matplotlib.pyplot as plt#⽣成⼀个等差数列line = np.linspace(-5,5,200)#画出⾮线性矫正的图形表⽰plt.plot(line,np.tanh(line),label='tanh')plt.plot(line,np.maximum(line,0),label='relu')#设置图注位置plt.legend(loc='best')#设置横纵轴标题plt.xlabel('x')plt.ylabel('relu(x) and tanh(x)')#显⽰图形plt.show()tanh函数吧特征X的值压缩进-1到1的区间内,-1代表的是X中较⼩的数值,⽽1代表X中较⼤的数值.relu函数把⼩于0的X值全部去掉,⽤0来代替2.神经⽹络的参数设置#导⼊MLP神经⽹络from sklearn.neural_network import MLPClassifier#导⼊红酒数据集from sklearn.datasets import load_wine#导⼊数据集拆分⼯具from sklearn.model_selection import train_test_splitwine = load_wine()X = wine.data[:,:2]y = wine.target#下⾯我们拆分数据集X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=0)#接下来定义分类器mlp = MLPClassifier(solver='lbfgs')mlp.fit(X_train,y_train)MLPClassifier(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,beta_2=0.999, early_stopping=False, epsilon=1e-08,hidden_layer_sizes=(100,), learning_rate='constant',learning_rate_init=0.001, max_iter=200, momentum=0.9,n_iter_no_change=10, nesterovs_momentum=True, power_t=0.5,random_state=None, shuffle=True, solver='lbfgs', tol=0.0001,validation_fraction=0.1, verbose=False, warm_start=False)identity对样本特征不做处理,返回值是f(x) = xlogistic返回的结果会是f(x)=1/[1 + exp(-x)],其和tanh类似,但是经过处理后的特征值会在0和1之间#导⼊画图⼯具import matplotlib.pyplot as pltfrom matplotlib.colors import ListedColormap#定义图像中分区的颜⾊和散点的颜⾊cmap_light = ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF'])cmap_bold = ListedColormap(['#FF0000','#00FF00','#0000FF'])#分别⽤样本的两个特征值创建图像和横轴和纵轴x_min,x_max = X_train[:, 0].min() - 1,X_train[:, 0].max() + 1y_min,y_max = X_train[:, 1].min() - 1,X_train[:, 1].max() + 1xx,yy = np.meshgrid(np.arange(x_min,x_max, .02),np.arange(y_min,y_max, .02))Z = mlp.predict(np.c_[xx.ravel(),yy.ravel()])#给每个分类中的样本分配不同的颜⾊Z = Z.reshape(xx.shape)plt.figure()plt.pcolormesh(xx, yy, Z, cmap=cmap_light)#⽤散点图把样本表⽰出来plt.scatter(X[:, 0],X[:, 1],c=y,edgecolor='k',s=60)plt.xlim(xx.min(),xx.max())plt.ylim(yy.min(),yy.max())plt.title("MLPClassifier:solver=lbfgs")plt.show()(1)设置隐藏层中节点数为10#设置隐藏层中节点数为10mlp_20 = MLPClassifier(solver='lbfgs',hidden_layer_sizes=[10])mlp_20.fit(X_train,y_train)Z1 = mlp_20.predict(np.c_[xx.ravel(),yy.ravel()])#给每个分类中的样本分配不同的颜⾊Z1 = Z1.reshape(xx.shape)plt.figure()plt.pcolormesh(xx, yy, Z1, cmap=cmap_light)#⽤散点图把样本表⽰出来plt.scatter(X[:, 0],X[:, 1],c=y,edgecolor='k',s=60)plt.xlim(xx.min(),xx.max())plt.ylim(yy.min(),yy.max())plt.title("MLPClassifier:nodes=10")plt.show()(2)设置神经⽹络有两个节点数为10的隐藏层#设置神经⽹络2个节点数为10的隐藏层mlp_2L = MLPClassifier(solver='lbfgs',hidden_layer_sizes=[10,10])mlp_2L.fit(X_train,y_train)ZL = mlp_2L.predict(np.c_[xx.ravel(),yy.ravel()])#给每个分类中的样本分配不同的颜⾊ZL = ZL.reshape(xx.shape)plt.figure()plt.pcolormesh(xx, yy, ZL, cmap=cmap_light)#⽤散点图把样本表⽰出来plt.scatter(X[:, 0],X[:, 1],c=y,edgecolor='k',s=60)plt.xlim(xx.min(),xx.max())plt.ylim(yy.min(),yy.max())plt.title("MLPClassifier:2layers")plt.show()(3)设置激活函数为tanh#设置激活函数为tanhmlp_tanh = MLPClassifier(solver='lbfgs',hidden_layer_sizes=[10,10],activation='tanh')mlp_tanh.fit(X_train,y_train)Z2 = mlp_tanh.predict(np.c_[xx.ravel(),yy.ravel()])#给每个分类中的样本分配不同的颜⾊Z2 = Z2.reshape(xx.shape)plt.figure()plt.pcolormesh(xx, yy, Z2, cmap=cmap_light)#⽤散点图把样本表⽰出来plt.scatter(X[:, 0],X[:, 1],c=y,edgecolor='k',s=60)plt.xlim(xx.min(),xx.max())plt.ylim(yy.min(),yy.max())plt.title("MLPClassifier:2layers with tanh")plt.show()(4)修改模型的alpha参数#修改模型的alpha参数mlp_alpha = MLPClassifier(solver='lbfgs',hidden_layer_sizes=[10,10],activation='tanh',alpha=1)mlp_alpha.fit(X_train,y_train)Z3 = mlp_alpha.predict(np.c_[xx.ravel(),yy.ravel()])#给每个分类中的样本分配不同的颜⾊Z3 = Z3.reshape(xx.shape)plt.figure()plt.pcolormesh(xx, yy, Z3, cmap=cmap_light)#⽤散点图把样本表⽰出来plt.scatter(X[:, 0],X[:, 1],c=y,edgecolor='k',s=60)plt.xlim(xx.min(),xx.max())plt.ylim(yy.min(),yy.max())plt.title("MLPClassifier:alpha=1")plt.show()总结: 如此,我们有4种⽅法可以调节模型的复杂程度: 第⼀种,调整神经⽹络每⼀个隐藏层上的节点数 第⼆种,调节神经⽹络隐藏层的层数 第三种,调节activation的⽅式 第四种,通过调整alpha值来改变模型正则化的过程 对于特征类型⽐较单⼀的数据集来说,神经⽹络的表现还是不错的,但是如果数据集中的特征类型差异⽐较⼤的话,随机森林或梯度上升随机决策树等基于决策树的算法的表现会更好⼀点. 神经⽹络模型中的参数调节⾄关重要,尤其是隐藏层的数量和隐藏层中的节点数. 这⾥给出⼀个参考原则:神经⽹络中的隐藏层的节点数约等于训练数据集的特征数量,但⼀般不超过500. 如果想对庞⼤复杂⾼维的数据集做处理与分析,建议往深度学习发展,这⾥介绍两个流⾏的python深度学习库:keras,tensor-flow⽂章引⾃ : 《深⼊浅出python机器学习》。
若一个加密方案对密文进行任意深度的操作后解密,结果与对明文做相应操作的结果相同,则该方案为完全同态加密方案。
通常一个公钥加密方案有三个算法:KeyGen算法(密钥生成),Enc算法(加密),Dec算法(解密)。
但是在全同态加密中,除了上述三个算法之外,还包含第四个算法:Evaluate算法(密文计算),这个算法的功能是对输入的密文进行计算。
KeyGen算法(密钥生成)用于生成公钥和密钥,公钥用于加密,私钥用于解密。
还可能生成另外一种公钥,即密文计算公钥,我们把它称之为Evk。
密文计算公钥Evk的作用是在执行Evaluate算法时用到,而且Evk 的形式与使用的全同态方案直接相关。
例如,如果是通过启动技术(Bootstrapple)获得全同态加密,即每次密文计算前要用同态解密约减密文的噪音,这时Evk就是对密钥的每一位加密后生成的密文,即密钥有多少位,Evk里包含的公钥就有多少个。
Evk中每个公钥的大小就是使用Enc加密后产生密文的大小。
当然还有其他情况,例如,如果使用密钥交换与模交换技术获得全同态加密,典型代表就是BGV方案。
这时Evk中包含的就是L–1个矩阵,L是方案中电路的深度,该矩阵用于密钥转换。
每次密文计算后,都需要使用Evk中的公钥将维数扩张的密文向量转换成正常维数的密文向量。
当然还有一种情况就是不需要Evk,例如在Crypto13会议的论文GSW13中,Gentry使用的密文是矩阵(方阵),所以密文乘积或相加不会产生密文维数改变的事情,所以在密文计算时没有用到公钥,这也是该论文可以产生基于身份或基于属性全同态加密方案的根本原因。
Enc算法(加密)和我们平常意义的加密是一样的,但是在全同态加密的语境里,使用Enc算法加密的密文,一般称之为新鲜密文,即该密文是一个初始密文,没有和其他密文计算过。
所以新鲜密文的噪音称之为初始噪音。
Dec算法(解密)不仅能对初始密文解密,还能对计算后的密文解密。
同态加密是一种加密技术,可以让加密后的数据在保持加密状态的同时进行运算,这是传统加密技术所不能做到的。
同态加密技术可以用于数据隐私保护、云计算等领域。
基于RLWE(Ring Learning With Errors)的同态加密算法是当前比较流行的同态加密算法之一。
它利用了数论中多项式环的结构来构造同态加密方案,并通过对多项式系数引入噪声来增加安全性。
具体实现步骤如下:
1. 密钥生成:首先,选择一个大素数q和一个模数N,然后随机选取一个多项式f(x)∈Zq[x]/(x^N+1),并计算其逆多项式f^(-1)(x)。
然后从一个高斯分布中采样一个小的多项式e(x)∈Z_q[x],作为噪声项。
最后,计算g(x)=-f^(-1)(x)e(x) mod (x^N+1),将f(x)和g(x)作为私钥,将f(x)和h(x)=f^(-1)(x) mod (x^N+1)作为公钥。
2. 加密:将明文m转化为多项式m(x)∈Z_q[x]/(x^N+1),然后从高斯分布中采样一个小的多项式e(x)∈Z_q[x],作为噪声项。
最后,计算c(x)=m(x)h(x)+e(x),将c(x)作为密文发送。
3. 解密:使用私钥f(x)和g(x)解密密文c(x),计算s(x)=c(x)f(x)+g(x),然后使用CRT(中国剩余定理)将s(x)转化为明文m。
基于RLWE的同态加密算法具有较高的安全性和可扩展性,可以用于各种应用场景中保护数据隐私。
它还可以与其他密码学技术结合使用,如差分隐私、多方安全计算等,以增强数据隐私保护的能力。
同态加密:开启信息安全的新篇章随着信息技术的飞速发展,数据安全和隐私保护逐渐成为人们关注的焦点。
在这个背景下,同态加密作为一种革命性的加密方式,引起了广泛的关注。
本文将介绍同态加密的基本概念、发展历程及其在信息安全领域的重要应用。
一、同态加密概述同态加密是一种允许对加密数据执行计算并得到加密结果,而不需要解密的加密方式。
换句话说,它允许用户在不解密的情况下对加密数据进行分析和处理,从而在保证数据隐私的同时实现数据的计算价值。
这一概念在理论上提供了一种平衡数据隐私和计算需求的方法,具有重要的实际应用价值。
二、同态加密的发展历程同态加密的思想可以追溯到20世纪70年代,然而其实际发展过程充满了挑战。
早期的同态加密方案复杂度高、计算量大,难以实际应用。
直到近年来,随着数学和计算技术的发展,才出现了一些可实用的同态加密方案。
如今,同态加密已成为密码学领域的研究热点,并在多个领域展现出巨大的应用潜力。
三、同态加密的应用场景1.云计算:在云计算环境中,用户将数据存储在远程服务器上。
同态加密允许用户在不泄露原始数据的前提下,对加密数据进行计算并获得加密结果,从而保护了用户隐私和数据安全。
2.电子投票:在电子投票系统中,同态加密能够保证投票者的投票隐私,同时让投票结果真实有效。
通过同态加密技术,投票者可以将选票加密后上传至服务器,服务器可以在不解密的情况下统计选票,确保投票的公正性和隐私性。
3.生物信息学:在生物信息学领域,研究人员经常需要处理敏感的个人数据。
同态加密允许研究人员在不解密的情况下对数据进行处理和分析,从而保护个人隐私和数据安全。
4.金融领域:金融行业涉及大量的敏感数据,如交易记录、客户信息等。
同态加密可以为金融行业提供一种在保证数据隐私的同时进行数据分析的方法,有助于保障金融交易的公平性和隐私性。
四、结语同态加密作为一门新兴的密码学技术,为信息安全领域带来了革命性的变革。
它平衡了数据隐私和计算需求之间的关系,为多个领域提供了安全可靠的数据处理和分析方案。
基于Numpy实现同态加密神经网络
在分布式AI环境下,同态加密神经网络有助于保护商业公司知识产权和消费
者隐私。让我们和DeepMind数据科学家、Udacity深度学习导师Andrew Trask一起,来
看看如何基于Numpy实现同态加密神经网络吧。
TLDR: 在这篇文章中,我们将训练一个在训练阶段完全加密的神经网络(在未加密的数据
上训练)。得到的神经网络将具备两个有益的性质。首先,保护神经网络的智能免遭窃取,
使有价值的AI可以在不安全的环境中加以训练而不用冒智能遭窃的风险。其次,网络只
能进行加密预测(大概对外部世界毫无影响,因为在没有密钥的情况下,外部世界无法理
解预测)。这在用户和超智能间构成了一个有价值的权力失衡。如果AI是同态加密的,那
么在AI看来,整个外部世界也是同态加密的。一个控制密钥的人类可以选择解锁AI本身
(将AI释放到世界中)或仅仅解密AI做出的单个预测(看起来更安全)。
超智能
很多人都担忧超智能有一天会选择伤害人类。史蒂芬·霍金曾呼吁建立新的世界政府来管
理我们赋予人工智能的能力,以防人工智能最终摧毁人类。这些是相当大胆的主张,我认
为它们反映了科学界和整个世界对这一问题的普遍担忧。本文将是一篇介绍解决这一问题
的潜在技术方案的教程,我将通过一些玩具样例代码来演示这一方法。
目标很简单。我们想要创建未来会变得非常智能的AI技术(智能到可以解决治愈癌症、
终结世界上的饥饿等问题),但是这样的智能受人类的控制(基于密钥),因而其智能的应
用是受限的。不受限的学习是很棒的,但知识的不受限的应用可能具有潜在危险性。
为了介绍这一想法,让我先简要介绍两个非常激动人心的研究领域:深度学习和同态加密。
一、什么是深度学习?
深度学习是用于自动化智能的工具套件,主要基于神经网络。这一计算机科学的领域,是
最近AI技术爆发的主要动力,因为深度学习在许多智能任务上超越了先前的表现记录。
例如,他是DeepMind的AlphaGo系统的主要组成部分。
神经网络基于输入做出预测。它通过试错法学习做出有效的预测。刚开始,它做出一个预