什么是同态加密 同态加密(Homomorphic Encryption)是指将原始数据经过同态加密后,对得到的密文进行特定的运算,然后将计算结果再进行同态解密后得到的明文等价于原始明文数据直接进行相同计算所得到的数据结果 ,在这个过程中用户时不能对加密的结果做任何操作的,否则可能会导致解密失败 同态加密的关注点则是数据处理安全,同态加密提供了一种对加密数据进行处理的功能。 同态加密的类型 部分同态加密(partially homomorphic) 部分同态加密算法允许某一操作被执行无限次。 稍微同态加密(somewhat homomorphic) 有点同态加密算法可以对密文进行有限次数的任意操作,例如,某种程度的同态加密算法可以支持最多五种加法或乘法的任意组合。 全同态加密(fully homomorphic) 可以对密文进行无限次数的任意同态操作,也就是说它可以同态计算任意的函数 同态加密示例 同态加密通常为非对称性加密。
最近领导安排研究下大数据的安全,计算机安全是个系统工程,分很多层面: 1)硬件安全 2)应用软件安全 3)操作系统安全 4)数据库系统安全 5)网络安全技术 涉及到具体的技术又有: 1)密码技术 2)计算机病毒 数据安全有一个很有意思的加密方法,这种方法叫同态同态加密。 假设 f 是个很复杂的操作,有了同态加密,我们就可以把加密得到的 e 交给第三方,第三方进行操作 F,我们拿回 F(e) 后,一解密,就得到了 f(m)。 如果一种加密算法,对于乘法和加法都能找到对应的操作,就称其为全同态加密算法。目前还没有真正可用的全同态加密算法,虽然 Craig Gentry 已经前进了一大步。 当前同态加密最主要的问题是不太成熟,效率损失太大(损失10倍以上),未来成熟的话,应用前景很大。
### 一、 概览:同态加密的概念 同态加密(Homomorphic Encryption)是很久以前密码学界就提出来的一个Open Problem。 *什么是同态加密?* 提出第一个构造出全同态加密(Fully Homomorphic Encryption)[Gen09]的Craig Gentry给出的直观定义最好: 这是什么意思呢? 对加密结果做任何操作,都将会导致错误的解密,甚至解密失败。 同态加密方案最有趣的地方在于,其关注的是数据处理安全。同态加密提供了一种对加密数据进行处理的功能。 [][1] 这里面的对应关系是: 盒子:加密算法 盒子上的锁:用户密钥 将金块放在盒子里面并且用锁锁上:将数据用同态加密方案进行加密 加工:应用同态特性,在无法取得数据的条件下直接对加密结果进行处理 于是,他可以使用同态加密,然后让云来对加密数据进行直接处理,并将处理结果返回给他。
1 什么是同态加密 同态加密(HE,homomorphic encryption)是密码学里一种特殊的加密模式,同态加密使我们可以将加密后的密文发给任意的第三方进行计算,并且在计算前不需要解密,即:在密文上进行计算 目前的同态加密算法,主要支持两种运算上的同态:加法和乘法。 需要注意的是,以上公式 (1) 只是为了让我们更加清晰地理解同态加密的性质,实际中的同态加密算法可能会有一些不同。 为了更好地理解与运用同态加密算法,我们按照将同态加密算法支持的运算类型和数量,将其分成 3 类:部分同态加密、层次同态加密、和全同态加密 。 部分同态加密(Partial HE,简称 PHE)指同态加密算法只对加法或乘法(其中一种)有同态的性质。 表 1: Paillier 和 CKKS 的效率对比(ms) 表 1 展示了 Paillier 和 CKKS 的效率对比,时间单位为毫秒,测试机器为 Intel(R) Xeon(R) E5-2630 24
同态加密一直是学术研究的重点,甚至已经有了40多年的历史。近来,作为“隐私增强技术(PET)” ,同态加密引发越来越多的关注。 将同态加密从理论研究领域带到商业实践领域的进展绝对值得庆祝,尤其是这一技术在各种垂直领域转化为广泛的业务用例,比如用于反洗钱、金融欺诈和数据货币化等领域。 误解1:同态加密还没有准备好用于商业用途 在同态加密第一次被理论化时,它还缺乏实用性。 虽然同态加密的一些实现建议数据必须集中进行汇集和加密,但它很少这么做。当使用同态加密来专门保护与数据的交互时,可以以分散的方式进行,即允许所有贡献者保持对其数据资产的控制和所有权。 误解4:同态加密库=同态加密解决方案 同态加密库和HE-powered解决方案之间有着显著的区别。可以这样想:同态加密解决方案就是房子;同态加密库就是原始木材。
使用不易受量子计算攻击的加密技术。 从目前的技术进展来看,全同态加密可以满足这两个要求。 2. 从同态加密开始 在1978年,Ronald L. 同态加密的基础 同态加密提供了非对称公钥加密支持的所有功能。 如果在加密值的计算过程中,不支持对加密数据的无限制计算,因此不是 全同态加密。 4.2 全同态加密 在 Gentry 的2009年论文之前,同态加密计算过程中聚集的噪声问题显著地限制了真正应用的场景。 5. 全同态加密的发展 最初,基于Lattice的 全同态加密方案支持密文的加法和乘法,允许逻辑电路执行无限制的计算,非常慢。 全同态加密的典型应用场景 随着全同态加密的硬件加速器出现,一些基于全同态加密的可能应用领域包括: 6.1 在整个生命周期内保护数据不被破坏/修改 加密数据上的隐私保护计算保证了数据及其派生计算结果在基础设施受到破坏的情况下不受修改和
目前,同态加密算法主要分为半同态加密和全同态加密两大类。 半同态加密主要包括以RSA算法[2]和ElGamal算法[3]为代表的乘法同态加密、以Paillier算法[4]为代表的加法同态加密以及以Boneh-Goh-Nissim方案[5]为代表的有限次数全同态加密 表1:各类同态加密算法 3、标准化进展 (1)半同态加密标准化 2019年5月,国际标准化组织ISO发布了同态加密标准(ISO/IEC 18033-6:2019)。 二、主流同态加密算法原理 1、半同态加密算法 满足有限运算同态性而不满足任意运算同态性的加密算法称为半同态加密。典型的半同态加密特性包括乘法同态、加法同态、有限次数全同态等。 2020年5月,IBM在GitHub上开源了基于HElib开发的面向macOS和iOS操作系统的全同态加密工具包,提供了基于Xcode的全同态加密SDK,近期还将发布面向Linux和Android操作系统的工具包
在联邦学习中所使用的多种隐私计算技术中,同态加密的功能和实用性举足轻重。 因此,在这样的场景下,我们需要一套加密体系,对密文执行的一些运算操作,可以等效为对明文执行的运算。 支持对密文进行运算操作的加密体系,被统称为同态加密,而同态运算则泛指对密文执行的各种运算。 根据密文可执行运算的范围,同态加密算法被划分为全同态加密、部分同态加密、近似同态加密等。一般来说,对同态运算没有限制的加密算法被称为全同态加密,而仅支持单一同态运算的加密算法被称为部分同态加密。 诚然,全同态加密是一种非常理想、需求巨大的算法,然而,目前主流的全同态加密算法,运算复杂度都相当之高,计算时间之漫长,使其几乎无法在生产行业中实现落地。因此,部分同态加密成为了更加现实的解决方案。 Paillier 加密就是一套被广泛使用的部分同态加密算法,它支持密文之间的加法运算。
一、同态加密计算:在密文上做运算的黑魔法需求背景先说说最核心的需求。 这就是同态加密要解决的问题。 技术选型的纠结一开始我们对比了好几种方案:方案计算能力性能实现难度安全性最终选择安全多方计算(MPC)通用慢高高❌同态加密(HE)受限很慢极高极高✅可信执行环境(TEE)通用快中中部分场景✅差分隐私统计快低中辅助使用最后选择了同态加密为主 同态加密的实现细节我们用的是微软的SEAL库,支持BFV和CKKS两种方案。 特别是同态加密的工程优化,还有很多坑等着我们一起填呢!
目前,同态加密算法主要分为半同态加密和全同态加密两大类。 半同态加密主要包括以RSA算法[2]和ElGamal算法[3]为代表的乘法同态加密、以Paillier算法[4]为代表的加法同态加密以及以Boneh-Goh-Nissim方案[5]为代表的有限次数全同态加密 表1:各类同态加密算法 ? ? 3、标准化进展 (1)半同态加密标准化 2019年5月,国际标准化组织ISO发布了同态加密标准(ISO/IEC 18033-6:2019)。 二、主流同态加密算法原理 1、半同态加密算法 满足有限运算同态性而不满足任意运算同态性的加密算法称为半同态加密。典型的半同态加密特性包括乘法同态、加法同态、有限次数全同态等。 2020年5月,IBM在GitHub上开源了基于HElib开发的面向macOS和iOS操作系统的全同态加密工具包,提供了基于Xcode的全同态加密SDK,近期还将发布面向Linux和Android操作系统的工具包
同态加密(HE)的本质 “同态”是数学上的概念,简单理解为:对加密后的数据做某种运算,等价于对明文数据做同样运算后再加密。 用公式直观表达(以加法同态为例):假设加密函数为 Enc(),明文为 m1、m2,加法运算为+,则:Enc(m1) + Enc(m2) = Enc(m1 + m2) 举个具体例子:明文 1:m1=5, 加密后Enc(5)=18;明文 2:m2=3,加密后Enc(3)=12;密文相加:18+12=30;明文相加后加密:Enc(5+3)=Enc(8)=30;结果完全一致,这就是“加法同态”。 基础总结同态加密的核心是“密文运算等价于明文运算后加密”,全同态加密(FHE)支持任意复杂计算,是大模型推理的核心;大模型推理本质是张量运算,同态加密让这些运算在密文空间完成,实现“数据不可见,计算可执行 1.2 模运算模运算就是“取余数”,是同态加密密文运算的基础。比如 7mod5=2(7除以5余2),12mod5=2。
与主流方案深度对比 5. 工程实践意义、风险、局限性与缓解策略 6. 未来趋势与前瞻预测 1. = 5 ciphertext1 = public_key.encrypt(plaintext1) ciphertext2 = public_key.encrypt(plaintext2) # 密文计算 5. 工程实践意义、风险、局限性与缓解策略 本节核心价值:探讨同态加密在信息安全中的实际应用价值,以及可能面临的风险和应对策略。 在工程实践中,同态加密为蓝队带来了新的机遇和挑战。 通过应用同态加密技术,我们能够在保护数据隐私的同时,实现有效的安全分析。然而,同态加密也存在一些局限性: 首先,同态加密的计算开销较大,可能会影响分析的实时性。 :抗量子攻击的同态加密方案,应对量子计算的威胁 这些技术的发展将使同态加密更加实用、高效和安全。
而这一矛盾,在 “同态加密”(Homomorphic Encryption, 简称 HE)中迎来了革命性的解法。一、什么是同态加密? 同态加密是一种特殊的加密方法,它允许人们在密文上直接进行计算,并且计算后的密文在解密后得到的结果,与对明文直接计算所得结果一致。换句话说,数据在 “被加密” 的状态下,依然可以被 “处理”。 同态加密让这一看似矛盾的需求成为可能。 七、同态加密给我们的启示FHE 改变的不仅是加密算法,而是数据如何被看待与使用的范式。 如果说传统加密是给信息上锁,那么同态加密,是让我们在不打开保险箱的情况下完成运算。这是数学赋予人类的全新可能。
加密通用类:
public class EncryptClass
{
///
1 什么是同态加密 同态加密(Homomorphic encryption)是一种加密形式,它允许人们对密文进行特定形式的代数运算得到仍然是加密的结果,将其解密所得到的结果与对明文进行同样的运算结果一样 由上图可以看出,同态加密与一般的加密方案的不同之处在于,它关注的是数据处理安全。同态加密提供了一种对加密数据进行处理的功能。 有点抽象?我们举个实际生活中的例子。 这个盒子的样子大概是这样的: 这里面的对应关系是: 盒子:加密算法 盒子上的锁:用户密钥 将金块放在盒子里面并且用锁锁上:将数据用同态加密方案进行加密 加工:应用同态特性,在无法取得数据的条件下直接对加密结果进行处理 华为可信智能计算TICS在联邦数据分析中引入同态加密,以保证计算过程的安全。 引入同态加密之前,TICS采用传统的对称和非对称加密相结合的算法,保证数据传输过程的安全。 引入同态加密前的计算过程: 引入同态加密后的计算过程: 在TICS中使用同态加密 联盟管理页面,管理员开启“高级别隐私保护” 。
; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Tool { /** * 该方法将指定的字符串用MD5算法加密后返回。 * @param s * @return */ public static String getMD5Encoding(String s) { byte[] input=s.getBytes(); ’,’d’,’e’,’f’}; try{ // 获得一个MD5摘要算法的对象 MessageDigest md=MessageDigest.getInstance(“MD5”); md.update (input); /* MD5算法的结果是128位一个整数,在这里javaAPI已经把结果转换成字节数组了 */ byte[] tmp = md.digest();//获得MD5的摘要结果 char[]
MD5加密详解 引言: 我在百度百科上查找到了关于MD5的介绍,我从中摘要一些重要信息: Message Digest Algorithm MD5(中文名为信息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数 <iostream> using namespace std; int main() { MD5 md5; md5.update(""); md5.PrintMD5("", md5); md5.update ("a"); md5.PrintMD5("a", md5); md5.update("bc"); md5.PrintMD5("abc", md5); md5.update("defghijklmnopqrstuvwxyz "); md5.PrintMD5("abcdefghijklmnopqrstuvwxyz", md5); md5.reset(); md5.update("message digest"); md5.PrintMD5 作者感言: 加密过程太复杂,只得以记录的方式,记下来。 这个MD5已经激活成功教程了,前提是已经知道了MD5加密值,才可以激活成功教程。
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Util apache校验下载的文件的正确性用的就是默认的这个组合 */ protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5' () + "初始化失败,MessageDigest不支持MD5Util。") s * @return */ public static String getMD5String(String s) { return getMD5String IOException */ public static String getMD5String(File file) throws IOException { if
MD5:是一种不可逆的加密算法.它是可靠的,并且安全的.在python中我们不需要手写这一套算法. 只需要引入一个叫hashlib的模块就能搞定MD5的加密工作. import hashlib obj = hashlib.md5() obj.update("alex".encode("utf-8" )) #加密的必须是字节 miwen = obj.hexdigest() print(miwen) #534b44a19bf18d20b71ecc4eb77c572f 但是仅仅是这样仍然不够安全, 因为这样的密文通过一个所谓的MD5解密工具是有可能解密成功的 这是因为撞库的问题.由于MD5的原始算法已经存在很久了.那就有些人用一些简单的排列组合来计算MD5.然后当出现 相同的MD5密文的时候就很容易反推出原来的数据是什么 obj.update("alex".encode("utf-8")) # 加密的必须是字节 miwen = obj.hexdigest() #6a89b5b541444af45a7927d42f43757d
区别: MD5加密: 加密时通过原字符串加密成另一串字符串 解密时需要原加密字符串进行重新加密比较两次加密结果是否一致 T=RSA加密: 加密时通过原字符串生成密钥对(公钥 +私钥) 解密时通过公钥和私钥进行解密,解密出原字符串进行比较是否一致 个人观点: RSA加密略比MD5加密牛逼一点点 但凡事都有好坏 MD5加密执行效率比RSA慢 废话不多说上栗子 : MD5加密: package cn.news.util; import java.security.MessageDigest; /** * * @author: 房上的猫 * * @time: 2018年5月14日 下午8:04:44 * * @博客地址: https://www.cnblogs.com/lsy131479/ * */ public class MD5 static String MD(String s) { try { MessageDigest md = MessageDigest.getInstance("MD5"