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 1j = randint(0,i+1) # Pick a random index from 0 to iarr[i],arr[j] = arr[j],arr[i] # Swap arr[i] with the element at random indexreturn 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.rhkb.cn/news/316961.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLaMA3(Meta)微调SFT实战Meta-Llama-3-8B-Instruct

LlaMA3-SFT LlaMA3-SFT, Meta-Llama-3-8B/Meta-Llama-3-8B-Instruct微调(transformers)/LORA(peft)/推理 项目地址 https://github.com/yongzhuo/LLaMA3-SFT默认数据类型为bfloat6 备注 1. 非常重要: weights要用bfloat16/fp32/tf32(第二版大模型基本共识), 不要用fp16, f…

【目标检测】YOLOv7 网络结构(与 YOLOv4,YOLOv5 对比)

YOLOv7 和 YOLOv4 Neck 与 Head 结构对比 其实 YOLOv7 的网络结构网上很多文章已经讲得很清除了,网络结构图也有非常多的版本可供选择,因为 YOLOv7 和 YOLOv4 是一个团队的作品,所以在网络结构方面, YOLOv7 和 YOLOv4 有很多相似…

和鲸科技出席第五届空间数据智能学术会议,执行总裁殷自强受邀发表主题报告

4月26日,由 ACM SIGSPATIAL 中国分会、ACM SIGMOD 中国分会主办的第五届空间数据智能学术会议(SpatialDI 2024,下简称“会议”)在南京盛大开幕。本次会议特邀李清泉院士、周成虎院士、丛高教授、谢炯博士、张雪英教授等国内外知名…

【web安全】-- 命令执行漏洞详解

本文将从原理开始介绍命令执行漏洞并附有三个实例来供各位客官学习 文章目录 一、什么是命令执行漏洞二、出现的原因三、有可能存在命令执行漏洞的函数(php)1、利用一些函数来实现命令执行2、直接执行系统命令的函数 四、命令拼接符号1、Windows2、linux…

【06016传感器原理与应用】第4章 磁敏传感器 期末复习自考复习

第4章 磁敏传感器 通常把能讲磁学量信号转换成电信号的器材或装置称为磁敏传感器 一、学习目的与要求 通过本章的学习,熟悉并掌握磁敏传感器的工作原理和硬件组成结构。重点掌握半导体的霍尔器件和霍尔集成电路、磁敏二极管、三极管等的工作机理及其应用电路&…

【分享】如何将word格式文档转化为PDF格式

在日常的办公和学习中,我们经常需要将Word文档转换为PDF格式。PDF作为一种通用的文件格式,具有跨平台、易读性高等优点,因此在许多场合下都更为适用。那么,如何实现Word转PDF呢?本文将介绍几种常用的方法,帮…

border-image-slice详细说明

上一篇文章我们介绍了 border-image的用法,其中border-image-source、border-image-width、 border-image-outset都比较简单好理解,这边文章我们重点学一下border-image-slice 属性,它用于定义边框图像如何被切割并应用到元素的边框上。这个属…

vue3 安装-使用之第一篇

首先需要node版本高于V16.14.1 安装 执行 npm create vitelatest 具体选择按照自己实际需要的来 Project name:项目名称 Select a framework:选择用哪种框架 (我选择vue) Select a variant: 选择用JS还是TS(我选择JS)找到项目&…

架设WebSocket的最后一环,如何设置好nginx反向代理

WebScoket都已经完工快一个月,经过一段时间的测试,公司还是准备把服务器换到鹅厂,用EO来解决CDN内容分发和DDOS防护问题,由于EO并不支持URL 路径转发,只支持转发到一个站点的80或则443端口,如果想做路径分发…

前端框架技术调研

目前程序员使用前端框架最多的是哪一个?

BiLSTM-KDE的双向长短期记忆神经网络结合核密度估计多变量回归区间预测(Matlab)

BiLSTM-KDE的双向长短期记忆神经网络结合核密度估计多变量回归区间预测(Matlab) 目录 BiLSTM-KDE的双向长短期记忆神经网络结合核密度估计多变量回归区间预测(Matlab)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.BiLS…

【JavaWeb】Day61.SpringBootWeb案例——配置文件

配置文件 参数配置化 在我们之前编写的程序中进行文件上传时,需要调用AliOSSUtils工具类,将文件上传到阿里云OSS对象存储服务当中。而在调用工具类进行文件上传时,需要一些参数: - endpoint //阿里云OSS域名 - accessKey…

Ubuntu 24.04安装搜狗输入法-解决闪屏问题

问题描述 在Ubuntu 24.04 LTS系统中按照官方安装指导《Ubuntu20.04安装搜狗输入法步骤》安装搜狗输入法后: 会出现屏幕闪烁,无法正常使用的问题;系统搜索框和gnome-text-editor无法使用搜狗输入法; 原因分析 闪屏可能是Ubuntu…

scikit-learn:Python中的机器学习-1

简介:问题设置 什么是机器学习? 机器学习是关于构建具有可调参数的程序,这些参数可以自动调整,以便通过适应先前看到的数据来改善其行为。机器学习可以被认为是人工智能的一个子领域,因为这些算法可以被视为构建模块…

书生·浦语大模型实战营之Llama 3 高效部署实践(LMDeploy 版)

书生浦语大模型实战营之Llama 3 高效部署实践(LMDeploy 版) 环境,模型准备LMDeploy chatTurmind和Transformer的速度对比LMDeploy模型量化(lite)LMDeploy服务(serve) 环境,模型准备 InternStudio 可以直接使用 studio-conda -t …

基于SSM的个人博客系统(二)

目录 第四章 系统设计 4.1 系统总流程 4.2 博主用例 4.3 游客用例 4.4 系统类 一、博客类 二、博客类型类 三,评论类: 四.友情链接类 4.5 E-R图 4.6 系统表设计 前面内容请移步 基于SSM的个人博客系统(一)…

【云原生】Docker 实践(三):使用 Dockerfile 文件构建镜像

Docker 实践(三):使用 Dockerfile 文件构建镜像 1.使用 Dockerfile 文件构建镜像2.Dockerfile 文件详解 1.使用 Dockerfile 文件构建镜像 Dockerfile 是一个文本文件,其中包含了一条条的指令,每一条指令都用于构建镜像…

IOT-9608I-L 的GPIO应用

目录 概述 1 GPIO接口介绍 2 板卡上操作IO 2.1 查看IO驱动 2.2 使用ECHO操作IO 2.2.1 端口选择 2.2.2 查看IO 2.2.3 echo操作IO 3 C语言实现一个操作IO的案例 3.1 功能介绍 3.2 代码实现 3.3 详细代码 4 测试 测试视频地址: IOT-9608I-L的一个简单测试&a…

实验8 NAT配置

实验8 NAT配置 一、 原理描述二、 实验目的三、 实验内容1.实验场景2.实验要求 四、 实验配置五、 实验步骤2.静态NAT配置3.NAT Outbound配置4.NAT Easy-IP配置 一、 原理描述 2019年11月26日,全球43亿个IPv4地址正式耗尽,这意味着没有更多的IPv4地址可…

【圆桌论坛】个人作为嘉宾参与问答环节的总结,Create 2024百度AI开发者大会之AI智能体开发与应用论坛

目录 ⭐前言⭐讨论话题✨本质和价值✨端侧部署✨应用商业模式✨商业模式 ⭐主题总结⭐有趣分享 ⭐前言 首先,非常荣幸和开心作为开发者和创业者代表参加百度Create AI大会分论坛圆桌论坛的问答环节。 在分论坛活动开始前,参加了文心智能体平台&#xff…