paint-brush
Microsoft SEAL 和同态图片加密的黎明 所经@jiwasz
1,877 讀數
1,877 讀數

Microsoft SEAL 和同态加密的黎明

John Iwasz8m2023/01/18
Read on Terminal Reader

太長; 讀書

全同态加密 (FHE) 最初是在 2009 年实现的。同态加密使得可以对加密值执行操作,使得解密结果产生操作结果,就好像它们是对原始未加密值执行的一样。这使第三方能够计算加密数据并在不知道原始值的情况下提供结果。
featured image - Microsoft SEAL 和同态加密的黎明
John Iwasz HackerNoon profile picture


虽全同态备份 (FHE) 原本是在 2009 年达成的,但跟随运算学习能力就已遇上其运算需要量,它开始了遭受到更好地关注新闻;殊不知,同态备份的对方能否上溯到20节前。


简略搜寻会查找它的很多个定意。那是最直接性简单明了的:


的一种进行加密揭秘行驶,能接受对密文开始运算,转为进行加密揭秘没想到,揭秘后与运作没想到相适配,就看起来它是在非对称加密上来执行的似的。 — Massimo Bertaccini( )


选择一点该申明。同态密码保护这让并能对密码保护值施行方法,这让解谜成果诞生方法成果,就像想一想是对原未密码保护值施行的似的。发了现的最快提到是(1978 年),这里面作著企图放置平台软件员运用远程视频分时贴心服务登陆动态数据存储在本机平台中的铭感财务工作动态数据。



敏锐的资金工作统计数据表格文件信息贮存在统计数据表格文件信息比对库。算起统计数据表格文件信息的分时精准服务找不到完成足够了的稳定性。体统步骤员能够 访问浏览资金工作统计数据表格文件信息。该职称论文认为:


使用特殊的隐私同态加密其数据,使分时计算机无需先解密即可对数据进行操作。


换句话说,我想在不放弃访问权限的情况下删除对我的数据的处理


换句话说, function(A, B) = function (A , B ) 其中 A  and B分别是 A 和 B 的加密值。这使第三方能够计算加密数据并在不知道原始值的情况下提供结果。使用 RSA,可以将使用相同密钥加密的两个值相乘,并且可以解密乘积以产生加密值的乘积。


运用RSA(5)_RSA(6)得以5_6:
  1. RSA(5) = (5^17) 模 3233 = 3096
  2. RSA(6) = (6^17) mod 3233 = 824
  3. 3096*824 = 254864
  4. RSA^-1(254864) = 254864^2753 (mod 3233) = 30
  5. 5*6 = 30


有时候,对吧可使用在进位进位乘法。 RSA 都是种的部分同态加锁 (PHE) 实施前提报告,正因为它仅帮助乘法。后面的事件线显现了从 (PHE) 实施前提报告到不能进位进位乘法和乘法的不足搭配组合的某项同态加锁 (SHWE) 的突破。在到有误结论前几天,这样操作使用数量最多可不可以反复三次。紧接着展现了的一是个 FHE 实施前提报告,该实施前提报告够是不失去货真度的前提下反复进位进位乘法和乘法。



Acar、Abbas 和 Aksu、Hidayet 和 Uluagac、Selcuk 和 Conti、Mauro。 (2017)。同态加密方案综述:理论与实现。 ACM 计算调查。 51. 10.1145/3214303。


同态加密库

自 2009 年近些年,FHE 预计和图书室馆暴增。
书籍馆方法语气资质证

BFV、BGV、CKKS C++/C# 包装袋器麻省理工学基地
开FHE BFV、BGV、CKKS、DM、CGGI C++ BSD 2 免责条款经营证

CKKS C++理论知识公享 3.0
TFHE(环面)BSD-3-Clause-清掉

TFHEBSD-3-Clause-除去

BFV、BGV、CKKS阿帕奇 2.0

N/A – 的使用 SEAL、PALISADE、HLib蟒蛇,碼頭建筑工人阿帕奇 2.0


Microsoft SEAL(简便加密解密java算法库)是在 C++ 17 中与 C# 打包器来激发的。最先于 2015 年推送,近年仍在积极性激发中。 含有,一旦您有浓厚兴趣进两步研究探讨,是探讨这一些举例。他们设计由 SEAL 鼓励,属于加減法、除法、減法和取幂的同态运算,但不属于除法。



    • 整数(长)
    • 假若还要可靠性强,精密度,则的使用
    • 计算方式比CKKS慢
    • 采用 BGV 读取解密的值会与采用 BFV 读取解密的值一并采用
    • 安全用 BGV/BVF 备份方式的值不要与安全用 CKKS 备份方式的值分着安全用
    • 回顾有限责任域的同态进行加密策划方案



    • 浮点数(双)
    • 如果不需要精度则使用
    • 使用 CKKS 加密的值不能与使用 BGV/BFV 加密的值一起使用
    • 计算速度比 BFV/BGF 快

使用 Microsoft SEAL 进行加密和计算

以下例子操作流程 Nuget 包和 CKKS 方案范文。像 FitBit 和 AppleHeath 这样一来的身体键康跟踪器需求妥协一部分隐私保护。用户收录人个资料,如步数和穿戴者行动的地形气候坐标轴、心跳率和别首要计算信息库。经过同态信息加密,以下身体键康质量指标汇聚器即使能够 在确定不远程访问原有信息库的的情况下与我们的信息库来操作流程。


在这些单纯的范本中,加盟商端发射涵盖相距和精力先内的晨跑因素。提供虚拟服务器配位聚合读取数据报告并计算方法分別极限速度。


首先,公钥由客户端创建并与服务器共享。它用于加密数据,也用于对加密数据进行算术运算。客户端和服务器都使用加密器。客户端生成并保留用于解密的私钥,该私钥由恰当命名的Decryptor使用。


手机拦截数据文件统计的蓄意方是可以用备份数据文件统计的公开密钥,并经过误导服务管理质量器将其都会进行给都会进行者。服务管理质量器因该对效果进行个性英文签名,而雇主端因该认可个性英文签名以事关它是以可信度方都会进行的。


 using Microsoft.Research.SEAL; protected SEALContext _context; private KeyGenerator _keyGenerator; private Encryptor _encryptor; private Decryptor _decryptor; protected IFitnessTrackerApiClient _apiClient; . . . _context = SEALUtils.GetContext(_config.Value.PolyModulusDegree, this.SchemeType); _keyGenerator = new KeyGenerator(_context); _keyGenerator.CreatePublicKey(out PublicKey publicKey); _keyGenerator.CreateRelinKeys(out RelinKeys relinKeys); _encryptor = new Encryptor(_context, _publicKey); _decryptor = new Decryptor(_context, _keyGenerator.SecretKey); . . . PublicKeyModelCKKS keyModelCKKS = new( SEALUtils.KeyToBase64String(_publicKey), SEALUtils.KeyToBase64String(relinKeys)); await _apiClient.SendPublicKeyCKKSAsync(keyModelCKKS);


再线性化密钥从客户端传递到服务器。根据 Microsoft SEAL,除了减少乘法运算后的密文大小外,它们没有任何语义意义。

在命令提示符行,访客录入时和间距。


每个值都被编码为PlainText,然后加密为Ciphertext ,最后在将其发送到服务器之前编码为 base64。


 using Microsoft.Research.SEAL; var plaintext = new Plaintext(); _encoder.Encode(value, _scale, plaintext); var ciphertext = new Ciphertext(); _encryptor.Encrypt(value, ciphertext); using (var ms = new MemoryStream()) { ciphertext.Save(ms); return Convert.ToBase64String(ms.ToArray()); }


根据同态进行加密计划不可以除法(CKKS就不特例),买家端需求给精准服务端一些请求。效率关系式为:


  • 距離/周期


另个种写法是,


  • 时间 * (1/次)


那么,雇主端接收:
 RunItemCKKS metricsRequest = new( EncryptBase64(runItem.Distance), EncryptBase64(runItem.Time), EncryptBase64(1 / runItem.Time)); await _apiClient.AddNewRunningDistanceCKKSAsync(metricsRequest);



服务器执行类似的引导功能,仅使用公钥和重新线性化密钥创建SEALContext ,然后处理请求:

 var distance = SEALUtils.BuildCiphertextFromBase64String(request.Distance, _sealContext); var time = SEALUtils.BuildCiphertextFromBase64String(request.Time, _sealContext); var timeReciprocal = SEALUtils.BuildCiphertextFromBase64String(request.TimeReciprocal, _sealContext); Ciphertext speed = new(); _evaluator.Multiply(distance, timeReciprocal, speed); _evaluator.RelinearizeInplace(speed, _relinKeys); _runListCKKS.Add(new EncryptedRunInfoCKKS(distance, time, speed));


时间的倒数用于计算提交运行的速度,并且RelinearizeInplace方法减少了生成的密文的大小。距离、时间和速度被保存到内存列表中。


GetMetrics方法聚合列表并返回:

  • 总正常运作2次
  • 总范围
  • 总用时
  • 一般进程


    public SummaryItemCKKS GetMetrics() { int count = _runListCKKS.Count; var totalDistanceCKKS = SumEncryptedValues(_runListCKKS.Select(m => m.Distance)); var totalTimeCKKS = SumEncryptedValues(_runListCKKS.Select(m => m.Time)); var totalSpeed = SumEncryptedValues(_runListCKKS.Select(m => m.Speed)); . . . protected Ciphertext SumEncryptedValues(IEnumerable<Ciphertext> encryptedData) { . . . Ciphertext encTotal = new(); _evaluator.AddMany(encryptedData, encTotal); return encTotal; . . . }


为了能够提升均值时间,在操作记数的倒数,而不会在操作: (时速加总)/咱们动用的加载多次:


(的速度平均值)*(1/进行机会)


由于服务器跟踪运行提交的次数,因此运行总数不是加密值。该未加密的值可以转换为明文并用于对密文执行的操作。虽然这是一个简单的示例,但其含义值得注意。服务器可以提供用于加密数据的附加值,使第三方提供商能够将专有数据应用于针对客户提供的加密数据的计算。

在下面的示例中,总计数被转换为倒数并添加到List<double>。 CKKS 操作需要加密的列表值,即使列表只包含一个值。因此, List<double>被编码为PlainTextMultiplyPlainInplace将 totalSpeed 乘以(1/运行次数)得到平均速度。为了节省空间,将结果应用于 totalSpeed密文,并且重新线性化密钥减少了输出的大小。


 Plaintext encodedCountReciprocal = new(); List<double> averagePaceList = new(); double runCountReciprocal = 1 / (double)count; averagePaceList.Add(runCountReciprocal); _encoder.Encode(averagePaceList, _scale, encodedCountReciprocal); _evaluator.MultiplyPlainInplace(totalSpeed, encodedCountReciprocal); _evaluator.RelinearizeInplace(totalSpeed, _relinKeys);


这些值在客户端进行 base64 编码、返回和解密。客户端采取额外的步骤将解密的明文转换为List<double>


 var payload = Convert.FromBase64String(encryptedDistanceText); using var ms = new MemoryStream(payload); var ciphertext = new Ciphertext(); ciphertext.Load(_context, ms); var decryptedText = new Plaintext(); _decryptor.Decrypt(cypherText, decryptedText); List<double> distanceList = new(); _encoder.Decode(decryptedText, distanceList);


群发一下值会引起总共和最低值配速,该精准服务运算出总共和最低值配速表,而不同破解从的客端群发的统计数据。
英里時间
2.5 0:35:32.643
2.2 0:32:48.826
2.8 0:34:52.036


工作器换算的数据表格并回到总慢跑、范围、事件和配速,而不破译所有运输的的数据表格。







概括

Microsoft SEAL 是 Microsoft Research 项目,尚未准备好用于生产应用程序。所有类都实现IDisposable并使用非托管资源。生产代码需要防止内存泄漏。 SEALContext类不遵循单一职责原则。它包括 BGV/BVF 和 CKKS 的方法。此外,CKKS 支持向量运算,但不支持向量加法。单个List<double>可以加密为单个CipherText ,但无法对单个CipherText 中的值求和。它可以用来完成,但这是一个次优的解决方案。


此 Fitness Tracker 码样例是对多样化主题内容的简单易行介绍英文。有越来越多还具有更多的方法的引人注意的用例:

同态读取解密已在科研界和类似的广州中山大学量食用。实际效果软件获得同态读取解密策划方案格式需要备考确定水平的的限制。 GPU 变快和 ASIC 治疗器将依然大削此种心理障碍。英特尔稍后与微软官网和 DARPA 战略合作开发技术专为同态读取解密策划方案格式建设的。Nasdaq还捐助。 FHE.org 区域是该的领域最新信息进展的绝好自然资源。它有个个有活力的。


本诗中的一切代码怎么用举例均可从。关于深重入的 Microsoft SEAL 举例,请参阅以上。



也披露
바카라사이트 바카라사이트 온라인바카라