myl7/fss 1.1.0
Function secret sharing (FSS) primitives including distributed point/comparison function (DPF/DCF)
Loading...
Searching...
No Matches
vdmpf.cuh File Reference

2-party verifiable distributed multi-point function (VDMPF). More...

#include <cuda_runtime.h>
#include <cuda/std/array>
#include <cuda/std/span>
#include <type_traits>
#include <cstddef>
#include <cassert>
#include <span>
#include <vector>
#include <fss/group.cuh>
#include <fss/prg.cuh>
#include <fss/hash.cuh>
#include <fss/prp.cuh>
#include <fss/util.cuh>
#include <fss/vdpf.cuh>
#include <fss/cuckoo_hash.cuh>

Classes

class  fss::Vdmpf< in_bits, max_points, bucket_bits, Group, Prg, XorHash, Hash, Prp, In, kappa, ch_lambda >
 2-party VDMPF scheme. More...
 
struct  fss::Vdmpf< in_bits, max_points, bucket_bits, Group, Prg, XorHash, Hash, Prp, In, kappa, ch_lambda >::BucketKey
 Per-bucket key containing the inner VDPF key data. More...
 
struct  fss::Vdmpf< in_bits, max_points, bucket_bits, Group, Prg, XorHash, Hash, Prp, In, kappa, ch_lambda >::Key
 VDMPF key for one party. More...
 

Detailed Description

2-party verifiable distributed multi-point function (VDMPF).

Author
Yulong Ming i@myl.nosp@m.7.or.nosp@m.g

The scheme is from the paper, Lightweight, Maliciously Secure Verifiable Function Secret Sharing (1: the published version), Section 4.

Definitions

Multi-point function: for the input domain \(\sG_{in} = \{0, 1\}^n\), the output domain \((\sG_{out}, +)\) that is a group, a set of \(t\) pairs \((a_j, b_j)\) where \(a_j \in \sG_{in}\) and \(b_j \in \sG_{out}\), a multi-point function \(f\) is a function that for any input \(x\), the output \(y\) has \(y = b_j\) when \(x = a_j\) for some \(j\), otherwise \(y = 0\).

VDMPF: extends DMPF with verifiability. Uses Cuckoo hashing to distribute point functions across buckets, then evaluates an inner VDPF per bucket.

  • Key generation: \(Gen(1^\lambda, \{(a_j, b_j)\}) \rightarrow (k_0, k_1)\).
  • Batch evaluation: \(BatchEval(k_i, \{x\}) \rightarrow (\{y_i\}, \pi_i)\).
  • Verification: \(Verify(\pi_0, \pi_1) \rightarrow \{Accept, Reject\}\).

Implementation Details

We fix the output domain size at 16B and always set the last word's LSB to 0, corresponding to \(\lambda = 127\). See Groupable for more details.

We limit the max input domain bit size to 128.

The inner VDPF uses uint as its input type and bucket_bits as the domain bit size.

References

  1. Leo de Castro, Antigoni Polychroniadou: Lightweight, Maliciously Secure Verifiable Function Secret Sharing. EUROCRYPT 2022: 150-179. https://doi.org/10.1007/978-3-031-06944-4_6.