该算法来自 USENIX 2023 One Server for the Price of Two: Simple and Fast Single-Server Private Information Retrieval
1. 将 Database 转换为矩阵
服务器原有的 Database 的规模为 N,将 Database 转换为边长为 $\sqrt{N}$ 的矩阵的形式,这样客户端发起的查询只需要 $\sqrt{N}$ 规模,由于查询被加密,因此服务端无法得知查询的信息,而客户端只能得到查询向量的 1 对应的位置(查询位置)的信息,因此也无法知晓除了查询外的其他信息。

2. 使用 LWE 方案进行加密
2.1 LWE 问题
已知一个矩阵 $A$ 和一个秘密向量 $s$,以及一个随机噪音向量 $e$,并且知道 $\hat{b}$ ,$\hat{b}$ 满足: $$ \hat{b}=As+e $$ 如何根据矩阵 $A$ 和 $\hat{b}$ 还原 $s$,这类的问题统称 LWE(Learning With Error)问题。
- Search LWE 问题
$$ \text{LWE}(n,m,q,x_B): \text{Search Version}\ \text{Let A} \leftarrow \mathbb{Z}_q^{m \times n},s \leftarrow \mathbb{Z}q,e\leftarrow x_B^m,x_B\text{是最大值为B的随机分布}\ \text{Given}(A,As+e),\text{find s’} \in \mathbb{Z}^n_q \text{ s.t. }||As’-(As+e)||{\infty} \leq B $$
- Decisional LWE 问题
$$ \text{LWE}(n,m,q,x_B): \text{Decisional Version}\ \text{Let A }\leftarrow \mathbb{Z}_q^{m \times n},s \leftarrow \mathbb{Z}_q,e\leftarrow x_B^m,v\leftarrow \mathbb{Z}_q^m\ \text{Distinguish}(A,As+e)\text{ from }(A,v) $$
2.2 LWE 的加解密
-
$KeyGen(1^{\lambda})$
- 随机选取 LWE 所需的矩阵 $A \leftarrow \mathbb{Z}_q^{m \times n},s \leftarrow \mathbb{Z}_q,e\leftarrow x_B^m$ ,并计算出 $b=As+e$
- 输出 $sk=s,pk=(A,b)$
-
加密
-
首先随机的选取一个向量 $r \leftarrow \mathbb{Z}_2^m \in {0,1}^m$ ,计算 $c_0\leftarrow r^TA$
-
然后计算 $c_1 \leftarrow r^Tb+ \lfloor q/2\rfloor x$
-
输出密文 $(c_0,c_1)$
-
-
解密
- 计算 $\hat{x}=c_1-c_0\cdot s$
- 检查 $|\hat{x}|<q/4$ ,如果符合输出1,不符合输出0
3. SimplePIR 算法流程解析
- $Setup(db \in \mathbb{Z}_p^{\sqrt{N}\times \sqrt{N}})\rightarrow (hint_s,hint_c)$
$$ hint_c=db \cdot A\in \mathbb{Z}_q^{\sqrt{N}\times n}\ \Delta=\lfloor q/p \rfloor $$
-
$Query(i\in [N])\rightarrow (st,qu)$
-
设查询的index为i,转换为坐标$(i_{row},i_{col})$
-
随机生成 $s$ 和 $e$
-
计算$qu \leftarrow (As+e+ \Delta \cdot u_{i_{col}}) \in \mathbb{Z}^{\sqrt{N}}_q$
-
其中 $u_{i_{col}}$ 是只有 $i_{row}$ 为 1 的列向量
-
返回 $(st,qu) \leftarrow ((i_{row},s),qu)$
-
-
$Answer(db,hint_s,qu)\rightarrow ans$
- 计算 $ans \leftarrow db \cdot qu$
-
$Recover(st,hint_c,ans)\rightarrow d$
-
计算 $\hat{d}\leftarrow (ans[i_{row}]-hint_c[i_{row}:] \cdot s )$
-
$d \leftarrow Round_{\Delta}(\hat{d})/\Delta \in \mathbb{Z}_p$
-