项目简介
本项目基于Go语言和Lattigo v3.0.5
库,实现了密文下的线性与非线性模型评估。支持加法同态和乘法同态,运用Blake2b哈希算法,基于Ring Learning With Errors(RLWE)实现同态加密方案,提供密钥生成、加密、解密、密文计算等基本功能,并且对性能进行了优化。
项目的主要特性和功能
- 实现基于RLWE的同态加密方案,支持加法和乘法同态。
- 借助Lattigo库和Blake2b哈希算法,实现高效同态加密操作。
- 提供密钥生成、加密、解密、密文计算等基础功能。
- 可进行密文上的线性变换、多项式求值等高级操作。
- 对同态加密操作进行性能优化,提升效率。
- 提供效率测试和准确率测试,评估系统性能。
安装使用步骤
环境准备
- 系统环境:
windows 10
及以上或ubuntu 18
及以上系统。 - GO SDK:golang 1.18
运行步骤
-
源码下载与依赖拉取
shell git clone http://gitlab.os.adc.com/OppoResearch/dataintel/privacy/idash_otriver.git
注:go mod命令在starfire平台上可能无法联网使用,需要设置GOPROXY变量。 -
运行测试 运行
./utils_test.go
下面的五个测试TASK,对五个任务进行测试。shell sudo go build -buildvcs=false sudo go test -c utils_test.go utils.go load.go ckks_basic.go model.go linear.go nonlinear.go -o evaluate.test ./evaluate.test
用例
线性模型 + 实部编码
```go // model = 1(linear model), task = 1(continuous task), thread = 6(6 goroutine), encodeParams = 1(weight * encodeParams) params := ModelParams{1, 1, 6, 1} evaRes := params.Model() label := LoadLabel("label/label_1.csv") RMSE := CompareRMSE(evaRes, label) fmt.Println("TASK 1 RMSE: ", RMSE)
// model = 1(linear model), task = 4(discrete task), thread = 4(4 goroutine), encodeParams = 1(weight * encodeParams) params := ModelParams{1, 4, 4, 1} evaRes := params.Model() label := LoadLabel("label/label_4.csv") AUC := CompareAUC(evaRes, label) fmt.Println("TASK 4 AUC: ", AUC) ```
非线性模型 + 实部编码
```go // model = 2(nonlinear model), task = 1(continuous task), thread = 6(6 goroutine), encodeParams = 1(weight * encodeParams) params := ModelParams{2, 1, 6, 1} evaRes := params.Model() label := LoadLabel("label/label_1.csv") RMSE := CompareRMSE(evaRes, label) fmt.Println("RMSE: ", RMSE)
// model = 2(nonlinear model), task = 4(discrete task), thread = 6(6 goroutine), encodeParams = 1(weight * encodeParams) params := ModelParams{2, 4, 6, 1} evaRes := params.Model() label := LoadLabel("label/label_4.csv") AUC := CompareAUC(evaRes, label) fmt.Println("TASK 4 AUC: ", AUC) ```
复数编码 (将任务1的权重编码到实部,将任务5的权重编码到虚部)
```go // model = 1(linear model), task0 = 1(continuous task), thread = 6(6 goroutine), task1 = 5(discrete task) encodeParams = 1(weight * encodeParams) params := ModelParallelParams{1, 1, 5, 6, 1} evaRes0, evaRes1 := params.ModelParallel() label1 := LoadLabel("label/label_1.csv") RMSE1 := CompareRMSE(evaRes0, label1) fmt.Println("TASK 1 RMSE: ", RMSE1)
label5 := LoadLabel("label/label_5.csv") AUC5 := CompareAUC(evaRes1, label5) fmt.Println("TASK 5 AUC: ", AUC5) ```
注:此项目仅为示例项目,实际使用中可能需要根据具体需求进行修改和优化,且由于涉及同态加密技术,需要一定的密码学知识才能完全理解其原理和实现细节,仅可用于学习和研究用途。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】