Randomized Encodings in NC^0

参考文献:

  1. [IK00] Ishai Y, Kushilevitz E. Randomizing polynomials: A new representation with applications to round-efficient secure computation[C]//Proceedings 41st Annual Symposium on Foundations of Computer Science. IEEE, 2000: 294-304.
  2. [IK02] Ishai Y, Kushilevitz E. Perfect constant-round secure computation via perfect randomizing polynomials[C]//Automata, Languages and Programming: 29th International Colloquium, ICALP 2002 Málaga, Spain, July 8–13, 2002 Proceedings 29. Springer Berlin Heidelberg, 2002: 244-256.
  3. [AIK04] Applebaum B, Ishai Y, Kushilevitz E. Cryptography in NC^0[J]. SIAM Journal on Computing, 2006, 36(4): 845-888.
  4. [AIK06] Applebaum B, Ishai Y, Kushilevitz E. Computationally private randomizing polynomials and their applications[J]. computational complexity, 2006, 15(2): 115-162.
  5. [Aro09] Arora S, Barak B. Computational complexity: a modern approach[M]. Cambridge University Press, 2009.
  6. [App13] Applebaum B. Cryptography in constant parallel time[M]. Springer Science & Business Media, 2013.

Preliminary

Nick’s Class

Nick’s Class 是复杂性类 P/poly 的子类,它可以被多项式大小、对数深度的电路所计算。换句话说,在大规模并行计算机上,计算延迟仅仅是对数级别。

我们说语言 L ∈ N C i L \in NC^i LNCi,如果判定性函数 x ∈ L    ⟺    f ( x ) = 1 x \in L \iff f(x)=1 xLf(x)=1 可以被电路族 { C n } n \{C_n\}_n {Cn}n 计算,其中 C n C_n Cn 的大小是 O ( p o l y ( n ) ) O(poly(n)) O(poly(n)),深度是 O ( log ⁡ i ( n ) ) O(\log^i(n)) O(logi(n)),扇出是有界常数。类 N C 0 NC^0 NC0 的电路深度是常数。

对于无界(多项式)扇出的电路,定义复杂性类 A C i AC^i ACi。可以证明 N C i ⊆ A C i ⊆ N C i + 1 NC^i \subseteq AC^i \subseteq NC^{i+1} NCiACiNCi+1

我们说某个计算任务具有 efficient parallel algorithms,如果它可以被 n O ( 1 ) n^{O(1)} nO(1) 个处理器在 log ⁡ O ( 1 ) ( n ) \log^{O(1)}(n) logO(1)(n) 时间内解决。定义 N C = ∪ i ≥ 0 N C i NC=\cup_{i \ge 0} NC^i NC=i0NCi,它恰好包含了所有的可以高效并行计算的语言。

如果函数 f : { 0 , 1 } ∗ → { 0 , 1 } ∗ f:\{0,1\}^* \to \{0,1\}^* f:{0,1}{0,1} 可以被一族多项式大小的深度为 O ( log ⁡ i ( n ) ) O(\log^i(n)) O(logi(n)) 的电路所计算,这个电路包含:有界扇入的 OR 以及 AND,无界扇入的 g : { 0 , 1 } ∗ → { 0 , 1 } ∗ g:\{0,1\}^* \to \{0,1\}^* g:{0,1}{0,1} 的神谕门(oracle gates),我们说 f f f 可以 N C i NC^i NCi 归约到 g g g,记为 f ∈ N C i [ g ] f \in NC^i[g] fNCi[g]。特别地,如果 g ∈ N C j g \in NC^j gNCj,那么 f ∈ N C i + j f \in NC^{i+j} fNCi+j

输出局部性(Output Locality):函数 f f f 每个输出比特所依赖的输入比特的最大数量。只说 Locality 默认是它。输出局部性至多为常数 c c c(深度也是常数)的所有函数组成了 N C c 0 NC_c^0 NCc0 类。

输入局部性(Input Locality):函数 f f f 每个输入比特所影响的输出比特的最大数量。这个用的较少。

次数(Degree):函数 f f f 每个输出比特表示成一个多变元多项式的次数。在 G F ( 2 ) GF(2) GF(2) 上总有 b 2 = b b^2=b b2=b,因此 Output Locality 是次数的上界。

Other Class

一些复杂性类:

  • P(deterministic polynomial time)
  • NP(non-deterministic polynomial time)
  • L(deterministic logarithmic space),对数空间的确定性图灵机
  • NL(non-deterministic logarithmic space),对数空间的非确定性图灵机
  • PSpace(deterministic polynomial space)
  • PH(polynomial hierarchy),定义 P H = ⋃ i ∑ i p PH=\bigcup_i \sum_i^p PH=iip,其中 ∑ i p \sum_i^p ip 包含所有 x ∈ L    ⟺    ∃ u 1 , ∀ u 2 , ⋯   , Q i u i , M ( x , u 1 , u 2 , ⋯   , u i ) = 1 x\in L \iff \exists u_1,\forall u_2,\cdots,Q_iu_i,M(x,u_1,u_2,\cdots,u_i)=1 xLu1,u2,,Qiui,M(x,u1,u2,,ui)=1 的那些语言,定义 ∏ i p \prod_i^p ip 包含所有 x ∈ L    ⟺    ∀ u 1 , ∃ u 2 , ⋯   , Q i u i , M ( x , u 1 , u 2 , ⋯   , u i ) = 1 x\in L \iff \forall u_1,\exists u_2,\cdots,Q_iu_i,M(x,u_1,u_2,\cdots,u_i)=1 xLu1,u2,,Qiui,M(x,u1,u2,,ui)=1 的那些语言,满足 ∏ i p = c o ∑ i p \prod_i^p=\mathbf{co}\sum_i^p ip=coip,以及 ∑ 1 p = N P \sum_1^p=\mathbf{NP} 1p=NP ∏ 2 p = c o N P \prod_2^p=\mathbf{coNP} 2p=coNP
  • # \# #P,所有满足 f ( x ) = ∣ { y ∈ { 0 , 1 } p o l y ( ∣ x ∣ ) : M ( x , y ) = 1 } ∣ ∈ N f(x)=\left|\{y \in \{0,1\}^{poly(|x|)}: M(x,y)=1\}\right| \in \mathbb N f(x)= {y{0,1}poly(x):M(x,y)=1} N 的函数,其中 M M M 是多项式时间的确定性图灵机
  • ⊕ \oplus P,所有满足 f ( x ) = [  ⁣ ⁣ [ ∣ { y ∈ { 0 , 1 } p o l y ( ∣ x ∣ ) : M ( x , y ) = 1 } ∣ ≡ 1 ( m o d 2 ) ]  ⁣ ⁣ ] ∈ { 0 , 1 } f(x) = \left[\!\!\left[\left|\{y \in \{0,1\}^{poly(|x|)}: M(x,y)=1\}\right| \equiv 1 \pmod2\right]\!\!\right] \in \{0,1\} f(x)=[[ {y{0,1}poly(x):M(x,y)=1} 1(mod2)]]{0,1} 的函数,其中 M M M 是多项式时间的确定性图灵机
  • ⊕ \oplus L,类似的,替换为对数空间的确定性图灵机

f ( n ) f(n) f(n) advice sequence 指的是一个序列 A = ( a 1 , a 2 , ⋯   ) A=(a_1,a_2,\cdots) A=(a1,a2,),其中 ∣ a n ∣ ≤ f ( n ) |a_n| \le f(n) anf(n)。给定语言 B ⊆ { 0 , 1 , # } ∗ B \subseteq \{0,1,\#\}^* B{0,1,#},定义 B @ A = { x ∣ x # a ∣ x ∣ ∈ B } B @ A=\{x \mid x\# a_{|x|} \in B\} B@A={xx#axB}。对于有界复杂性类 C \mathbf{C} C,定义它的 non-uniform analogues 如下:
C / f = { B @ A ∣ B ∈ C  AND  A  is an  f ( n )  advice sequence } \mathbf{C}/f = \{B @ A \mid B \in \mathbf{C}\text{ AND }A\text{ is an }f(n)\text{ advice sequence}\} C/f={B@ABC AND A is an f(n) advice sequence}
于是可以分别定义:P/poly,NP/poly,L/poly,NL/poly,PSpace/poly, ⊕ \oplus P/poly, ⊕ \oplus L/poly,等等。

一些包含关系:
在这里插入图片描述

Branching Program

分支程序定义为元组 B P = ( G , ϕ , s , t ) BP=(G,\phi,s,t) BP=(G,ϕ,s,t)

  • G = ( V , E ) G=(V,E) G=(V,E) 是有向无环图,
  • ϕ : E → { 1 , { x i ˉ , x i } i } \phi:E \to \{1,\{\bar{x_i},x_i\}_i\} ϕ:E{1,{xiˉ,xi}i} 是标签函数,其中 x i x_i xi 是变量
  • s s s 是起点, t t t 是终点
  • 输入 w = ( w 1 , ⋯   , w n ) w=(w_1,\cdots,w_n) w=(w1,,wn) 诱导了子图 G w G_w Gw,包含所有满足 ϕ ( e ) = 1 \phi(e)=1 ϕ(e)=1 的那些边以及对应的点
  • 对于 deterministic BP,额外要求每个 G w G_w Gw 中的所有点的出度都不大于 1 1 1,输入 w w w 被接受,如果 G w G_w Gw 中包含一条 s → t s \to t st 的路径
  • 对于 non-deterministic BP,输入 w w w 被接受,如果 G w G_w Gw 中包含至少一条 s → t s \to t st 的路径
  • 对于 counting mod- p p p BP,输入 w w w 被接受,如果 G w G_w Gw 中包含的 s → t s \to t st 的路径数量模 p p p 非零

例如:

在这里插入图片描述

Randomizing Polynomials

大多数布尔函数都不能表示为低次多项式(尤其是低于输入长度),这导致了很深的电路,难以并行处理。[IK00] 通过把计算 f ( x ) f(x) f(x) 本身放松为计算关于 f ( x ) f(x) f(x) 的随机分布,打破了上述限制。它的一个用途是获得常数轮(2 或 3)的 MPC 协议。

K \mathcal K K 是取值范围,对于函数 f : K n → K f: \mathcal K^n \to \mathcal K f:KnK,将它随机化为一个多项式向量 p ( x , r ) = ( p 1 ( x , r ) , ⋯   , p s ( x , r ) ) p(x,r)=(p_1(x,r),\cdots,p_s(x,r)) p(x,r)=(p1(x,r),,ps(x,r)),输入 x ∈ K n x \in \mathcal K^n xKn,随机输入 r ∈ K m r \in \mathcal K^m rKm,定义分布 P ( x ) = { p ( x , r ) : r ← K m } P(x)=\{p(x,r):r \gets \mathcal K^m\} P(x)={p(x,r):rKm}。对于布尔函数,可以选取 K = G F ( 2 ) \mathcal K=GF(2) K=GF(2)

布尔函数的随机多项式:

在这里插入图片描述

第一条是 privacy 要求,第二条是 correctness 要求。将 p ( x , r ) p(x,r) p(x,r) 中的 maximal total-degree 作为它的 degree,将 s s s 称为 output complexity,将 m m m 称为 randomness complexity,将 s + m s+m s+m 称为 complexity

一个有用的定理:
在这里插入图片描述

具体的构造是 p ( x , r ) = r T ( A x − b ) p(x,r)=r^T(Ax-b) p(x,r)=rT(Axb):当 A x = b Ax=b Ax=b P ( x ) = 0 P(x)=0 P(x)=0;当 A x ≠ b Ax \neq b Ax=b P ( x ) = U ( K ) P(x)=\mathcal U(\mathcal K) P(x)=U(K)。特别地,

  • 设置 A = I n A=I_n A=In b = 0 n b=0^n b=0n,那么 p ( x , r ) = r T x ( m o d 2 ) p(x,r)=r^Tx \pmod 2 p(x,r)=rTx(mod2) 就是 OR 的随机化
  • 设置 A = I n A=I_n A=In b = 1 w b=1^w b=1w,那么 p ( x , r ) = r T ( x − 1 n ) ( m o d 2 ) p(x,r)=r^T(x-1^n) \pmod 2 p(x,r)=rT(x1n)(mod2) 就是 AND 的随机化
  • 设置 A = I n A=I_n A=In b = t b=t b=t,那么 p ( x , r ) = r T ( x − t ) ( m o d 2 ) p(x,r)=r^T(x-t) \pmod 2 p(x,r)=rT(xt)(mod2) 就是 testing equality 的随机化

虽然 degree-2 polynomials 可以随机化 unbounded fan-in AND,但是 f 1 + f 2 f_1+f_2 f1+f2 的随机多项式并不是两者的随机多项式的加和。[IK00] 证明了:大多数的布尔函数不能被 degree-2 polynomials 表出

Degree-3

[IK00] 利用 Branching Program 构造出了任意布尔函数的 degree-3 随机多项式,这是紧的。他们利用 affine transformation L : x → M x L:x \to M_x L:xMx 以及 r a n k ( M w ) rank(M_w) rank(Mw) 构造出了 degree-3 polynomials from mod- p p p BPs,但是 D 0 D_0 D0 D 1 D_1 D1 的统计距离仅大于 0.08 0.08 0.08,需要多次重复以提高正确性。

[AIK04] 给出了另一种构造,degree-3 polynomials from mod- 2 2 2 BPs,具有更好的性能。假设 B P = ( G , ϕ , s , t ) BP=(G,\phi,s,t) BP=(G,ϕ,s,t) 是大小为 l l l 的 mod- 2 2 2 BP,计算了布尔函数 f : { 0 , 1 } n → { 0 , 1 } f:\{0,1\}^n \to \{0,1\} f:{0,1}n{0,1}。图 G G G 是有向无环图,我们将它拓扑排序,将 s s s 排序为 1 1 1,将 t t t 排序为 l l l

A ( x ) ∈ { 0 , 1 } l × l A(x) \in \{0,1\}^{l \times l} A(x){0,1}l×l 是子图 G x G_x Gx 的邻接矩阵,确切地说 ( i , j ) ∉ E ⇒ A ( x ) i j = 0 (i,j) \notin E \Rightarrow A(x)_{ij}=0 (i,j)/EA(x)ij=0 以及 ( i , j ) ∈ E ⇒ A ( x ) i j = ϕ ( i , j ) (i,j) \in E \Rightarrow A(x)_{ij}=\phi(i,j) (i,j)EA(x)ij=ϕ(i,j)。定义 L ( x ) L(x) L(x) 是将矩阵 A ( x ) − I A(x)-I A(x)I 的第 1 1 1 列和第 l l l 行删除后的 l − 1 l-1 l1 阶子矩阵,那么:
f ( x ) = ( I + A ( x ) + A ( x ) 2 + ⋯ + A ( x ) l ) 1 , l = ( I − A ( x ) ) 1 , l − 1 = det ⁡ L ( x ) ∈ G F ( 2 ) \begin{aligned} f(x) &= (I+A(x)+A(x)^2+\cdots+A(x)^{l})_{1,l}\\ &= (I-A(x))_{1,l}^{-1}\\ &=\det{L(x)} \in GF(2) \end{aligned} f(x)=(I+A(x)+A(x)2++A(x)l)1,l=(IA(x))1,l1=detL(x)GF(2)
给定 r ( 1 ) ∈ { 0 , 1 } ( l − 1 2 ) r^{(1)} \in \{0,1\}^{\binom{l-1}{2}} r(1){0,1}(2l1) 以及 r ( 2 ) ∈ { 0 , 1 } l − 2 r^{(2)} \in \{0,1\}^{l-2} r(2){0,1}l2,将它们按照下图排序出矩阵 R 1 ( r ( 1 ) ) R_1(r^{(1)}) R1(r(1)) R 2 ( r ( 2 ) ) R_2(r^{(2)}) R2(r(2))

在这里插入图片描述

根据如下的定理,可以得到任意布尔函数的 degree-3 随机多项式,

在这里插入图片描述

任意的布尔函数 f f f,如果它可以表示为大小 l l l 的 mod- 2 2 2 BP,那么它也可以表示为 m = ( l 2 ) − 1 m=\binom{l}{2}-1 m=(2l)1 s = ( l 2 ) s=\binom{l}{2} s=(2l) 的 degree-3 完美随机多项式。只要这个布尔函数可以被 BP 高效计算(多项式大小的 l l l),那么也就存在高效的随机多项式表示。

Randomized Encodings

[AIK04] 提出了更一般的定义:给定函数 f ( x ) f(x) f(x),转化为另一个函数 f ^ ( x , r ) \hat{f}(x,r) f^(x,r),使得它满足:如果 f ( x ) ≠ f ( x ′ ) f(x) \neq f(x') f(x)=f(x) 则分布 f ^ ( x , U ) , f ^ ( x ′ , U ) \hat{f}(x,\mathcal U), \hat{f}(x',\mathcal U) f^(x,U),f^(x,U) 的支撑不相交;如果 f ( x ) = f ( x ′ ) f(x)=f(x') f(x)=f(x) 则两个分布相同。函数 f ^ \hat{f} f^ 被视为 f f f 的一个 information-theoretically equivalent representation,称之为 randomized encoding

在这里插入图片描述

可以推广到无界(但多项式)版本:

在这里插入图片描述

根据概率的取值不同,随机编码的正确性可以分为 perfectstatistical。根据统计距离的取值不同,随机编码的隐私性可以分为 perfectstatistical 以及 computational。如果存在一个完美隐私的模拟器 S S S,并且满足 S ( U l ) ≡ U s S(\mathcal U_l) \equiv \mathcal U_s S(Ul)Us,那么称它是 balanced simulator。如果满足 m = s − l m=s-l m=sl(相同的拉伸长度),那么称之为 stretch-preserving

现在,可以定义如下的三种随机编码,

在这里插入图片描述

如果函数 f f f 可以表示为上述三种 uniform randomized encoding in N C 0 NC^0 NC0(编码可以高效并行),那么定义对应的复杂性类 PRENSREN 以及 CREN。易知它们之间的包含关系。

完美编码具有两个良好的性质:对于任意的 x x x,函数 f ^ ( x , ⋅ ) \hat{f}(x,\cdot) f^(x,)单射;如果 f f f 是置换,那么 f ^ \hat{f} f^ 也是置换

一般的函数可以通过布尔函数组合出来,其随机编码就是这些布尔函数的随机编码的级联:

在这里插入图片描述

函数的随机编码的随机编码,依旧是函数的一个随机编码:在这里插入图片描述

计算编码和完美/统计编码的复合,是计算编码;统计编码和完美编码的复合,是统计编码。

Locality-4

[AIK04] 给出了任意函数在 N C 4 0 NC_4^0 NC40 内的随机编码。在较温和的假设下,密码原语 OWF,PRG,CR-Hash,Enc,Sign,MACs,NI-Sommit 都可以在 N C 0 NC^0 NC0 内实现。

第一个构造:

在这里插入图片描述

第二个构造,是第一个构造的基于图的推广,

在这里插入图片描述

因为 [IK00] 构造出了任意布尔函数的 degree-3 随机多项式,因此 [AIK04] 就构造出了任意布尔函数的 4-local 完美随机编码。[App13] 证明了大多数布尔函数不存在 N C 3 0 NC_3^0 NC30 内的完美编码,因此这是紧的。

PRENSREN 具有较好的表达能力:

在这里插入图片描述

Computational Encoding in N C 0 NC^0 NC0

[AIK06] 利用 Yao’s Garbled Circuit 构造了任意可有效计算的布尔函数的计算随机编码,仅依赖于 minimal PRG(仅拉伸一比特)的存在性。

利用 minimal PRG,可以构造出一个对称加密方案,使得它的加密是落在 N C 0 [ G ] NC^0[G] NC0[G] 内的:

在这里插入图片描述

为了使得解密也可以高效并行,可以加强 PRG 成为线性拉伸(迭代 O ( log ⁡ k ) O(\log k) O(logk) 次调用,属于 N C 1 NC^1 NC1)或者多项式拉伸(只需一次调用,属于 N C 0 NC^0 NC0):

在这里插入图片描述

接下来,利用这个 E ∈ N C 0 [ G ] E \in NC^0[G] ENC0[G],类似于 Yao’s GC 将函数 f f f 随机编码。令 x = ( x 1 , ⋯   , x n ) x=(x_1,\cdots,x_n) x=(x1,,xn) 是函数 f n f_n fn 的输入,电路 C n C_n Cn 计算它。安全参数是 k ( n ) k(n) k(n) W i 0 , W i 1 ∈ { 0 , 1 } 2 k W_i^0,W_i^1 \in \{0,1\}^{2k} Wi0,Wi1{0,1}2k 是第 i i i 条线对应的 0-key 和 1-key, r i ∈ { 0 , 1 } r_i \in \{0,1\} ri{0,1} 是第 i i i 条线上的 mask。定义 ∣ C n ∣ |C_n| Cn 是电路中 wires 的数量,定义 Γ ( n ) \Gamma(n) Γ(n) 是电路中 gates 的数量。[AIK06] 将各个 W i β W_i^\beta Wiβ 分成两半 W i β , 0 , W i β , 0 ∈ { 0 , 1 } k W_i^{\beta,0}, W_i^{\beta,0} \in \{0,1\}^k Wiβ,0,Wiβ,0{0,1}k,使用它们的异或作为 E E E 的密钥。给定一组输入 x x x 和随机数 ( r , W ) (r,W) (r,W),可以将函数求值 f n ( x ) f_n(x) fn(x) 随机编码为如下的混淆电路(携带 x x x 对应的输入标签,以及公开的输出线),将它作为 f ^ ( x , ( r , W ) ) \hat{f}(x,(r,W)) f^(x,(r,W))

在这里插入图片描述

这个 f ^ \hat{f} f^ 是关于 x , ( r , W ) x,(r,W) x,(r,W) 的确定性函数。容易看出:

  • Input wires 中的函数 W i l W_i^l Wil,每一比特都关于 W i 0 , W i 1 ∈ { 0 , 1 } 2 k W_i^0,W_i^1 \in \{0,1\}^{2k} Wi0,Wi1{0,1}2k 的某一比特以及输入值 l ∈ { x u , x ˉ u } l \in \{x_u,\bar{x}_u\} l{xu,xˉu},因此是 3-local functions
  • Gates 中的函数 Q t a i , a j ( r , W ) Q_{t}^{a_i,a_j}(r,W) Qtai,aj(r,W)
    • keys 中的每一比特都关于 W i 0 , a j , W i 1 , a j , W j 0 , a i , W j 1 , a i W_i^{0,a_j},W_i^{1,a_j},W_j^{0,a_i},W_j^{1,a_i} Wi0,aj,Wi1,aj,Wj0,ai,Wj1,ai 的某一比特以及 r i , r j r_i,r_j ri,rj,因此是 6-local functions
    • arguments 中的每一比特都关于 W y 0 , W y 1 W_y^0,W_y^1 Wy0,Wy1 中的某一比特以及 r i , r j r_i,r_j ri,rj,或者关于 r i , r j , r y r_i,r_j,r_y ri,rj,ry,因此是 4-local functions
    • 最后再加上对 E E E 的神谕访问,请求的长度是 m ( 2 k + 1 ) m(2k+1) m(2k+1)。对于 bounded fan-out 电路,计算复杂度是 p o l y ( k ) = O ( n ϵ ) poly(k)=O(n^\epsilon) poly(k)=O(nϵ),其中 ϵ > 0 \epsilon>0 ϵ>0 是某常数。对于 unbounded fan-out(多项式规模),可以对数因子的深度为代价高效地转化为 bounded fan-out 电路。
  • Output wires 中的函数 r i r_i ri,就是 1-local functions

也就是说 f ^ ∈ N C 6 0 [ E ] \hat{f} \in NC_6^0[E] f^NC60[E], 由于 E ∈ N C 0 [ G ] E \in NC^0[G] ENC0[G],因此获得了如下的主定理:

在这里插入图片描述

在 “easy PRG” 假设下,即:在复杂性类 uniform ⊕ L / p o l y \oplus L/poly L/poly 中存在 PRG。根据 [AIK04],这个 EPRG 可以表示为在 N C 4 0 NC_4^0 NC40 内的完美随机编码。那么,任意的可高效计算的函数,都可以表示为 N C 0 NC^0 NC0 内的计算随机编码。

上述的随机编码的 decoder 就是:按照 Yao’s GC 的拓扑顺序,依次恢复 active key W y b ∈ { 0 , 1 } 2 k W_y^b \in \{0,1\}^{2k} Wyb{0,1}2k 以及 color c ∈ { 0 , 1 } c \in \{0,1\} c{0,1},最终按照 f ^ ( x , ( r , W ) ) \hat{f}(x,(r,W)) f^(x,(r,W)) 中编码的 output wires 获得计算结果 f ( x ) f(x) f(x)。只要 f f f 是可以有效计算的,那么 decoder 也是有效的(但是并不属于 N C NC NC 类)。它的 simulator 也类似于 Yao’s GC,依赖于所用的 PRG 的计算安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值