SDU Crypto School - 计算不可区分性1

news2024/11/17 21:51:30

Encryption: Computational security 1-4

主讲人:李增鹏(山东大学)

参考教材:Jonathan Katz, Yehuda Lindell, Introduction to Modern Cryptography - Principles and Protocols.


什么是加密

首先,加密方案的目的在于在Alice和Bob之间完成安全的通信。具体地,任意给定明文 m m m,Alice对它进行加密得到 c c c并且通过不安全信道发送给Bob,Bob对 c c c进行解密后得到 m m m,而第三者Eve不能获得 m m m的任何相关信息。

在这里插入图片描述


为了做到这个事情,从古至今有很多所谓的密码方案,比如凯撒密码、弗吉尼亚密码、栅栏加密、Enigma机等等。

这些方案的共同特点之一是,没有严谨的理论来确保它们是安全的。与其说是密码科学,不如说是承载了古人灿烂想象力的密码艺术。

这些方案的共同特点之二是,它们都被破掉了。据(Prof. 丁津泰)说,阿根廷人在马岛海战中还在用类似Enigma机的密码系统,于是战场信息理所应当地对英国人单向透明。


可证明安全是密码学从艺术向科学迈出的重要一步。

设计现代密码系统的另一个原则是,密码系统的安全性不依赖于加密方案或者算法的保密,而是依赖于密钥的安全性(Kerckhoffs原则, 1883)。

理由如下:

  1. 保护密钥其实比保护算法更容易;
  2. 更换密钥也比更换算法更容易;
  3. 加密算法进行统一,方便了应用;
  4. 公开算法,有助于算法漏洞的分析。

于是我们可以根据Kerckhoffs原则把加密系统的general picture进行改写:

  • m m m是明文消息
  • 密钥 k k k从均匀分布中抽取
  • c = E n c k ( m ) c = Enc_k(m) c=Enck(m)暴露给攻击者

注意到,和加密系统的最一般情况相比,这里我们引入了密钥 k k k,希望攻击者没法获取到 k k k m m m的相关信息。


完美的安全性

一些记号:

在这里插入图片描述

现在的问题是,在Kerckhoffs原则的框架下,我们怎么去定义一个密码系统的安全性?


想法一:

定义. 如果攻击者没办法计算 k k k,那么这个scheme就是安全的。

——密钥不让人知道是确实有道理…吧。

一个反例就是, E n c k ( m ) = m Enc_k(m) = m Enck(m)=m。这种情况下,你确实没暴露任何的 k k k的信息,但是 m m m在裸奔,加密的安全性效果类似于皇帝的新衣。

在这里插入图片描述


想法二:

定义. 如果攻击者没办法计算 m m m,那么这个scheme就是安全的。

如果一个攻击者只需要计算密文 m m m的某些特征就能推断出足够的信息,那这个scheme还安全吗?

比如我猜一个四字地名是齐齐哈尔还是乌鲁木齐。我甚至只需要这四个字里带几个齐字或者有没有重复字就能推测出答案。


想法三:

定义. 如果攻击者不能获得 m m m的任何相关信息,那么这个scheme就是安全的。

但是攻击者可能已经获得了一些先验信息,比如知道消息 m m m是用英语写的。


想法四:

定义. 如果攻击者不能获得 m m m的任何额外信息,那么这个scheme就是安全的。

这个是比较靠谱的,但是怎么正式表述它?

一个例子是使用概率分布/信息论进行描述:

上半拉图是通信前。 m m m在Alice手里,攻击者什么都不知道,它有关于 m m m的一个先验分布。

下半拉图是通信后。 m m m在Alice手里,攻击者知道 c = E n c k ( m ) c = Enc_k(m) c=Enck(m),在知道 c c c的前提下,攻击者的先验没有产生丝毫的变化。这就是所谓的“攻击者不能获得关于 m m m的任何额外信息”。

于是,我们得到基于条件概率表述的完美安全性定义:

等价地,我们有几个定义:

  • 明文 m m m的分布和 E n c k ( m ) Enc_k(m) Enck(m)是独立的。
  • E n c k ( m ) Enc_k(m) Enck(m)的分布和 m m m无关。
  • 对任意的 m 0 m_0 m0 m 1 m_1 m1,我们有 E n c k ( m 0 ) Enc_k(m_0) Enck(m0) E n c k ( m 1 ) Enc_k(m_1) Enck(m1)有相同的分布。

完美安全性的一个等价定义是对手的不可识别性(Adversarial Indistinguishability)。这里,我们引入一个对手 A \mathcal{A} A,并且定义什么是 A \mathcal{A} A不可识别性(粗略地说,给定明文 m 0 , m 1 m_0, m_1 m0,m1并且随机挑选一个进行加密得到 c c c A \mathcal{A} A没法知道这个 c c c对应的明文是 m 0 , m 1 m_0, m_1 m0,m1的哪个)。

为了定义完美安全性,我们引入一个不可区分性实验(experiment)或者说是游戏(game),记为 P r i v K A , Π e a v PrivK^{eav}_{\mathcal A, \Pi} PrivKA,Πeav。这里, Π = ( G e n , E n c , D e c ) \Pi=(Gen, Enc, Dec) Π=(Gen,Enc,Dec)是密码系统,这个游戏只考虑窃听(eavesdropping)攻击者 A \mathcal A A,攻击者拥有的后验信息只有一个 c c c并且试图基于这个 c c c确定明文的一些信息。

定义. P r i v K A , Π e a v PrivK^{eav}_{\mathcal A, \Pi} PrivKA,Πeav定义如下:

  1. 初始化加密方案(比如,生成密钥 k k k)。
  2. 攻击者给出一对明文 m 0 , m 1 ∈ M m_0, m_1 \in \mathcal M m0,m1M
  3. 通信方在攻击者不知情的情况下随机挑选一个 m b , b ∈ { 0 , 1 } m_b, b\in \{0, 1\} mb,b{0,1},加密后返回 c c c
  4. 攻击者根据 c c c给出一个 b b b的估计 b ′ b' b。注意,这个 b ′ b' b可能是一个概率分布。
  5. 如果 b = b ′ b = b' b=b,那么攻击者赢(return 1),反之输(return 0)。

如果系统是安全的,那么你攻击者对 c c c再怎么折腾,最后输出的结果和瞎猜的效果是一样的。

于是我们可以定义不可区分性:

定义. 定义在明文空间 M \mathcal M M上的密码系统 ( G e n , E n c , D e c ) (Gen, Enc, Dec) (Gen,Enc,Dec)是不可区分的,如果:

P [ P r i v K A , Π e a v = 1 ] = 1 2 P[PrivK^{eav}_{\mathcal A, \Pi} = 1] = \frac{1}{2} P[PrivKA,Πeav=1]=21


一次性密码本

现实中就存在一个具有完美安全性的加密方案:一次性密码本(One Time Pad, OTP)。

对于一个二进制串 m m m,我们随机生成和 m m m等长的二进制串 k k k,其中 k k k的每一位都是独立的均匀分布, c = E n c k ( m ) = m ⊕ k c = Enc_k(m) = m \oplus k c=Enck(m)=mk,其中 ⊕ \oplus 被定义为异或运算。

OTP的安全性是显然的。因为,对每个 m m m而言, c c c的每一位都是均匀分布的。

我们将OTP进行一般化:

( G , + ) (G, +) (G,+)为加群。 K = M = C = G \mathcal K = \mathcal M=\mathcal C=G K=M=C=G。于是,

  • E n c k ( m ) = m + k Enc_k(m) = m+k Enck(m)=m+k
  • D e c k ( m ) = m − k Dec_k(m)=m-k Deck(m)=mk
    构成了一次性密码本。

但是OTP不实用,因为:

  • 密钥和明文等长

  • 一次一密,用后即焚,否则可能会泄露信息。

    比如在OTP中,如果相同的密钥加密 m 1 , m 2 m_1, m_2 m1,m2后得到 c 1 , c 2 c_1, c_2 c1,c2,那么攻击者就知道 m 1 ⊕ m 2 = c 1 ⊕ c 2 m_1 \oplus m_2 = c_1 \oplus c_2 m1m2=c1c2——这泄露了明文的信息。

此外,我们可以证明,一个密码系统如果是具有完美安全性的,那么必然是 ∣ K ∣ ≥ ∣ M ∣ |\mathcal K| \geq |\mathcal M| KM

(原因很简单,假如 ∣ K ∣ < ∣ M ∣ |\mathcal K| < |\mathcal M| K<M,原本攻击者是要去猜 m m m的,现在攻击者猜 k k k的胜算还比猜 m m m的胜算还大,这意味着加密过程泄露了信息。)

于是,OTP就成了完美安全性中最高效的方案。


“可以收手了吗,阿祖?”


限制攻击者的能力:不可区分性、语义安全性

要想做出实用性更强的密码系统,一个想法是对攻击者的能力进行限制。

限制方法包括:

  1. 限制攻击者的计算能力——计算安全性。
  2. 其他方法:量子密码学、内存限制模型etc

量子密码学的特征是:攻击者(Eve)不可能在通信方(Alice和Bob)不知情的情况下实现窃听。一旦攻击者成功实施窃听,那么量子的状态就会被干扰,通信方可以通过基于量子状态传输的通信内容知道自己被窃听了。

在这里插入图片描述
在这里插入图片描述

(需要注意一点,量子密码和量子计算不是一个东西)


主流方法是对攻击者进行计算能力的限制。如果攻击者可以不计成本地做穷举攻击,那么什么样的密码都会被破解。

问题来了:如何定义对攻击者计算能力的限制?

攻击者可以买若干块V100并且用到报废、或者一年内租若干台云服务器吗?

即使有这些个计算资源,那攻击者运行什么样的攻击算法呢?

所以说这种定义在理论上不是太美观的,也不方便分析。

下面我们对计算模型进行抽象。具体地,我们可以用图灵机描述攻击者的能力:

一个系统 X X X ( t , ϵ ) (t, \epsilon) (t,ϵ)安全的,如果任意一个运行时长不超过 t t t的图灵机破解它的概率不超过 ϵ \epsilon ϵ

其实存在很多图灵机模型,基本上都可以证明它们和最一般的图灵机是等价的。然后Church-Turing命题也告诉我们,任何在算法上可计算的问题同样可由图灵机计算。于是我们可以把各种各样基于图灵机的模型抽象一下变成一个个算法,于是所有的讨论都基于算法进行,这就避免了去脑补图灵机的纸带和读写头怎么飞舞。


对于前述的 ( t , ϵ ) (t, \epsilon) (t,ϵ)安全性,我们使用渐进分析的方法进行具体化。

  • 图灵机运行 t t t步,意味着“高效的计算”
  • ϵ \epsilon ϵ,是一个非常小(接近0)的数

定义这些东西的方式是使用渐进分析的思路。

直接说结论,我们认为的小是小于任何的多项式倒数,即小于任何的 1 / p o l y ( n ) 1/poly(n) 1/poly(n)

我们认为的高效计算是有多项式复杂度的计算。

这种用多项式定义的小具有比较好的性质:


基于上面的东西,我们对计算安全性进行进一步的定义。首先,我们对密钥加密方案(private-key encryption scheme)进行定义:

定义. 私钥密码学方案是三个概率多项式时间(Probability polynomial time, PPT)算法 ( G e n , E n c , D e c ) (Gen, Enc, Dec) (Gen,Enc,Dec),其中:

  1. G e n Gen Gen:输入安全参数 n n n返回一个密钥 k k k。一般认为 ∣ k ∣ ≥ n |k| \geq n kn
  2. E n c Enc Enc:输入密钥 k k k和明文消息 m ∈ { 0 , 1 } ∗ = ⋃ N = 1 ∞ { 0 , 1 } N m \in \{0, 1\}^* = \bigcup_{N=1}^\infty \{0, 1\}^N m{0,1}=N=1{0,1}N。输出的密文有可能是随机的。
  3. D e c Dec Dec:输入密钥 k k k和密文消息 c c c,输出 m m m或者抛出错误。

要求:对于任意的 n , k , m n, k, m n,k,m D e c k ( E n c k ( m ) ) = m Dec_k(Enc_k(m)) = m Deck(Enck(m))=m

我们仍然没有很好地假设攻击者的能力。比如攻击者可能用什么样的算法进行攻击。我们接下来设计的安全性定义将防御住攻击者在给定计算能力的情况下的任何攻击。

在完美安全性中,攻击者不能从密文中获取任何明文的相关信息。在限制了攻击者的计算能力后,我们将定义语义安全性。语义安全性不是那么实用,我们又搞出了一个叫不可区分性的东西。不可区分性和语义安全性等价,但是不可区分性好用。

我们在攻击者能力受限的情况下,也搞一个不可识别性之类的东西。和完美安全性那里引入的game的区别在于,我们改动两个地方:

  1. 攻击者的能力被限制为多项式时间
  2. 攻击者攻击的成功率是小的,这个小被定义为 1 2 + ϵ ( n ) \frac{1}{2}+ \epsilon(n) 21+ϵ(n)

于是我们得到game:

定义. adversarial indistinguishability窃听攻击下的不可区分性实验 P r i v K A , Π e a v ( n ) PrivK^{eav}_{\mathcal A, \Pi}(n) PrivKA,Πeav(n)

  1. 攻击者 A \mathcal A A给定安全参数,输出两个密文 m 0 , m 1 m_0, m_1 m0,m1,其中 ∣ m 0 ∣ = ∣ m 1 ∣ |m_0| = |m_1| m0=m1
  2. 防御方生成密钥 k k k和一个随机比特 b b b。计算 c = E n c k ( m b ) c = Enc_k(m_b) c=Enck(mb)
  3. 攻击者获得 c c c后通过一通计算输出比特 b ′ b' b
  4. 如果 b ′ = b b' = b b=b,则攻击者赢,记为 P r i v K A , Π e a v ( n ) = 1 PrivK^{eav}_{\mathcal A, \Pi}(n) = 1 PrivKA,Πeav(n)=1

基于此我们有计算不可区分性的定义:

定义. 加密方案 Π = ( G e n , E n c , D e c ) \Pi = (Gen, Enc, Dec) Π=(Gen,Enc,Dec)在窃听攻击下是计算不可区分的(EAV-SECURE),如果对所有的PPT算法攻击 A \mathcal A A,都存在足够小的函数,使得对于任意的 n n n
P [ P r i v K A , Π e a v ( n ) = 1 ] ≤ 1 2 + ϵ ( n ) P[PrivK^{eav}_{\mathcal A, \Pi}(n) = 1] \leq \frac{1}{2} + \epsilon(n) P[PrivKA,Πeav(n)=1]21+ϵ(n)

其中 ϵ ( n ) \epsilon(n) ϵ(n)是我们前面定义的小量。

一个等价的定义是,假设我们给实验 P r i v K A , Π e a v ( n ) PrivK^{eav}_{\mathcal A, \Pi}(n) PrivKA,Πeav(n)开了影分身,这两个影分身实验在选择比特 b b b的时候一个选了0一个选了1,那么攻击者其实是分辨不出他自己在和哪个影分身搏斗的。

这个定义的书写留作练习,或者参考书。

注意,这里涉及的加密方案并不需要隐藏明文的长度信息。我们暂时假设明文长度都是相等的,具体为什么要这么假设不妨参考书中的相关内容,因为这个问题暂时不影响主线叙述。


为了介绍语义安全性,我们首先更进一步地品味计算不可区分性的意义。

  • 计算不可区分,意味着攻击者不可能通过他的那些计算花招在猜测明文的某一个比特方面有显著的优势。

  • 计算不可区分,意味着攻击者不可能通过他的那些计算花招学到明文的任意一个函数 f ( m ) f(m) f(m),其中 m m m定义在任意一个集合 S ⊂ { 0 , 1 } l \mathcal S \subset \{0, 1\}^l S{0,1}l中,并且 f ( m ) f(m) f(m)输出 的值是0-1比特。也即,攻击者利用密文 c c c算对函数 f ( m ) f(m) f(m)的概率应该和攻击者什么都不知道没有太多的差别。(否则就是泄露了信息)。

基于上述叙述,我们给出语义安全性的定义:

定义. 一个加密方案 ( E n c , D e c ) (Enc, Dec) (Enc,Dec)在窃听攻击下是语义安全的,如果对于任意的PPT算法 A \mathcal A A,都有一个PPT算法 A ′ \mathcal A' A,使得下列东西是小量:

∣ P [ A ( 1 n , E n c k ( m ) , h ( m ) ) = f ( m ) ] − P [ A ′ ( 1 n , ∣ m ∣ , h ( m ) ) = f ( m ) ] ∣ |P[\mathcal A(1^n, Enc_k(m), h(m))=f(m)] - P[\mathcal A'(1^n, |m|, h(m))=f(m)]| P[A(1n,Enck(m),h(m))=f(m)]P[A(1n,m,h(m))=f(m)]

其中 h ( m ) h(m) h(m)是攻击者已经掌握的外部消息。在语义安全性中,攻击者用算法 A \mathcal A A在给定 c = E n c k ( m ) c=Enc_k(m) c=Enck(m) h ( m ) h(m) h(m)的情况下计算 m m m的函数 f ( m ) f(m) f(m),它的效果应该和攻击者用任意一个算法 A ′ \mathcal A' A在给定 h ( m ) h(m) h(m) ∣ m ∣ |m| m的情况下计算 f ( m ) f(m) f(m)差不多。

定理. 计算不可区分性和语义安全性等价。


伪随机性和流密码

伪随机数生成器 G G G是一个高效的(多项式时间)、确定性的算法,可以将一个短的、采样自均匀分布的比特串(种子, seed)转化成一个长的、看起来采样自均匀分布的比特串。

研究伪随机数的意义在于从统计意义上模拟随机性。为了判断出各种伪随机数究竟不随机在哪儿,可以构造出各种各样的统计量。

一个问题在于,如何判断伪随机数的随机性?类似于计算安全性,我们可以想出来一个类似于计算随机性的东西:一个好的伪随机数生成器需要骗过所有(可以高效地计算)的统计量。

于是,我们给出正式定义:

定义. l l l是一个多项式, G G G是一个确定性的多项式时间算法,使得对于任意的 n n n(安全参数,在这里是种子的长度)和任意的输入 s ∈ { 0 , 1 } n s \in \{0, 1\}^n s{0,1}n(这是随机种子), G ( s ) G(s) G(s)是长度为 l ( n ) l(n) l(n)的串。我们说 G G G是伪随机数生成器,如果:

  1. 对于任意的 n n n,有 l ( n ) > n l(n) > n l(n)>n
  2. 对于任意的概率多项式时间算法 D D D,存在一个小量 ϵ ( n ) \epsilon(n) ϵ(n)使得
    ∣ P [ D ( G ( s ) ) = 1 ] − P [ D ( r ) = 1 ] ∣ ≤ ϵ ( n ) |P[D(G(s))=1] - P[D(r) = 1]| \leq \epsilon(n) P[D(G(s))=1]P[D(r)=1]ϵ(n)

其中,我们称 l l l是伪随机数生成器的扩张因子。我们认为 D D D是随机性判别器, D ( ⋅ ) = 1 D(·)=1 D()=1表明,它认为输入的东西是随机的,反之它认为输入的东西不是随机的。 s ∈ { 0 , 1 } n s \in \{0, 1\}^n s{0,1}n r ∈ { 0 , 1 } l ( n ) r\in \{0, 1\}^{l(n)} r{0,1}l(n)均采样自均匀分布。

实际上,伪随机数生成的东西显然不是均匀的。比如设我们有 n n n比特的种子, l ( n ) = 2 n l(n) = 2n l(n)=2n。确定性映射 G G G最多将 2 n 2^n 2n个种子映射到像空间( 2 n 2^n 2n个值),而 { 0 , 1 } 2 n \{0, 1\}^{2n} {0,1}2n空间中还有 2 2 n − 2 n 2^{2n}-2^n 22n2n个值没有映射到。

另一个问题是,伪随机数生成器是不是真的存在?实际上我们不知道怎么无条件地证明伪随机数的存在,但是我们有很站得住脚的原因可以相信它存在。首先,如果假设单向函数(单向函数 f f f具有性质:给定 x x x计算 f ( x ) f(x) f(x)是容易的,但是给定 f ( x ) f(x) f(x)计算原像是难的。典型的例子是哈希函数)是存在的,我们就可以基于单向函数构造伪随机数生成器。单向函数存在这一假设是很弱的假设。另外,已经有很多的伪随机数生成器(比如流密码),而且目前还没找到高效的 D D D

流密码

流密码和伪随机数生成器有一点不同:它可以生成任意多的“随机”比特。

我们定义流密码为两个函数: ( I n i t , G e t B i t s ) (Init, GetBits) (Init,GetBits)

  • Init入参包括:种子 s s s和(可选的)初始化向量 I V IV IV。输出一个初始状态 x 0 x_0 x0
  • GetBits的入参包括:状态 x k x_k xk,输出一个比特 y k y_k yk然后更新状态为 x k + 1 x_{k+1} xk+1

于是,如果我们让流密码在初始化后运行 l l l G e t B i t s GetBits GetBits,就可以得到一个可能的“伪随机数生成器”,记为 G l G_l Gl

粗略地说,上面的流密码是安全的,如果它不需要 I V IV IV,并且对于任意的多项式 l ( n ) l(n) l(n),其中 l ( n ) > n l(n) > n l(n)>n G l G_l Gl都是扩张因子为 l l l的伪随机数生成器。

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

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

相关文章

【海拥工具】分享200+个关于AI的网站

给大家分享一个学习、摸鱼必备网站&#xff0c;我的好友海拥✘&#xff08;全网粉丝近20万&#xff0c;CSDN 内容合伙人&#xff0c;全栈领域优质创作者&#xff0c;华为云享专家&#xff0c;阿里云专家博主&#xff0c;InfoQ、蓝桥云课签约作者&#xff0c;HDZ核心组成员&…

石子游戏 dfs + 备忘录 JAVA

Alice 和 Bob 用几堆石子在做游戏。一共有偶数堆石子&#xff0c;排成一行&#xff1b;每堆都有 正 整数颗石子&#xff0c;数目为 piles[i] 。 游戏以谁手中的石子最多来决出胜负。石子的 总数 是 奇数 &#xff0c;所以没有平局。 Alice 和 Bob 轮流进行&#xff0c;Alice 先…

ArcGIS Pro基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例应用全流程科研能力提升

目录 第一章 入门篇 GIS理论及ArcGIS Pro基础 第二章 基础篇 ArcGIS数据管理与转换 第三章 数据编辑与查询、拓扑检查 第四章 制图篇 地图符号与版面设计 第五章 空间分析篇 ArcGIS矢量空间分析及应用 第六章 ArcGIS栅格空间分析及应用 第七章 影像篇 遥感影像处理 第八…

如何在Linux布置nginx(附带Nginx基本操作步骤)

文章目录 前言一、下载环境依赖二、下载nginx安装包三、具体操作流程总结 前言 提示&#xff1a;下述操作步骤适合内网服务器、局域网服务器和公网服务器。 不足之处欢迎交流指正&#xff0c;不喜勿喷。 一、下载环境依赖 yum -y install gcc zlib zlib-devel pcre-devel ope…

【升职加薪秘籍】我在服务监控方面的实践(4)-日志监控

大家好,我是蓝胖子&#xff0c;关于性能分析的视频和文章我也大大小小出了有一二十篇了&#xff0c;算是已经有了一个系列&#xff0c;之前的代码已经上传到github.com/HobbyBear/performance-analyze 接下来这段时间我将在之前内容的基础上&#xff0c;结合自己在公司生产上构…

CKA考试注意事项--考前必看!

一、考前 1. 核心&#xff0c;多练题&#xff0c;练到滚瓜烂熟&#xff0c;最好在1.5h内完成全部题目&#xff0c;有k8s基础练习两周即可&#xff0c;没基础可能要一个月。 2. 建议上TB购买一份题库&#xff08;95%与考试一致&#xff09;&#xff0c;并且会赠送题目k8s练习环…

[C++] 类与对象(中)完整讲述运算符重载示例 -- 日期类(Date) -- const成员

目录 1、前言 2、全缺省的构造函数 3、打印接口 4、拷贝构造 5、赋值运算符重载&#xff08;operator&#xff09; 5.1赋值重载是默认成员函数&#xff0c;重载格式&#xff1a; 5.2 赋值重载不能为全局函数 5.3 编译器默认生成 6、析构函数 7、operator> 8、ope…

Swift async/await 并发中如何将任务组(TaskGroup)转换为异步序列(AsyncSequence)

功能需求 在 Swift 新结构化并行模型的开发中, 提出了任务组(TaskGroup)和异步序列(AsyncSequence)的概念。有时候,为了简洁和效率方面的原因,我们需要将 TaskGroup 的结果转换为异步序列。 如上图所示,我们试图将任务组的结果转换为异步序列,但不幸失败了。 那么…

AI在线取英文名

AI在线取英文名 您是否曾经为了给自己、孩子或者您的产品取英文名字而苦恼&#xff1f;如何保留中文名字的音韵特点&#xff0c;同时又能传达名字的文化含义&#xff1f;别担心&#xff0c;我们为您准备了一款强大而创新的在线工具—— 中英名字创意匹配器&#xff0c;让您在命…

Ubuntu系统下库的相关问题解析

本文通过以下几个问题对Ubuntu系统下库的相关问题进行解析。 1.库是什么? 库是写好的&#xff0c;现有的&#xff0c;成熟的&#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同…

ad+硬件每日学习十个知识点(27)23.8.7 (DCDC的datasheet)

文章目录 1.DCDC拿到手册需要关注的参数2.MOS选型3.TPS54331的ECO模式&#xff08;跳跃模式&#xff0c;损耗小、纹波大&#xff09;4.TPS54331的引脚功能&#xff08;BOOT这里没太看懂&#xff0c;之后回来再看看&#xff09;5.TPS54331的额定值6.TPS54331在test条件下的电气特…

多个配置WebMvcConfigurationSupport失效问题

最近在项目中用类继承WebMvcConfigurationSupport实现拦截器 Configuration RequiredArgsConstructor public class SpringWebSupport extends WebMvcConfigurationSupport {private final ProjectInterceptor projectInterceptor;// 拦截器 //设置拦截器对象和拦截请求Ove…

idea模板的使用(配置xml文件模板)

1. 问题的引出 我们在日常项目中可以发现&#xff0c;sql映射文件和mybatis主配置文件&#xff0c;以及application.yml文件中有很多固定不变的内容&#xff0c;为了方面使用&#xff0c;所以可以把这些xml文件设置为模板 2. 创建模板的步骤 按照图片一步一步进行即可 点击…

【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解

【JavaEE】Spring MVC 程序开发要点总结 文章目录 【JavaEE】Spring MVC 程序开发要点总结1. 什么是 Spring MVC1.1 MVC的执行流程1.2 为什么要学Spring MVC1.3 Spring MVC 的学习 2. Spring MVC 的创建和连接2.1 创建2.2 连接2.2.1 RestController注解2.2.2 RequestMapping注解…

使用ffmpeg将m4a及wav等文件转换为MP3格式

要使用ffmpeg将m4a及wav等文件转换为MP3格式&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装 ffmpeg 确保您已经安装了ffmpeg软件。如果没有安装&#xff0c;请访问ffmpeg的官方网站https://ffmpeg.org/ 并按照说明进行安装。 Win10 / Win11 可以通过 winget 命令…

Springboot中创建拦截器

目录 目的 实现过程 1、创建拦截器 2、注册拦截器 完整代码 目的 在Springboot项目中创建拦截器&#xff0c;在进入Controller层之前拦截请求&#xff0c;可对拦截到的请求内容做响应处理&#xff0c;如&#xff1a;校验请求参数、验证证书等操作&#xff1b; 实现过程 1、创…

五金店和MRO工业品超市有什么区别

五金店和MRO工业品超市有一定的相似性&#xff0c;但它们之间还是存在一些区别的。 五金店主要经营各种五金产品&#xff0c;如家具五金、建筑五金、工具、螺丝螺母等&#xff0c;五金店的产品范围相对较窄&#xff0c;通常针对个人消费者和家庭使用&#xff0c;如日常家居维修…

AutoDL服务器的镜像版本太高,配置python3.7 tensorflow1.15版本的框架的步骤

1.选择一个实例&#xff0c;进入后端界面 2. 更新bashrc中的环境变量 conda init bash && source /root/.bashrc查看虚拟环境 conda info --envs可以看到此时有一个base的虚拟环境 但是它的python版本为3.8.10&#xff0c;无法安装tensorflow1.15,所以我们要创建一个…

40% Ubuntu 用户面临着新特权提升漏洞风险

导读Wiz 的研究人员发现&#xff0c;最近被引入 Ubuntu 内核的两个 Linux 漏洞&#xff0c;可能会在大量设备上为非特权本地用户提升权限。这两个漏洞被追踪为 CVE-2023-32629 和 CVE-2023-2640&#xff0c;预计影响了大约 40% 的 Ubuntu 用户。 根据介绍&#xff0c;其中 CVE…

干货分享|Elsevier投稿进度查询功能正式上线,随时获取投稿状态!

想必广大科研学者们都经历过每天登录系统查看投稿进度的煎熬过程&#xff0c;为了方便广大科研人随时获取投稿状态&#xff0c;2023年8月&#xff0c;Elsevier【微信端投稿进度查询功能】正式上线&#xff01; 无论你是通讯作者还是共同作者&#xff0c;只需一次查询&#xff…