前言
時光飛逝,前段時間我們一直在致力于分析SEAL庫比較底層的核心代碼,遵循的思路也是從底層往上層的應用層去挖掘,這樣有利也有弊吧,好處自然就是深入了解底層實作機制,弊端就是缺少一個整體的把握,
so,從本篇開始,我們開始試圖暫時跳脫出native/src檔案夾,主要是底層代碼基于我們的分工也完成的差不多了,接下來的一個月也到了識訓的時節,我將開始試圖分析examples檔案夾下的代碼,
與之前的作業相比,這些代碼顯得更具整體性,也能更好體現出SEAL的作業原理以及流程,算是對前面的集大成者了,因此很有分析的必要,
BFV
本篇我們將分析examples/1_bfv_basics.cpp,看一看SEAL對于bfv是如何實作的,
先照例補充一些理論基礎,
對于全同態加密,之前介紹過了,經過研究,我們發現,現在主流的研究方案包括 FHEW、TFHE、GSW、BGV、BFV、CKKS,
其中 FHEW、TFHE、GSW為布爾電路上的實作,其特性:
- 快速比較
- 支持任意布爾電路
- 快速 bootstrapping(噪聲重繪程序,減少因密文計算而產生的噪音,降低失敗可能性)
BGV、BFV是算數電路上的實作,其特性:
- 在整數向量上進行高效的SIMD計算(使用批處理)
- 快速高精度整數算術
- 快速向量的標量乘法
- Leveled design(通常不使用bootstrapping)
CKKS則是17年才提出來的,其特性:
- 快速多項式近似計算
- 相對快速的倒數和離散傅里葉變換
- 深度近似計算,如邏輯回歸學習
- 在實數向量上進行高效的SIMD計算(使用批處理)
- Leveled design(通常不使用bootstrapping)
OK,本篇我們重點介紹的是BFV,
BFV方案來源于文章 “Somewhat Practical Fully Homomorphic Encryption”,它是基于 RLWE (Ring-Learning With Errors)難題的全同態加密方案,
先來講一下環上多項式環,這部分挺重要的,如果不了解的話,可能會對文章閱讀造成困難,這里需要比較深厚的離散數學基礎,

更多理論基礎可以詳見這篇博客:
https://www.zhihu.com/column/c_1320055686139813888
代碼分析
繼續寫!
整個檔案只有一個函式example_bfv_basics,然后在example.cpp檔案中,當用戶選擇case1時,系統會呼叫這個函式,表明將要展示的是bfv演算法的例子,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/374884.html
標籤:區塊鏈
