Hybrid Homomorphic Encryption:SE + HE

参考文献:

  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.mfbz.cn/a/576595.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【定制化体验:使用Spring Boot自动配置,打造个性化Starter】

项目结构 Pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4…

yml文件修改工具

导入一个 yml 配置文件 可以根据给定的 name 源文件内容 举例如下 - alterId: 0cipher: autoname: 链接1port: 11004server: dotu-hkv1.03ezhg0qsa.downloadskip-cert-verify: truetls: falsetype: tpyudp: trueuuid: ac1f3b35-1d03-3a85-beab-根据name 可以快速将源内容进行替…

系统启动之后创建的第一个窗口是什么?

com.android.settings TYPE_BASE_APPLICATION 1 &#xff1b; 启动时显示的窗口有&#xff1a; 系统窗口有: TYPE_STATUS_BAR TYPE_SEARCH_BAR TYPE_PHONE TYPE_SYSTEM_ALERT TYPE_KEYGUARD TYPE_TOAST TYPE_SYSTEM_OVERLAY TYPE_PRIORITY_PHONE TYPE_SYSTEM_DIALOG…

Synchronized关键字的深入分析

一、引言 在多线程编程中&#xff0c;正确地管理并发是确保程序正确运行的关键。Java提供了多种同步工具&#xff0c;其中synchronized关键字是最基本且最常用的同步机制之一。本文旨在深入解析synchronized的实现原理&#xff0c;探讨其在不同应用场景中的使用&#xff0c;并…

创新书荐|用《创新者的窘境》指导企业应对AI颠覆技术避免被颠覆

如何利用《创新者的窘境》应对AI的颠覆性技术时&#xff0c;了解并实施正确的战略对于确保企业在动荡的市场环境中保持增长和竞争力至关重要。我们分析了市场领导者和初创公司如何利用AI开辟新的增长路径&#xff0c;以及企业如何在技术革命中维持竞争优势。想要深入了解并实践…

CogVLM CogAgent模型部署

CogVLM & CogAgent 下载地址 CogVLM & CogAgent 的 Github 官方仓库&#xff1a;https://github.com/THUDM/CogVLM CogVLM & CogAge…

了解ASK模块STX883Pro和超外接收模块SRX883Pro的独特之处 STX883Pro模块具有以下特点:

高发射功率&#xff1a;STX883Pro具有较高的发射功率&#xff0c;可实现长距离的信号传输&#xff0c;适用于需要覆盖广泛区域的应用场景。 高频率稳定性&#xff1a;具备稳定的频率输出&#xff0c;确保信号传输的可靠性和一致性&#xff0c;避免频率漂移导致的通信故障。 大…

异常检测 | SVDD支持向量数据描述异常数据检测(Matlab)

异常检测 | SVDD支持向量数据描述异常数据检测&#xff08;Matlab&#xff09; 目录 异常检测 | SVDD支持向量数据描述异常数据检测&#xff08;Matlab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 用于一类或二元分类的 SVDD 模型 多种核函数&#xff08;…

基于模糊控制的电动汽车锂电池SOC主动均衡电路MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 模型在 Matlab/Simulink仿真平台中搭建16节电芯锂电池电路模型&#xff0c;主要针对电动车锂电池组SOC差异性&#xff0c;采用模糊控制算法动态调节均衡电流&#xff0c;以减少均衡时间和能量损耗。…

换脸插件升级导致SDWebUI无法启动cannot import name ‘Undefined‘ from ‘pydantic.fields‘

今天在一台新的机器环境装了SDWEBUI&#xff0c;都使用最新的版本&#xff0c;升级了下换脸的插件&#xff0c;于是乎启动崩溃了。错误如下 Launching Web UI with arguments: --listen --skip-torch-cuda-test --disable-nan-check --skip-version-check --skip-python-versi…

SQL嵌套查询和集合查询

嵌套查询 先导概念 查询块&#xff1a;一个select语句为一个查询块 嵌套查询&#xff1a;将一个查询块嵌套在一个另一个查询块中where子句中的查询叫做嵌套查询。 嵌套查询的种类&#xff1a; 不相关子查询&#xff1a;子查询里的条件不依赖于父查询&#xff0c;从里到外依…

android布局

LinerLayout 权重分配的是剩余空间 RelativeLayout

Python脚本实现PC端大麦网自动购票(Selenium自动化测试工具)

文章目录 Selenium 简介Selenium webdriver 文档chromedriver&#xff08;谷歌浏览器驱动&#xff09;chromedriver 下载配置环境变量 大麦网购票脚本网页 dom 元素 启用远程调试&#xff08;操作已打开的窗口&#xff09; Selenium 简介 Selenium 是一个用于自动化测试的工具…

目标检测与追踪AI算法模型及边缘计算智能分析网关V4的算法应用

目标检测与追踪是计算机视觉领域中的一个重要任务&#xff0c;主要用于识别图像或视频中的目标&#xff0c;并跟踪它们的运动轨迹。针对这一任务&#xff0c;有许多先进的AI算法模型&#xff0c;例如&#xff1a; YOLO&#xff08;You Only Look Once&#xff09;&#xff1a;…

linux 设备树-of_address_to_resource

实例分析-reg 属性解析(基于ranges属性) /{#address-cells <0x01>;#size-cells <0x01>;soc {compatible "simple-bus";#address-cells <0x01>;#size-cells <0x01>;ranges <0x7e000000 0x3f000000 0x1000000 0x40000000 0x40000000…

怎么把图片转换为二维码?3个步骤轻松制作图片二维码

图片的二维码是怎么做成的呢&#xff1f;现在很多场景下的二维码&#xff0c;用手机扫码可以展现出对应的图片信息。通过这种方式来传递图片对于用户体验与很好的效果&#xff0c;而且也方便制作者通过这种方式来快速完成图片信息的传递&#xff0c;与传统方式相比成本更低&…

客服专用的宝藏快捷回复软件

提起客服&#xff0c;很多人会觉得现在智能机器人的自动回复功能就可以将其替代。我始终不是这么认为的。人工客服始终能为一家店铺乃至一个企业起着非常关键重要的作用。今天就来给大家推荐一个客服专用的宝藏软件——客服宝聊天助手。感兴趣的话&#xff0c;可以发给你的客服…

面向对象开发技术(第三周)

回顾 上一堂课主要学习了面向对象编程与非面向对象编程&#xff08;面向功能、过程编程&#xff09;&#xff0c;本节课就重点来看看面向对象编程中的一个具体思想——抽象 面向对象编程的特性&#xff1a;1、封装性 2、继承性 3、多态性 封装&#xff1a;意味着提供服务接口…

异常风云:解码 Java 异常机制

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

【论文阅读】《Octopus v2: On-device language model for super agent》,端侧大模型的应用案例

今年LLM的发展趋势之一&#xff0c;就是端侧LLM快速发展&#xff0c;超级APP入口之争异常激烈。不过&#xff0c;端侧LLM如何应用&#xff0c;不知道细节就很难理解。正好&#xff0c;《Octopus v2: On-device language model for super agent》这篇文章可以解惑。 对比部署在…
最新文章