密码学(一)

文章目录

  • 前言
  • 一、Cryptographic Primitives
  • 二、Cryptographic Keys
    • 2.1 Symmetric key cryptography
    • 2.2 asymmetric key cryptography
  • 三、Confidentiality
    • 3.1 Symmetric key encryption algorithms
    • 3.2 asymmetric key block ciphers
    • 3.3 其他
  • 四、Integrity
    • 4.1 symmetric key setting
    • 4.2 Asymmetric key primitives
    • 4.3 其他
  • 五、Freshness
  • 参考资料

前言

本文来自 Intel SGX Explained

主要介绍了密码学中的密钥,加密(对称机密和非对称加密),签名。

加密 --> 机密性
签名 --> 完整性

(1)
密码学中的机密性是指确保信息在传输或存储过程中不被未授权的人访问或获取到。它是信息安全的一个基本要求,确保敏感数据只能被授权的实体读取。

机密性的实现通常依赖于加密算法和密钥管理。加密是将明文转换为密文的过程,通过使用加密算法和密钥来对信息进行转换,使得未经授权的人无法理解密文。只有拥有正确的密钥才能解密密文并还原为明文。

加密算法可以分为对称加密和非对称加密两种类型。对称加密使用相同的密钥进行加密和解密,因此在密钥的管理上相对简单,但需要确保发送方和接收方能够安全地共享密钥。非对称加密使用一对密钥,即公钥和私钥,公钥用于加密,私钥用于解密。公钥可以公开分享给任何人,而私钥必须保密。非对称加密提供了更好的密钥管理和安全性,但加密和解密的计算开销较大。

(2)
密码学中的完整性是指确保数据在传输或存储过程中不被篡改或损坏的特性。它是信息安全的另一个基本要求,确保数据的完整性和可信性。

数据的完整性保护有助于防止未经授权的修改、插入或删除操作。它确保接收方能够验证接收到的数据与发送方发送的数据完全一致,没有被篡改过。

一、Cryptographic Primitives

这一部分概述了安全架构中使用的加密系统。我们关注确保机密性(confidentiality)、完整性(integrity)和新鲜性(freshness)的加密原语,并将这些原语视为黑盒,着重讨论它们在更大系统中的使用。

GuaranteePrimitive
ConfidentialityEncryption
IntegrityMAC(Message Authentication Code) / Signatures
FreshnessNonces + integrity

上述表格表明了所需的安全保证和提供这些保证的基元。

GuaranteeSymmetric KeysAsymmetric Keys
ConfidentialityAES-GCM,AES-CTRRSA with PKCS #1 v2.0
IntegrityHMAC-SHA-2 AES-GCMDSS-RSA,DSS-ECC

上述表格表明了流行的加密原语被认为是安全的,可以抵御当今的对手。

当保护机密性的消息在不安全的传输媒介上传输时,无论是否存在对手,都无法获取消息中的信息。

当使用完整性保护时,接收者可以确保收到的消息要么是发送者传输的消息,要么会注意到攻击者篡改了消息的内容。

当多个消息通过不可信的媒介进行传输时,新鲜性保证确保接收者可以获取来自发送者的最新消息,或者能够察觉到攻击。新鲜性保证要比等效的完整性保证更强,因为后者无法防止重放攻击,即攻击者用来自同一发送者的旧消息替换较新的消息。

下面的例子进一步说明了这些概念。假设Alice是一位富有的投资者,每天都希望进行购买或出售某个物品。Alice无法直接交易,必须通过网络连接将她的订单传达给经纪人Bob,而该网络连接由Eve拥有。

(1)confidentiality guarantees
具有机密性保证的通信系统将防止Eve区分买入和卖出订单,如下图所示。如果没有机密性保证,Eve将在Bob下单之前就知道Alice的订单,因此Eve可能会以牺牲Alice利益为代价获得经济上的优势。
在这里插入图片描述
上图表明了在机密性攻击中,Eve可以看到Alice发送给Bob的消息,并能够理解其中的信息。在这种情况下,Eve可以确定消息是一个买入订单,而不是卖出订单。

(2) integrity guarantees
具有完整性保证的系统将防止Eve替换Alice的消息并发送一个虚假订单,如下图所示。在这个例子中,如果没有完整性保证,Eve可以将Alice的消息替换为一个"卖出全部"的订单,并以非常低的价格购买Alice的资产。
在这里插入图片描述
上图表明了在完整性攻击中,Eve替换了Alice的消息并发送了自己的消息。在这种情况下,Eve发送给Bob的是一个"卖出全部"的订单。与机密性攻击不同,这里的问题实际上涉及到了消息的完整性保证。

(3)freshness guarantees
最后,一个能够保证消息新鲜性的通信系统将确保Eve无法执行下图中所示的重放攻击,即替换Alice的消息为旧消息。没有新鲜性保证,Eve可以进行以下攻击,绕过机密性和完整性保证。在几天的时间里,Eve会从网络中复制并存储Alice的消息。当一个订单到达Bob时,Eve会观察市场并确定订单是买入还是卖出。在建立了一个标有买入或卖出的消息数据库之后,Eve将替换Alice的消息为她选择的旧消息。
在这里插入图片描述
上图表明了在一个新鲜性攻击中,Eve替换Alice的消息为之前她发送过的消息。在这个例子中,Eve随着时间的推移建立了一个标记过的消息数据库,并能够向Bob发送她选择的买入或卖出订单。

这种攻击绕过了机密性和完整性保证。Eve通过分析市场和替换消息,可以获得对Alice的交易行为的敏感信息,并利用旧消息来操纵交易结果。

二、Cryptographic Keys

在我们描述的所有密码学原语中,都依赖于密钥,密钥是一小段信息,必须根据特定规则进行披露。系统安全性分析的很大一部分工作集中在确保底层密码学原语使用的密钥是根据原语的假设生成和处理的。

密钥在密码学中起着至关重要的作用,它们用于加密和解密数据、生成和验证数字签名、执行身份认证等关键操作。因此,密钥的安全性和正确的处理方式对于确保系统的安全性至关重要。

每个密码学原语都有一个相关的密钥生成算法,该算法使用随机数据生成唯一的密钥。随机数据是由一个密码学强度的伪随机数生成器(CSPRNG)产生的,它将少量的随机种子数据扩展成大量的数据,这些数据在计算上无法与真随机数据区分开来。随机种子必须来自一个真正的随机性源,其输出不能被对手预测,例如来自硬件传感器的温度读数的最低有效位。

2.1 Symmetric key cryptography

对称密钥密码学要求系统中的所有参与方建立一个共享的秘密密钥,通常称为"密钥"。通常,一方执行密钥生成算法,并将生成的密钥安全地传输给其他参与方,如下图所示。用于分发密钥的通道必须提供机密性和完整性的保证,这是一个非常复杂的后勤负担。这里提到的对称密钥原语对密钥本身不做任何假设,因此密钥生成算法只是从CSPRNG中获取一定数量的比特位。
在这里插入图片描述
在对称密钥密码学中,希望进行安全通信的各方共享一个秘密密钥。

以下是对称密钥密码学中建立共享秘密密钥的过程:
(1)密钥生成:其中一方使用安全的密钥生成算法生成一个随机的秘密密钥。这个密钥通常是一串具有特定长度的比特。

(2)密钥分发:生成的秘密密钥通过安全的渠道分发给参与通信的各方。确保通过安全的通道传输密钥,以确保其机密性和完整性。

(3)密钥存储:每个参与方都安全地存储共享的秘密密钥,以确保其不被泄露或未经授权的人访问。采取适当的密钥管理措施,如使用安全的存储机制和访问控制,来保护密钥。

2.2 asymmetric key cryptography

非对称密钥密码学的显著特点是它不需要私密渠道进行密钥分发。每个参与方执行密钥生成算法,生成一对相关的私钥和公钥。每个参与方的公钥通过具有完整性保证的渠道分发给其他参与方,如下图所示。非对称密钥原语比对称密钥原语更加灵活,但也更加复杂并消耗更多的计算资源。
在这里插入图片描述
非对称密钥密码学的过程如下:
(1)密钥生成:每个参与方执行密钥生成算法,生成一对密钥:私钥和公钥。这对密钥是通过数学关系相互关联的。

(2)公钥分发:每个参与方将其公钥分发给其他参与方。分发过程需要通过具有完整性保证的渠道进行,以确保公钥在传输过程中的完整性和安全性。

(3)加密和解密:要发送加密的消息,发送方使用接收方的公钥来加密消息。接收方使用其私钥来解密收到的消息。这样,即使公钥被泄露,只有对应的私钥才能进行解密,确保了通信的机密性。

三、Confidentiality

许多提供完整性保证的加密系统是建立在对固定大小的消息块进行操作的分组密码之上的。发送方使用加密算法对块进行转换,而接收方使用解密算法反转此转换过程。分组密码中的加密算法将消息块的内容混淆在输出中,以便没有解密密钥的对手无法从加密输出中获取原始消息块。

3.1 Symmetric key encryption algorithms

对称密钥加密算法使用相同的密钥进行加密和解密,如下图所示:
在这里插入图片描述
上图表明了在对称密钥的安全置换(分组密码)中,相同的秘密密钥必须同时提供给加密算法和解密算法。

在对称密钥加密中,发送方和接收方使用相同的密钥对数据进行加密和解密。这个共享的密钥需要事先在通信双方之间安全地共享。发送方使用密钥对数据进行加密,生成加密后的数据,然后接收方使用相同的密钥对加密的数据进行解密,还原出原始的数据。

目前,基于对称密钥的最受欢迎的分组密码是美国加密标准(AES – Advanced Encryption Standard),它有两个变体,分别使用128位密钥或256位密钥来操作128位的数据块。AES是一个安全的置换函数,因为它可以将任何128位的数据块转换为另一个128位的数据块。最近,美国国家安全局(NSA)要求使用256位AES密钥来保护敏感信息。

关于对称加密算法请参考:https://zhuanlan.zhihu.com/p/441159181

3.2 asymmetric key block ciphers

而非对称密钥分组密码使用公钥进行加密,使用相应的私钥进行解密,如下图所示:
在这里插入图片描述
上图表明了在非对称密钥分组密码中,加密算法使用公钥进行操作,而解密算法则使用相应的私钥。

在这种情况下,每个参与者都拥有一对数学相关的密钥:公钥和私钥。公钥可以自由分发并为所有人所知,而私钥必须保密,并且只有密钥的拥有者知道。

当发送方想要使用非对称密钥分组密码加密消息时,他们使用接收方的公钥来执行加密算法。该算法将消息按照固定大小的块进行处理,并将其转换为加密后的密文。只有使用相应的私钥才能解密该密文,而私钥只有预期的接收方独占拥有。

接收方在掌握自己的私钥后,使用私钥执行解密算法来反转加密过程。通过将私钥应用于加密的密文,他们可以恢复原始消息的未加密形式。

因此,在非对称密钥分组密码中,加密算法使用公钥进行操作,允许任何人加密专为特定接收方设计的消息。而相应的私钥则由预期的接收方用于解密密文并恢复原始消息。

最广泛部署的非对称密钥分组密码是Rivest-Shamir-Adelman(RSA)算法。RSA是一种被广泛使用和信任的加密算法,用于安全通信和数字签名。

对于非对称加密算法:https://zhuanlan.zhihu.com/p/436455172

3.3 其他

一个单独使用的分组密码并不能完全保证机密性。一个显著的问题是,在我们之前的例子中,对于Alice的任何购买订单,分组密码会生成相同的加密输出,因为它们都具有相同的内容。此外,每个分组密码都有自己的假设,如果直接使用密码,可能会导致微妙的漏洞。

(1)
对称密钥分组密码与操作模式结合使用,形成对称加密方案。大多数操作模式要求为每个消息使用随机初始化向量(IV – random initialization vector),如下图所示。在分析基于这些加密系统的系统安全性时,了解IV生成过程与确保加密密钥的机密性一样重要。
在这里插入图片描述
上图表明了对称密钥分组密码与操作模式结合使用。大多数操作模式要求为每个加密消息生成一个随机的初始化向量(IV)。

对称加密算法通常使用不同的操作模式来处理大于块大小的数据:
CTR(Counter)模式和CBC( Cipher Block Chaining)模式是由美国国家标准与技术研究所(NIST)推荐的操作模式,也是国家安全局(NSA)的要求所依据。

CTR模式和CBC模式都是广泛使用的操作模式,结合分组密码如AES可以实现机密性。

在CTR模式中,分组密码以计数器为基础,为每个明文块加密一个唯一的计数器值。计数器值与一个随机数(称为nonce)结合,生成一系列加密密钥流,然后与明文进行异或运算,产生密文。CTR模式支持并行加密和解密,适用于处理大数据集。

而CBC模式则是将每个明文块与前一个密文块进行异或运算后再进行加密。第一个块会与一个初始化向量(IV)进行异或运算,每个消息的IV都需要是随机且唯一的。CBC模式引入了扩散和链式效应,提高了安全性,但需要按顺序处理数据。

通过将分组密码如AES与适当的操作模式如CTR结合,可以创建AES-CTR等加密方法,提供机密性保证。这些加密方法确保每个消息使用唯一的IV或计数器值进行加密,防止模式出现,增加安全性。

(2)
在非对称密钥设置中,没有与操作模式等价的概念。每个块密码都有自己的假设,并需要针对通用用途设计的专门方案。

RSA算法通常与填充方法结合使用,其中最流行的方法是公钥密码学标准(PKCS)#1版本1.5和2.0中所描述的方法。对使用基于RSA的加密的系统进行安全分析时,必须考虑填充方法。例如,PKCS #1 v1.5中的填充在某些情况下可能泄漏私钥。虽然PKCS #1 v2.0解决了这个问题,但它足够复杂,以至于一些实现存在自己的安全问题。

填充方法的作用是在使用RSA算法进行加密时,对明文进行适当的转换和填充,以满足RSA算法的要求。填充方法可以确保加密的安全性和正确性,并防止一些攻击,如选择明文攻击、填充预测攻击等。

非对称加密算法比对称加密算法具有更高的计算要求。因此,当需要加密大量数据时,发送方会生成一个一次性的秘密密钥,用于加密数据,并使用接收方的公钥对该秘密密钥进行加密,如下图所示:
在这里插入图片描述
上图表明了非对称密钥加密通常用于启动对称密钥加密方案。

这种方案被称为"混合加密"(hybrid encryption),它结合了对称密钥加密和非对称密钥加密的优势。对称密钥加密适用于处理大量数据,而非对称密钥加密提供了密钥交换和数字签名等功能。因此,在混合加密中,发送方使用对称密钥加密数据,而对称密钥本身则使用接收方的公钥进行加密,以确保只有接收方能够解密对称密钥并还原明文数据。

这种方式的优势在于避免了使用非对称加密算法来直接加密大量数据所带来的高计算开销。相反,只需要使用非对称加密算法来加密相对较短的对称密钥即可。这样既保证了安全性,又提供了高效的加密和解密性能。

这个过程通常被称为"密钥交换"或"密钥建立"。

使用这种方法的主要原因是,非对称加密算法(如RSA或Diffie-Hellman)与对称加密算法(如AES)相比具有更高的计算要求。非对称加密是计算上更昂贵和较慢的,特别是在处理大量数据时。

为了克服这个限制,通常采用混合加密方案。以下是其工作原理的高级概述:
(1)密钥交换:发送方和接收方通过非对称密钥交换协议(如Diffie-Hellman)建立一个共享的秘密密钥,而不向任何窃听者泄露。

(2)秘密密钥生成:一旦建立了共享的秘密密钥,它将被用作对称密钥,用于后续的加密和解密操作。这个秘密密钥通常是随机生成的,并且对于每个会话都是唯一的。

(3)对称加密:发送方使用共享的秘密密钥,使用快速高效的对称加密算法(如AES)来加密实际数据。这个过程在计算上是高效的,适合加密大量数据。

(4)传输:加密数据随后通过安全通道传输给接收方。

(5)对称解密:接收方使用共享的秘密密钥进行解密,恢复原始明文数据。

四、Integrity

许多提供完整性保证的加密系统都是建立在安全散列函数之上的。这些散列函数可以处理无限量的输入数据,并产生一个固定大小的输出。安全散列函数具有一些保证,例如预像抗性(pre-image resistance),它指的是对手无法根据给定的哈希输出产生对应的输入数据。

预像抗性是指在给定散列值的情况下,找到对应的输入数据是困难的。换句话说,对手无法通过散列值逆推出原始的输入数据。这种性质使得安全散列函数在许多密码学应用中非常有用,例如密码校验、消息认证码(MAC)的生成,以及数字签名等。

目前最流行的安全散列函数是安全散列算法(SHA)。然而,由于SHA-1 [173]存在安全问题,建议新的软件至少使用256位的SHA-2 [21]进行安全散列。

SHA系列是由美国国家安全局(NSA)设计的一组散列函数。SHA-1是该系列中最早被广泛使用的版本,但它已经被证明存在一些安全漏洞。由于这些漏洞,SHA-1在许多安全应用中不再被推荐使用。

为了提高安全性,现在推荐使用SHA-2系列中的256位版本,即SHA-256。SHA-2系列包括了多个散列函数,如SHA-224、SHA-256、SHA-384和SHA-512等。其中,SHA-256是应用最广泛的版本之一,它提供了更高的安全性和较大的散列输出长度。

使用256位SHA-2进行安全散列可以有效地提供更强的数据完整性保护。较长的散列输出长度增加了散列冲突的难度,从而提高了对手找到相同散列值的难度。这使得SHA-256成为当今许多安全协议和应用程序中首选的安全散列函数。

SHA散列函数是一个庞大的区块散列函数家族的成员,它们以固定大小的消息块作为输入,并使用固定大小的内部状态。区块散列函数的使用如下图所示。首先调用INITIALIZE算法将内部状态设置为初始值。对于输入中的每个消息块,执行EXTEND算法。在整个输入被处理完毕后,调用FINALIZE算法从内部状态产生散列输出。
在这里插入图片描述
上图表明了一个区块散列函数操作的是固定大小的消息块,并且使用固定大小的内部状态。

具体流程如下:
(1)初始化(INITIALIZE):首先调用初始化算法,将散列函数的内部状态设置为初始值。这是为了准备接收输入数据并开始处理。

(2)扩展(EXTEND):对于输入的每个消息块,执行扩展算法。扩展算法将消息块与内部状态进行处理,从而更新内部状态。

(3)结束(FINALIZE):在整个输入被处理完毕后,调用结束算法。结束算法根据最终的内部状态生成散列输出。

整个过程可以看作是将输入数据拆分成固定大小的消息块,并对每个消息块进行处理,更新内部状态。当所有消息块都被处理后,根据最终的内部状态生成散列输出。

区块散列函数的特点是操作固定大小的消息块,并使用固定大小的内部状态,从而保证了散列输出的一致性和可比较性。

通过这种方式,SHA散列函数可以处理任意长度的输入数据,并生成固定大小的散列输出。这使得它们在密码学和信息安全领域得到广泛应用,用于数据完整性检查、数字签名、密码哈希等场景。

4.1 symmetric key setting

在对称密钥设置中,使用消息认证码(MAC)密码系统可以获得完整性保证,如下图所示。
在这个过程中,发送方使用一个MAC算法,该算法接收一个对称密钥和一个可变长度的消息作为输入,并生成一个固定长度的短MAC标签。接收方将原始消息、对称密钥和MAC标签提供给MAC验证算法,用于检查消息的真实性。
在这里插入图片描述
上图表明了在对称密钥设置中,通过计算消息认证码(MAC)标签来确保完整性,并将其与消息一起通过网络传输。接收方将MAC标签输入到验证算法中,以检查消息的真实性。

MAC(消息认证码)加密系统的关键特性是,在不知道秘密密钥的情况下,对手无法生成一个有效的MAC标签来验证消息。MAC标签是通过应用特定的算法生成的,该算法接受秘密密钥和消息作为输入。在没有秘密密钥的情况下,对手无法计算出一个有效的MAC标签,以通过验证过程。

许多MAC(消息认证码)加密系统并没有单独的MAC验证算法。相反,接收方通过运行与发送方相同的算法来计算接收到的消息的预期MAC标签,并将输出与从网络接收到的MAC标签进行比较来检查MAC标签的真实性。

这适用于散列消息认证码(HMAC)的通用构造方式,其操作如下图所示。HMAC可以使用任何安全散列函数(例如SHA)来构建MAC加密系统。
在这里插入图片描述
上图表明了在对称密钥设置中,通过计算基于哈希的消息认证码(HMAC)来确保完整性,并将其与消息一起通过网络传输。接收方重新计算HMAC,并将其与从网络接收到的版本进行比较。

4.2 Asymmetric key primitives

提供完整性保证的非对称密钥原语被称为签名(signatures)。消息发送方使用私钥提供给签名算法,并将输出的签名与消息一起传输,如下图所示。消息接收方使用发送方的公钥和签名,输入到签名验证算法中,如果消息匹配签名,则返回TRUE;如果消息被篡改,则返回FALSE。
在这里插入图片描述
上图表明了在非对称密钥设置中,签名方案能够提供完整性保证。签名是使用发送方的私钥创建的,并使用相应的公钥进行验证。通常会使用密码学安全的哈希函数将大型消息缩减为小型哈希值,然后对哈希值进行签名。

发送方的数字签名,不同接收方都可以验证,因为发送方的密钥是公开的。

对于非对称加密:
发送方使用接收方的公钥进行加密,接收方使用自己的密钥解密 – 保证信息的机密性。
加密需要对完整的信息加密,因为接收方在时解密需要还原出完整明文,因此开销较大。
加密 --> 完整的明文。

对于签名:
发送方使用自己的私钥进行签名,接收方使用发送方的公钥进行验证 – 保证信息的完整性。
而签名只需要验证信息的完整性,不需要还原出完整明文,只需要对签名进行解密,比较哈希值即可,开销小。
签名 --> 完整的明文进行哈希运行得到的哈希值。

具体流程如下:
(1)发送方(生成签名):发送方使用自己的私钥作为输入,并使用密码学安全的哈希函数对消息进行哈希运算,生成一个固定长度的哈希值。然后,发送方使用自己的私钥对哈希值进行签名,生成一个签名值。

(2)发送方(传输消息和签名):发送方将消息和生成的签名一起传输到接收方。通常,签名会附加在消息的末尾或者作为单独的字段发送。

(3)接收方(验证签名):接收方使用发送方的公钥和相同的哈希函数对接收到的消息进行哈希运算,生成一个哈希值。然后,接收方使用发送方的公钥对接收到的签名进行验证。验证过程包括对签名进行解密(使用公钥),以及将解密后的结果与哈希值进行比较。如果两者匹配,则认为签名有效,并确认消息的完整性。

通过使用发送方的私钥进行签名和接收方的公钥(这里的公钥是发送方的公钥)进行验证,签名方案提供了一个强大的完整性保护机制。发送方的私钥是私有的,并且只有发送方能够生成正确的签名。接收方的公钥可以被分发给其他人,用于验证签名的有效性。

使用密码学安全的哈希函数对消息进行哈希运算的目的是将大型消息缩减为固定长度的哈希值。这样做有两个主要好处:一是减小了签名的大小,节省了传输带宽;二是提供了对消息的完整性保护,即使消息很大,只需验证哈希值即可。

签名算法在处理大型消息时可能会具有较高的计算成本。因此,在实践中,通常会先将要传输的消息通过一个密码学强度的哈希函数进行处理,然后将哈希值作为输入提供给签名算法。

具体过程如下:
(1)消息哈希:要传输的消息首先通过密码学强度的哈希函数进行处理,例如SHA-256或SHA-3。这个哈希函数将整个消息作为输入,并生成一个固定长度的哈希值作为输出。

(2)签名:签名算法不再直接对整个消息进行签名,而是采用前一步生成的哈希值作为输入。签名算法使用发送方的私钥基于哈希值生成签名。

(3)传输:原始消息与生成的签名一起传输。接收方需要访问与发送方相同的哈希函数,以重新生成用于验证的哈希值。

(4)验证:接收方在接收到消息和签名后,使用相同的哈希函数对接收到的消息进行哈希处理,生成一个哈希值。然后,接收方使用发送方的公钥和接收到的签名来验证消息的完整性。验证算法检查计算得到的哈希值是否与使用公钥从签名中获得的哈希值匹配。如果匹配,则表示签名有效,消息被认为是真实且未被篡改的。

通过在签名之前使用哈希函数,可以减少签名算法的计算开销,因为它只需处理固定长度的哈希值,而不是整个消息。此外,哈希函数具有将任意大小的消息缩减为固定长度值的特性,使得处理和传输更加高效。

这种方法还提供了安全性的好处,因为哈希函数被设计为单向函数,即仅通过哈希值无法计算出原始消息。这确保了原始消息的完整性,因为对消息的任何修改都会导致不同的哈希值。

总之,在签名之前使用密码学强度的哈希函数对消息进行预处理是一种实用的方法,可在处理大型消息时高效地保持签名过程的完整性和安全性。

签名只能保证信息的完整性不能保证信息的机密性。

对于签名请参考:https://zhuanlan.zhihu.com/p/588777811

4.3 其他

(1)
在共享密钥设置中,为了保证完整性,目前最流行的选择是使用HMAC-SHA,这是一种使用SHA进行哈希的HMAC函数。同时,认证加密是一种结合了块密码和提供机密性和完整性保证的操作模式,通常是HMAC的一个有吸引力的替代方案。最常用的认证加密操作模式是Galois/Counter模式(GCM),当与AES结合形成AES-GCM时,该模式已经获得了NIST的推荐。

(2)
最流行的签名方案结合了RSA加密算法和PKCS #1中指定的填充方案,如下图所示。最近,椭圆曲线密码学(ECC)因其较小的密钥大小而变得越来越受欢迎。例如,384位的ECC密钥被认为与3072位的RSA密钥一样安全。美国国家安全局要求使用数字签名标准(DSS),该标准指定了基于RSA和ECC的方案。
在这里插入图片描述
使用在RFC 3447中指定的PKCS #1 v1.5填充的RSA签名方案结合了多个组件来生成签名。以下是该过程的详细说明:

(1)消息的安全哈希:首先,对需要签名的消息应用安全哈希函数(如SHA-256)。这将产生一个固定长度的哈希值,代表消息的内容,并确保其完整性。

(2)DER编码的哈希算法规范:接下来,使用Distinguished Encoding Rules(DER)格式指定在步骤1中使用的哈希算法。此规范与签名一起进行编码,以指示用于哈希的算法。

(3)填充字符串:生成一个填充字符串,其中的位都设置为1。填充字符串的长度取决于RSA模数的长度。填充字符串用于确保与RSA加密算法的兼容性。

(4)拼接和编码:将迄今为止获得的组件(DER编码的哈希算法规范、填充字符串和安全哈希输出)连接在一起。然后,使用PKCS #1 v1.5编码规则对此连接进行编码。

(4)RSA签名生成:使用签名者的私钥和RSA算法对步骤4中的编码数据进行加密。这个过程生成RSA签名,它是对签名消息的数学表示。

五、Freshness

Freshness保证通常是在已经提供完整性保证的系统之上构建的,通过向每条消息添加唯一的信息。 freshness方案的主要挑战在于在发送方经济地维护生成唯一信息所需的状态,并在接收方验证其唯一性。

获得 freshness保证的一种常见解决方案依赖于单次使用的随机数,即nonce。Nonce非常有吸引力,因为发送方不需要维护任何状态;然而,接收方必须存储所有接收到的消息的nonce。

通过在每条消息中包含nonce,发送方可以确保每条消息的唯一性。接收方在接收到消息时,需要检查该消息的nonce是否已经在先前接收到的消息中出现过,以验证消息的 freshness。

(1)
Nonce通常与消息的时间戳和过期方案结合使用,如下图所示。过期时间可以大大减少接收方的存储需求,因为过期消息的nonce可以安全地丢弃。然而,该方案依赖于发送方和接收方拥有同步的时钟。消息的过期时间是在降低存储成本的愿望与容忍时钟偏差以及消息传输和处理延迟之间的权衡。
在这里插入图片描述
在这种方案中,每条消息都包含一个nonce和时间戳。接收方在接收到消息时,首先检查nonce是否已经被使用过,然后检查时间戳是否在有效范围内。如果nonce已经被使用过或时间戳超过了有效范围,接收方可以安全地丢弃该消息。

为了实现 freshness保证,可以在已经提供完整性保证的系统之上添加带有时间戳的nonce。发送方和接收方使用同步的时钟为每条消息添加时间戳,并丢弃过于陈旧的消息。接收方需要将每条新消息中的nonce与其所见到的所有未过期消息的nonce进行对比。

具体而言,发送方在每条消息中添加一个带有时间戳的nonce,并将其发送给接收方。接收方在接收到消息时,首先检查时间戳是否合理,即消息是否过于陈旧。如果时间戳超过了合理的范围,接收方可以安全地丢弃该消息。然后,接收方将接收到的nonce与其维护的非过期消息的nonce数据库进行比对。如果接收到的nonce已经在数据库中存在,那么这条消息可能是重复的或者存在问题,接收方可以相应地处理。

通过使用时间戳和nonce的组合,发送方和接收方可以在已有的完整性保证之上获得 freshness保证。发送方使用时间戳和nonce确保每条消息具有唯一性和时间戳信息,而接收方利用时间戳和nonce对消息进行验证和去重。

(2)
另一种使用nonce的方法是在挑战-响应协议中使用,以消除存储开销方面的顾虑。挑战者生成一个nonce并将其嵌入到挑战消息中。对挑战的响应包括对嵌入的nonce的确认,这样挑战者可以区分新鲜的响应和重放攻击。nonce只由挑战者存储,并且与验证响应所需的其余状态相比较小。

在这种方案中,挑战者生成一个唯一的nonce,并将其作为挑战的一部分发送给响应者。响应者在回应挑战时包含嵌入的nonce的确认。挑战者接收到响应后,通过检查响应中的nonce和其自身存储的nonce进行比对,从而验证响应的新鲜性。

这种方案的优势在于,nonce只需要由挑战者存储,而不需要响应者存储任何状态。相比于其他用于验证响应的状态,nonce的存储开销较小。

总结而言,通过在挑战-响应协议中使用nonce,可以消除关于存储开销的顾虑。挑战者生成nonce并将其嵌入到挑战消息中,响应者在响应中确认nonce。这种方法使挑战者能够区分新鲜的响应和重放攻击,同时只需要在挑战者一侧存储nonce,而不需要在响应者一侧存储任何状态。

参考资料

https://www.zhihu.com/column/c_1446239480876929024

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

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

相关文章

亲测表白网制作源码,在线制作表白,无数据库上传就能用

在线制作表白网源码 没有数据库上传就能用 后台/admin 账号密码都是admin

Android低功耗蓝牙开发总结

基础使用 权限申请 蓝牙权限在各个版本中略有不同 Android 12 及以上版本,如果不需要通过蓝牙来推断位置的话,蓝牙扫描不需要开启位置权Android 11 及以下版本,蓝牙扫描必须开启位置权限Android 9 及以下版本,蓝牙扫描可开启粗…

Windows BAT脚本 | 定时关机程序

使用说明:输入数字,实现一定时间后自动关机。 单位小时,用后缀 h 或 H。示例 1h 单位分钟,用后缀 m 或 M 或 min。示例 30min 单位秒。用后缀 s 或不用后缀。示例 100s 源码 及 配置方法 桌面新建文本文件,输入下面…

在云服务器ECS上用Python写一个搜索引擎

在云服务器ECS上用Python写一个搜索引擎 一、场景介绍二、搜索引擎的组成2.1 网页的爬取及排序2.2 用户使用搜索引擎进行搜索 三、操作步骤3.1 环境准备3.2 安装Anaconda3.3 安装Streamlit3.4 下载搜索引擎代码3.5 运行搜索引擎 四、常见问题4.1 运行setup.py时可能的问题4.2 如…

java实验室预约管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java servlet 实验室预约管理系统是一套完善的java web信息管理系统 系统采用serlvetdaobean(mvc模式),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数 据库,系统主要采用B/S模式开发。开发环境为T…

图像分割实战-系列教程11:U2NET显著性检测实战3

🍁🍁🍁图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 U2NET显著性检测实战1 U2NET显著性检测实战2 U2NET显著性检测实战3 6、上采样操作与REBNCONV def…

Python基础知识总结1-Python基础概念搞定这一篇就够了

时隔多年不用忘却了很多,再次进行python的汇总总结。好记性不如烂笔头! PYTHON基础 Python简介python是什么?Python特点Python应用场景Python版本和兼容问题解决方案python程序基本格式 Python程序的构成代码的组织和缩进使用\行连接符 对象…

安装阿里云CLI之配置阿里云凭证信息

有时候需要再主机上通过 OpenAPI 的调用访问阿里云,并完成控制,此时就需要在服务器上安装阿里云CLI,并完成账号的设置。 1. 登录阿里云创建账号 1.1 点击阿里云头像 ——》 控制访问 ——》创建一个拥有DNS权限的用户 这个用户不用太多权限…

QT翻金币

QT翻金币 在B站跟着视频进行QT学习&#xff0c;现把代码全部贴上来&#xff0c;备忘 整体解决方案文件结构如下&#xff1a; chooselevelscene.h #ifndef CHOOSELEVELSCENE_H #define CHOOSELEVELSCENE_H#include <QMainWindow> #include"playscene.h"class…

wordpress个人博客/杂志主题Pin Premium

Pin Premium WordPress主题是针对博主的时尚且自适应的Pinterest风格主题。使用HTML5和CSS3技术创建&#xff0c;带有有效代码(两个演示)&#xff0c;完全响应&#xff0c;在所有移动设备上看起来完美&#xff0c;可在任何设备和 PC 上轻松使用。 响应式设计针对平板电脑和智能…

YOLOv8改进 | 损失篇 | VarifocalLoss密集目标检测专用损失函数 (VFLoss,原论文一比一复现)

一、本文介绍 本文给大家带来的是损失函数改进VFLoss损失函数,VFL是一种为密集目标检测器训练预测IoU-aware Classification Scores(IACS)的损失函数,我经过官方的版本将其集成在我们的YOLOv8的损失函数使用上,其中有很多使用的小细节(否则按照官方的版本使用根本拟合不了…

【算法】链表-20240105

这里写目录标题 一、LCR 023. 相交链表二、142. 环形链表 II 一、LCR 023. 相交链表 给定两个单链表的头节点 headA 和 headB &#xff0c;请找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 提示&#xff1a; listA 中节点数目为 m list…

48种国内外的PCB设计工具-你知道的有哪几种呢?

针对强迫症&#xff0c;非要使用最好最全的工具&#xff1b;针对死较真&#xff0c;认为自己的工具最好用&#xff1b; 工具只是工具&#xff0c;思想最重要&#xff01; 自记录&#xff1a; 无论我们设计什么样的项目&#xff0c;电子工程师都必须知道电路应该如何布局以及…

windows通过ssh连接Liunx服务器并实现上传下载文件

连接ssh 输入&#xff1a;ssh空格用户名ip地址&#xff0c;然后按Enter 有可能出现下图提示&#xff0c;输入yes 回车即可 输入 password &#xff0c;注意密码是不显示的&#xff0c;输入完&#xff0c;再按回车就行了 以上是端口默认22情况下ssh连接&#xff0c;有些公司它…

C#,归并排序算法(Merge Sort Algorithm)的源代码及数据可视化

归并排序 归并算法采用非常经典的分治策略&#xff0c;每次把序列分成n/2的长度&#xff0c;将问题分解成小问题&#xff0c;由复杂变简单。 因为使用了递归算法&#xff0c;不能用于大数据的排序。 核心代码&#xff1a; using System; using System.Text; using System.Co…

nginx下日志配置和排查错误

目录 一&#xff1a;配置 二&#xff1a;排查日志 一&#xff1a;配置 在Nginx中&#xff0c;日志配置是记录服务器活动和排查问题的重要环节。以下是一些常见的Nginx日志配置选项&#xff1a; 日志级别&#xff1a;通过设置日志级别&#xff0c;可以控制日志的详细程度。常…

Java学习笔记(四)——正则表达式

文章目录 正则表达式基本规则字符类(只匹配一个字符)预定义字符(只匹配一个字符)数量词练习正则表达式插件 爬虫利用正则表达式获取想要的内容爬取网络信息练习有条件的爬取贪婪爬取非贪婪爬取正则表达式在字符串中的使用 分组捕获分组正则表达式外部使用非捕获分组正则表达式忽…

fmincon函数求解非线性超越方程的学习记录

最近的算法中用到了fmincon函数&#xff0c;寻找多变量非线性方程最小值的函数&#xff1b;因此学习一下&#xff1b; fmincon函数的基础语法如下所示&#xff1a; fmincon函数是为了求解下列方程的最小值&#xff1b; b 和 beq 是向量&#xff0c;A 和 Aeq 是矩阵&#xff0c…

CentOS 7.6下的HTTP隧道代理配置详解

在CentOS 7.6操作系统中&#xff0c;配置HTTP隧道代理需要一定的技术知识和经验。下面我们将详细介绍如何配置HTTP隧道代理&#xff0c;以确保网络通信的安全性和稳定性。 首先&#xff0c;我们需要了解HTTP隧道代理的基本原理。HTTP隧道代理是一种通过HTTP协议传输其他协议数…

STM32F103C8T6制作简易示波器

1设计需求 通过stm32f103c8t6实现一个简易示波器功能&#xff0c;该示波器可以检测0-3.6khz频率范围内的波形。 也可以输出波形&#xff0c;输出方波、三角波、正弦波。 2技术方案 通过stm32的ADC功能&#xff0c;采集输入信号&#xff0c;最后由oled屏进行显示。 采样频率…
最新文章