わかれ鍵の、その謎へ

\[\newcommand{\t}{\text} \newcommand{\wp}{\operatorname{w.p.}} \newcommand{\cur}[1]{\left\{#1\right\}} \newcommand{\mat}[1]{\begin{matrix}#1\end{matrix}} \newcommand{\ip}[1]{\left<#1\right>} \newcommand{\eps}{\epsilon} \newcommand{\c}{\mathcal} \newcommand{\co}[2]{{\color{#1}{#2}}} \]

SKE

基础版(定长系统):可以随机的 \(\t{Gen},\t{Enc},\t{Dec}\),有 \(\t{Gen}\to k,\t{Enc}_k(m)\to c,\t{Dec}_k(c)\to m/\perp\),其中 \(\perp\) 是解密失败。

正确性:对于一切 \(m\),关于 \(\t{Gen},\t{Enc},\t{Dec}\) 三者的随机性,有 \(k\gets\t{Gen}:\t{Dec}_k(\t{Enc}_k(m))=m\wp1\)

里面并没有涉及到任何有关输入长度 \(n\) 的信息。

Perfect Secrecy / Shannon Secrecy

Perfect Secrecy:任两个明文 \(m_1,m_2\) 加密后的密文分布相同。

Shannon Secrecy:知道 \(c\) 不能帮助推出 \(m\)。即,对于一切明文分布 \(D\)\(\Pr(m=m')=\Pr(m=m'\mid\t{Enc}_k(m)=c)\)

通过基础概率推理,二者等价。使用抽屉原理,可以证出要想满足这两种安全性必须要有 \(|K|\geq|M|\),因此使用 One-Time Pad 即可。

OWF

Definition

最坏情况 (worst-case) OWF:最弱,只要求不存在完美的逆(对于一切 \(x\in\cur{0,1}^n\) 都可以找到 \(x'\) 满足 \(f(x')=f(x)\wp1\))。换言之,只要存在一些不可逆的(可以是 negligible 的)\(x\) 即可。

弱 (weak) OWF:强一点,要求对于 noticable 的 \(x\) 不可逆。

强 (strong) OWF:最强,要求对于 overwhelming 的 \(x\) 不可逆(对于 negligible 的 \(x\) 可逆)。

\[\co{red}{\Pr_{\mat{x\gets\cur{0,1}^n\\y\gets f(x)}}[A(1^n,y)\to x':f(x)=f(x')]<\t{negligible}/1-\text{noticable}} \]

weak OWF 可以简单 boosting 为 strong OWF。但是存在 worst-case OWF(等价于 NP ⊈ BPP)目前并不能找到 weak or strong OWF,需要依赖更强的假设。

OWF Collection

OWF Colletion 是一个 OWF 族 \(\co{red}{\c F=\cur{f_i:\c D_i\to\c R_i}_{i\in I}}\),满足如下条件:

  • 存在高效的 \(\t{Gen}(1^n)\) 从族中采样(比如说,通过给定下标的方式采样)。
  • 存在高效的从族中任何 OWF 的定义域中采样的方式。
  • 存在高效的对族中任何 OWF 和其定义域中元素求值 (evaluate) 的方式。
  • 对于一切 \(\t{Adv}(1^n,i,y)\),关于 \(\t{Gen}\)、定义域采样、evaluate 随机时,可逆的概率 negligible。

Over Factoring

\(2^n\) 范围中随机挑两个数相乘,是 weak OWF。从 \(\Pi_n=(\t{prime}\setminus\cur2)\cap 2^n\) 中随机挑两个数相乘,是 strong-OWF。此乃质因数分解假设。由质数数量定理,有 \(|\Pi_n|=\Theta(2^n/n)\)

Over RSA

\(\Pi_n\) 中随机挑 \(p,q\),令 \(N=pq\),从 \(\Z^*_{\phi(N)}\) 中随机挑 \(e\),从 \(\Z^*_N\) 中随机挑 \(y\),则计算 \(e\)-次剩余 \(x^e=y\) 是困难的。换言之,\(\cur{f_{N,e}(x)=x^e\bmod n}\) 是 OWP-Collection,为 RSA Collection。

Over Discrete Logarism

\(q\) 是满足 \(q-1\) 有大质数因子 \(p\) 的质数(为图方便,也可以直接选择 \(q=2p+1\)\(p,q\))。令 \(G\)\(\Z_q^*\)\(p\) 阶子群,\(g\) 为其生成元。则 \(f_{N,g}(x)=g^x\pmod q\) 是 OWF-Collection。

Over Quadratic Residue

\(p,q\in\Pi_n\),则从 \(\Z^*_N\) 中随机挑数然后将其平方,是 OWF。即,\(\cur{f_N(x)=x^2\pmod n}\) 是 OWF-Collection,为 Rabin Collection。

Diffie-Hellman

(Computational Diffie-Hellman)给定 \(g^a,g^b\),计算 \(g^{ab}\) 是困难的。这依赖于 DL 假设,但是反之不亦然。

Trapdoor OWF

\(\t{Gen}\) 在给出 index 的同时也会给出一个 trapdoor;在不提供 trapdoor 时,就是普通的 OWF;但是在提供 trapdoor 时,存在利用之百分百成功破解的方式。

目前唯一已知的 Trapdoor OWF 是 RSA。

Conclusion

Diffie-Hellman -> DL。RSA->Factoring。Quadratic Residue = Factoring。

Indistinguishability

对于两个分布列:

  • 它们是完全不可区分 (Perfect Indistinguishable) 的,如果分布列中每一项全同。

  • 它们是统计不可区分 (Statistically Indistinguishable) 的,如果分布列的 TVD (\(\dfrac12\sum|u(x)-v(x)|\)) negligible。

  • 它们是计算不可区分 (Computationally Indistinguishable) 的,如果所有 nuppt distinguisher 在分别接入二者采样后,输出 \(1\) 的概率差 negligible。

    \[\co{red}{\left|\Pr_{t\gets X_n}[D(t)=1]-\Pr_{t\gets Y_n}[D(t)=1]\right|<\t{negligible}} \]

我们关注的是最后一种。它有着如下的性质:

  • 传递性 (Transitivity)。由此得到 Hybrid Lemma。
  • 不变性 (Invariance),即等价的通入同一个 nuppt 后仍等价。
  • 计算 (Computational) 与预测 (Decisional) 的等价性,或称判别器 (Discriminator) 与预测器 (Predictor) 的等价性:不等价,则存在通入输出后判断归属的 nuppt。

PRG

PRG 是与纯随机生成器计算不可区分的生成器,即 \(\cur{0,1}^n\to\cur{0,1}^m\) 满足 \(G(U(\cur{0,1}^n))\approx_CU(\cur{0,1}^m)\)。显然,只有当 \(m>n\) 时,PRG 才是 non-trivial 的。

PRG 必是 OWF:否则可以求逆。则如果 \(x\gets G\) 成功率是 noticable 的 \(\delta\) 的话,因为 shrinking one bit 的性质,\(x\gets U\) 成功率不超过 \(\delta/2\),二者的差仍 noticable。

PRG 的等价定义是,知道任何前缀信息都无助于预测后续位。即,\(\co{red}{\forall n\in\N,\forall i\in[0,m-1]}\),有

\[\co{red}{\Pr_{t\gets G(U(\cur{0,1}^n))}[A(1^n,t_1\dots t_i)=t_{i+1}]<\dfrac12+\eps(n)} \]

Hardcore Bit

一个 bit \(h(x)\) 是一个关于 OWF \(f(x)\) 的难题预测,如果知道 \(f(x)\) 并不能帮助预测 \(h(x)\)(成功概率 \(\dfrac12\)+negligible)。

不存在一个 \(h(x)\) 是全体 OWF \(f(x)\) 的 HB:因为若如此,则 \(f(x)\mid h(x)\) 同样会是一个 OWF,而 \(h(x)\) 显然非其 HB。

Goldreich-Levin 构造:对于定义域为 \(\cur{0,1}^n\) 的 OWF,构造定义域为 \((x,r)\in\cur{0,1}^n\times\cur{0,1}^n\) 的 OWF \((f(x),r)\) 对,则 \(\ip{x,r}\) 会是新 OWF 的 HB。

PRG from HB

如果有 OWP \(f\) 和其对应的 HB \(h\),则令 \(f\) 不断自我迭代并将每一次迭代的结果套上 \(h\) 输出即得 PRG。

Examples of HB & PRG

给定 \(N,e\),对于 \(f_\t{RSA}(x)=x^e\bmod N\),其相关的一些难题预测的例子如

  • \(\t{LSB}(x)\) 寻求 \(x\) 的最低位。
  • \(\t{half}_N(x)\) 寻求判定是否有 \(0\leq x\leq N/2\)
  • 建立在离散对数假设,即 \(f_\t{DL}(x)=g^x\pmod p\),下的 \(\t{half}_{p-1}(x)\)

Blum-Micali PRG:使用 seed 生成 \(p,g,x\),其中 \(p\) 是满足 \(p=2q+1\)\(q\) 亦为质数)的质数,\(g\)\(p\) 的原根,\(x\in\Z_p^*\)\(f_\t{DL}(x)=g^x\bmod p\)\(h(x)=\t{half}_{p-1}(x)\)

RSA PRG:\(N=pq\)\(e\in\Z_{\varphi(N)}^*\)\(f_\t{RSA}(x)=x^e\bmod N\)\(h(x)=\t{LSB}(x)\)

Blum-Blum-Schub:\(p,q\bmod 4=3,N=pq\)\(x\in\t{QR}_N\)\(f_\t{QR}(x)=x^2\bmod N\)\(h(x)=\t{LSB}(x)\)

PRF

(Single Bit) PRF 是一族函数 \(\co{red}{F=\cur{F_n=\cur{f_k^n:\cur{0,1}^n\to\cur{0,1}}_{k\in\c K_n}}_{n\in\N}}\),接受输入,回答一个确定性的 bit。以其作为 oracle 时(即从函数族中随机固定一个 key 然后提供其对应的函数但不公开 key),任何 adversary 都无法将其与 TRF 以 negligible advantage 区分。

\[\co{red}{\left|\Pr_{k\gets\c K_n}[A^{f_k^n(\cdot)}(1^n)=1]-\Pr_{F\gets\t{TRF}}[A^{F(\cdot)}(1^n)=1]\right|<\t{negligible}} \]

(Multiple Bit) PRF 则要求回答一个定长 01 串,仍与 TRF 不可区分。MBPRF 推出 SBPRF,因为单单截出其第一位即是 SBPRF。

PRF 的核心性质是,输出不能与输入 \(x\) 有着非常明显的联系。

Construction of PRF

GGM Construction: 对于两个没有明显联系的 \(n\)-bit 随机串生成器(注意不是 PRG,因为 PRG 必须要 length-extension)(取 \(2n\)-bit PRG 的前后半即可),使用 key \(k\) 作为起始态,input \(x\) 作为选择哪个 PRG pass through 即可。

PKE

PKE 中,\(\t{Gen}(1^n)\to(pk,sk),\t{Enc}_{pk}(m)\to ct,\t{Dec}_{sk}(ct)\to m'/\perp\)

PKE 的正确性要求对于一切明文,加密-解密后复原的概率 overwhelming。PKE 的安全性要求任意两个明文加密后的分布,在用于加密的公钥也可被 adv 访问时,仍然是 indistinguishable 的。即,对于一切 \(n\in\N\)\(m_1,m_2\in\c M_n\),都有

\[\co{red}{\Bigg|\Pr_{(pk,sk)\gets\t{Gen}(1^n)}[A(1^n,pk,\t{Enc}_{pk}(m_0))=1]-\Pr_{(pk,sk)\gets\t{Gen}(1^n)}[A(1^n,pk,\t{Enc}_{pk}(m_1))=1]\Bigg|<\t{negligible}} \]

为避免 adv 亲自加密验证,encoder 必须是随机的。

  • 注意顺序:要求对于每个 adv 存在一个 negligible 的 \(\eps\) 对一切 \(n,m_0,m_1\) 生效,而非存在 global 的 \(\eps\) 对一切 adv 生效。

上述 computational 也可以被替换成 decisional:当仅加密一位时,可以换成 \(\Pr[(pk,\t{Enc}_{pk}(m))=m]<\dfrac12+\eps(n)\)。当加密多位时,PKE 也有它的 CPA 式描述:

  • Challenger 生成 \((pk,sk)\) 并把 \(pk\) 交给 Adversary。Adversary 生成 \(m_0,m_1\) 并交给 Challenger。Challenger 随机生成 \(b\in\cur{0,1}\) 并返回 \(\t{Enc}_{pk}(m_b)\)。Adversary 猜测 \(b'\)

PKE from RSA

使用 RSA 建 PKE。令明文为 \(m\in\cur{0,1}\),则在 \(0\) 时从 \([0,n/2]\) 中随机,\(1\) 时从 \([0,n/2+1]\) 中随机,然后求 \(e\) 次幂。加密后必然是不可区分的,因为 \(\t{half}\) 是 HB。

PKE from HB

上述算法的核心在于 HB。因此,考虑一个 trapdoor OWF collection with HB:令 \(\t{Gen}\) 为 index 与 trapdoor 的 pair,前者为公钥后者为私钥,然后 \(\t{Enc}\) 不断从 OWF 定义域中随机直到随到 HB 等于明文,然后给出通过 OWF 后的结果为密文;\(\t{Dec}\) 就使用 trapdoor 逆向即可。

按照课本上的说法,应该使用如下方法

  • \(\t{Gen}(1^n)\) sample \((f_i,f_i^{-1})\)(后者使用陷门信息实现),然后回复的 \((pk,sk)\) 对为 \(((f_i,b_i),f_i^{-1})\),其中 \(b_i\) 是关于 \(f_i\) 的难题预测。
  • \(\t{Enc}_{pk}(m)\):sample \(r\gets\cur{0,1}^n\) 然后输出 \((f_i(r),b_i(r)\oplus m)\)
  • \(\t{Dec}_{pk}(c_1,c_2)\):使用 \(f_i^{-1}\) 逆向 \(c_1\) 得到 \(r\),然后 \(m\gets b_i(r)\oplus c_2\)

从另一个角度来说,总是可以把 \(\co{green}{\t{Enc}_{pk}(m)}\) 看做是 \(\co{green}{f(m,r)}\),其中 \(\co{green}r\) 是随机带输入,则 \(\co{green}m\) 会是 \(\co{green}f\) 的 HB。

PKE from Decisional Diffie-Hellman

Decisional Diffie-Hellman 声称 \((g,g^a,g^b,g^{ab})\)\((g,g^a,g^b,g^u)\) 不可区分。

El-Gamel 使用 \(g\)\(g^a\) 作为公钥,\(b\) 提供随机性:密文是 \((g^b,g^{ab}\cdot m)\)。则 adv 只能看到 \(g,g^a,g^b,g^{ab}\cdot m\),如果它能逆推出 \(m\) 则就能判断 \(g^{ab}\),就违背了 DDH 了。

Boosting Single Bit PKE to Multiple Bits

对于长度为多项式级别的密文,直接分开来加密每一位即可。换言之,PKE 具有多次通信安全性。证明使用 Hybrid Argument 定位到某一处 differ 的位置即可。

Conclusion

PKE 不能 blackboxed 从 OWF 等东西得到,因为没有 trapdoor。因此,从 DL 到 PKE 的构造仍是 open 的。

SKE-Revisited

开局介绍的 SKE 太严格了:要求完美解密、完美通信;同时,在某些方面又太松了:只作单次通讯。因此,这里 restate 一个更合理的 SKE。

定义仍是 \(\t{Gen}(1^n)\to sk,\t{Enc}_{sk}(m)\to ct,\t{Dec}_{sk}(ct)\to\cur{m,\perp}\)。正确性要求放宽:对于一切信息 \(m\),关于 \(\t{Gen,Enc,Dec}\) 的随机性以 overwhelming 可逆即可。安全性则需要依靠 CPA 来定义:在确定 \(sk\) 后,首先 Adversary 可以多次询问 \(m\) 的加密结果,然后 Adversary 提供两个 \(m_0^*,m_1^*\),Challenger 随机加密一个并返回,然后 Adversary 可以再度多次询问 \(m\),最后 Adversary 要判定 Challanger 到底加密了哪一个。同理,为避免 adv 询问 \(m_0^*,m_1^*\) 的加密结果,\(\t{Enc}\) 必须包含随机性。

本质上是要求 \(\t{Enc}(m_0^*)\approx\t{Enc}(m_1^*)\)。因此,在对 SKE 作 Hybrid 的时候,假设要对 \(\t{Enc}\)\(\t{Enc}'\) 两个系统作 Hybrid,可以建立 \(\t{Enc}(m_0)\approx\t{Enc}'(m_0)\approx\t{Enc}'(m_1)\approx\t{Enc}(m_1)\) 的 Hybrid 链条。

不过更好的 Hybrid 方式可能是,如果 \(\t{Enc}(m_0)\approx\t{Enc}(m_1)\) 但是 \(\t{Enc}'(m_0)\not\approx\t{Enc}'(m_1)\),则存在 \(c\) 使得 \(\t{Enc}(m_c)\not\approx\t{Enc}'(m_c)\),就不用写两遍了。

SKE from PRF

\(F\) 为一个 \(\cur{0,1}^n\to\cur{0,1}^n\) 的 PRF 族,明文 \(m\) 长度为 \(n\),则以下方案是 SKE:

  • \(\t{Gen}(1^n)\to k\in\c K^n\)
  • \(\t{Enc}_k(m)\to(f_k^n(r)\oplus m,r)\),其中 \(r\gets\cur{0,1}^n\)
  • \(\t{Dec}_k(ct_1,ct_2)\to f_k^n(ct_2)\oplus ct_1\)

证明使用 Hybrid Argument:首先把 PRF 当成 TRF,然后把 TRF 异或 \(m\) 当作 TRF。

事实上,因为这里的 PRF 只会被随机询问,因此其是所谓的 weak-PRF,即只能作随机询问的 PRF 亦无问题。

DS

\(\t{Gen}(1^n)\to(sk,vk)\)\(\t{Sign}(sk,m)\to\sigma\)\(\t{Verify}(vk,m,\sigma)=1/0(\text{valid/invalid})\)

正确性:密文被判为 valid 的概率 overwhelming。

安全性:一切 adversary 均在 Forgery Game 中胜率 negligible。即,Challenger 提供 \(vk\),Adversary 多次发信 \(m_i\) 并得到签名 \(\sigma_i\),最后 Challenger 伪造一个没问过的 \((m^*,\sigma^*)\) 并希望它被 verify 为 valid。

DS from RO

Random Oracle:就是 TRF 黑盒。只存在于理论中,现实生活中的例子可以是尚未被破解的随机数生成器例如 SHA256。它的思想是,通过 Hash Function 来只为 adversary 提供随机位置的访问权限。如果我们有 RO \(H\) 的黑盒访问权,则以下模式是 DS:

  • \(\t{Gen}(1^n)\) 生成 \(N=pq\) 以及 \(e\) 作为 \(pk\),找到 \(d=e^{-1}\) 作为 \(sk\)
  • \(\t{Sign}(d,m):\sigma\gets h(m)^d\)
  • \(\t{Ver}(N,e,m,\sigma):\sigma^e\overset?= h(m)\)

adv 会返回 \(\sigma^*,m^*\) 满足 \((\sigma^*)^e=h(m^*)\)。则当 adv 希望求 \(\t{Sign}\) 时,伪装的 challenger 直接随机丢一个数(反正 \(h(m)\) 是随机的);希望求 \(h(m^*)\) 时,直接强行令 \(h(m^*)=y\),则足够机智的 adv 应该在这种不讲理的场合也能做到 \(\sigma^e=y\)

实际应用时,\(h\) 可以使用 CRHF,而 RSA 可以使用任何 trapdoor OWP。

One-Time DS of Fixed Length

假设我们有一个 OWF \(f\)。则:

\[\t{Gen}:sk=\begin{pmatrix}x_0^1&\dots&x_0^n\\x_1^1&\dots&x_1^n\end{pmatrix},vk=\begin{pmatrix}f(x_0^1)&\dots&f(x_0^n)\\f(x_1^1)&\dots&f(x_1^n)\end{pmatrix} \]

其中,\(x_0^{1\sim n}\)\(x_1^{1\sim n}\) 都是随机生成的 \(n\) 位串。

\(\t{Sign}\) 对于输入的 \(m\in\cur{0,1}^n\),使用 \(m\) 的第 \(i\) 位决定从 \(x_0^i\) 还是从 \(x_1^i\) 中选择作为 \(\sigma_i\)。即,\(\sigma_i=x^i_{m_i}\),然后 \(\sigma=(\sigma_1,\dots,\sigma_n)\)\(\t{Ver}\) 即需检测是否有 \(f(\sigma_i)=f(x^i_{m_i})\) 即可。

这显然是单次安全的,因为伪造的 \(m^*\) 必然在某一位上未问过,则这即相当于在逆向一个随机的 \(x^i\),而这是不可能的。

One-Time DS of Arbitrary Length

套一个 CRHF 即可。

CRHF

CRHF:\(\co{red}{H=\cur{h_k:\cur{0,1}^*\to\cur{0,1}^n}_{n\in\N}}\),key 是公开的。要求——长度压缩:至少缩一位;抗碰撞:

\[\co{red}{\Pr_{k\gets\t{Gen}(1^n)}[\t{Adv}(1^n,k)\to x_1,x_2\in\cur{0,1}^*:h_i(x_1)=h_i(x_2)\land x_1\neq x_2]<\t{negligible}} \]

CRHF is OWF

对于 \(\cur{0,1}^{2n}\to\cur{0,1}^n\) 的 CRHF,其必是 strong-OWF;对于 \(\cur{0,1}^{n+1}\to\cur{0,1}^n\) 的 CRHF,其必是 weak-OWF。

假设存在 \(\delta\) 概率逆向的 adv \(A\),则构建如下的 adv \(B\):对于随机的 \(x\),令 \(x'=A(1^n,i,h_i(x))\),则

\[\Pr[h_i(x')=h_i(x)]-\Pr[x'=x]\geq\delta-\dfrac{|Y|}{|X|} \]

\(2n\to n\) 时,\(|Y|/|X|\) negligible,因此 \(\delta\) noticeable 即可导出反例。当 \(n+1\to n\) 时,\(\delta\) overwhelming 时亦有反例。

CRHF from DL

  • \(\t{Gen}(1^n)\to(g,p,y)\),其中 \(p\)\(n\)-bit 质数,\(g\)\(\Z^*_p\) 的生成元,\(y\) 是其中的随机元。
  • \(h_{p,g,y}(x,b)=y^bg^x\bmod p\),其中 \(b\) 是一个 bit。

CRHF from Factoring

  • \(h_{N,y}(x,b)=y^bx^2\bmod N\)。注意为避免 trivial attack 的 \(x'=-x\),需要限制定义域在 \(\Z_N^*\) 的前半部分。

这个的用法要限制 \(y\) 非二次剩余,因此要随期望 \(4\) 次。

CRHF cannot from GGM

首先,存在文献表明,GGM 在 key 公开的前提下是 weak PRF 但不是 strong 的。那么,长度折半的 GGM(\(n\) 位的 key 但是 \(2n\) 位的指令)就不可能是 CRHF。其次,就算只延长 \(1\) 位,GGM 也不是 CRHF,因为:

  • 对于一个 key \(k\),关于第一位分类,它等效于两个 \(n\to n\) GGM,分别是 \(k_0=G^0(k)\) 以及 \(k_1=G^1(k)\)。那么,在 \(k_0\) 引导的 GGM 中,随机 \(x\) 的后半段,则输出的结果是 PRG,可以 Hybrid 到 TRG;在 \(k_1\) 引导的 GGM 中,因为它是 weak 的,有 noticable 的概率对 \(k_0\) 得到的结果可逆,也就是说,有 noticable 的概率成功碰撞。

Boosting Single Bit CRHF to Multiple Bits

假如有 one-bit shrinking CRHF,直接自我迭代,即可实现 \(p(n)\to n\) 的压缩:要保证 \(p(n)\)\(n\) 的多项式。这也是为什么 CRHF 可以写成 \(\cur{0,1}^*\to\cur{0,1}^n\) 形式的原因:通过自我迭代的方式可以扩展到一切长度的输入。

Conclusion

不能 blackbox 得到的:

OWF->OWP

OWP->CRHF, OWF-CRHF

OWP->PKE

RO->PKE

CRHF->PKE

链条:OWF<->PRG<->PRF<->SKE

Hybrid Argument:PRG 容易 HA,因为它的定义依托于 indistinguishablity。PRF 也不是不行,毕竟它那个定义还挺 indistinguishable 的。PKE 的 security 直接就是 \(\t{Enc}_{pk}(m_0)\approx\t{Enc}_{pk}(m_1)\)。SKE 的 security 本质上也是 \(\t{Enc}(m_0)\approx\t{Enc}(m_1)\)

听说 cheatsheet 做的好有概率加分,那就丢一下本人另外两篇无法被带进考场的笔记罢。

https://www.cnblogs.com/Troverld/p/18695231

https://www.cnblogs.com/Troverld/p/18857486

posted @ 2025-05-07 16:13  Troverld  阅读(43)  评论(0)    收藏  举报