littlebot
Published on 2025-04-10 / 7 Visits
0

【源码】基于Go语言的密文模型评估系统

项目简介

本项目基于Go语言和Lattigo v3.0.5库,实现了密文下的线性与非线性模型评估。支持加法同态和乘法同态,运用Blake2b哈希算法,基于Ring Learning With Errors(RLWE)实现同态加密方案,提供密钥生成、加密、解密、密文计算等基本功能,并且对性能进行了优化。

项目的主要特性和功能

  1. 实现基于RLWE的同态加密方案,支持加法和乘法同态。
  2. 借助Lattigo库和Blake2b哈希算法,实现高效同态加密操作。
  3. 提供密钥生成、加密、解密、密文计算等基础功能。
  4. 可进行密文上的线性变换、多项式求值等高级操作。
  5. 对同态加密操作进行性能优化,提升效率。
  6. 提供效率测试和准确率测试,评估系统性能。

安装使用步骤

环境准备

  • 系统环境:windows 10及以上或ubuntu 18及以上系统。
  • GO SDK:golang 1.18

运行步骤

  1. 源码下载与依赖拉取 shell git clone http://gitlab.os.adc.com/OppoResearch/dataintel/privacy/idash_otriver.git 注:go mod命令在starfire平台上可能无法联网使用,需要设置GOPROXY变量。

  2. 运行测试 运行./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】