关于使用神经网络的同态加密

什么是神经网络?


神经网络类似人类大脑,由一个个神经元组成,每个神经元和多个其他神元连接,形成网状。单个神经元只会解决最简单的问题,但是组合成一个分层的整体,就可以解决复杂问题。

传统的机器学习方法只利用了一层芯片网络,在遇到真正复杂的问题时,处理效率就会变得十分低下。深度学习的最核心理念是通过增加神经网络的层数来提升效率,将复杂的输入数据逐层抽象和简化。也就是说,将复杂的问题分段解决,每一层神经网络就解决每一层的问题,这一层的结果交给下一层进行进一步处理。

神经元


什么是同态加密?

同态加密(Homomorphic Encryption, HE) 是指满足密文同态运算性质的加密算法,即数据经过同态加密之后,对密文进行特定的计算,得到的密文计算结果在进行对应的同态解密后的明文等同于对明文数据直接进行相同的计算,实现数据的“可算不可见”。
同态加密是一种加密的形式。在不对称情形下,它可以接受完全可读的文本,然后基于“公钥”将其转变为乱码。更重要的是,它可以基于“私钥”将乱码转回同样的文本。然而,除非你有“私钥”,(理论上)你无法解码加密后的乱码。

同态加密算法原理

同态加密算法原理
如果一种同态加密算法支持对密文进行任意形式的计算,则称其为全同态加密(Fully Homomorphic Encryption, FHE);如果支持对密文进行部分形式的计算,例如仅支持加法、仅支持乘法或支持有限次加法和乘法,则称其为半同态加密或部分同态加密,英文简称为SWHE(Somewhat Homomorphic Encryption)或PHE(Partially Homomorphic Encryption)。一般而言,由于任意计算均可通过加法和乘法构造,若加密算法同时满足加法同态性和乘法同态性,则可称其满足全同态性。

Python中的同态加密

首先是一些同态加密术语:
明文(plaintext) 未加密数据。也叫“消息”。在我们的例子中,这将是一些表示神经网络的数字。
密文(cyphertext) 加密数据。我们将在密文之上进行数学运算,这些运算会改变底层的明文。
公钥(public key) 伪随机数字序列,让任何人得以加密数据。可以和别人分享,因为(理论上)公钥只能用于加密。
私钥/密钥(private/secret key) 伪随机数字序列,让你解密被公钥加密的数据。你不想和别人分享私钥。否则,别人可以解密你的消息
S 表示密钥/私钥的矩阵。用于解密。
M 公钥。用于加密和进行数学运算。在有些算法中,不是所有数学运算都需要公钥。但这一算法非常广泛地使用公钥。c 加密数据向量,密文。
x 消息,即明文。有些论文使用m作明文的变量名。
w 单个“加权(weighting)”标量变量,用于重加权输入消息x(让它一致地更长或更短)。这一变量用于调节信噪比。加强信号后,对于给定的操作而言,消息较不容易受噪声影响。然而,过于加强信号,会增加完全毁坏数据的概率。这是一个平衡。
E或e 一般指随机噪声。在某些情形下,指用公钥加密数据前添加的噪声。一般而言,噪声使解密更困难。噪声使同一消息的两次加密可以不一样,在让消息难以破解方面,这很重要。注意,取决于算法和实现,这可能是一个向量,也可能是一个矩阵。在其他情形下,指随操作积累的噪声

左边加密公式,右边解密公式

模数运算几乎普遍存在。而加密则生成使上述关系为真的c. 如果S是一个随机矩阵,那么c很难解密。一个简单的、非对称的生成加密钥的方式是找到密钥的逆矩阵。

import numpy as np
def generate_key(w,m,n):   
         S = (np.random.rand(m,n) * w / (2 ** 16)) # 可证明 max(S) < w
        return S
def encrypt(x,S,m,n,w):
         assert len(x) == len(S)
         e = (np.random.rand(m)) # 可证明 max(e) < w / 2
         c = np.linalg.inv(S).dot((w * x) + e)
         return c
def decrypt(c,S,w):
       return (S.dot(c) / w).astype('int')
 
x = np.array([0,1,2,5])
m = len(x)
n = m
w = 16
S = generate_key(w,m,n)

输出效果


第一段加密后的神经网络数据
第二段解密还原


在原来的同态加密基础上,将他的整形数据循环遍历列表转换成ASCII对应的字符

之后在主程序上通过eval的方式把同态解密的还原字符串加载进内存

以火绒为例,针对API函数RtlMoveMemory进行一个查杀,我们通过神经网络同态加密的方式,来达到免杀的效果。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值