安全多方计算:安全定义

news2024/11/27 6:43:01

参考文献:《密码协议》课程 PPT

文章目录

  • UM & AM
    • 安全定义
    • 编译器
  • Semi-honest & Malicious
    • 安全定义
      • 半诚实模型
      • 恶意模型
    • 编译器
      • Input-Commitment
      • Augmented Coin-Tossing
      • Authenticated Computation
      • 编译器框架

UM & AM

安全定义

异步网络下的多方协议,它由若干会话(Session, 某协议的一份独立执行)构成。每个参与方同时与多个其他参与方执行若干个协议或者子协议的会话。每个会话被两个参与者的 u i d uid uid 以及会话的 s i d sid sid 唯一索引,会话执行时对应参与者会保持一个局部状态(含有私有数据),会话结束后将擦除(erase)这个状态(前向安全性(forward secrecy):即使长期秘钥泄露,过期秘钥依然与随机秘钥不可区分),会话的输出包括数值以及事件(成功 / 失败)。环境的全局输出包括:所有参与方的局部输出、敌手的输出。

在这里插入图片描述

消息驱动(message-driven)模式:在运行环境中,进程 P i P_i Pi 请求执行(子)协议 Π \Pi Π 时,发出 establish-session ( P i , P j , s i d , r o l e ) \text{establish-session}(P_i,P_j,sid,role) establish-session(Pi,Pj,sid,role) 命令来启动协议 Π \Pi Π 的一个 session,其中 r o l e ∈ { i n i t i a t o r , r e s p o n d e r } role \in \{initiator, responder\} role{initiator,responder}。在这个 session 中, P i P_i Pi 将消息 ( P i , P j , s i d , m e s s a g e ) (P_i,P_j,sid,message) (Pi,Pj,sid,message) 发送给 P j P_j Pj,激活它在这个会话中处理此消息。

AM 敌手 A \mathcal A A(Authenticated-Links Adversary Model)是被动的 PPT 敌手,它可以:通过其他参与方的消息来激活某个参与方(认证信道,绑定了通信两端)、任何消息至多被传递一次(异步信道,消息传递可被无限期延迟)。全局输出记为 A U T H Π , A ( k , x ⃗ , r ⃗ ) AUTH_{\Pi,\mathcal A}(k,\vec x,\vec r) AUTHΠ,A(k,x ,r ),其中 k k k 是全局公开输入, x ⃗ , r ⃗ \vec x,\vec r x ,r 是各自的私有输入和随机带。

UM 敌手 U \mathcal U U(Unauthenticated-Links Adversary Model)是主动的 PPT 敌手,它可以:操作某些会话(插入删除消息、编排执行顺序、开启结束会话)、获得某些会话的内部状态、入侵某些参与者(获取未完成会话的内部状态、查询已完成会话的秘密输出、控制信息擦除)。全局输出记为 U N A U T H Π , U ( k , x ⃗ , r ⃗ ) UNAUTH_{\Pi,\mathcal U}(k,\vec x,\vec r) UNAUTHΠ,U(k,x ,r ),其中 k k k 是全局公开输入, x ⃗ , r ⃗ \vec x,\vec r x ,r 是各自的私有输入和随机带。

编译器

两个 n n n 方的消息驱动协议 Π , Π ′ \Pi,\Pi' Π,Π,我们说 Π ′ \Pi' Π 在 UM 下仿真(emulate) Π \Pi Π,如果对于任意的 UM 敌手 U U U,都存在 AM 敌手 A A A,使得
{ A U T H Π , A ( k , x ⃗ , r ⃗ ) } k , x , r ≡ { U N A U T H Π ′ , U ( k , x ⃗ , r ⃗ ) } k , x , r \{AUTH_{\Pi,\mathcal A}(k,\vec x,\vec r)\}_{k,x,r} \equiv \{UNAUTH_{\Pi',\mathcal U}(k,\vec x,\vec r)\}_{k,x,r} {AUTHΠ,A(k,x ,r )}k,x,r{UNAUTHΠ,U(k,x ,r )}k,x,r

这儿的 “仿真” 是说两个不同模型下的协议功能等价

对于 AM 下的消息传递协议(message transmission, MT),可以使用签名方案,将它用某个 authenticator 转化为 UM 下功能等价的协议。

在这里插入图片描述

给定 TM 协议的编译器 λ \lambda λ,可以给出一个通用编译器 C λ \mathcal C_\lambda Cλ

  1. 输入任意协议 Π \Pi Π 的描述
  2. 对于 Π \Pi Π 的每个消息传递,协议 Π ′ \Pi' Π 都调用 λ \lambda λ 来发送消息
  3. 每当 λ \lambda λ 收到一个消息,协议 Π ′ \Pi' Π 用此消息来激活 Π \Pi Π
  4. 输出新协议 Π ′ = C λ ( Π ) \Pi' = \mathcal C_\lambda(\Pi) Π=Cλ(Π)

Semi-honest & Malicious

我们现在关注 2PC (两方安全计算)的安全性。

计算函数 f : = ( f 1 , f 2 ) f:=(f_1,f_2) f:=(f1,f2) 的两方协议 Π \Pi Π 如图所示:

在这里插入图片描述

安全定义

半诚实模型

在半诚实模型(Semi-honest Model)中,敌手是 honest-but-curious 的,它们诚实地遵照协议执行,但是会分析获得的消息序列,试图获取知识

根据信息论,分析源数据获得的信息熵不会超过源数据本身的信息熵,因此 PPT 的敌手所获得的知识必定源于对 view 的高效计算。只要存在一个 PPT 模拟器(作为 P 2 P_2 P2 但没有 P 2 P_2 P2 的私有输入)仅根据 P 1 P_1 P1 的输入输出就模拟 P 1 P_1 P1 的视图,则说明 Π \Pi Π 的交互信息中无法高效提取出知识。

设函数 f : { 0 , 1 } ∗ × { 0 , 1 } ∗ → { 0 , 1 } ∗ × { 0 , 1 } ∗ f:\{0,1\}^* \times \{0,1\}^* \to \{0,1\}^* \times \{0,1\}^* f:{0,1}×{0,1}{0,1}×{0,1} f ( x , y ) : = ( f 1 ( x , y ) , f 2 ( x , y ) ) f(x,y):=(f_1(x,y),f_2(x,y)) f(x,y):=(f1(x,y),f2(x,y)),协议 Π \Pi Π 是计算 f f f 的两方协议。在 Π ( x , y ) \Pi(x,y) Π(x,y) 执行期间,

  • P 1 P_1 P1 的视图为 V i e w 1 Π ( x , y ) : = ( x , r 1 , m 1 , ⋯   , m t ) View_1^\Pi(x,y) := (x,r_1,m_1,\cdots,m_t) View1Π(x,y):=(x,r1,m1,,mt),其中 x x x私有输入 r 1 r_1 r1内部随机带 m i m_i mi收到的(以及发送的)消息,它的输出 O u t p u t 1 Π ( x , y ) Output_1^\Pi(x,y) Output1Π(x,y) 是对 V i e w 1 Π View_1^\Pi View1Π 的高效计算(包含在 V i e w 1 Π View_1^\Pi View1Π 内)。
  • P 2 P_2 P2 的视图为 V i e w 2 Π ( x , y ) : = ( y , r 2 , m 1 , ⋯   , m s ) View_2^\Pi(x,y) := (y,r_2,m_1,\cdots,m_s) View2Π(x,y):=(y,r2,m1,,ms),其中 y y y 是私有输入, r 2 r_2 r2 是内部随机带, m i m_i mi 是收到的(以及发送的)消息,它的输出 O u t p u t 2 Π ( x , y ) Output_2^\Pi(x,y) Output2Π(x,y) 是对 V i e w 2 Π View_2^\Pi View2Π 的高效计算(包含在 V i e w 2 Π View_2^\Pi View2Π 内)。

我们说 Π \Pi Π 在 Semi-honest Model 下能够安全计算 f f f

  1. 对于 P 2 P_2 P2 的安全性,存在 PPT 模拟器 S i m 1 Sim_1 Sim1 P 1 ∗ P_1^* P1 模拟与 P 2 P_2 P2 的交互),使得如下的联合分布不可区分
    { S i m 1 ( x , f 1 ( x , y ) ) ,   f 2 ( x , y ) } X , Y ≡ c { V i e w 1 Π ( x , y ) , O u t p u t 2 Π ( x , y ) } X , Y \{Sim_1(x,f_1(x,y)),\, f_2(x,y)\}_{X,Y} \overset{c}{\equiv} \{View_1^\Pi(x,y),Output_2^\Pi(x,y)\}_{X,Y} {Sim1(x,f1(x,y)),f2(x,y)}X,Yc{View1Π(x,y),Output2Π(x,y)}X,Y

  2. 对于 P 1 P_1 P1 的安全性,存在 PPT 模拟器 S i m 2 Sim_2 Sim2(为 P 2 ∗ P_2^* P2 模拟与 P 1 P_1 P1 的交互),使得如下的联合分布不可区分
    { f 1 ( x , y ) ,   S i m 2 ( y , f 2 ( x , y ) ) } X , Y ≡ c { O u t p u t 1 Π ( x , y ) ,   V i e w 2 Π ( x , y ) } X , Y \{f_1(x,y),\, Sim_2(y,f_2(x,y))\}_{X,Y} \overset{c}{\equiv} \{Output_1^\Pi(x,y),\, View_2^\Pi(x,y)\}_{X,Y} {f1(x,y),Sim2(y,f2(x,y))}X,Yc{Output1Π(x,y),View2Π(x,y)}X,Y

如果 f f f确定性函数,则可以简化为:
{ S i m 1 ( x , f 1 ( x , y ) ) } X , Y ≡ c { V i e w 1 Π ( x , y ) } X , Y { S i m 2 ( y , f 2 ( x , y ) ) } X , Y ≡ c { V i e w 2 Π ( x , y ) } X , Y \begin{aligned} \{Sim_1(x,f_1(x,y))\}_{X,Y} \overset{c}{\equiv} \{View_1^\Pi(x,y)\}_{X,Y}\\ \{Sim_2(y,f_2(x,y))\}_{X,Y} \overset{c}{\equiv} \{View_2^\Pi(x,y)\}_{X,Y}\\ \end{aligned} {Sim1(x,f1(x,y))}X,Yc{View1Π(x,y)}X,Y{Sim2(y,f2(x,y))}X,Yc{View2Π(x,y)}X,Y

对于随机函数 f f f联合分布是必要的。例如 f ( 1 n , 1 n ) = ( r ← R { 0 , 1 } n , ⊥ ) f(1^n,1^n)=(r \leftarrow_R \{0,1\}^n,\perp) f(1n,1n)=(rR{0,1}n,),我们构造 Π \Pi Π 为: P 1 P_1 P1 随机掷硬币 r r r,将它发送给 P 2 P_2 P2,然后 P 1 P_1 P1 输出 r r r 但是 P 2 P_2 P2 什么也不输出。这个 Π \Pi Π 根本没什么安全性可言,但是确定性版本的模拟器 S i m 2 Sim_2 Sim2 很容易构造(随机掷币 r r r,并随机生成 P 2 P_2 P2 的一个随机带 ρ \rho ρ),于是它说 Π \Pi Π 安全计算了 f f f(这太不合理了)。

恶意模型

在恶意模型(Malicious Model)中,敌手会以任意方式偏离协议:随意终止(协议执行的某一步)、改变输入值(敌手一方的)、过早停止(敌手已获得全部想要的消息,但对方仍需一些消息传递才能计算出结果)。

在 Ideal World 中存在计算 f f f 的可信第三方(Trusted Third Party, TTP),且参与方与 TTP 之间的消息传递是不可窃听的。因此,在 Ideal World 中不存在什么敌手(即使是无界的)可以获取有关对方输入的知识。如果 Real World 中的任意敌手都可以在 Ideal World 中被模拟,就说明 Real World 中的敌手也没什么威胁。

设函数 f : { 0 , 1 } ∗ × { 0 , 1 } ∗ → { 0 , 1 } ∗ × { 0 , 1 } ∗ f:\{0,1\}^* \times \{0,1\}^* \to \{0,1\}^* \times \{0,1\}^* f:{0,1}×{0,1}{0,1}×{0,1} f ( x , y ) : = ( f 1 ( x , y ) , f 2 ( x , y ) ) f(x,y):=(f_1(x,y),f_2(x,y)) f(x,y):=(f1(x,y),f2(x,y)),一个 admissible(可接受的)Ideal World 敌手是多项式尺寸的电路族 C = ( C 1 , C 2 ) C = (C_1,C_2) C=(C1,C2),其中存在 i ∈ { 1 , 2 } i \in \{1,2\} i{1,2} 使得 C i ( I ) = I C_i(I)=I Ci(I)=I C i ( I , O ) = O C_i(I,O)=O Ci(I,O)=O(人话就是:诚实方),这里 I I I 是自己的输入, O O O 是从 TTP 收到的输出。假设 TTP 计算 f ( x , y ) f(x,y) f(x,y)首先回复 C 1 C_1 C1 然后再回复 C 2 C_2 C2(导致 C 1 ∗ C_1^* C1 有 “早停” 的能力),那么定义 Ideal 联合执行 I d e a l f , C ( x , y ) Ideal_{f,C}(x,y) Idealf,C(x,y) 为:

  • 如果 C 2 C_2 C2 诚实(即 C 2 ( I ) = I C_2(I)=I C2(I)=I C 2 ( I , O ) = O C_2(I,O)=O C2(I,O)=O),

    1. C 1 ( x ) = ⊥ C_1(x) = \perp C1(x)=⊥ 时( C 1 ∗ C_1^* C1 提前终止),
      I d e a l f , C ( x , y ) = ( C 1 ( x , ⊥ ) , ⊥ ) Ideal_{f,C}(x,y) = (C_1(x,\perp),\perp) Idealf,C(x,y)=(C1(x,),)

      其中 C 1 ( x , ⊥ ) C_1(x,\perp) C1(x,) 是收到 TTP 的回应 ⊥ \perp 后做的计算结果

    2. C 1 ( x ) ≠ ⊥ C_1(x) \neq \perp C1(x)= C 1 ( x , f 1 ( C 1 ( x ) , y ) ) = ⊥ C_1(x,f_1(C_1(x),y))=\perp C1(x,f1(C1(x),y))=⊥ 时( C 1 ∗ C_1^* C1 过早停止),
      I d e a l f , C ( x , y ) = ( C 1 ( x , f 1 ( C 1 ( x ) , y ) ) , ⊥ ) Ideal_{f,C}(x,y) = (C_1(x,f_1(C_1(x),y)),\perp) Idealf,C(x,y)=(C1(x,f1(C1(x),y)),)

      其中 C 1 ( x , f 1 ( C 1 ( x ) , y ) ) C_1(x,f_1(C_1(x),y)) C1(x,f1(C1(x),y)) 是收到 TTP 的回应 f 1 ( C 1 ( x ) , y ) f_1(C_1(x),y) f1(C1(x),y) 后做的计算结果

    3. 对于其他情况( C 1 C_1 C1 诚实,或者 C 1 ∗ C_1^* C1 修改了输入),
      I d e a l f , C ( x , y ) = ( C 1 ( x , f 1 ( C 1 ( x ) , y ) ) , f 2 ( C 1 ( x ) , y ) ) Ideal_{f,C}(x,y) = (C_1(x,f_1(C_1(x),y)),f_2(C_1(x),y)) Idealf,C(x,y)=(C1(x,f1(C1(x),y)),f2(C1(x),y))

      其中 C 1 ( x , f 1 ( C 1 ( x ) , y ) ) C_1(x,f_1(C_1(x),y)) C1(x,f1(C1(x),y)) 是收到 TTP 的回应 f 1 ( C 1 ( x ) , y ) f_1(C_1(x),y) f1(C1(x),y) 后做的计算结果,而诚实的 C 2 C_2 C2 直接输出收到的 TTP 回应 f 2 ( C 1 ( x ) , y ) f_2(C_1(x),y) f2(C1(x),y)

  • 如果 C 1 C_1 C1 诚实(即 C 1 ( I ) = I C_1(I)=I C1(I)=I C 1 ( I , O ) = O C_1(I,O)=O C1(I,O)=O),

    1. C 2 ( x ) = ⊥ C_2(x) = \perp C2(x)=⊥ 时( C 2 ∗ C_2^* C2 提前终止),
      I d e a l f , C ( x , y ) = ( ⊥ , C 2 ( y , ⊥ ) ) Ideal_{f,C}(x,y) = (\perp,C_2(y,\perp)) Idealf,C(x,y)=(,C2(y,))

      其中 C 2 ( y , ⊥ ) C_2(y,\perp) C2(y,) 是收到 TTP 的回应 ⊥ \perp 后做的计算结果

    2. 对于其他情况( C 2 C_2 C2 诚实,或者 C 2 ∗ C_2^* C2 修改了输入),
      I d e a l f , C ( x , y ) = ( f 1 ( x , C 2 ( y ) ) , C 2 ( y , f 2 ( x , C 2 ( y ) ) ) ) Ideal_{f,C}(x,y) = (f_1(x,C_2(y)),C_2(y,f_2(x,C_2(y)))) Idealf,C(x,y)=(f1(x,C2(y)),C2(y,f2(x,C2(y))))

      其中 C 2 ( y , f 2 ( x , C 2 ( y ) ) ) C_2(y,f_2(x,C_2(y))) C2(y,f2(x,C2(y))) 是收到 TTP 的回应 f 2 ( x , C 2 ( y ) ) f_2(x,C_2(y)) f2(x,C2(y)) 后做的计算结果,而诚实的 C 1 C_1 C1 直接输出收到的 TTP 回应 f 1 ( x , C 2 ( y ) ) f_1(x,C_2(y)) f1(x,C2(y))

Π \Pi Π 是计算 f f f 的两方协议,一个 admissible Real World 敌手是多项式尺寸的电路族 C = ( C 1 , C 2 ) C = (C_1,C_2) C=(C1,C2),其中存在 i ∈ { 1 , 2 } i \in \{1,2\} i{1,2} 使得 C i C_i Ci 严格执行 Π \Pi Π 所指定的策略(诚实方)。我们定义 Real 联合执行 R e a l Π , C ( x , y ) Real_{\Pi,C}(x,y) RealΠ,C(x,y) 为:交互 ⟨ C 1 ( x ) , C 2 ( y ) ⟩ \langle C_1(x),C_2(y) \rangle C1(x),C2(y)⟩ 的输出对 ( O u t p u t 1 C ( x , y ) , O u t p u t 2 C ( x , y ) ) (Output_1^{C}(x,y),Output_2^{C}(x,y)) (Output1C(x,y),Output2C(x,y))

我们说 Π \Pi Π 在 Malicious Model 下可以安全计算 f f f,如果存在 PPT 变换,将 admissible poly-size real world 敌手 A A A 转化为 admissible poly-size ideal world 敌手 B B B,使得
{ R e a l Π , A ( x , y ) } ≡ c { I d e a l f , B ( x , y ) } \{Real_{\Pi,A}(x,y)\} \overset{c}{\equiv} \{Ideal_{f,B}(x,y)\} {RealΠ,A(x,y)}c{Idealf,B(x,y)}

在恶意模型中,可以仅考虑确定性的现实敌手(概率的现实敌手,考虑最具优势的一条随机带,可以转化为确定性的)。

编译器

现在,我们将 Semi-honest 安全的协议 Π \Pi Π,转化为 Malicious 安全的协议 Π ′ \Pi' Π。思路是:强制参与方执行半诚实行为,否则会被发现作弊行为(使用 ZKP / PoK for NPC 来约束)

  • 约束输入:使用承诺协议(或者 OWF 等等)对输入值进行承诺,然后使用 PoK 证明自己拥有原像并且正确执行了运算(其中的随机带可以是通过 Augmented Coin-Tossing 掷出来的,如果不影响绑定性那也可以不是)
  • 约束随机带:掷币入井(coin-tossing into the well),双方协同掷币,一方获得公平的掷币值,另一方获得此掷币值的承诺值以及对它的 PoK 证明
  • 约束执行:对于发送的消息,使用 ZKP(不必是 PoK)来证明它是被正确计算的(先前收到的消息,以及 Augmented Coin-Tossing 和 Input-Commitment 中的承诺值)

Input-Commitment

C n : { 0 , 1 } × { 0 , 1 } n → { 0 , 1 } p o l y ( n ) C_n:\{0,1\} \times \{0,1\}^n \to \{0,1\}^{poly(n)} Cn:{0,1}×{0,1}n{0,1}poly(n) 是(比特)承诺方案。

在恶意模型下,安全计算函数性 f ( ( x , r ) , 1 n ) : = ( λ , C n ( x , r ) ) f((x,r),1^n) := (\lambda,C_n(x,r)) f((x,r),1n):=(λ,Cn(x,r)) 的协议:

在这里插入图片描述

Augmented Coin-Tossing

C n : { 0 , 1 } × { 0 , 1 } n → { 0 , 1 } p o l y ( n ) C_n:\{0,1\} \times \{0,1\}^n \to \{0,1\}^{poly(n)} Cn:{0,1}×{0,1}n{0,1}poly(n) 是(比特)承诺方案。

在恶意模型下,安全计算函数性 f ( 1 n , 1 n ) : = ( ( b , r ) , C n ( b , r ) ) f(1^n,1^n) := ((b,r),C_n(b,r)) f(1n,1n):=((b,r),Cn(b,r)) 的协议:

在这里插入图片描述

P 1 P_1 P1 P 2 P_2 P2 独立地执行 1 + n 1+n 1+n 次掷单个公平硬币的协议: P 1 P_1 P1 掷硬币 σ i \sigma_i σi,计算承诺值 c i c_i ci 连同其正确执行计算的 proof 发给 P 2 P_2 P2,然后 P 2 P_2 P2 掷硬币 σ i ′ \sigma_i' σi 发送给 P 1 P_1 P1,最后 P 1 P_1 P1 需要将 b 0 = σ 0 ⊕ σ 0 ′ b_0 = \sigma_0 \oplus \sigma_0' b0=σ0σ0 作为掷硬币结果,使用 b 1 ∥ ⋯ ∥ b n b1\|\cdots\|b_n b1∥bn 作为随机带计算 b 0 b_0 b0 的承诺值 c c c,连同其正确执行计算的 proof 发送给 P 2 P_2 P2

Authenticated Computation

f : { 0 , 1 } ∗ × { 0 , 1 } ∗ → { 0 , 1 } p o l y ( n ) f: \{0,1\}^* \times \{0,1\}^* \to \{0,1\}^{poly(n)} f:{0,1}×{0,1}{0,1}poly(n) 是 PPT 的函数,令 h : { 0 , 1 } ∗ × { 0 , 1 } n → { 0 , 1 } p o l y ( n ) h: \{0,1\}^* \times \{0,1\}^n \to \{0,1\}^{poly(n)} h:{0,1}×{0,1}n{0,1}poly(n) 是 PPT 的对第一个参数是 1-1 的函数( ∀ α ≠ α ′ , ∀ r , r ′ , h ( α , r ) ≠ h ( α ′ , r ′ ) \forall \alpha \neq \alpha', \forall r,r',h(\alpha,r) \neq h(\alpha',r') α=α,r,r,h(α,r)=h(α,r))。

在恶意模型下,安全计算函数性 ( ( α , r , β ) , ( h ( α , r ) , β ) ) → ( λ , f ( α , β ) ) ((\alpha,r,\beta),(h(\alpha,r),\beta)) \to (\lambda,f(\alpha,\beta)) ((α,r,β),(h(α,r),β))(λ,f(α,β)) 的协议:

在这里插入图片描述

这里的 h ( α , r ) h(\alpha,r) h(α,r) P 1 P_1 P1 对输入 α \alpha α 的承诺值(Perfect Binding),而 f ( α , β ) f(\alpha,\beta) f(α,β) 是协议 Π \Pi Π 指定的操作。

编译器框架

我们将半诚实安全的 Π \Pi Π,编译为恶意安全的 Π ′ \Pi' Π,它分为三个阶段:

  1. 在 random-pad 阶段,双方分别执行 Augmented Coin-Tossing 获得无偏随机带。
  2. 在 input-commitment 阶段,双方分别执行 Input-Commitment 对自己的输入做承诺。
  3. 在 protocol emulation 阶段,双方利用 Authenticated Computation 来执行协议的每一步操作。
  4. 最后,如果每一步都是半诚实执行的,那么双方输出计算结果。

假设 Trapdoor OWP 存在,那么半诚实安全的 OT 协议存在。假设 OWF 存在(由 OWP 直接导致),那么承诺方案存在,ZKP 存在,对称加密算法也存在。从而通过 Garbled Circuit + OT 可以构造出半诚实安全的 2PC 协议,进一步可编译成恶意安全的 2PC 协议

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于 Kafka 分区程序的关键细节

Apache Kafka 是当今事件流的事实标准。Kafka 如此成功的部分原因是它能够处理大量数据,每秒吞吐量达到数百万条记录,这在生产环境中并非闻所未闻。Kafka设计的一部分使这成为可能,那就是分区。 Kafka 使用分区将数据负载分散到集群中的代理…

UFT描述性编程及综合练习

1、录制登录操作改描述性编程。 登录的用户名、密码在global表中给出。有2组:自己的学号/mercury,自己的学号/123456。将登录的本地对象库清空。 要求: 分别采用直接描述性编程和Description描述性编程实现2组数据登录测试,用repo…

pikvm系统主要软件包解析备忘

PI-KVM让普通家用PC也有能够像数据中心机房里面的IP-KVM一样的功能。 详细信息参考官网:PiKVM HandbookOpen and cheap DIY IP-KVM on Raspberry Pihttps://docs.pikvm.org/ nullOpen and inexpensive DIY IP-KVM based on Raspberry Pi - GitHub - pikvm/pikvm: O…

LeetCode - 34 在排序数组中查找元素的第一个和最后一个位置

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode) 题目描述 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在…

【项目笔记】若干基本社团发现算法介绍

两个衡量指标:边介数 & 模块度 边介数计算: 以下用图来自:https://blog.csdn.net/weixin_44704845/article/details/102686597 选择S为源节点对图搜索,画出S到其他节点的最短路径树 2.给边标数字 1) 所有邻近叶…

【YOLO系列】--YOLOv4超详细解读/总结(网络结构)

YOLOv4(YOLOv4: Optimal Speed and Accuracy of Object Detection)(原文+解读/总结+翻译) 系列文章: YOLOv1论文解读/总结_yolo论文原文_耿鬼喝椰汁的博客-CSDN博客 YOLOv2论文解读/总结_耿鬼…

软件测试面试至今0 offer,问题到底出在哪儿?

转眼已是四月中旬,求职招聘季也快要结束啦,如果没点真技术 真本事,不了解点职场套路,在今年行情下,找工作可是难上加难。 现在点开微博或者脉脉,只要搜索“招聘”,用“惨不忍睹”来形容也不为过…

【数据结构】经典排序

【数据结构】八大排序 1. 排序的概念和运用1.1 概念1.2 运用 2. 常规的排序算法介绍一. 插入排序1.1 直接插入排序1.2 希尔排序 二. 选择排序2.1 选择排序2.2 堆排序 三. 交换排序3.1 冒泡排序3.2 快速排序3.2.1 Hoare法3.2.2 挖坑法3.2.3 前后指针/左右指针法3.2.4 分治法/递归…

windows11 安装 webassembly,遇到的各种错误

1.最开始是尝试在 虚拟机 centos 7 安装的(因为不想安装vs2015) 但是无奈 各种错误.最终无法解决. 2.尝试在windows安装,吐槽一下官方文档 的安装提示是错误的(太老了) 参考以下文章: https://blog.csdn.net/weixin_45482422/article/details/119459918 https://blog.csdn.…

C++中this指针的特性,存放位置,能否为空?

文章目录 一、this指针的特性二、this指针存在哪里?三、this指针可以为空吗? 一、this指针的特性 我们学习过C知道,成员函数没有直接存放在类而是放在了公共代码区,这样当多个对象调用同一个函数就不需要再创建一个函数成员了。 …

libevent高并发网络编程 - 02_libevent缓冲IO之bufferevent

文章目录 1. 为什么需要缓冲区?2. 水位3. bufferevent常用API3.1 evconnlistener_new_bind()3.2 evconnlistener_free()3.3 bufferevent_socket_new()3.4 bufferevent_enable()3.5 bufferevent_set_timeouts()3.6 bufferevent_setcb()3.7 bufferevent_setwatermark(…

全面解析Linux指令和权限管理

目录 一.指令再讲解1.时间相关的指令2.find等搜索指令与grep指令3.打包和压缩相关的指令4.一些其他指令与热键二.Linux权限1.Linux的权限管理2.文件类型与权限设置3.目录的权限与粘滞位 一.指令再讲解 1.时间相关的指令 date指令: date 用法:date [OPTION]… [FOR…

缓冲区的flip

流和缓冲区都是用来描述数据的。计算机中,数据往往会被抽象成流,然后传输。比如读取一个文件,数据会被抽象成文件流;播放一个视频,视频被抽象成视频流。处理节点为了防止过载,又会使用缓冲区削峰&#xff0…

巴西大神开发的 ARPL 黑群晖DSM系统引导在线编译工具

ARPL 是一款黑群晖系统引导在线编译工具,目前支持最新群晖系统DSM 7.1.1,今天为了折腾升级这个群晖系统DSM 7.1.1浪费了一天的时间,ARPL是巴西人一位大神开发的黑群晖系统引导在线编译工具,使用下来非常的不错,可惜没有…

3网络互联-3.4【实验】【计算机网络】

3网络互联-3.4【实验】【计算机网络】 前言推荐3网络互联3.4 IP分组转发与静态路由实验目的实验内容及实验环境实验原理1.路由器2.路由(Routing)3.IP分组的转发4.路由的构建5.静态路由设计原则 实验过程1.搭建一个仅包含直连路由的网络拓扑,观察路由器的…

时间序列分析

一、移动平均法 1.一次移动平均法 公式: 预测标准误差: 本质:用前N次数据预测t1期的数据 规律:如果实际数据波动较大,N值越大,预测到的数据波动越小 注意:一般不适用于波动较大的数据。用一次移动平均法…

Kafka原理之消费者

一、消费模式 1、pull(拉)模式(kafka采用这种方式) consumer采用从broker中主动拉取数据。 存在问题:如果kafka中没有数据,消费者可能会陷入循环中,一直返回空数据 2、push(推)模式 由broker决定消息发送频率,很难适应所有消费者…

【MySQL】 InnoDB

学习笔记,来源黑马程序员MySQL教程 文章目录 逻辑存储结构架构内存架构磁盘结构后台线程 事务原理概述redo logundo log MVCC基本概念实现原理1、隐藏字段2、undo log3、readview 总结 逻辑存储结构 一个表空间对应一张表一 页 对应B树上一个 节点Trx id&#xff1a…

Git cat命令的用法

cat (全称 concatenate) 命令是 Linux/类 Unix 操作系统中最常用的命令之一。cat 命令允许我们创建单个或多个文件、查看文件内容、连接文件和重定向终端或文件中的输出。 语法: cat [OPTION] [FILE]...1.终端查看一个文件内容 cat file01.txt2.终端查看多个文件…

熵、信息量、条件熵、联合熵、互信息简单介绍

熵、信息量、条件熵、联合熵、互信息简单介绍 近期在看对比学习论文,发现有不少方法使用了互信息这种方式进行约束,故在此整理一下网上查阅到的关于互信息的相关内容。 一、熵、信息量 关于熵的讨论,这个知乎专栏写的挺不错的。 熵在信息论…