Delphi源码学习与分析

Table of Contents

1.

2. Rust部分代码分析

2.1. algebra:

algebra文件夹提供了基本的代数操作,主要包括:

  1. 如何将一个整数表示为二进制流,以及对应的数字的写入写出
  2. 大整数
  3. 多项式操作
  4. 固定点
  5. 域相关

从中可以看出,algebra中不涉及到加密解密算法,仅仅是定义一些基本的结构和操作。

2.1.1. Polynomial

  1. struct
    1. Plymomial:该结构体主要用来存储多项式的参数,Vec<F>
    2. 方法:唯一值得重视的是evalute,给定一组二进制向量,计算带入多项式的结果

2.1.2. bytes

整数数据的二进制形式的读取与写入

  1. trait ToBytes, FromBytes:写入成byte,读取一个byte
  2. macro
    1. arraybytes,该宏用于负责u8,u16 u32 u64等数据的二进制的写入写出
    2. tobytes:
    3. pushtovec:

2.1.3. biginteger

  1. traits
    1. BigInteger,除了byte写入写出的操作,就是字节遍历的操作和各类数学运算
    2. BigInteger32
    3. BigInteger64
  2. mod
    1. arithmetic,封装了一些算术运算,不知道具体在哪里使用的
    2. adc, carry=a+b+carry
    3. sbb: borrow=a-b-borrow
    4. macwithcarry: carry=a+b*c+carry

2.1.4. fixedpoint

  1. trait
    1. FixedPointParameters:为一个固定点设置的参数
      1. 参数包括:MANTISSACAPACITY, EXPONENTCAPACITY
      2. 函数:truncatefloat
  2. Struct
    1. FixedPoint
      1. 参数:inner, inner满足域的性质。nummuls, u8。\params: phantomdata类型的一个FixedPointParameters

相关的操作运算:

  1. One
  2. Zero
  3. PhantomData
  4. Add,AddAssign
  5. Mul,M…
  6. Neg
  7. Sub,S…

2.1.5. fields

  1. trait
    1. Field,一个域满足很多数学计算性质,除此之外还有编程上的一些性质,无参数
    2. FpParameters, 有限域所涉及到的参数集合。所涉及到的变量
      1. 模数(modulus),模数的位数
      2. shave bits
      3. R,R2,INVariant
      4. generator,一个乘法生成器,也是一个二次非剩余
      5. capacity,
      6. others…
    3. PrimeField,素数域的trait,包含如下的函数集合:
      1. fromrepr,intorepr,即根据一个大数构造一个有效域出来
      2. fromrandombytes,根据一个bytes返回有限域中的一个元素
      3. characteristic,不知道,实现上返回了模数
    4. SquareRootField,支持高效的平方根操作的field,包含以下函数:
      1. legendre,返回勒让得符号
      2. sqrt,…,平方根操作相关
  2. 其他
  3. 枚举变量勒让德符号,包括0,平方根剩余、平方根非剩余三种
  4. BitIterator,结构体包含变量的指针及其长度,可以遍历
  5. macros
    1. implfiledintobigint:为大数构建对应的有限域!
  6. 函数
    1. batchinversion: AES算法中涉及到的inversion操作

2.1.6. 其他

  1. trait
    1. UniformRandom
      1. 包含有一个函数,uniform。给定一个随机数,返回自身。

2.2. crypto-primitives

加密运算环节主要实现了三种简单的加密运算,分别是additiveshare,beaversmul以及garbled circuits。其中加法的共享主要用来进行线性的加密运算,beavers mul主要用来进行乘法同态运算,而gc则用来进行非线性激活函数的运算。

TODO beaversmul缺少介绍

2.2.1. additiveshare

  1. trait
    1. Share,一个复杂的trait,本身是一个变量,包含以下函数:
      1. share,将一个随机数一分为两个AdditiveShare变量
      2. sharewithrandomness,完成1所用
      3. randomizelocalshare(&AdditiveShare<Self>,&self::Ring),使用ring将当前的share岁计划.
  2. Struct
    1. AdditiveShare,结构体,只有一个share类型的参数inner.方法包括:
      1. combine,解密
      2. addconstant
    2. ShareIterator, 顾名思义,Share的一个iterator
  3. others
    1. 类型:FixedPoint<FixedPointparameters>
      1. From <Additiveshare<FixedPoint<Fixedpointparameters>>> 函数
      2. 为FixedPoint<FixedPointparameters> 实现Share trait
        1. 此时,Ring便是Field,constant类型与FixedPoint<FixedPointparameters>相同

2.2.2. beaversmul

  1. struct

2.2.3. gc (garbled circuits)

2.3. neural-network

neural-network主要封装了:

  1. fc,conv等线性层
  2. relu,relu的多项式近似等非线性层
  3. input,output的additive share实现
  4. layer和neural network的抽象

2.3.1. layers

  1. LayerDims, 包含inputdims和outputdims
  2. Layer, 包含线性和非线性
  3. LayerInfo, 包含layerdims和linearlayerinfo等东西

其中linearlayer包含如下:

pub enum LinearLayer<F, C> {
    Conv2d {
          dims: LayerDims,
          params: Conv2dParams<F, C>,
    },
    FullyConnected {
          dims: LayerDims,
          params: FullyConnectedParams<F, C>,
    },
    FullyConnectedD {
          dims: LayerDims,
          params: FullyConnectedParamsD<F, C>,
    },
    AvgPool {
          dims: LayerDims,
          params: AvgPoolParams<F, C>,
    },
    Identity {
          dims: LayerDims,
    },
}

linear layer info包含如下:

pub enum LinearLayerInfo<F, C> {
    Conv2d {
          kernel: (usize, usize, usize, usize),
          padding: Padding,
          stride: usize,
    },
    FullyConnected,
    FullyConnectedD,
    AvgPool {
          pool_h: usize,
          pool_w: usize,
          stride: usize,
          normalizer: C,
          _variable: PhantomData<F>,
    },
    Identity,
}

想查找哪些layer,请自己查。

2.3.2. tensors

tensors主要包括Input<T>和Output<T>两种范型,二者都是四维张量。 T的实例化一般就是share和AdditiveShare。

此处比较简单,故略

2.3.3. others

  1. enum
    1. EvalMethod, 其实就是device,是cpu还是cuda
  2. trait
    1. Evaluate,相当于pytorch中的forward,包含两种函数,一个是在cpu上forward,另一个是cuda上
  3. struct
    1. NeuralNetwork,包含一个layer的Vec,还有一个EvalMethod。包含以下函数:
      1. validate,返回一个bool值,代表该神经网络是否有效前一层的输出是否贴合后一层的输入
      2. fromnumpy,给定npy文件的路径,读取得到神经网络模型中的所有参数
      3. Ealuate trait实现
    2. NeuralArchitecture,包含Vec<LayerInfo<F,C>>,主要就是介绍神经网络的结构信息

2.4. protocols-sys

protocols-sys定义了完整的密钥交换协议系统。主要包括:

  1. 调用C++的加密解密服务
  2. 为神经网络层和输入输出定义加密解密的结构体,实现对应的流程

2.4.1. clientcg

  1. struct & enum
    1. Conv2D,Fullyconnected, 二者都是包含了四个变量
      1. Metadata:有关于该层神经网络的一些元信息,被C++侧定义
      2. ClientFHE:同态加密的一些需求,如加密器,解密器等
      3. ClientShares:顾名思义
    2. SealclientCG,上述两种中的一种
  2. trait
    1. ClientCG,封装了上述结构体一些必须的操作,包括:
      1. 参数, 包括密钥、层信息、输入维度、输出维度等。
      2. 预处理
      3. 后处理
      4. 解密

2.4.2. clientgen

  1. struct
    1. SealClientGen,仅包含一个参数,即上面提到的ClientFHE
  2. trait
    1. ClientGen,trait,包含三个函数
      1. new,略
      2. triplespreprocess
      3. triplespostprocess

2.4.3. keyshare

  1. struct
    1. KeyShare. KeyShare便是C++版里的SerialCT,其定义为:

          pub struct SerialCT {
          pub inner: *mut ::std::os::raw::c_char,
          pub size: u64,
      }
      
  2. trait
    1. KeyShare,最主要的函数就是generate。该函数会基于密钥构建出一个包含了同态加密和解密的函数

2.4.4. servercg

类似于clientcg,略

2.4.5. servergen

类似于clientgen,略

2.4.6. others

  1. struct
    1. SealCT: SerialCT的rust封装,其格式类似于:

      pub struct SerialCT {
          pub inner: *mut ::std::os::raw::c_char,
          pub size: u64,
      }
      
    2. 包含如下函数: en(de)cryptvec,顾名思义,加解密一个向量

2.5. protocols

关于通讯的一些东西,略


Author: Zi Liang (liangzid@stu.xjtu.edu.cn) Create Date: Fri Feb 3 14:59:27 2023 Last modified: 2026-05-12 Tue 20:20 Creator: Emacs 30.2 (Org mode 9.7.11)