Hybrid Homomorphic Encryption:SE + HE

news2024/12/24 20:58:10

参考文献:

  1. [NLV11] Naehrig M, Lauter K, Vaikuntanathan V. Can homomorphic encryption be practical?[C]//Proceedings of the 3rd ACM workshop on Cloud computing security workshop. 2011: 113-124.
  2. [MJS+16] Méaux P, Journault A, Standaert F X, et al. Towards stream ciphers for efficient FHE with low-noise ciphertexts[C]//Advances in Cryptology–EUROCRYPT 2016: 35th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Vienna, Austria, May 8-12, 2016, Proceedings, Part I 35. Springer Berlin Heidelberg, 2016: 311-343.
  3. [CDK+21] Chen H, Dai W, Kim M, et al. Efficient homomorphic conversion between (ring) LWE ciphertexts[C]//International Conference on Applied Cryptography and Network Security. Cham: Springer International Publishing, 2021: 460-479.
  4. [CHK+21] Cho J, Ha J, Kim S, et al. Transciphering framework for approximate homomorphic encryption[C]//International Conference on the Theory and Application of Cryptology and Information Security. Cham: Springer International Publishing, 2021: 640-669.
  5. [DGG+21] Dobraunig C, Grassi L, Guinet A, et al. Ciminion: symmetric encryption based on toffoli-gates over large finite fields[C]//Annual International Conference on the Theory and Applications of Cryptographic Techniques. Cham: Springer International Publishing, 2021: 3-34.
  6. [HKL+22] Ha J, Kim S, Lee B H, et al. Rubato: Noisy ciphers for approximate homomorphic encryption[C]//Annual International Conference on the Theory and Applications of Cryptographic Techniques. Cham: Springer International Publishing, 2022: 581-610.
  7. [DGH+23] Dobraunig C, Grassi L, Helminger L, et al. Pasta: A Case for Hybrid Homomorphic Encryption[J]. IACR Transactions on Cryptographic Hardware and Embedded Systems, 2023, 2023(3): 30-73.

文章目录

  • HHE
  • LWE-Native Encryption
  • Filter Permutator & FLIP
    • Filter Permutator
    • FLIP
  • RtF Framework & HERA
    • RtF Framework
    • HERA
  • Noisy Symmetric Ciphers & Rubato

HHE

[NLV11] 实现了 BV 算法,研究同态加密的实用性。为了解决 HE 密文规模太大的问题,他们提出了 Hybrid Homomorphic Encryption / Transciphering Framework,组合使用对称加密(SE)和同态加密(HE)。

对于 Client-Server Model,如图所示:

在这里插入图片描述

HHE 关注的场景:

  • 2PC 场景(client + server),client 的计算/通信能力受限(云计算),或者 server 具有私有函数(机器学习
    1. client 生成 SE 密钥,以及 HE 公私钥,发布公钥
    2. client 使用 SE 加密数据,并使用 HE 加密 SE 的密钥,发送两者给 server
    3. server 先同态解密 SE 密文,然后同态计算,最后发送 HE 密文给 client
    4. client 解密 HE 密文,获得计算结果
  • MPC 场景(data providers + key holders + evaluators),可用于数据的秘密收集(物联网
    1. key holders(分布式)生成 HE 公私钥,发布公钥
    2. data providers 生成各自的 SE 密钥,使用 SE 加密数据,并使用 HE 加密 SE 的密钥,发送两者给 evaluators
    3. evaluators 先同态解密 SE 密文,然后同态计算,最后发送 HE 密文给 key holders
    4. key holders(分布式)解密 HE 密文,获得计算结果

LWE-Native Encryption

[CDK+21] 使用 Galois 自同构实现了 RLWE 密文的相位某些系数的消除,于是可以把 LWE 密文嵌入到 RLWE 密文,然后使用 FFT-style 算法实现了多个 LWE 密文的打包(LWEs-to-RLWE

基于此,[CDK+21] 建议在云计算场景中,使用对称版本的 Regev 加密方案。由于 LWE-based 都是 FHE 友好的,可以较为自然地在 RLWE 密文下同态解密(只需计算线性部分,不必纠错)。

  1. client 使用 PRF 生成各个 LWE 密文的随机带, a j = P R F ( s e e d , j ) ∈ Z q N a_j = PRF(seed, j) \in \mathbb Z_q^N aj=PRF(seed,j)ZqN
  2. client 将消息 m j ∈ Z t m_j \in \mathbb Z_t mjZt 随机编码为 μ j ∈ Z q \mu_j \in \mathbb Z_q μjZq(携带高斯噪声),计算 b j = ⟨ a j , s ⟩ + μ j b_j = \langle a_j, s\rangle + \mu_j bj=aj,s+μj
  3. client 发送的 SE 密文形如 ( s e e d , b 0 , b 1 , ⋯   ) (seed, b_0, b_1, \cdots) (seed,b0,b1,),具有较低的 ciphertext expansion factor(但是 b j b_j bj 带噪,密文扩张总是不可避免),具体为 log ⁡ q log ⁡ t + ∣ s e e d ∣ \frac{\log q}{\log t} + |seed| logtlogq+seed
  4. server 同态线性解密,获得 μ j \mu_j μj 带噪的消息编码,然后直接同态运算(需要 Regev 本身就具有足够的 Levels,也就是 log ⁡ q ≫ log ⁡ t \log q \gg \log t logqlogt
  5. server 将得到的 RLWE 密文降低到最低的 Level,返回给 client

Filter Permutator & FLIP

[MJS+16] 考虑了两种对称加密,

  • 分组密码(Block ciphers):各个消息分组上,解密电路的深度是固定的,但是由于使用了大轮数迭代,乘法深度很高。
  • 流密码(Stream Ciphers):初始的消息分组,解密电路的深度很小,但随着密钥流的生成,乘法深度会越来越高。

综合考虑两者的优缺点,[MJS+16] 组合它们设计了新的流密码,即满足分组密码的常数深度,又满足流密码的较浅深度

Filter Permutator

首先,他们提出了一个新的流密码结构,被称为 Filter Permutator Construction,它包含三部分:密钥寄存器、随机置换生成器(randomized linear layers)、滤波器(简单的非线性运算)。如图所示,

在这里插入图片描述

密钥流的每一个比特都是根据 F ∘ P i ( K ) F \circ P_i(K) FPi(K) 计算出来的,电路深度是常数的,并且没有大轮数迭代

FLIP

接着 [MJS+16] 构造了一族 Filter Permutators,称之为 FLIP。这个流密码是工作在布尔值 Z 2 \mathbb Z_2 Z2 上的(如果 FHE 的自然明文空间是 Z t , t ≥ 3 \mathbb Z_t, t\ge 3 Zt,t3,那么布尔电路的乘法深度会很高)。

首先,他们定义了布尔函数的直和,并证明了它可以将两个函数的 Non Linearity, Resiliency, Algebraic Immunity, Fast Algebraic Immunity 等安全属性组合并增强(细节请看原文)。

在这里插入图片描述

然后定义了三种简单的布尔函数,并给出了它们的安全属性(略):

在这里插入图片描述

[MJS+16] 使用 Filter Permutator Construction 去构造流密码,使用的滤波器 F : Z 2 n 1 + n 2 + n 3 → Z 2 F: \mathbb Z_2^{n_1+n_2+n_3} \to \mathbb Z_2 F:Z2n1+n2+n3Z2 是上述三种布尔函数的直和,令 n 1 , n 2 , n , k , n 3 = n k ( k + 1 ) 2 n_1,n_2,n,k,n_3 = \frac{nk(k+1)}{2} n1,n2,n,k,n3=2nk(k+1) 是合适的整数,
F ( x 0 , ⋯   , x n 1 + n 2 + n 3 − 1 ) = L n 1 ⊕ Q n 2 / 2 ⊕ ⨁ i = 1 n T k F(x_0,\cdots,x_{n_1+n_2+n_3-1}) = L_{n_1} \oplus Q_{n_2/2} \oplus \bigoplus_{i=1}^{n} T_k F(x0,,xn1+n2+n31)=Ln1Qn2/2i=1nTk
注意到函数直和的各个子函数的变量都是相互独立的,且函数求值结果是通过 XOR 组合的,因此这个滤波器 F F F 的乘法深度很低。

对于随机置换的生成,可以使用 Knuth / Fisher–Yates shuffle Algorithm。如果它接入一个 true random generator,那么它生成的随机置换是等概率的。

from random import randint
def randomize (arr, n):
	for i in range(n-1,0,-1): # From n downto 1
		j = randint(0,i+1) # Pick a random index from 0 to i
		arr[i],arr[j] = arr[j],arr[i] # Swap arr[i] with the element at random index
	return arr

RtF Framework & HERA

[CHK+21] 注意到真实世界的数据主要是浮点数,但是 CKKS 和 SE 并不兼容

  • CKKS 支持定点复数的带噪算术,SE 解密则需要精确的模运算
  • 如果把 SE 强行迁移到复数域上,由于 SE 本质上就是将消息 m i m_i mi 经过某个带密钥的多项式求值为密文 c i c_i ci,但是对于正确的密钥 k k k 总会有 ∥ E k ( m i ) − c i ∥ 2 = 0 \|E_k(m_i)-c_i\|_2 = 0 Ek(mi)ci2=0这是以 k k k 为根的复数域多项式。利用牛顿迭代法或者梯度下降法,容易求出近似的根。

他们提出了 RtF (Real-to-Finite-field) framework,组合使用 BFV 以及 CKKS,并设计了一个 BGV/BFV 友好的 SE 方案,称为 HERA

RtF Framework

假设 BFV 的明文模数是 t t t,[CHK+21] 的思路是:将实数 m ∈ R m \in \mathbb R mR 缩放为 Z t \mathbb Z_t Zt 中元素,然后使用某个 Z t \mathbb Z_t Zt 上的 SE 加密它。于是可以使用 BFV 高效地解密 SE 密文,然后使用 CKKS 自举算法实现密文的切换。[CHK+21] 在 BFV 的 slot 上计算密钥流,在 BFV 的 coeff 上解密出消息,最后转换到 CKKS 的 slot 上计算函数。

框架为:

在这里插入图片描述

这里要求 BFV 和 CKKS 共享:分圆环维度 N N N、模数链 { q i } i \{q_i\}_i {qi}i、公私钥 ( p k , s k ) (pk,sk) (pk,sk)。假设 SE 密钥是 k ∈ Z t n k \in \mathbb Z_t^n kZtn,我们要求 n ∣ l n \mid l nl,这里的 l ∣ N l \mid N lN 是 BFV 的明文槽个数,对应的 CKKS 也是子环 Y = X N / l Y=X^{N/l} Y=XN/l 上的稀疏自举(明文槽个数为 l / 2 l/2 l/2)。[CHK+21] 定义了密钥 k k k(列矢)的重复编码,
C o n c a t ( k ) = ( k ∥ k ∥ ⋯ ∥ k ) ∈ Z t n × B Concat(k) = (k\|k\|\cdots\|k) \in \mathbb Z_t^{n \times B} Concat(k)=(kkk)Ztn×B
并提出了两种 BFV 打包方式:

  • column-wise packing,设置 B = l / n B=l/n B=l/n,把这个矩阵按列展开为 Z t l \mathbb Z_t^l Ztl 列矢,加密到单个 BFV 密文中。如果要计算 A ⋅ k A \cdot k Ak,其中 A ∈ Z t n × n A \in \mathbb Z_t^{n \times n} AZtn×n,首先令 A ′ = I l / n ⊗ A A'=I_{l/n} \otimes A A=Il/nA,然后使用 BSBG 对角线方法(或者 Pegasus 的瓷砖算法),同时计算 l / n l/n l/n 个副本 A ⋅ k A \cdot k Ak,这需要 Rotate 操作。
  • row-wise packing,设置 B = l B = l B=l,把这个矩阵的每个 Z t l \mathbb Z_t^l Ztl 行矢分别加密到 n n n 个 BFV 密文中。如果要计算 A ⋅ k A \cdot k Ak,其中 A ∈ Z t n × n A \in \mathbb Z_t^{n \times n} AZtn×n,那么就简单计算 n n n 个密文的乘加(并行 l l l 个副本),不需要 Rotate 操作。

它们被用于 SE 在 HE 中的同态解密。[CHK+21] 采用任意的 Z t \mathbb Z_t Zt 上流密码,算法为:

在这里插入图片描述

在这里插入图片描述

Client 将消息分组为 m i ∈ R n m_i \in \mathbb R^n miRn,编码到 Z t n \mathbb Z_t^n Ztn 上使用 SE 分别加密。对应的 Keystream 是根据 k ∈ Z t n k \in \mathbb Z_t^n kZtn 以及 n c i ∈ { 0 , 1 } λ nc_i \in \{0,1\}^\lambda nci{0,1}λ 生成的。Client 除了发送 k k k 的 HE 密文以及 m i m_i mi 的 SE 密文外,还需要发送分别使用的 Nonce 给 Server 去同态重构密钥流。

HERA

[CHK+21] 设计了一种 FHE-friendly 流密码,叫做 HERA,它的自然运算是 Z t \mathbb Z_t Zt 上的算术运算,且它的设计目标是乘法深度尽可能低(但是乘法复杂度会较高)。SE 的基本设计框架是:线性运算(扩散)、非线性运算(S-box,抵御求逆)、轮密钥加(带密钥的变换),如此重复若干轮。

[MJS+16] 使用了 randomized linear layers 以及很简单的非线性布尔函数,如果简单地将 FILP 迁移到 Z t \mathbb Z_t Zt 上,由于 BFV 中的(常数)矩阵乘法的计算开销需要大量的 KS 操作,导致线性层的复杂度甚至比简单非线性层更高。为了减小线性层的开销,[CHK+21] 则是使用了 randomized key schedule(随机化的轮密钥编排)以及固定且稀疏的线性层,非线性运算使用了简单的立方函数,最终构造了 AES-like 的流密码(似乎就是 CTR 模式的分组密码?只是不需要求逆)

HERA 的构造如下,

在这里插入图片描述

对于密钥编排,HERA 使用 nonce 和 XOF 来生成随机串 r c = ( r c 0 , r c 1 , ⋯   , r c r ) ∈ ( Z t 16 ) r + 1 rc=(rc_0,rc_1,\cdots,rc_r) \in (\mathbb Z_t^{16})^{r+1} rc=(rc0,rc1,,rcr)(Zt16)r+1,定义如下的轮密钥加,其中的 + , ⋅ +, \cdot +, 都是 component-wise 运算,
A R K [ k , n c , i ] ( x ) = x + k ⋅ r c i ARK[k,nc,i](x) = x + k \cdot rc_i ARK[k,nc,i](x)=x+krci
对于线性层,HERA 使用 MDS matrix(Maximum Distance Separable)分别执行列混淆以及行混淆。MDS matrix 具有最大的分支数 n + 1 n+1 n+1(branch number),因此具有很好的扩散性。

在这里插入图片描述

[CHK+21] 设置 HERA 的状态是 Z t 4 × 4 \mathbb Z_t^{4 \times 4} Zt4×4(排列 16 个数),于是直接使用了 AES 中的 MDS 矩阵(从 G F ( 2 8 ) GF(2^8) GF(28) 迁移到 Z t \mathbb Z_t Zt),

在这里插入图片描述

对于非线性层,HERA 使用简单的立方函数 x 3 x^3 x3 作为 S-box,定义
C u b e ( x ) = ( x 0 3 , x 1 3 , ⋯   , x 15 3 ) Cube(x) = (x_0^3, x_1^3,\cdots,x_{15}^3) Cube(x)=(x03,x13,,x153)
需要满足 gcd ⁡ ( 3 , t − 1 ) = 1 \gcd(3,t-1)=1 gcd(3,t1)=1,使得 x 3 x^3 x3 Z t ∗ \mathbb Z_t^* Zt 上可逆,从而 S-box 是个双射。

对于加密模式,HERA 采用了 inner-counter mode,对于任意的 k > 0 k>0 k>0,定义计数器 c t r = 0 , 1 , ⋯   , k − 1 ctr = 0,1,\cdots,k-1 ctr=0,1,,k1,计算的密钥流是:
z [ c t r ] = H E R A [ k , n c ∥ c t r ] ( i c ) z[ctr] = HERA[k, nc\|ctr](ic) z[ctr]=HERA[k,ncctr](ic)
固定的常数向量 i c = ( 1 , 2 , ⋯   , 16 ) ∈ Z t 16 ic=(1,2,\cdots,16) \in \mathbb Z_t^{16} ic=(1,2,,16)Zt16,并要求 t ≥ 17 t \ge 17 t17 是素数。

经过多种的现有攻击的分析,[CHK+21] 给出了一些实例化的参数集。为了实现 80 80 80 比特安全强度,迭代轮数为 r = 4 r=4 r=4;为了实现 128 128 128 比特安全强度,迭代轮数为 r = 5 r=5 r=5

Noisy Symmetric Ciphers & Rubato

[HKL+22] 观察到 SE 和 HE 基于不同的安全原理,

  • conventional SE 需要时间的检验,使用了关于 key 高次的多项式求逆
  • LWE-based SE 基于困难问题和安全归约,使用 noise 抵御代数攻击

他们提出了两者的权衡,构造了新的 Rubato,它使用一个 low-degree keyed function E k : Z q n → Z q l E_k: \mathbb Z_q^n \to \mathbb Z_q^l Ek:ZqnZql,并假设形如 ( a , E k ( a ) + e ) ∈ Z q n × Z q l (a, E_k(a)+e) \in \mathbb Z_q^n \times \mathbb Z_q^l (a,Ek(a)+e)Zqn×Zql 的样本是计算均匀的,其中 a a a 由 XOF 生成, e e e​ 是高斯噪声。为了分析它的安全性,需要同时使用 symmetric cryptanalysis 以及 LWE cryptanalysis(感觉 SE 的设计好随便啊)。这里的 q q q 是 RtF 框架中 BFV 的明文模数,而非密文模数。

Rubato 延续了 HERA 的设计结构(随机化密钥编排 + 固定的 MSD 矩阵),但不再使用 Cube 非线性层,而是使用了 [DGH+23] 所建议的另一种 Feistel-Like S-Box。由于这个 Feistel 求逆是简单的(次数很低,无法抵御 MITM 代数攻击),因此他们还采取了 [DGG+21] 的截断技术(直接丢弃部分信息,则求逆必须枚举)。

在这里插入图片描述

它直接采用了 HERA 的随机化密钥编排 A R K [ k , n c , i ] ( x ) = x + k ⋅ r c i ARK[k,nc,i](x)=x+k\cdot rc_i ARK[k,nc,i](x)=x+krci,并推广了状态 x ∈ Z q n x \in \mathbb Z_q^n xZqn 的大小为 n = v 2 n=v^2 n=v2(这里 q q q 是 HE 密文模数,而在 HERA 中使用的是 Z t 16 \mathbb Z_t^{16} Zt16 明文模数),使用 v v v 阶 MSD 矩阵去执行状态的混淆。为了计算效率,一般会寻找短的稀疏的 MSD 矩阵。Rubato 给出了 v = 4 , 6 , 8 v=4,6,8 v=4,6,8 的选取建议,

在这里插入图片描述

对于非线性层,Rubato 使用了 Feistel Network via a Quadratic Function,定义为:
F e i s t e l ( x ) = ( x 1 , x 2 + x 1 2 , ⋯   , x n + x n − 1 2 ) Feistel(x) = (x_1,x_2+x_1^2,\cdots, x_n+x_{n-1}^2) Feistel(x)=(x1,x2+x12,,xn+xn12)
它是双射,且次数仅为 2 2 2,这比 Cube 的次数更低,并且混合了相邻的状态分量。这个 Feistel 的求逆很容易,为了抵御 MITM 代数攻击,执行完 AES-like 轮函数之后,还要执行截断函数 T r n , l ( x ) = ( x 1 , ⋯   , x l ) Tr_{n,l}(x) = (x_1,\cdots,x_l) Trn,l(x)=(x1,,xl) 以抵御求逆(并且密码设计中永远不执行求逆运算)。

在输出密钥流之前,采样离散高斯噪声 e 1 , ⋯   , e l ← D α q e_1,\cdots,e_l \gets \mathcal D_{\alpha q} e1,,elDαq,定义运算:
A G N ( x ) = ( x 1 + e 1 , ⋯   , x l + e l ) ∈ Z q l AGN(x) = (x_1+e_1,\cdots, x_l+e_l) \in \mathbb Z_q^l AGN(x)=(x1+e1,,xl+el)Zql
也就是说,Rubato 产生的密钥流是带噪的,它只能用于 RtF Framework 中(虽然是在 BFV 上解密,但最终是在 CKKS 上的近似运算),而不能用到精确的 FHE 上面。

Rubato 也采取了 inner-counter mode,密钥流是 z [ c t r ] = R u b a t o [ k . n c ∥ c t r ] ( i c ) z[ctr] = Rubato[k. nc\|ctr](ic) z[ctr]=Rubato[k.ncctr](ic),其中 i c = ( 1 , 2 , ⋯   , n ) ∈ Z q n ic = (1,2,\cdots,n) \in \mathbb Z_q^n ic=(1,2,,n)Zqn,一般地 q ≫ n q \gg n qn。给定消息 m i ∈ R l m_i \in \mathbb R^l miRl,密文是
c i = ⌊ Δ ⋅ m i ⌉ + z [ i ] ( m o d q ) c_i = \lfloor \Delta \cdot m_i\rceil + z[i] \pmod{q} ci=Δmi+z[i](modq)
缩放因子 Δ ∈ R \Delta \in \mathbb R ΔR,假如 ∥ m ∥ 1 ≤ s \|m\|_1 \le s m1s,则选取 Δ = q 16 s \Delta = \dfrac{q}{16s} Δ=16sq(没说为什么这么选)。由于 z [ i ] z[i] z[i] 带噪,因此 BFV(明文模数 q q q,密文模数 Q Q Q)只能解密出缩放的近似值 ⌊ Δ ⋅ m i ⌉ + e i ∈ Z q \lfloor \Delta \cdot m_i\rceil + e_i \in \mathbb Z_q Δmi+eiZq,不过接着就切换到 CKKS 密文上成为 Q 0 q ( ⌊ Δ ⋅ m i ⌉ + e i ) + e B F V + e b o o t ∈ Z Q ′ \dfrac{Q_0}{q}\big(\lfloor \Delta \cdot m_i\rceil + e_i\big) + e_{BFV} + e_{boot} \in \mathbb Z_{Q'} qQ0(Δmi+ei)+eBFV+ebootZQ(首先 BFV 模切换到最低的 Q 0 Q_0 Q0,接着自举提升 CKKS 的密文模数到 Q ′ Q' Q)。由于我们是用 CKKS 做近似计算的,Rubato 引入的噪声 e i e_i ei 仅略微降低了明文精度,但不影响使用。

经过安全性分析后,[HKL+22] 给出了同一个安全级别下的不同参数集, 80 80 80 比特安全性的迭代轮数最低为 r = 2 r=2 r=2,而 128 128 128 比特安全性的迭代轮数是 r ∈ { 2 , 3 , 5 } r \in \{2,3,5\} r{2,3,5},乘法深度比 HERA 更低。

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

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

相关文章

Matlab|交直流系统潮流计算(含5种控制模式)

目录 1 主要内容 程序参考流程图 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《交直流系统潮流计算及相互关联特性分析》,采用5种交直流潮流控制方式:1.定电流定电压 2.定电流定熄弧角 3.定功率定电压 4.定功率定熄弧角 5.定触发角…

Stable Diffusion 常用放大算法详解

常用放大算法 图像放大算法大致有两种: 传统图像放大算法(Lantent、Lanczos、Nearest)AI图像放大算法(4x-UltraSharp、BSRGAN、ESRGAN等) 传统图像放大算法是基于插值算法,计算出图像放大后新位置的像素…

用友政务财务系统 FileDownload 任意文件读取漏洞复现

0x01 产品简介 用友政务财务系统具有多项核心功能,旨在满足各类组织的财务管理需求。首先,它提供了财务核算功能,能够全面管理企业的总账、固定资产、现金、应付应收等模块,实时掌握企业的财务状况,并通过科目管理、凭证处理、报表分析等功能为决策提供有力支持。 0x02 …

Elcomsoft iOS Forensics Toolkit: iPhone/iPad/iPod 设备取证工具包

天津鸿萌科贸发展有限公司是 ElcomSoft 系列取证软件的授权代理商。 Elcomsoft iOS Forensics Toolkit 软件工具包适用于取证工作,对 iPhone、iPad 和 iPod Touch 设备执行完整文件系统和逻辑数据采集。对设备文件系统制作镜像,提取设备机密&#xff08…

13.电子产品拆解分析-插排带3USB

13.电子产品拆解分析-插排带3USB 一、功能介绍二、电路分析以及器件作用1、三个插座之间通过电线连接,总开关控制火线2、通过FSD3773低待机功耗原边反馈AC/DC驱动芯片控制5V的输出一、功能介绍 ①一键控制总电源开关;②带三路USB输出;③最大支持2500W输出,10A输出电流;④8…

STM32自己从零开始实操01:原理图

在听完老师关于 STM32 物联网项目的所有硬件课程之后,就是感觉自己云里雾里,明明课程都认真听完了,笔记也认真记录,但是就是感觉学到的知识还不是自己。 遂决定站在老师的肩膀上自己开始设计项目,将知识变成自己的&am…

【机器学习】集成学习:强化机器学习模型与创新能的利器

集成学习:强化机器学习模型预测性能的利器 一、集成学习的核心思想二、常用集成学习方法Bagging方法Boosting方法Stacking方法 三、集成学习代表模型与实现四、总结与展望 在大数据时代的浪潮下,机器学习模型的应用越来越广泛,而集成学习作为…

微信小程序简单实现购物车功能

微信小程序简单实现购物车结算和购物车列表展示功能 实现在微信小程序中对每一个购物车界面的商品订单,进行勾选结算和取消结算的功能,相关界面截图如下: 具体实现示例代码为: 1、js代码: Page({/*** 页面的初始数…

Windows下搭建Flutter开发环境

IDE:VS code Flutter官网:Flutter: 为所有屏幕创造精彩 - Flutter 中文开发者网站 - Flutter 下载&安装 下载Flutter SDK,如图,建议自行下载安装: SDK还是挺大的,近1G,使用迅雷下载会快不少。 下载完成,解压缩到指定目录即可! 设置Local SDK,按下面步骤操作即…

【Docker】Docker 实践(一):在 Docker 中部署第一个应用

Docker 实践(一):在 Docker 中部署第一个应用 1.使用 YUM 方式安装 Docker2.验证 Docker 环境3.在 Docker 中部署第一个应用3.1 小插曲:docker pull 报 missing signature key 错误3.2 重新安装 Nginx 1.使用 YUM 方式安装 Docker…

git 基础知识(全能版)

文章目录 一 、git 有三个分区二、git 基本操作1、克隆—git clone2、拉取—git fetch / git pull3、查看—git status / git diff3.1 多人开发代码暂存技巧 本地代码4、提交—git add / git commit / git push5、日志—git log / git reflog6、删除—git rm ‘name’7、撤销恢…

云计算和边缘计算究竟有什么不同

在数据时代,无论是人的活动还是机器的运作都会产生各种各样海量的数据。在对数据梳理和筛选过程中,计算机的运算处理必不可少。为了减少本地计算机算力成本等限制,越来越多的企业选择了云计算和边缘计算。今天,德迅云安全就带您来…

中电金信:深度解析|数字化营销运营体系搭建

如何更好更快地梳理好体系搭建思路,稳步实现落地?下文将为大家明确搭建的推进步骤、执行要点,帮助商业银行理顺数字化营销运营体系的“点”“线”“面”~ 与所有转型的曲折、阵痛等特征一样,商业银行构建数字化营销运营体系过程中…

线性代数 --- 计算斐波那契数列第n项的快速算法(矩阵的n次幂)

计算斐波那契数列第n项的快速算法(矩阵的n次幂) The n-th term of Fibonacci Numbers: 斐波那契数列的是一个古老而又经典的数学数列,距今已经有800多年了。关于斐波那契数列的计算方法不难,只是当我们希望快速求出其数列中的第100&#xff0…

普通屏幕已过时?裸眼3D屏幕显示效果更胜一筹!

随着多媒体技术的迅猛进步,我们日常生活中的内容展现方式,已经经历了前所未有的变革。在这其中,裸眼3D屏幕的应用,无疑是最为引人注目的亮点,它相较于传统屏幕,在显示效果上展现出了鲜明的优势,…

走向大规模应用之前,DePIN 如何突破技术、数据与市场之网

近期,随着分布式物理基础设施网络(DePIN)的快速演变,一个旨在利用区块链技术彻底改造传统基础设施模型的新兴生态系统正在逐渐浮现。2024 年 4 月,以 peaq 为代表的 DePIN 项目成功筹集了 1500 万美元用于生态系统的扩…

Unreal Engine动态添加Button实例

在控件蓝图中添加容器&#xff0c;注意命名不要有中文 C代码中找到容器实例 1 2 3 4 5 6 7 8 UVerticalBox* verticalBox Cast<UVerticalBox>(CurrentWidget->GetWidgetFromName(TEXT("VerticalBox_0"))); if (verticalBox ! nullptr) { UScrollBox* …

【声网】实现web端与uniapp微信小程序端音视频互动

实现web端与uniapp微信小程序端音视频互动 利用声网实现音视频互动 开通声网服务 注册声网账号 进入Console 成功登录控制台后&#xff0c;按照以下步骤创建一个声网项目&#xff1a; 展开控制台左上角下拉框&#xff0c;点击创建项目按钮。 在弹出的对话框内&#xff0c;依…

计算机视觉——OpenCV 使用分水岭算法进行图像分割

分水岭算法 分水岭算法&#xff1a;模拟地理形态的图像分割 分水岭算法通过模拟自然地形来实现图像中物体的分类。在这一过程中&#xff0c;每个像素的灰度值被视作其高度&#xff0c;灰度值较高的像素形成山脊&#xff0c;即分水岭&#xff0c;而二值化阈值则相当于水平面&am…

Pytorch 的神经网络 学习笔记

参照官方网址 Module — PyTorch 2.2 documentation 一. 介绍 1. torch.nn模块&#xff1a; torch.nn是PyTorch中专门用于构建神经网络的模块。它提供了构建深度学习模型所需的所有构建块&#xff0c;包括各种层类型&#xff08;如全连接层、卷积层、循环层等&#xff09;、…