东莞网站推广方案江苏省建设类高工申报网站
东莞网站推广方案,江苏省建设类高工申报网站,wordpress盗版模板,阿里云专有网络做网站由于GitHub项目仅翻译到前5章#xff0c;我们从第6章开始通过大语言模型翻译#xff0c;并导出markdown格式。 大模型难免存在错漏#xff0c;请读者指正。 教材原文地址#xff1a;https://www.cis.upenn.edu/~aaroth/Papers/privacybook.pdf 9 差分隐私与计算复杂度
到目… 由于GitHub项目仅翻译到前5章我们从第6章开始通过大语言模型翻译并导出markdown格式。 大模型难免存在错漏请读者指正。 教材原文地址https://www.cis.upenn.edu/~aaroth/Papers/privacybook.pdf 9 差分隐私与计算复杂度
到目前为止我们对差分隐私的讨论忽略了计算复杂度问题允许数据管理者和攻击者的计算能力不受限制。实际上数据管理者和攻击者的计算能力可能都是受限的。
将我们自己限制在计算能力受限的数据管理者范围内会限制数据管理者的操作使得实现差分隐私变得更加困难。实际上我们将展示一类计数查询的示例在标准的复杂度理论假设下即使已知低效算法如SmallDB和私有乘法权重算法也无法高效生成合成数据库。大致来说数据库行是数字签名使用数据管理者无法访问的密钥进行签名。直观地说合成数据库中的任何一行要么是从原始数据库复制而来违反隐私要么必须是对新消息的签名即伪造签名违反数字签名方案的不可伪造性。不幸的是这种情况并不局限于基于数字签名的可能是人为构造的示例即使创建一个能保持相对准确的双向边际的合成数据库也很困难。从积极的方面来看给定一组 Q \mathcal{Q} Q查询和一个从全域 X \mathcal{X} X中抽取行的 n n n行数据库可以在关于 n , ∣ X ∣ n,\left| \mathcal{X}\right| n,∣X∣和 ∣ Q ∣ \left| \mathcal{Q}\right| ∣Q∣的多项式时间内生成一个合成数据库。
如果我们放弃合成数据库的目标满足于一种数据结构从中我们可以获得每个查询答案的相对准确近似值那么情况会有趣得多。事实证明这个问题与追踪叛徒问题密切相关在追踪叛徒问题中目标是在向付费客户分发数字内容的同时阻止盗版。
如果对手被限制在多项式时间内那么实现差分隐私就会变得更容易。事实上安全函数评估这一极其强大的概念提供了一种自然的方法来避免使用可信的数据管理者同时比随机响应方法具有更高的准确性也提供了一种自然的方法来允许多个出于法律原因不能共享其数据集的可信数据管理者对实际上是合并后的数据集进行查询响应。简而言之安全函数评估是一种密码学原语它允许一组 n n n 个参与方 p 1 , p 2 , … , p n {p}_{1},{p}_{2},\ldots ,{p}_{n} p1,p2,…,pn 其中故障参与方的比例小于某个固定分数该分数根据故障类型而异对于“诚实但好奇”的故障该分数为 1合作计算任何函数 f ( x 1 , … , x n ) f\left( {{x}_{1},\ldots ,{x}_{n}}\right) f(x1,…,xn) 其中 x i {x}_{i} xi 是参与方 p i {p}_{i} pi 的输入或值以这样一种方式进行计算即任何故障参与方联盟都无法破坏计算过程也无法了解非故障参与方的值除非这些值可以从函数输出和联盟成员的值中推导出来。这两个属性传统上被称为正确性和隐私性。这种隐私概念我们称之为安全函数评估隐私SFE 隐私与差分隐私有很大不同。设 V V V 是故障参与方持有的值的集合设 p i {p}_{i} pi 是一个非故障参与方。如果 x i {x}_{i} xi 可以从 V ∪ { f ( x 1 , … , x n ) } V \cup \left\{ {f\left( {{x}_{1},\ldots ,{x}_{n}}\right) }\right\} V∪{f(x1,…,xn)} 中推导出来SFE 隐私允许故障参与方了解 x i {x}_{i} xi 因此差分隐私不允许精确发布 f ( x 1 , … , x n ) f\left( {{x}_{1},\ldots ,{x}_{n}}\right) f(x1,…,xn) 。然而用于计算函数 f f f 的安全函数评估协议可以很容易地修改为 f f f 的差分隐私协议只需定义一个新函数 g g g 它是在 f f f 的值上添加拉普拉斯噪声 Lap ( Δ f / ε ) \operatorname{Lap}\left( {{\Delta f}/\varepsilon }\right) Lap(Δf/ε) 的结果。原则上安全函数评估允许对 g g g 进行评估。由于 g g g 是差分隐私的并且将 SFE 隐私属性应用于 g g g 时表明除了从 g ( x 1 , … , x n ) g\left( {{x}_{1},\ldots ,{x}_{n}}\right) g(x1,…,xn) 的值和 V V V 中可以了解到的信息之外无法了解到关于输入的任何其他信息因此只要故障参与者被限制在多项式时间内就可以确保差分隐私。因此安全函数评估允许在不使用可信数据管理者的情况下实现差分隐私的计算概念并且与使用可信数据管理者时所能达到的准确性相比没有损失。特别是在确保计算差分隐私的同时可以以恒定的预期误差回答计数查询而无需可信数据管理者。我们将看到在不使用密码学的情况下误差必须为 Ω ( n 1 / 2 ) \Omega \left( {n}^{1/2}\right) Ω(n1/2) 这证明了在多方情况下计算假设确实可以提高准确性。 1 {}^{1} 1 回想一下双向边际是指对于每一对属性值数据库中具有该属性值对的行数的计数。 2 {}^{2} 2 在“诚实但好奇”的情况下我们可以为任何参与方 P j {P}_{j} Pj 设定 V { x j } V \left\{ {x}_{j}\right\} V{xj} 。
9.1 多项式时间的数据管理者
在本节中我们表明在标准的密码学假设下要创建一个合成数据库使其能够对适当选择的一类计数查询给出准确答案同时确保哪怕是最基本的隐私概念在计算上也是困难的。
这一结果有几个扩展例如查询集较小但数据域仍然很大的情况以及数据域较小但查询集很大的情况。此外对于某些自然的查询族如对应于合取的查询族也得到了类似的负面结果。
我们将使用“合成syntheticize”这一术语来表示以保护隐私的方式生成合成数据库的过程 3 {}^{3} 3。因此本节的结果涉及合成过程的计算难度。我们所定义的隐私概念将远弱于差分隐私因此合成的难度意味着以差分隐私的方式生成合成数据库也具有难度。具体而言如果即使避免完整泄露输入项都很困难我们就称合成是困难的。也就是说总会有某些项完全暴露。 3 {}^{3} 3 在第6节中合成器的输入是一个概要这里我们从一个数据库开始它是一个简单的概要。
请注意如果相反泄露少量输入项不被视为隐私泄露那么通过发布输入项的一个随机子集就可以轻松实现合成。这个“合成数据库”的实用性来自采样边界在很大概率上即使对于大量计数查询这个子集也能保留实用性。
在引入复杂性假设时我们需要一个安全参数来表示大小例如集合的大小、消息的长度、解密密钥的比特数等等以及表示计算难度。安全参数用 κ \kappa κ表示代表“合理”的大小和工作量。例如假设对一个大小为安全参数的任意固定多项式的集合进行穷举搜索是可行的。
计算复杂性是一个渐近概念——我们关注的是随着对象数据全域、数据库、查询族的大小增长任务的难度如何增加。因此例如我们不仅需要考虑单一大小数据库的分布在本专著的其余部分我们称之为 n n n还需要考虑由安全参数索引的分布族。与此相关当我们引入复杂性时我们倾向于“弱化”断言伪造签名并非不可能——也许会有运气相反我们假设没有高效算法能以不可忽略的概率成功其中“高效”和“不可忽略”是根据安全参数定义的。在我们的直观讨论中我们将忽略这些细节但在正式的定理陈述中会保留它们。
非正式地说如果对于任何高效的所谓的合成器从该分布中抽取的数据库在很大概率上至少有一个数据库项可以从所谓的合成器的输出中提取出来那么数据库的一个分布就很难合成相对于某个查询族 Q \mathcal{Q} Q。当然为了避免平凡情况我们还要求当这个泄露的项从输入数据库中排除例如用一个随机的不同项替换时它能从输出中提取出来的概率非常小。这意味着任何高效的所谓的合成器确实在很强的意义上损害了输入项的隐私。
下面的定义9.1将形式化我们对合成器的实用性要求。有三个参数 α \alpha α描述了准确性要求在 α \alpha α范围内被认为是准确的 γ \gamma γ描述了成功合成允许不准确的查询比例 β \beta β将是失败的概率。
对于一个产生合成数据库的算法 A A A如果对于 1 − γ 1 - \gamma 1−γ比例的查询 q ∈ Q q \in \mathcal{Q} q∈Q有 ∣ q ( A ( x ) ) − q ( x ) ∣ ≤ α \left| {q\left( {A\left( x\right) }\right) - q\left( x\right) }\right| \leq \alpha ∣q(A(x))−q(x)∣≤α我们就说输出 A ( x ) A\left( x\right) A(x)对于查询集 Q \mathcal{Q} Q是 ( α , γ ) \left( {\alpha ,\gamma }\right) (α,γ) - 准确的。
定义9.1 ( ( α , β , γ ) -Utility ) \left( {\left( {\alpha ,\beta ,\gamma }\right) \text{-Utility}}\right) ((α,β,γ)-Utility)。设 Q \mathcal{Q} Q是一个查询集 X \mathcal{X} X是一个数据全域。如果对于任何 n n n项数据库 x x x合成器 A A A对于 Q \mathcal{Q} Q和 X \mathcal{X} X具有 ( α , β , γ ) \left( {\alpha ,\beta ,\gamma }\right) (α,β,γ) - 实用性 Pr [ A ( x ) is ( α , γ ) -accurate for Q ] ≥ 1 − β \Pr \left\lbrack {A\left( x\right) \text{ is }\left( {\alpha ,\gamma }\right) \text{-accurate for }\mathcal{Q}}\right\rbrack \geq 1 - \beta Pr[A(x) is (α,γ)-accurate for Q]≥1−β
其中概率是基于 A A A的随机选择。
设 Q { Q n } n 1 , 2 , … \mathcal{Q} {\left\{ {\mathcal{Q}}_{n}\right\} }_{n 1,2,\ldots } Q{Qn}n1,2,…为查询族集合 X { X n } n 1 , 2 , … \mathcal{X} {\left\{ {\mathcal{X}}_{n}\right\} }_{n 1,2,\ldots } X{Xn}n1,2,…为数据全域集合。若一个算法的运行时间为关于 ( n , log ( ∣ Q n ∣ ) , log ( ∣ X n ∣ ) ) \left( {n,\log \left( \left| {\mathcal{Q}}_{n}\right| \right) ,\log \left( \left| {\mathcal{X}}_{n}\right| \right) }\right) (n,log(∣Qn∣),log(∣Xn∣))的多项式则称该算法是高效的。
在接下来的定义中我们将描述一族分布难以合成意味着什么。更具体地说我们将说明生成提供 ( α , γ ) \left( {\alpha ,\gamma }\right) (α,γ) - 精度的合成数据库困难意味着什么。和往常一样我们必须将其表述为一个渐近性陈述。
定义9.2 ( ( μ , α , β , γ , Q ) (\left( {\mu ,\alpha ,\beta ,\gamma ,\mathcal{Q}}\right) ((μ,α,β,γ,Q) - 难以合成的数据库分布。设 Q { Q n } n 1 , 2 , … \mathcal{Q} {\left\{ {\mathcal{Q}}_{n}\right\} }_{n 1,2,\ldots } Q{Qn}n1,2,…为查询族集合 X \mathcal{X} X { X n } n 1 , 2 , … {\left\{ {\mathcal{X}}_{n}\right\} }_{n 1,2,\ldots } {Xn}n1,2,…为数据全域集合且设 μ , α , β , γ ∈ [ 0 , 1 ] \mu ,\alpha ,\beta ,\gamma \in \left\lbrack {0,1}\right\rbrack μ,α,β,γ∈[0,1]。设 n n n为数据库大小 D \mathcal{D} D为分布集合其中 D n {\mathcal{D}}_{n} Dn是关于从 X n {X}_{n} Xn中选取的 n 1 n 1 n1个项的集合。
我们用 ( x , i , x i ′ ) ∼ D n \left( {x,i,{x}_{i}^{\prime }}\right) \sim {\mathcal{D}}_{n} (x,i,xi′)∼Dn表示这样一个实验选择一个 n n n - 元素数据库从 [ n ] \left\lbrack n\right\rbrack [n]中均匀选取一个索引 i i i并从 X n {\mathcal{X}}_{n} Xn中选取一个额外元素 x i ′ {x}_{i}^{\prime } xi′。从 D n {\mathcal{D}}_{n} Dn中抽取的一个样本会得到一对数据库 x x x以及将 x x x的第 i i i个元素在规范排序下替换为 x i ′ {x}_{i}^{\prime } xi′后的结果。因此我们认为 D n {\mathcal{D}}_{n} Dn指定了一个关于 n n n - 项数据库及其相邻数据库的分布。
我们称 D \mathcal{D} D是 ( μ , α , β , γ , Q ) \left( {\mu ,\alpha ,\beta ,\gamma ,\mathcal{Q}}\right) (μ,α,β,γ,Q) - 难以合成的如果存在一个高效算法 T T T使得对于任何所谓的高效合成器 A A A以下两个条件成立
在数据库 x ∼ D x \sim \mathcal{D} x∼D 的选择以及 A A A 和 T T T 的随机硬币抛掷结果上以概率 1 − μ 1 - \mu 1−μ 而言如果 A ( x ) A\left( x\right) A(x) 对 1 − γ 1 - \gamma 1−γ 比例的查询保持 α \alpha α -效用那么 T T T 可以从 A ( x ) A\left( x\right) A(x) 中恢复 x x x 的某一行
概率 ( x , i , x i ′ ) ∼ D n \left( {x,i,{x}_{i}^{\prime }}\right) \sim {D}_{n} (x,i,xi′)∼Dn A , T A,T A,T 的硬币抛掷结果 [ ( A ( x ) maintains ( α , β , γ ) -utility ) and ( x ∩ T ( A ( x ) ) ∅ ) ] ≤ μ \left\lbrack {\left( {A\left( x\right) \text{ maintains }\left( {\alpha ,\beta ,\gamma }\right) \text{-utility}}\right) \text{ and }\left( {x \cap T\left( {A\left( x\right) }\right) \varnothing }\right) }\right\rbrack \leq \mu [(A(x) maintains (α,β,γ)-utility) and (x∩T(A(x))∅)]≤μ
对于每一个高效算法 A A A以及每一个 i ∈ [ n ] i \in \left\lbrack n\right\rbrack i∈[n]如果我们从 D D D 中抽取 ( x , i , x i ′ ) \left( {x,i,{x}_{i}^{\prime }}\right) (x,i,xi′)并将 x i {x}_{i} xi 替换为 x i ′ {x}_{i}^{\prime } xi′ 以形成 x ′ , T {x}^{\prime },T x′,T那么除了以极小的概率外无法从 A ( x ′ ) A\left( {x}^{\prime }\right) A(x′) 中提取 x i {x}_{i} xi Pr ( x , i , x i ′ ) ∼ D n [ x i ∈ T ( A ( x ′ ) ) ] ≤ μ . coin flips of A , T \begin{array}{l} \;\mathop{\Pr }\limits_{{\left( {x,i,{x}_{i}^{\prime }}\right) \sim {D}_{n}}}\left\lbrack {{x}_{i} \in T\left( {A\left( {x}^{\prime }\right) }\right) }\right\rbrack \leq \mu . \\ \text{ coin flips of }A,T \\ \end{array} (x,i,xi′)∼DnPr[xi∈T(A(x′))]≤μ. coin flips of A,T
稍后我们将关注能生成任意概要不一定是合成数据库的离线机制。在这种情况下我们将关注难以清理而非难以合成的相关概念为此我们只需去掉 A A A 生成合成数据库这一要求。
9.2 一些难以合成的分布
我们现在构造三种难以合成的分布。
一个签名方案由三元组可能是随机化的算法Gen、Sign、Verify给出 Gen 1 N → { ( S K , V K ) n } n 1 , 2 , … {1}^{\mathbb{N}} \rightarrow {\left\{ {\left( \mathrm{{SK}},\mathrm{{VK}}\right) }_{n}\right\} }_{n 1,2,\ldots } 1N→{(SK,VK)n}n1,2,… 用于生成一个由秘密签名密钥和公开验证密钥组成的对。它仅以一元形式表示的安全参数 κ ∈ N \kappa \in \mathbb{N} κ∈N 作为输入并生成一个从 ( S K , V K ) κ {\left( \mathrm{{SK}},\mathrm{{VK}}\right) }_{\kappa } (SK,VK)κ 中抽取的对 ( S K , V K ) κ {\left( \mathrm{{SK}},\mathrm{{VK}}\right) }_{\kappa } (SK,VK)κ 是由 κ \kappa κ 索引的签名、验证密钥对的分布我们分别用 p s ( κ ) , p v ( κ ) , ℓ s ( κ ) {p}_{s}\left( \kappa \right) ,{p}_{v}\left( \kappa \right) ,\ell s\left( \kappa \right) ps(κ),pv(κ),ℓs(κ) 表示签名密钥、验证密钥和签名的长度。 Sign S K κ × { 0 , 1 } ℓ ( κ ) → { 0 , 1 } ℓ s ( κ ) {\mathrm{{SK}}}_{\kappa } \times \{ 0,1{\} }^{\ell \left( \kappa \right) } \rightarrow \{ 0,1{\} }^{\ell s\left( \kappa \right) } SKκ×{0,1}ℓ(κ)→{0,1}ℓs(κ) 以从 ( S K , V K ) κ {\left( \mathrm{{SK}},\mathrm{{VK}}\right) }_{\kappa } (SK,VK)κ 中抽取的密钥对中的签名密钥和长度为 ℓ ( κ ) \ell \left( \kappa \right) ℓ(κ) 的消息 m m m 作为输入并生成 m m m 的签名 Verify V K κ × { 0 , 1 } ∗ × { 0 , 1 } ℓ ( κ ) → { 0 , 1 } {\mathrm{{VK}}}_{\kappa } \times \{ 0,1{\} }^{ * } \times \{ 0,1{\} }^{\ell \left( \kappa \right) } \rightarrow \{ 0,1\} VKκ×{0,1}∗×{0,1}ℓ(κ)→{0,1} 以验证密钥、字符串 σ \sigma σ 和长度为 ℓ ( κ ) \ell \left( \kappa \right) ℓ(κ) 的消息 m m m 作为输入并检查 σ \sigma σ 是否确实是在给定验证密钥下 m m m 的有效签名。
密钥、消息长度和签名长度在 κ \kappa κ 上均为多项式。
所需的安全性概念是给定任意多项式关于 κ \kappa κ数量的有效消息签名对伪造任何新的签名是困难的即使是对先前已签名消息的新签名请回想一下签名算法可能是随机化的因此在相同的签名密钥下同一消息可能存在多个有效签名。这样的签名方案可以从任何单向函数构造出来。通俗地说单向函数是易于计算的函数—— f ( x ) f\left( x\right) f(x) 可以在关于 x x x 的长度比特数的多项式时间内计算出来但难以求逆对于每个概率多项式时间算法在安全参数 κ \kappa κ 的多项式时间内运行在 f f f 的定义域中随机选择 x x x 时找到 f ( x ) f\left( x\right) f(x) 的任何有效原像的概率增长速度比 κ \kappa κ 的任何多项式的倒数都慢。
难以合成分布 I固定一个任意的签名方案。计数查询集合 Q κ {\mathcal{Q}}_{\kappa } Qκ 为每个验证密钥 v k ∈ V K κ {vk} \in {\mathrm{{VK}}}_{\kappa } vk∈VKκ 包含一个计数查询 q v k {q}_{vk} qvk。数据全域 X κ {\mathcal{X}}_{\kappa } Xκ 由所有可能的消息签名对组成这些对的形式是使用 V K κ {\mathrm{{VK}}}_{\kappa } VKκ 中的密钥对长度为 ℓ ( κ ) \ell \left( \kappa \right) ℓ(κ) 的消息进行签名得到的。
数据库上的分布 D κ {\mathcal{D}}_{\kappa } Dκ 由以下采样过程定义。运行签名方案生成器 Gen ( 1 κ ) \operatorname{Gen}\left( {1}^{\kappa }\right) Gen(1κ) 以获得私钥公钥。在 { 0 , 1 } ℓ ( κ ) \{ 0,1{\} }^{\ell \left( \kappa \right) } {0,1}ℓ(κ) 中随机选择 n κ n \kappa nκ 条消息并对每条消息运行签名过程得到一组由密钥 s k {sk} sk 签名的 n n n 个消息签名对。这就是数据库 x x x。请注意数据库中的所有消息都使用相同的签名密钥进行签名。
数据全域项 ( m , σ ) \left( {m,\sigma }\right) (m,σ) 满足谓词 q v k {q}_{vk} qvk 当且仅当 Verify ( v k , m , σ ) 1 \operatorname{Verify}\left( {{vk},m,\sigma }\right) 1 Verify(vk,m,σ)1即根据验证密钥 v k {vk} vk σ \sigma σ 是 m m m 的有效签名。
设 x ∈ R D κ x{ \in }_{R}{\mathcal{D}}_{\kappa } x∈RDκ 为一个数据库设 s k {sk} sk 为所使用的签名密钥对应的验证密钥为 v k {vk} vk。假设合成器生成了 y y y那么 y y y 的几乎所有行在 v k {vk} vk 下都必须是有效签名因为查询 v k {vk} vk 中 x x x 的分数计数为 1。根据签名方案的不可伪造性所有这些签名都必须来自输入数据库 x − x - x−因为多项式时间受限的管理者在时间 poly ( κ ) \left( \kappa \right) (κ) 内无法生成新的有效消息签名对。更正式地只是稍微更正式一个高效算法能够生成一个可以用密钥 v k {vk} vk 验证但不在 x x x 中的消息签名对的概率是可以忽略不计的因此一个高效合成器生成的任何 y y y 极有可能只包含 x 4 3 x\frac{4}{3} x34 的行。这与任何合理的隐私概念相矛盾。
在这种构造中 Q κ {\mathcal{Q}}_{\kappa } Qκ验证密钥集合和 X κ {\mathcal{X}}_{\kappa } Xκ(消息,签名)对集合都很大相对于 κ \kappa κ是超多项式的。当这两个集合都较小时就可以高效地进行合成数据集的差分隐私生成。也就是说存在一个差分隐私合成器其运行时间相对于 n κ , ∣ Q κ ∣ n \kappa ,\left| {\mathcal{Q}}_{\kappa }\right| nκ,∣Qκ∣和 ∣ X κ ∣ \left| {\mathcal{X}}_{\kappa }\right| ∣Xκ∣是多项式的使用拉普拉斯机制计算带噪声的计数以获得概要然后运行第6节中的合成器。因此当这两个集合的大小相对于 κ \kappa κ是多项式时合成器的运行时间相对于 κ \kappa κ也是多项式的。
我们现在简要讨论将第一个困难性结果推广到其中一个集合较小但另一个仍然很大的情况。
难以合成的分布II在上述数据库分布中我们选择了一个单一的(sk,vk)密钥对并生成了一个消息数据库所有消息都使用 s k {sk} sk进行签名通过要求合成器在 s k {sk} sk下生成一个新签名使得合成后的数据库能够为查询 q v k {q}_{vk} qvk提供准确答案从而得到了困难性。为了在查询集合的大小仅相对于安全参数是多项式时获得合成的困难性我们再次使用数字签名用唯一的密钥进行签名但我们无法为每个可能的验证密钥 v k {vk} vk设置一个查询因为这些密钥数量太多。 4 {}^{4} 4量化顺序很重要否则合成器可能会将签名密钥硬编码进去。我们首先固定合成器然后运行生成器并构建数据库。概率是基于实验中的所有随机性密钥对的选择、数据库的构建以及合成器使用的随机性。
为了解决这个问题我们做了两个改变 数据库行现在的形式为(验证密钥, 消息, 签名)。更准确地说数据全域由(key,message,signature)三元组 X { ( v k , m , s ) : v k ∈ V K κ , m ∈ \mathcal{X} \left\{ {\left( {{vk},m,s}\right) : {vk} \in {\mathrm{{VK}}}_{\kappa },m \in }\right. X{(vk,m,s):vk∈VKκ,m∈ { 0 , 1 } ℓ ( κ ) , s ∈ { 0 , 1 } ℓ s ( κ ) } \{ 0,1{\} }^{\ell \left( \kappa \right) },s \in \{ 0,1{\} }^{\ell s\left( \kappa \right) }\} {0,1}ℓ(κ),s∈{0,1}ℓs(κ)}组成。 我们向查询类中精确添加 2 p v ( κ ) 2{p}_{v}\left( \kappa \right) 2pv(κ)个查询其中 p v ( κ ) {p}_{v}\left( \kappa \right) pv(κ)是运行生成算法 Gen ( 1 κ ) \operatorname{Gen}\left( {1}^{\kappa }\right) Gen(1κ)产生的验证密钥的长度。查询的形式为(i,b)其中 1 ≤ i ≤ p v ( κ ) 1 \leq i \leq {p}_{v}\left( \kappa \right) 1≤i≤pv(κ)且 b ∈ { 0 , 1 } b \in \{ 0,1\} b∈{0,1}。查询“(i,b)”的含义是“数据库行中形式为(vk,m,s)且 Verify ( v k , m , s ) 1 \operatorname{Verify}\left( {{vk},m,s}\right) 1 Verify(vk,m,s)1并且 v k {vk} vk的第 i i i位是 b b b的行所占的比例是多少” 通过用根据单个密钥 v k {vk} vk签名的消息填充数据库我们确保当 v k i b v{k}_{i} b vkib时对于所有 1 ≤ i ≤ p ( κ ) 1 \leq i \leq p\left( \kappa \right) 1≤i≤p(κ)这些查询的响应应该接近1而当 v k i 1 − b v{k}_{i} 1 - b vki1−b时应该接近0。
考虑到这一点数据库上难以合成的分布是通过以下采样过程构建的生成一个签名 - 验证密钥对 ( s k , v k ) ← Gen ( 1 κ ) \left( {{sk},{vk}}\right) \leftarrow \operatorname{Gen}\left( {1}^{\kappa }\right) (sk,vk)←Gen(1κ)并从 { 0 , 1 } ℓ ( κ ) \{ 0,1{\} }^{\ell \left( \kappa \right) } {0,1}ℓ(κ)中均匀选择 n κ n \kappa nκ条消息 m 1 , … , m n {m}_{1},\ldots ,{m}_{n} m1,…,mn。数据库 x x x将有 n n n行对于 j ∈ [ n ] j \in \left\lbrack n\right\rbrack j∈[n]第 j j j行是验证密钥、第 j j j条消息及其有效签名即元组 ( v k , m j , Sign ( m j , s k ) ) \left( {{vk},{m}_{j},\operatorname{Sign}\left( {{m}_{j},{sk}}\right) }\right) (vk,mj,Sign(mj,sk))。接下来从 [ n ] \left\lbrack n\right\rbrack [n]中均匀选择 i i i。为了生成第 ( n 1 ) \left( {n 1}\right) (n1)项 x i ′ {x}_{i}^{\prime } xi′只需生成一个新的消息 - 签名对使用相同的密钥 s k {sk} sk。
难以合成的分布III为了证明多项式关于 κ \kappa κ大小的消息空间但超多项式大小的查询集情况下的难度我们使用伪随机函数。粗略地说这些是具有简短描述的多项式时间可计算函数仅根据其输入 - 输出行为无法有效地将它们与真正的随机函数其描述很长区分开来。只有当我们坚持为所有查询保持实用性时这个结果才表明合成的难度。实际上如果我们只关心确保平均实用性那么第6节中描述的计数查询的基本生成器在全域 X \mathcal{X} X是多项式大小时即使 Q \mathcal{Q} Q是指数大的也能产生一种有效的合成算法。
设 { f s } s ∈ { 0 , 1 } κ {\left\{ {f}_{s}\right\} }_{s \in \{ 0,1{\} }^{\kappa }} {fs}s∈{0,1}κ是一个从 [ ℓ ] \left\lbrack \ell \right\rbrack [ℓ]到 [ ℓ ] \left\lbrack \ell \right\rbrack [ℓ]的伪随机函数族其中 ℓ ∈ poly ( κ ) \ell \in \operatorname{poly}\left( \kappa \right) ℓ∈poly(κ)。更具体地说我们需要 [ ℓ ] \left\lbrack \ell \right\rbrack [ℓ]中所有元素对的集合“小”但大于 κ \kappa κ这样描述该函数族中一个函数的 κ \kappa κ位字符串比描述一个将 [ ℓ ] \left\lbrack \ell \right\rbrack [ℓ]映射到 [ ℓ ] \left\lbrack \ell \right\rbrack [ℓ]的随机函数所需的 ℓ log 2 ℓ \ell {\log }_{2}\ell ℓlog2ℓ位要短。这样的伪随机函数族可以从任何单向函数构造出来。
我们的数据全域将是 [ ℓ ] \left\lbrack \ell \right\rbrack [ℓ]中所有元素对的集合 X { ( a , b ) : a , b ∈ [ ℓ ] } . Q κ \mathcal{X} \{ \left( {a,b}\right) : a,b \in \left\lbrack \ell \right\rbrack \} .{\mathcal{Q}}_{\kappa } X{(a,b):a,b∈[ℓ]}.Qκ将包含两种类型的查询 对于该函数族中的每个函数 { f s } s ∈ { 0 , 1 } κ {\left\{ {f}_{s}\right\} }_{s \in \{ 0,1{\} }^{\kappa }} {fs}s∈{0,1}κ都会有一个查询。全域元素 ( a , b ) ∈ X \left( {a,b}\right) \in \mathcal{X} (a,b)∈X满足查询 s s s当且仅当 f s ( a ) b {f}_{s}\left( a\right) b fs(a)b。 将有相对较少数量比如 κ \kappa κ的真正随机查询。这样的查询可以通过为每个 ( a , b ) ∈ X \left( {a,b}\right) \in \mathcal{X} (a,b)∈X随机选择(a,b)是否满足该查询来构造。
难以合成的分布生成方式如下。首先我们随机选择一个字符串 s ∈ { 0 , 1 } κ s \in \{ 0,1{\} }^{\kappa } s∈{0,1}κ它指定了我们函数族中的一个函数。接下来对于从 [ ℓ ] \left\lbrack \ell \right\rbrack [ℓ] 中无放回随机选取的 n κ n \kappa nκ 个不同值 a 1 , … , a n {a}_{1},\ldots ,{a}_{n} a1,…,an我们生成宇宙元素 ( a , f s ( a ) ) \left( {a,{f}_{s}\left( a\right) }\right) (a,fs(a))。
其直觉很简单仅依赖于第一种类型的查询并且不利用 a i {a}_{i} ai 的独特性。给定一个根据我们的分布生成的数据库 x x x其中伪随机函数由 s s s 给出合成器必须创建一个合成数据库几乎其所有行都必须满足查询 s s s。直觉是它无法可靠地找到不出现在 x x x 中的输入 - 输出对。更准确地说对于任意元素 a ∈ [ ℓ ] a \in \left\lbrack \ell \right\rbrack a∈[ℓ]使得 x x x 中没有形式为 ( a , f s ( a ) ) \left( {a,{f}_{s}\left( a\right) }\right) (a,fs(a)) 的行 f s {f}_{s} fs 的伪随机性表明一个高效的合成器找到 f s ( a ) {f}_{s}\left( a\right) fs(a) 的概率最多只比 1 / ℓ 1/\ell 1/ℓ 略大一点。从这个意义上说伪随机性给我们带来的性质与我们从数字签名中获得的性质类似尽管稍弱一些。
当然对于任何给定的 a ∈ [ ℓ ] a \in \left\lbrack \ell \right\rbrack a∈[ℓ]合成器确实可以以概率 1 / ℓ 1/\ell 1/ℓ 猜出值 f s ( a ) {f}_{s}\left( a\right) fs(a)因此如果没有第二种类型的查询显然没有什么能阻止它忽略 x x x选择任意的 a a a并输出一个包含 n n n 个 (a, b) 副本的数据库其中 b b b 是从 [ ℓ ] \left\lbrack \ell \right\rbrack [ℓ] 中均匀随机选取的。现在的直觉是这样的合成数据库会给出错误的比例 - 要么是零要么是一而真正随机查询的正确答案应该约为 1 / 2 − 1/2 - 1/2−。
形式上我们有
定理 9.1。设 f : { 0 , 1 } κ → { 0 , 1 } κ f : \{ 0,1{\} }^{\kappa } \rightarrow \{ 0,1{\} }^{\kappa } f:{0,1}κ→{0,1}κ 是一个单向函数。对于每个 a 0 a 0 a0以及每个整数 n poly ( κ ) n \operatorname{poly}\left( \kappa \right) npoly(κ)存在一个大小为 exp ( poly ( κ ) ) \exp \left( {\operatorname{poly}\left( \kappa \right) }\right) exp(poly(κ)) 的查询族 Q \mathcal{Q} Q、一个大小为 O ( n 2 2 a ) O\left( {n}^{2 {2a}}\right) O(n22a) 的数据宇宙 X \mathcal{X} X以及一个大小为 n n n 的数据库上的分布该分布对于 α ≤ \alpha \leq α≤ 1 / 3 , β ≤ 1 / 10 1/3,\beta \leq 1/{10} 1/3,β≤1/10 和 μ 1 / 40 n 1 a \mu 1/{40}{n}^{1 a} μ1/40n1a 是 ( μ , α , β , 0 , Q ) \left( {\mu ,\alpha ,\beta ,0,\mathcal{Q}}\right) (μ,α,β,0,Q) - 难以合成的即对于最坏情况的查询难以合成。
上述定理表明了使用合成数据进行数据清理的难度。然而请注意当查询集较小时人们总是可以简单地为每个查询发布带噪声的计数。我们得出结论对于小查询类具有大数据宇宙进行数据清理是一项将高效合成与高效概要生成具有任意输出的数据清理区分开来的任务。
9.2.1 一般概要的难度结果
上一节的难度结果仅适用于合成器——创建合成数据库的离线机制。更通用形式的隐私保护离线机制我们一直称之为离线查询发布机制或概要生成器的难度与叛徒追踪方案的存在之间存在着紧密的联系。叛徒追踪方案是一种内容分发方法在该方法中短密钥字符串以某种方式分发给订阅者使得发送者可以广播加密消息任何订阅者都可以解密这些消息并且由恶意订阅者联盟构建的任何有用的“盗版”解码器都可以追溯到至少一个合谋者。
一个私钥、无状态叛徒追踪方案由算法设置Setup、加密Encrypt、解密Decrypt和追踪Trace组成。设置算法为广播者生成一个密钥 b k {bk} bk和 N N N个订阅者密钥 k 1 , … , k N {k}_{1},\ldots ,{k}_{N} k1,…,kN。加密算法使用广播者的密钥 b k {bk} bk对给定的比特进行加密。解密算法使用任何一个订阅者密钥对给定的密文进行解密。追踪算法获取密钥 b k {bk} bk并以预言机方式访问一个盗版、无状态解密盒然后输出用于创建盗版盒的密钥 k i {k}_{i} ki的索引 i ∈ { 1 , … , N } i \in \{ 1,\ldots ,N\} i∈{1,…,N}。
叛徒追踪方案的一个重要参数是其抗合谋性如果只要用于创建盗版解码器的密钥不超过 t t t个追踪就保证有效那么该方案就是 t t t - 抗合谋的。当 t N t N tN时即使所有订阅者联合起来试图创建一个盗版解码器追踪仍然有效。下面是一个更完整的定义。
定义9.3。如上所述的方案设置、加密、解密、追踪是一个t - 抗合谋叛徒追踪方案如果i它生成的密文是语义安全的粗略地说多项式时间算法无法区分0的加密和1的加密并且ii没有多项式时间敌手 A A A能以不可忽略的概率在设置、 A A A和追踪的随机硬币上在以下游戏中“获胜” A A A接收用户数量 N N N和一个安全参数 κ \kappa κ并自适应地请求最多 t t t个用户 { i 1 , … , i t } \left\{ {{i}_{1},\ldots ,{i}_{t}}\right\} {i1,…,it}的密钥。然后敌手输出一个盗版解码器Dec。使用密钥 b k {bk} bk并以黑盒方式 5 {}^{5} 5访问Dec来运行追踪算法它输出一个用户的名称 i ∈ [ N ] i \in \left\lbrack N\right\rbrack i∈[N]或错误符号 ⊥ \bot ⊥。我们说敌手 A A A“获胜”如果Dec在解密密文方面有不可忽略的优势甚至比创建一个可用的盗版解密设备的条件更弱并且追踪的输出不在 { i 1 , … , i t } \left\{ {{i}_{1},\ldots ,{i}_{t}}\right\} {i1,…,it}中这意味着敌手避免了被检测。 5 {}^{5} 5以黑盒方式访问一个算法意味着无法访问该算法的内部结构只能向算法提供输入并观察其输出。
叛徒追踪方案为何意味着计数查询发布存在难度结果的直观解释如下。固定一个叛徒追踪方案。我们必须描述那些查询发布在计算上困难的数据库和计数查询。
对于任何给定的 n κ n \kappa nκ数据库 x ∈ { { 0 , 1 } d } n x \in {\left\{ \{ 0,1{\} }^{d}\right\} }^{n} x∈{{0,1}d}n将包含来自 n n n个合谋用户的叛逆者追踪方案的用户密钥这里 d d d是在输入 1 κ {1}^{\kappa } 1κ上运行设置算法时获得的解密密钥的长度。查询族 Q κ {\mathcal{Q}}_{\kappa } Qκ将针对每个可能的密文 c c c有一个查询 q c {q}_{c} qc询问“对于多少比例的行 i ∈ [ n ] i \in \left\lbrack n\right\rbrack i∈[n]密文 c c c在第 i i i行的密钥下解密为1” 请注意由于每个用户都可以解密如果发送者分发比特1的加密 c c c答案将是1所有行都将 c c c解密为1因此这样的行的比例为1。相反如果发送者分发比特0的加密 c ′ {c}^{\prime } c′答案将是0因为没有行将 c ′ {c}^{\prime } c′解密为1所以将 c ′ {c}^{\prime } c′解密为1的行的比例为0。因此对于查询 q c {q}_{c} qc其中 c c c是1比特消息 b b b的加密的准确答案就是 b b b本身。
现在假设存在一种针对 Q \mathcal{Q} Q中的查询的高效离线差分隐私查询发布机制。合谋者可以使用该算法高效地生成数据库的概要使数据分析师能够高效地计算查询 q c {q}_{c} qc的近似答案。如果这些近似值并非无意义那么分析师可以使用它们进行正确解密。也就是说合谋者可以利用这一点来制造一个盗版解码器盒。但叛逆者追踪确保了对于任何这样的盒子追踪算法可以恢复至少一个用户的密钥即数据库的一行。这违反了差分隐私与存在一种用于发布 Q \mathcal{Q} Q的高效差分隐私算法的假设相矛盾。
这一方向已被用于排除针对特定类别的 2 O ~ ( n ) {2}^{\widetilde{O}\left( \sqrt{n}\right) } 2O (n )计数查询的高效离线清理器的存在这可以扩展到排除针对从第二个大类中自适应抽取的 Θ ~ ( n 2 ) \widetilde{\Theta }\left( {n}^{2}\right) Θ (n2)计数查询的高效在线清理器的存在。
计数查询的离线查询发布困难意味着叛逆者追踪的直觉在于未能保护隐私会立即产生某种形式的可追踪性也就是说在为一组行解密密钥提供近似功能等价物的同时保护每一行解密密钥的隐私的难度——即制造一个不可追踪的解码器的难度——正是我们在叛逆者追踪方案中所寻求的。
更详细地说给定一个难以清理的数据库分布和计数查询族随机抽取的 n n n项数据库可以充当“主密钥”其中用于解密消息的秘密是该数据库上随机查询的计数。对于随机选择的多对数(n)个查询的子集 S S S从数据库中随机抽取的多对数(n)行的集合很可能能很好地近似 S S S中的所有查询。因此可以通过将数据库随机划分为 n / n/ n/个多对数(n)行的多对数(n)集合并将每个集合分配给不同的用户来获得各个用户的密钥。这些集合足够大以至于在压倒性概率下它们在例如多对数(n)个随机查询集合上的计数都接近原始数据库的计数。
为了完成这个论证我们设计了一种加密方案其中解密等同于计算小的随机查询集合上的近似计数。由于根据定义盗版解密盒可以进行解密因此盗版盒可以用于计算近似计数。如果我们将这个盒子视为数据库的清理结果我们可以得出结论因为清理是困难的解密盒可以“追溯”到用于创建它的密钥数据库项。
9.3 多项式时间敌手
定义9.4计算差分隐私。当且仅当对于所有仅相差一行的数据库 x , y x,y x,y以及所有非均匀多项式关于 κ \kappa κ算法 T T T随机算法 C κ : X n → Y {C}_{\kappa } : {\mathcal{X}}^{n} \rightarrow Y Cκ:Xn→Y 是 ε \varepsilon ε -计算差分隐私的。 Pr [ T ( C κ ( x ) ) 1 ] ≤ e ε Pr [ T ( C κ ( y ) ) 1 ] ν ( κ ) , \Pr \left\lbrack {T\left( {{C}_{\kappa }\left( x\right) }\right) 1}\right\rbrack \leq {e}^{\varepsilon }\Pr \left\lbrack {T\left( {{C}_{\kappa }\left( y\right) }\right) 1}\right\rbrack \nu \left( \kappa \right) , Pr[T(Cκ(x))1]≤eεPr[T(Cκ(y))1]ν(κ),
其中 ν ( ⋅ ) \nu \left( \cdot \right) ν(⋅) 是任何增长速度比任何多项式的倒数都慢的函数并且算法 C κ {C}_{\kappa } Cκ 在 n n n、 log ∣ X ∣ \log \left| \mathcal{X}\right| log∣X∣ 和 κ \kappa κ 的多项式时间内运行。
直观地说这意味着如果对手被限制在多项式时间内那么计算差分隐私机制提供的隐私程度与 ( ε , ν ( κ ) ) \left( {\varepsilon ,\nu \left( \kappa \right) }\right) (ε,ν(κ)) -差分隐私算法相同。一般来说消除 ν ( κ ) \nu \left( \kappa \right) ν(κ) 项是没有希望的例如当涉及加密时总是有一些极小的机会猜出解密密钥。
一旦我们假设对手被限制在多项式时间内我们就可以使用安全多方计算的强大技术来提供分布式在线查询发布算法用模拟可信策展人的分布式协议取代可信服务器。因此例如一组医院每家医院都持有许多患者的数据可以协作对其患者的联合数据进行统计分析同时确保每个患者的差分隐私。一个更激进的影响是个人可以维护自己的数据选择参与或不参与每个特定的统计查询或研究同时确保自己数据的差分隐私。
我们已经看到了一种分布式解决方案至少对于计算 n n n 位之和的问题随机响应。这种解决方案不需要计算假设并且预期误差为 Θ ( n ) \Theta \left( \sqrt{n}\right) Θ(n )。相比之下使用密码学假设允许进行更准确和广泛的分析因为通过模拟策展人它可以运行拉普拉斯机制的分布式实现该机制具有恒定的预期误差。
这就引出了一个自然的问题即是否存在某种不依赖于密码学假设的其他方法在分布式环境中比随机响应具有更高的准确性。或者更一般地说计算差分隐私所能实现的与“传统”差分隐私所能实现的之间是否存在差异也就是说密码学是否确实为我们带来了一些好处
在多方环境中答案是肯定的。仍然将我们的注意力限制在对 n n n 位求和上我们有
定理9.2。对于 ε 1 \varepsilon 1 ε1每个用于计算 n n n 位每方一位之和的 n n n -方 ( ε , 0 ) \left( {\varepsilon ,0}\right) (ε,0) -差分隐私协议在高概率下会产生误差 Ω ( n 1 / 2 ) \Omega \left( {n}^{1/2}\right) Ω(n1/2)。
如果 δ ∈ \delta \in δ∈ o ( 1 / n ) o\left( {1/n}\right) o(1/n)对于 ( ε , δ ) \left( {\varepsilon ,\delta }\right) (ε,δ) -差分隐私也有类似的定理成立。
证明。概要设 X 1 , … , X n {X}_{1},\ldots ,{X}_{n} X1,…,Xn 是均匀独立的位。协议的记录 T T T 是一个随机变量 T T ( P 1 ( X 1 ) , … , T T\left( {{P}_{1}\left( {X}_{1}\right) ,\ldots ,}\right. TT(P1(X1),…, P n ( X n ) {P}_{n}\left( {X}_{n}\right) Pn(Xn)其中对于 i ∈ [ n ] i \in \left\lbrack n\right\rbrack i∈[n]玩家 i i i 的协议表示为 P i {P}_{i} Pi。在 T t T t Tt 的条件下位 X 1 , … , X n {X}_{1},\ldots ,{X}_{n} X1,…,Xn 仍然是独立的位每个位的偏差为 O ( ε ) O\left( \varepsilon \right) O(ε)。此外通过差分隐私、 X i {X}_{i} Xi 的均匀性和贝叶斯定律我们有 Pr [ X i 1 ∣ T t ] Pr [ X i 0 ∣ T t ] Pr [ T t ∣ X i 1 ] Pr [ T t ∣ X i 0 ] ≤ e ε 1 2 ε . \frac{\Pr \left\lbrack {{X}_{i} 1 \mid T t}\right\rbrack }{\Pr \left\lbrack {{X}_{i} 0 \mid T t}\right\rbrack } \frac{\Pr \left\lbrack {T t \mid {X}_{i} 1}\right\rbrack }{\Pr \left\lbrack {T t \mid {X}_{i} 0}\right\rbrack } \leq {e}^{\varepsilon } 1 {2\varepsilon }. Pr[Xi0∣Tt]Pr[Xi1∣Tt]Pr[Tt∣Xi0]Pr[Tt∣Xi1]≤eε12ε.
为完成证明我们注意到 n n n 个独立比特每个比特都有恒定偏差的和以很高的概率落在任何大小为 o ( n ) o\left( \sqrt{n}\right) o(n ) 的区间之外。因此以很高的概率和 ∑ i X i \mathop{\sum }\limits_{i}{X}_{i} i∑Xi 不在区间 [ output ( T ) − o ( n 1 / 2 ) , output ( T ) o ( n 1 / 2 ) ] \left\lbrack {\operatorname{output}\left( \mathrm{T}\right) - o\left( {n}^{1/2}\right) ,\operatorname{output}\left( \mathrm{T}\right) o\left( {n}^{1/2}\right) }\right\rbrack [output(T)−o(n1/2),output(T)o(n1/2)] 内。
一个更复杂的证明表明即使在两方的情况下计算差分隐私computational differential privacy和普通差分隐私ordinary differential privacy之间也存在差异。在可信策展人trusted curator的情况下计算假设是否能为我们带来任何好处这是一个引人入胜的开放性问题。初步结果是否定的对于少量实值查询即查询数量不随安全参数增长的情况存在一类自然的效用度量包括 L p {L}_{p} Lp 距离和均方误差对于这些度量任何计算上私密的机制都可以转换为一个统计上私密的机制该机制大致同样高效并且能实现几乎相同的效用。
9.4 参考文献注释
多项式时间有界策展人的负面结果以及与叛徒追踪traitor tracing的联系归功于 Dwork 等人 [28]。Ullman [82] 进一步研究了与叛徒追踪的联系他表明假设单向函数存在以差分隐私回答 n 2 o ( 1 ) {n}^{2 o\left( 1\right) } n2o(1) 个任意线性查询在计算上是困难的即使在不考虑隐私的情况下答案很容易计算。在《我们的数据我们自己》“Our Data, Ourselves”中Dwork、Kenthapadi、McSherry、Mironov 和 Naor 使用安全函数评估技术代替可信策展人考虑了差分隐私前身的分布式版本 [21]。[64] 中开始了对计算差分隐私的正式研究定理 9.2 中多方和单策展人情况下 ( ε , 0 ) \left( {\varepsilon ,0}\right) (ε,0) -差分隐私所能达到的准确性之间的差异归功于 McGregor 等人 [58]。关于在可信策展人情况下对对手的计算假设是否能带来任何好处的初步结果归功于 Groce 等人 [37]。
从任何单向函数构造伪随机函数pseudorandom functions归功于 Håstad 等人 [40]。 目录导航
第1章https://blog.csdn.net/AdamCY888/article/details/146454841 第2章:https://blog.csdn.net/AdamCY888/article/details/146455093 第3章(1/3):https://blog.csdn.net/AdamCY888/article/details/146455756 第3章(2/3):https://blog.csdn.net/AdamCY888/article/details/146455796 第3章(3/3):https://blog.csdn.net/AdamCY888/article/details/146455328 第4章:https://blog.csdn.net/AdamCY888/article/details/146455882 第5章:https://blog.csdn.net/AdamCY888/article/details/146456100 第6章(1/2):https://blog.csdn.net/AdamCY888/article/details/146456712 第6章(2/2):https://blog.csdn.net/AdamCY888/article/details/146456972 第7章:https://blog.csdn.net/AdamCY888/article/details/146457037 第8章:https://blog.csdn.net/AdamCY888/article/details/146457172 第9章:https://blog.csdn.net/AdamCY888/article/details/146457257 第10章:https://blog.csdn.net/AdamCY888/article/details/146457331 第11章:https://blog.csdn.net/AdamCY888/article/details/146457418 第12章:https://blog.csdn.net/AdamCY888/article/details/146457489 第13章(含附录):https://blog.csdn.net/AdamCY888/article/details/146457601
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88361.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!