Lattigo入门学习1

Lattigo安装入门

Lattigo简介

Lattigo是一个开源的库,为实现基于格的同态加密(Homomorphic Encryption,HE)算法提供了一系列的工具。它是用Go语言编写的,并通过提供易于使用的API来简化同态加密的实现。

同态加密是一种在加密数据上进行计算的方法,结果也是加密的,可以在不解密数据的情况下对其进行操作。这使得同态加密在需要处理敏感数据的场景(如云计算、隐私保护等)中非常有用。

Lattigo库实现了两种形式的同态加密:BFV方案和CKKS方案。

  1. BFV方案:BFV方案是一种支持任意数量的加法和乘法操作的整数同态加密方案。它允许用户在加密的整数上执行算术运算。
  2. CKKS方案:CKKS方案是一种近似的同态加密方案,它允许在复数或浮点数上执行算术运算,并得到一个近似的结果。

Lattigo的优势在于,相比较微软的SEAL库,Lattigo提供了一系列进阶操作,如多密钥的BFV方案、多密钥的CKKS方案和自举等,这些操作能使同态支持更多操作,完成更多运算。

初识Go语言

使用Lattigo首先需要了解什么是Go语言,Go语言的基本语法。

Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Robert Griesemer、Rob Pike和Ken Thompson在2007年开始设计Go,后在2009年正式公布。Go的语法接近C语言,但对于变量声明、函数返回值、错误处理、并发、内存分配和其他特性有一些改进。

安装Go

Go语言的安装十分简单,访问Go官网下载安装对应操作系统的安装包即可,参照官网给出的安装步骤

  1. Linux

    • 通过删除/usr/local/go 文件夹来删除任何以前的 Go 安装 (如果存在),然后将您刚刚下载的存档解压缩到 /usr/local 中,创建一个新的/usr/local/go

      rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.1.linux-amd64.tar.gz
      

      (您可能需要以 root 身份或通过 )运行该命令。sudo

      不要将存档解解压到现有的 /usr/local/go 目录中,会导致Go 安装产生损坏。

    • /usr/local/go/bin 添加到环境变量PATH中。为此,您可以将以下行添加到您的 $HOME/.profile 或 /etc/profile(用于系统范围的安装):

      export PATH=$PATH:/usr/local/go/bin
      

      **注意:**对配置文件所做的更改不会立即生效,需直接运行 shell 命令更新配置文件。如:source $HOME/.profile

    • 通过打开命令提示符并键入 以下命令:

      go version
      
    • 确认该命令打印已安装的 Go 版本。

  2. Mac

    • 打开下载的软件包文件,然后按照提示进行安装Go。

      该软件包将 Go 发行版安装到 /usr/local/go。同时应该将 /usr/local/go/bin目录放在您的环境变量PATH中。您可能需要重新启动任何 打开终端会话以使更改生效。

    • 通过打开命令提示符并键入以下命令:

      go version
      
    • 确认该命令打印已安装的 Go 版本。

  3. Windows

    • 打开下载的软件包文件,然后按照提示进行安装Go。

    • Windows 中,单击**“开始**”菜单;在菜单的搜索框中,键入cmd,然后按 Enter 键;在出现的命令提示符窗口中。

    • 键入以下命令命令:

      go version
      
    • 确认该命令打印已安装的 Go 版本。

Go语言入门

Go语言的使用可以参考教程Tutorial: Get started with Go,在这我只给出一些基本操作,首先创建一个空白文件夹。

  1. 项目初始模块,如果项目还不是模块的话,可以用过在目录下运行命令:

    go mod init <模块名>
    

    这里的<模块名>是你的模块标识符,通常是一个可以解析到你项目的路径(例如一个GitHub仓库的URL、本地的example/hellohello等)。运行完成后,在目录下会生成go.mod文件,会用来管理代码程序所用的依赖。

  2. 添加依赖,在Go语言中当你需要使用别人的库时,你就可以使用go get来下载一个库了。下面是go get命令的基本用法:

    go get <库的路径>
    

    这里的<库的路径>是你想要下载的库的导入路径。在Go语言官网下,你可以直接搜索Go支持的库Go管理库。例如你想安装Lattigo依赖,你可以访问lattigo package,那么在命令行中输入:

    go get github.com/tuneinsight/lattigo/v5
    

    即可完成导入Lattigo包。如果你想下载特定版本的库,你可以在库的路径后面加上@版本号

    :如果在安装时,出现网络问题,导致无法下载相应库,可以通过修改代理来解决:

    go env -w GOPROXY=https://goproxy.io,direct
    
  3. 调整项目依赖,使用go mod tidy命令确保你的go.modgo.sum文件包含了所有正确的依赖项和它们的版本,同时移除不再需要的依赖项。这个命令还会检查你的模块是否缺失某些必需的依赖项,并尝试下载它们:

    go mod tidy
    

    这样,你就能够确保你的项目依赖是最新和正确的。

  4. 运行程序,Go语言通过go run 来运行程序:

    go run .
    go run <package>
    

    go run . 是编译并运行当前目录中的代码,适合快速测试本地代码;而 go run package 用于编译并运行指定的 Go 包,适合当你需要运行的代码位于不同的目录或包中时使用。

  5. 生成可执行文件,Go语言可以直接用go build生成可执行文件:

    go build .
    go build <package>
    

此外,Go语言还有一些其它用法,例如包之间的调用,写测试代码以及错误返回等,具体可以查看入门 - Go 编程语言,其中的图书。

一个简单例子

在本节中,我们写一个简单例子。

  1. 首先,创建一个文件夹:

    mkdir hello
    cd hello
    
  2. 初始化模块:

    go mod init example/hello
    

    会在当前文件夹下生成go.mod文件。

  3. 创建hello.go文件,并复制如下代码:

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        fmt.Println("Hello, World!")
        fmt.Println("Program will pause for 5 seconds...")
        time.Sleep(5 * time.Second) // 暂停5秒
        fmt.Println("Program resumed.")
    }
    
  4. 运行文件

    go run .
    
  5. 打印输出结果

    D:\code\go\hello>go run .
    Hello, World!
    Program will pause for 5 seconds...
    Program resumed.
    
  6. 编译成可执行文件

    go build .
    

    可执行文件运行结果

在Go语言中,一些默认的包:

包名描述
fmt用于格式化输入输出,包括打印到控制台和读取用户输入。
io 和 ioutil用于基本的输入输出功能,如文件读写和数据流操作。
os提供了与操作系统交互的功能,包括文件系统操作、环境变量、进程管理等。
net用于网络相关的操作,包括TCP/UDP通信,HTTP客户端和服务端实现。
http用于处理HTTP请求和响应,构建Web服务器和客户端。
encoding/json提供了JSON的序列化和反序列化功能。
time提供了测量和显示时间和日期的功能。
strconv用于基本类型与其字符串表示的相互转换。
bytes 和 strings提供了对字节切片和字符串的操作函数。
math包含基本的数学函数和常量。
sort提供了对切片和用户定义集合的排序和搜索功能。
sync 和 sync/atomic用于同步不同的goroutine,实现互斥锁和原子操作。
log用于记录日志信息,支持不同的日志级别。
regexp用于正则表达式匹配和查找。
flag用于解析命令行参数。
context提供了一个上下文接口,用于传递截止日期、取消信号以及其他请求范围的值。
errors用于创建和操作错误。

有了Go语言相关的基础,再搭配一款代码编辑器(推荐VScode),我们接下来可以开始尝试使用Lattigo了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值