世界
网络和加密库,具有不可否认的区块链风格

  区块链是目前信息和通信技术行业讨论最广泛的发明之一。它是第四次工业革命的支柱,是一种对密码学要求很高的技术,被认为是学术界最有影响力的话题之一。许多区块链平台目前使用第三方加密库,这些库提供了许多加密原语,以确保用户免受网络攻击。Networking and Cryptography库(NaCl)是一个用于加密原语的开源库。众所周知,NaCl是提供可用性属性的最佳库之一。虽然NaCl具有使用方便、保密性、完整性和真实性等优点,但无法提供不可否认服务。本文提出了对区块链平台的改进,通过增强NaCl库来实现不可抵赖性,从而提高了所实现区块链平台的安全级别。在NaCl中,为了提供上述安全服务,需要对消息进行签名和加密。因此,不提供不可否认服务。在本文中,提出的解决方案是基于添加签名块来启用不可否认属性。首先,利用BAN逻辑对NaCl库进行逻辑分析,证明其不具备不可否认性。随后,提出了对库的修改,并使用BAN逻辑证明了所提出解决方案的正确性。分析表明,提出的解决方案解决了上述问题。

  自2008年比特币问世以来[1],区块链的概念(可以追溯到20世纪70年代[2])被许多开发人员用来为他们的应用程序提供解决方案。区块链技术和加密货币由于部署了可由用户选择的算法(“自带算法”概念),引发了与保障用户隐私和安全保护相关的担忧。区块链是一种将交易存储在块中的公共分类账,其特点是不变性、去中心化、匿名性和可审计性[3]。数据存储在区块链中,其中每个区块通过其散列链接到前一个区块。网络节点(矿工)负责计算哈希值[4]。区块链块被分发给所有用户,从而导致块的不变性。这是因为要更改任何块,都必须执行大量的计算。此外,共识过程是在没有第三方干预的情况下以分散和分布式的方式进行的。为了保证数据的完整性,区块链使用了非对称加密、数字签名、哈希函数等加密算法。此外,加密技术提供了跟踪交易和确保数据机密性的能力[3]。区块链存在以下三代:区块链1.0、区块链2.0和区块链3.0。然而,新一代区块链4.0目前正在开发中[5]。区块链1.0主要关注加密货币应用,而区块链2.0则关注整个市场和经济;它不仅存储交易,还存储智能合约和应用程序;这种类型的应用程序的一个例子是以太坊。区块链3.0被认为是区块链2.0的演进,将区块链技术扩展到艺术、健康、科学和政府等领域的更多应用。最近在区块链4.0中引入了人工智能,以提高共识效率、可扩展性和能源效率,并将区块链技术融入现实环境。区块链被用于许多应用,如银行、金融交易、供应链管理、医疗保健和教育。这些应用程序的安全需求包括机密性、完整性和身份验证。机密性通过对敏感信息进行加密来实现。另一方面,身份验证是通过数字签名实现的。完整性通过两种机制得到保证。第一个是包含前一个块的哈希值,第二个是计算所有块事务的根哈希值。大多数区块链平台使用第三方加密解决方案[6]。其中一种解决方案是网络和加密库(networking and cryptography library, NaCl)[7],它是一个用于网络通信、加密、解密和签名的公共领域库。NaCl(发音为“salt”)及其分支(即LibSodium)提供了用于知名区块链平台(例如Apache Tuweni, Duniter, Tezos),加密货币(例如Zcash)和加密货币钱包(例如SilentDragon, SilentDragonLite)的加密算法。NaCl是氯化钠的化学缩写,俗称盐,是化学式为NaCl的离子化合物。加密算法旨在提供以下四种众所周知的安全服务:机密性、真实性、完整性和不可抵赖性。如[7]所述,NaCl库保证了保密性和完整性;但是,它不提供不可否认性,这被认为是身份验证服务。不可抵赖性是必须满足的主要安全要求,特别是在发生争议的情况下。本文针对NaCl库的上述缺点提出了一种解决方案。在NaCl中,为了提供上述安全服务,需要对消息进行签名和加密。因此,不提供不可否认服务。在本文中,为了解决这个问题,增加了另一个签名块。此外,使用Burrows, Abadi和Needham (BAN)逻辑对NaCl库和提出的改进进行了安全性分析[8,9]。分析表明,所提出的修改解决了这个问题。本文的主要贡献可以概括如下:

  检查区块链应用程序中使用了哪些安全库。

  使用BAN逻辑分析NaCl库。分析表明,NaCl库具有以下主要缺点,即无法提供不可否认的安全服务。

  针对这一问题提出了解决方案,并运用BAN逻辑进行了分析。

  本文的其余部分组织如下。下一节提供不同安全库的文献综述。随后,对NaCl库进行了描述,并使用BAN逻辑进行了安全性分析。然后在第3节中使用(BAN)逻辑详细描述和分析所提出的解决方案。在第4节中,说明了性能分析。最后一部分是对本论文的总结。

  本节简要介绍现代应用程序中使用的不同加密库。然后,对NaCl库模块进行了详细的描述。随后,它提出了使用BAN逻辑的库和安全性分析的批评。

  区块链是一种不可变的分布式数字账本,它基于加密算法提供安全性,并使用共识机制就交易日志达成一致[10]。加密库用于执行在使用区块链技术时提供信任所需的加密操作。以下是文献中使用的加密库的示例:wolfCrypt[11],一个用于对称和非对称算法的嵌入式库,Cifra[12],主要用于实现对称算法,TinyCrypt[13]和micro-ecc (uECC) [14], Crypto-JS[15]和Relic[16],其中包含对称和非对称加密方案,特别支持许多椭圆曲线。一个名为Bouncy Castle的轻量级加密库基于TLS (RFC 2246, RFC 4346)和DTLS (RFC 6347/ RFC 4347)的轻量级api[17]。文献[18]对区块链中用于加密操作的加密库进行了比较。区块链网络中使用的库如下:PBC库[19]、Crypto++库[20]、MIRACL库[21]和Hyperledger Ursa[22]。

  Researchers have explained that the usability and misuse resistance of application programming interface (API) implementations are critical for practical cryptographic library deployments. Many solid API design guides provide developers with the required knowledge to develop usable and misuse-resistant cryptographic implementations. In the OpenSSL cryptographic library [23], users cannot modify their APIs design because of the backward compatibility issue. Few cryptographic libraries consider fundamental usability. However, more recent libraries, such as the Networking and Cryptography library (NaCl) and its forks, provide high levels of usability and misuse-resistance features of APIs [24, 25]. Improving the usability of API is a fundamental objective of the NaCl library. The NaCl library focuses on the most significant use-cases and manipulates use-cases that are not complex in high-level API. The NaCl cryptographic library and its forks, such as libsodium, are distinguished based on their user-oriented viewpoint and concentration on usability features. Cryptographic researchers and software developers have elaborated on the features of cryptographic libraries (e.g., the usability and misuse resistance of API designs) and their importance, which encompasses making cryptographic libraries bug-free codes. Recent libraries such as NaCl and its forks (i.e., libsodium, sodiumoxide, rust_sodium, PyNaCl, TweetNaCl, PySodium, and Keyczar) offer robust concentrations for achieving a high level of usability and misuse-resistant features of APIs design [26, 27]. The Keyczar cryptographic library allows developers to safely and easily use cryptography. The PyNaCl library binds to the NaCl library using Python. Moreover, PyNaCl was considered to be the libsodium interface using Python. Furthermore, sodium is a potential replacement for PyNaCl. NaCl and its forks are cryptographic libraries that are designed and implemented with a focus on usability (these libraries do not require the designer/developer to select cryptographic details). These libraries provide secure asymmetric and symmetric APIs. The NaCl cryptographic library and its forks (i.e., TweetNaCl and libsodium APIs) were used in the implementation of post-quantum cryptographic algorithms [28]. NaCl and its forks (i.e. LibSodium [29, 30]) provide cryptographic algorithms that are utilized in well-known blockchain platforms (e.g. Apache Tuweni [31], Duniter [32], Tezos [33]), cryptocurrencies (e.g. Zcash [34]), and cryptocoin wallets (e.g. SilentDragon [35], SilentDragonLite). In what follows, we elaborate on some blockchain platforms, cryptocurrencies, and cryptocoin wallets that deploy a fork of the NaCl cryptographic library (i.e. LibSodium). Apache Tuweni [31] is a blockchain platform that consists of a set of libraries (e.g. LibSodium which is a fork of the NaCl cryptographic library), tools that help in the development of blockchain, and decentralized software built in Java and other Java Virtual Machine (JVM) languages (e.g. Java, Kotlin, Scala, Groovy, Clojure, Fantom, Ceylon, Jython, JRuby, Frege, Xtend, Golo, Concurnaas, Yeti.) The Ethereum Virtual Machine (EVM) is implemented using Kotlin code. Duniter [32] (originally uCoin) is a blockchain platform that deploys a fork of the NaCl cryptographic library (i.e. LibSodium). It is a free software that enables users to create a new type of P2P crypto-currency using individuals and universal dividends. The Duniter network is decentralized. It uses blockchain to synchronize the state of money across nodes. In contrast to Bitcoin, Duniter has no power race. In Bitcoin, because of the CPU race, power is provided to those who own more computing power. Duniter is democratic; because every user is identified as a unique human, they can write in the blockchain in turns. When a member writes data in the blockchain, he must wait before being able to write again. This ensures that the blockchain does not end in the hand of a few users and that it does not burn too much energy. To identify users, Duniter chooses a self-regulated system by its members. This is known as the Web of Trust (WoT). Each member can certify new users. When a user receives sufficient certifications, and is not too far away from the existing members in the web of trust, he becomes a member. Bitcoin's blockchain mechanism is important for two main reasons: synchronization and security. Duniter’s blockchain thus benefit from these two features. However, Duniter's blockchain is slightly different: it does not only store transactions, but also stores community activity in order to define the WoT. It also has a different Proof-of-Work (PoW) mechanism that is made possible by the WoT definition, providing a much more energy-efficient mechanism in order to compute the blockchain. Tezos [33] is an open-source blockchain platform that deploys a fork of the NaCl cryptographic library (i.e. LibSodium) and executes peer-to-peer transactions and serve as a platform for deploying smart contracts. The native cryptocurrency for the Tezos blockchain is the Tez (ISO 4217: XTZ; sign: ?). The Tezos network achieves consensus using proof-of-stake. Tezos uses an on-chain governance model that enables the protocol to be amended (when upgraded proposals receive a favorable vote from the community.) Its testnet was launched in June 2018, and its main net went live in September 2018. Tezos, which was first proposed in 2014, was created by Arthur and Kathleen Breitman. Zcash [34] is a cryptocurrency aimed at using cryptography (i.e. deploy a fork of the NaCl cryptographic library (i.e. LibSodium)) to provide enhanced privacy for its users compared to other cryptocurrencies such as Bitcoin. Zcash is based on Bitcoin's codebase. It shares many similarities, such as, a fixed total supply of 21 million units. Transactions can be "transparent" and similar to bitcoin transactions. Zcash affords private transactors, the option of "selective disclosure". This allows a user to prove payment for auditing purposes. One reason to allow private transactors is to comply with anti-money laundering or tax regulations. "Transactions are auditable but disclosure is under the participant's control. While miners receive 80% of a block reward, 20% is given to the "Zcash development fund": 8% to Zcash Open Major Grants, 7% to Electric Coin Co., and 5% to The Zcash Foundation. Silent Dragon (SD) [35] is a compatible wallet (that deploy a fork of the NaCl cryptographic library (i.e. LibSodium)) and a full node that runs on Linux, Windows, and macOS for HUSH. HUSH is the cryptocurrency of the Hush platform. SD is a one-stop solution that offers high-speed messaging and transactions. The next subsection briefly describes the NaCl library.

  NaCl库首次发布于2008年。第一个版本的NaCl发布于2009年。随后,该库经历了几次增强,例如同时包含c++ NaCl API和数字签名。最新版本的NaCl库于2017年发布。NaCl库旨在保证高保密性、完整性和可用性[7],如图1所示。仅对报文内容提供机密性。因此,用户必须在其系统中集成反流量分析工具,以隐藏数据包长度和时间。该库由六个主要函数组成:crypto_box、crypto_box_open、crypto_box_keypair、crypto_sign、crypto_sign_open和crypto_sign_keypair。以下各段提供这些功能的说明。

  图1

  figure 1

  NaCl库结构

  crypto_box:该函数提供公钥认证加密。第一步是使用发送方的秘钥“sk1”对消息“m”进行签名。此步骤提供了真实性和完整性。然后使用接收方的公钥“pk2”对签名后的消息进行加密,生成密文“c”。此步骤提供了保密性。为了确保消息的新鲜度,使用了nonce“n”。下式表示加密函数。

  (1)

  函数输入由发送方的秘密密钥sk1、接收方的公钥pk2、普通数据包m和随机数n组成,并输出经过身份验证的密文c。crypto_box函数自动处理所有必要的转换和初始化。

  crypto_box_open:接收到消息后,接收方使用其秘密密钥“sk2”解密签名。然后使用发送方的公钥“pk1”对消息进行认证,如下面的函数所示:

  (2)

  函数输入由发送方的公钥pk1、接收方的秘密密钥sk2、密文c和随机数n组成,并输出明文m。crypto_box函数自动处理所有必要的转换和初始化。

  crypto_box_keypair:用于生成公钥。它将秘钥(sk)作为输入,并输出公钥(pk),如下所示。

  (3)

  crypto_sign:在某些情况下,不需要保密性。例如,发送者可以向许多人广播一条消息。因此,库只需要公钥签名。发送方使用其密钥“sk”对消息“m”进行签名,生成签名“sm”,如下所示:

  (4)

  crypto_sign_open:接收方收到消息后,使用发送方的公钥“pk”和签名“sm”对消息进行验证,如下所示:

  (5)

  crypto_sign_keypair:作为crypto_box_keypair工作,用于生成公钥对。它将秘钥(sk)作为输入,并输出公钥(pk),如下所示。

  (6)

  关于NaCl的更多信息,读者可以参考文献[36,37],关于区块链技术的更多信息,读者可以参考文献[38,39,40,41,42]。如[7]所述,库不提供不可否认性,这是身份验证的主要要求。因此,下一节将介绍解决此问题的解决方案。

  下面介绍了一种基于NaCl的场景攻击,并使用BAN逻辑进行了安全分析。首先,场景攻击描述如下。假设Alice用Alice的秘钥“skalice”对消息“M”进行签名,然后用Bob的公钥“pkBob”对消息进行加密后,将消息“M”发送给Bob。发送给Bob的消息如下:

  (7)

  收到消息后,Bob使用他的私钥和Alice的公钥解密消息。但是,Bob可以使用Eve的公钥重新加密签名部分,生成要发送给Eve的密文:

  (8)

  最后,Bob将密文发送给Eve,就好像它来自Alice。这表示违反了不可否认属性。为了确认这种场景威胁,我们将BAN逻辑应用到NaCl库中进行分析。

  NaCl通常用于区块链应用程序。认证协议是区块链的基本组成部分,有必要确保这些协议的正确性。BAN逻辑使用逻辑定义认证协议。他们以完美的形式将每条消息转换成逻辑描述。为了有效地确认正确性,发送方(签名者)和接收方(验证者)的确定性(信念)应该满足程序目标。他们假设,如果有一条消息“X”,并且接收者Bob确信它是由发送者Alice发送的,那么身份验证的验证步骤就在签名者Alice和接收者Bob之间完成了。因此,如果Bob Alice X和Bob X表示相信(或被说服),那么Alice和Bob之间的认证过程就完成了[8]。BAN逻辑的基本规则如下:

  解释规则

  (9)

  这条规则指出,如果Bob相信(被协议说服)Alice生成了一条同时包含X和Y的消息,他相信Alice生成的每条消息都是明确的。

  消息含义

  (10)

  这条规则指出,如果Bob相信(被协议说服)QAlice是Alice的公钥,并且Bob获得了一条由Alice的秘钥SAlice签名的语句X,这表明Bob相信Alice曾经生成过X。

  Nonce校验规则

  (11)

  这条规则指出,如果Bob相信(被协议说服)X是一个新的语句,并且Alice曾经生成过X,那么它相信Alice相信X。

  管辖规则

  (12)

  这条规则指出,如果Bob相信(被协议说服)Alice对X有管辖权(权威),并且Bob相信Alice相信X, Bob相信X。

  新鲜的规则

  (13)

  该规则指出,如果Bob相信(被协议说服)X和Y的新鲜度,他就相信每条消息的新鲜度。本研究假设语句在发送方Alice和接收方Bob之间传输。

  如果满足以下目标,则Alice和Bob之间的身份验证就完成了:

  (14) (15)

  其中Mi表示Alice发送的语句

  Alice首先使用加密密钥对语句(消息)“Mi”签名。然后使用Bob的加密公钥对结果进行加密,以生成“C1”。

  Alice将C1={{{Mi, n}skea}pkeb发送给Bob,其中n是Alice产生的随机数。

  通过以下假设完成分析:

  (17) (18) (19) (20) (21) (22)

  由式(16)可知,Alice确信pkeb是加密的公钥。由式(17)可知,Alice确信pkea是加密的公钥。式(18)表明Bob确信pkeb是他的加密公钥;式(19)表明Bob确信pkea是Alice的加密公钥。随后,Eq.(20)表明Bob确信Alice对发送的语句(消息)具有(权威)管辖权。最后,方程式。(21)和(22)表明Alice和Bob确信“n”是新鲜的(n改变了每条消息)。根据这些假设,在初始阶段传输的消息被转换为逻辑描述。最后,将BAN逻辑的基本规则应用到逻辑公式中。有关BAN逻辑的更多信息,请参见[8,9]。使用消息C1={{{Mi,n}skea}pkeb, Eq.(19)和消息含义规则(Eq. (10)):

  (23)

  然而,Alice和Bob确信n是新鲜的(等式)。(21)和(22))。因此,应用nonce验证规则(Eq. 11),可得:

  (24)

  根据Eq.(20)的管辖规则(Eq.(12)),可以得到如下结果:

  (25)

  以上分析假设Bob是诚实的。然而,如前所述,Bob可以对Alice签名的部分重新加密以生成C2 (Eq.(8))。在逻辑分析中,我们做了以下假设:

  (27) (28) (29)

  使用消息C2={{{Mi,n}skea}pkEve, Eq.(26)和消息含义规则(Eq. (10)):

  (30)

  然而,爱丽丝和夏娃确信n是新鲜的(等式)。(28)和(29))。因此,应用nonce验证规则(Eq. 11),可得:

  (31)

  根据Eq.(27)的管辖规则(Eq.(12)),得到如下结果:

  (32)

  最终的目标不应该是由Alice实现的。因此,在发生争议的情况下,Alice否认向Eve发送了这条消息。上述攻击被认为是对身份验证服务的侵犯,特别是对不可否认服务的侵犯。在下一节中,将详细描述提议的修改,以减轻上述安全攻击。

  摘要

  1 介绍

  2 文献综述

  3.建议对NaCl库进行修改

  4 性能分析

  5 有限公司

  结论及未来工作

  参考文献

  作者信息

  道德声明

  搜索

  导航

  #####

  在提议的修改中,主要关注的是crypto_box和crypto_box_open函数。如[7]所述,NaCl库不能实现不可抵赖性;因此,这些函数必须是固定的。为了避免前一节所述的攻击,对加密后的消息进行签名。因此,Alice发送以下消息给Bob: {{{M}skalice}pkBob} skalice。如图2所示。

  图2

  figure 2

  对NaCl库的修改建议

  在以下小节中,将详细描述拟议的修改,然后进行BAN逻辑分析。

  提出的解决方案由三个模块组成:gen_keypairs、crypto_authenc_sign和crypto_dec_ver。

  gen_keypairs用于为Bob生成公钥和私钥,用于验证从Alice接收到的消息。此外,它还用于为Alice生成两个密钥对。第一个密钥对用于签名,第二个密钥对用于加密。使用单独的密钥对进行签名和加密的原因是为了提供更高的安全性。当私钥被泄露用于加密时,攻击者可以解密传输的消息,但不能将其用于签名。首先,genkeypairs使用NaCl库中的crypto_sign_keypair生成Alice的签名密钥对。然后,它使用NaCl库中的crypto_box_keypair生成用于加密的Alice密钥对。最后一步是生成用于加密的Bob密钥对。这个函数的伪代码(gen_keypairs)如图3所示。gen_keypair的流程图如图4所示。

  图3

  figure 3

  gen_keypairs函数的伪代码

  图4

  figure 4

  gen_keypairs函数流程图

  图3中,pksa为Alice签名的公钥,sksa为Alice签名的私钥,pkea为Alice加密的公钥,skea为Alice加密的私钥,pkeb为Bob加密的公钥,skeb为Bob加密的私钥。

  Crypto_authenc_sign用于在发送方执行加密操作。首先,发送方(Alice)使用她的加密密钥“skea”对消息“M”进行签名,然后使用接收方(Bob)的加密公钥“pkeb”对输出进行加密,生成输出密文“c”。这是使用NaCl库中的crypto_box执行的。为了提供不可否认性,执行第二步。在这一步中,Alice使用其秘密签名密钥“sksa”对输出的密文进行签名以生成“sm”。这是使用NaCl库的crypto_sign函数执行的。这个函数的伪代码(crypto_auth_sign)如图5所示。

  Crypto_dec_ver用于在接收端执行加密操作。首先,接收方(Bob)使用Alice签名的公钥“pksa”验证Alice的签名。这是使用NaCl库的crypto_sign_open函数执行的。为了检索M, Bob使用其加密密钥“skeb”对输出进行解密,然后使用Alice的加密公钥“pkea”验证Alice的签名。这是使用NaCl库的crypto_box_open函数执行的。这个函数(crypto_dec_ver)的伪代码如图6所示。crypto_authen_sign和crypto_dec_ver函数的流程图如图7和图8所示。

  图5

  figure 5

  crypto_authenc_sign函数的伪代码

  图6

  figure 6

  crypto_dec_ver函数的伪代码

  图7

  figure 7

  crypto_authenc_sign函数流程图

  图8

  figure 8

  crypto_dec_ver函数流程图

  修改后的NaCl库使用C编程语言和NaCl库实现。图9所示的代码用于计算发送方(Alice)的秘钥和公钥,用于加密和签名。此外,它还生成接收者(Bob)的密钥和公钥进行加密。程序输出如下:

  图9

  figure 9

  用于实现gen_keypairs函数的C代码

  步骤1(图4):Alice的加密密钥:

  0 x7b, 0 x31 0 x5b 0 x94, 0 xfc 0 xa6 0 x66 0 x85, 0 x15 0 x3d 0 xb1 0 x5b 0 x58 0 x89 0 . xc6 0 xa6 0 xc 0 xa4 0 xef 0 x5e 0×,0 xb1 0 xc7 0 xe0 0 x78 0 xd1 0 xd2 0 xd4 0 x52, 0 (0 xa2 0 x46

  Alice的加密公钥:

  0 xd4, 0 x12 0 x0d 0 x05, 0 x52 0 x6d 0 x68 0 xe4 0 xb5 0 xb1 0 xe6 0 x8a 0 x9e 0 x65 0 x76 0 x17, 0×50 0 xb4 0 x1d 0 x46 0 xa9 0 x10, 0 xb8 0 xc7 0 x15 0 x0c 0 x9e 0 xd8 0 xdd 0中,0 xef 0 x00

  步骤2(图4):Alice的签名公钥:

  0 x9c, 0 x75 0 xd8 0 xb9, 0 xbe 0 x75 0 xf9 0 x5e 0 x91 0 xcd 0 x2d 0 x9b 0 x12 0 xc8 0 x54 0 xc7 0 x30 0 x77 0 xb8 0 x6f 0 x9f 0 xca 0 x8f 0 xf3 0 x05 0 xe6 0 x54 0 x33 0 xf0 0 x78 0 xc4 0 xc8

  Alice的签名秘钥:

  xbb x5d 0 (0, 0, 0 x34 0 x00, 0 xba 0 x8c 0 x36 0 x61 0 xb8 0 xa9 0 x70、0 x5c 0 xc4 0 x7b, 0 x91 0 x6e 0 x4c 0 x52 0 x70、0 xf8 0 x2a 0 x2a 0 x52 0 x7b, 0 x1b 0 xfd 0 x26 0 x80 0 x41 0 x19 0 x69 0 xb4 0 xc9 0 xcf 0 x43 0 x61 0 x89 0 x30 0 xbb 0 x60 0 x69 0 x26 0 x86, 0 xe4 0 x1a, 0 x90,以0 xfe, 0 x39 0 xd9 0 xdb, 0 xfb 0 x8d 0 x03, 0 x92 0 xe7 0 x9d 0 x76 0 x52 0 x00, 0 x59 0 x8c xd0 0 x9a, 0

  步骤3(图4):Bob的加密密钥:

  0 x51 0 x65 0 xca 0 x35, 0将0 x34 0 x6b 0 x26 0 xee, 0 xc7 0 x64 0 xce 0 xaa 0 x4f 0 x2b 0 x10, 0 x21 0 x65 0×50 0 x3c 0 x93 0 xcd 0 x1f 0 x3f 0 x7f, 0 x90 0 x8b 0 x26 0 x1b 0 x0e xf9 0 x43, 0

  Bob的加密公钥:

  0 xff 0 xca 0 x3c, 0 x2c 0 xee, 0 x6b 0 x3e 0 x60 0 . xc6 0 x78 0 x1c 0 x6d 0 x30 0 xb7 0 xe1 0 xad 0 x0c 0 xce 0 x12 0 x9e 0 xb7 0 xeb 0 x7c 0 x2c 0 x32 0 xa4 0 x70、0 xf0 0 x03, 0 x71 0将0 x5a

  图10中所示的代码用于实现crypto_authenc_sign函数。发送方(Alice)使用此函数使用其加密密钥对消息进行签名,然后使用接收方的加密公钥对输出进行加密。最后,在将输出发送给Bob之前,它使用用于签名的秘钥对经过身份验证的消息进行签名。加密签名前生成的随机消息如下:

  图10

  figure 10

  在实现crypto_authenc_sign函数中使用的C代码

  0 x00 0 x00 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 xe2 0 xc3,表示就是0 x2e 0 x3d 0 xbd 0 x31, 0 xcc, 0 x7d x63 0 x4c, 0

  应用crypto_authenc_sign函数后输出如下:

  0 xce, 0 xd8 0 x39 0 x39, 0 x1b 0 xee, 0 xb4 0 xf2 0 xc2 0 xd0 0 x9d 0 xc8 0 xa8 0 x5d 0 xa9 0 x70、0 x45 0 x0f, 0 xc9, 0, 0 x06 0 x1e 0 x03, 0 x27 0 x5b 0 xc7 0 x9c 0 . xc6 0中,0 x91 0 x71 0 x15 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x54 0 xcc, 0 x4b 0 x48 0 x6b 0 xaf 0 x66 0 x8a 0 x02, 0 xe5 0 xc0 0 x46 0 xd4 0 x7e 0 xfa 0 xdd 0 x18 0 x35 0 x0a 0 x6a 0 x54 0 x3e 0 x3e 0 xad 0 xdb, 0 xca 0 x15 0 x9a 0 x17, 0 xa8 0 x64 0 x1b 0 x24 0 x16, 0 xd7 0 x64 0 x4d 0 x92 0 x37 0 xd4 0 xbe 0 x4a 0 xb8 0 xfd 0 x9d 0 xa9 0 xe8 0 xb6 0 xc0 0 x93 0 x1f 0 xe3,0 x1c, 0 xcb 0 x23 0 xe0, x05 0 xfc, 0

  图11所示的代码用于实现crypto_dec_ver函数。接收方(Bob)使用此函数来验证和检索原始消息。验证并解密后的程序输出如下:

  图11

  figure 11

  用于实现crypto_dec_ver函数的C代码

  0 x00 0 x00 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 xe2 0 xc3,表示就是0 x2e 0 x3d 0 xbd 0 x31, 0 xcc, 0 x7d x63 0 x4c, 0

  在本小节中,首先对修改后的NaCl库进行逻辑分析。Burrows等人[8]引入了一种称为BAN逻辑的逻辑分析方法,该方法分析了认证协议、所有原语的共享密钥以及形式化的公钥。BAN逻辑由一组规则组成。这些规则描述和研究信息交换协议。具体来说,BAN逻辑允许用户定义传输信息的可靠性和安全性。BAN逻辑始于这样一种观念,即传输的信息是不受保护的,容易受到篡改和公众的观察。BAN逻辑使人们能够使用形式化方法简单地推理加密协议。BAN逻辑的基础是争论方对形式化规定的确定性的确信(信念)。形式化的处方在一般意义上的确定性是不正确的[9]。如上所述,身份验证协议是区块链中必不可少的组成部分,有必要确保这些协议的正确性。BAN逻辑使用逻辑定义认证协议。对修改后的提案执行了应用于初始NaCl库的步骤。首先,将每个消息转换为逻辑描述。为了有效地确认正确性,发送方(签名者)和接收方(验证者)的确定性(信念)应该满足程序目标。BAN逻辑假设,如果存在一条消息“X”,使得接收方Bob确信它是由发送方Alice发送的,则认证的验证步骤在签名者(Alice)和接收方(Bob)之间完成。因此,如果Bob Alice X和Bob X表示相信(或被说服),那么Alice和Bob之间的身份验证过程就完成了。如果满足以下目标,则Alice和Bob之间的身份验证就完成了:

  (33) (34)

  其中Mi表示Alice发送的语句

  Alice首先使用加密秘钥对语句(消息)“Mi”签名。然后,使用Bob的加密公钥对结果进行加密,生成“c”。随后,使用Alice的秘密签名密钥对c进行签名。

  Alice发送{{{Mi, n}skea}pkeb}sksa给Bob,其中n是Alice产生的随机数。

  通过以下假设完成分析:

  (35) (36) (37) (38) (39) (40) (41) (42) (43)

  由式(35)可知,Alice确信pkeb是加密的公钥。式(36)表明Alice确信pkea是加密的公钥。式(37)表明Alice确信pksa是签名的公钥。式(38)表明Bob确信pkeb是他的加密公钥;式(39)表明Bob确信pkea是Alice的加密公钥。式(40)表明Bob确信pksa是Alice的公开签名密钥。随后,Eq.(41)表明Bob确信Alice对发送的语句(消息)具有(权威)管辖权。最后,方程式。(42)和(43)表明Alice和Bob确信n是新鲜的(n随着每条消息的变化而变化)。根据这些假设,在初始阶段传输的消息被转换为逻辑描述。最后,将BAN逻辑的基本规则应用到逻辑公式中。有关BAN逻辑的更多信息,请参见[8,9]。使用消息{{{Mi,n}skea}pkeb}sksa, Eq.(40)和消息含义规则

  (44)

  然而,Alice和Bob确信n是新鲜的(等式)。(42)和(43))。因此,通过应用nonce验证规则,可以得到如下结果:

  (45)

  根据公式(41)的管辖规则,得到如下结果:

  (46)

  从方程式。(45)和(46)证明,对NaCl库提出的修改达到了认证的目的(不可否认性),没有缺陷。这是因为Bob而不是Alice无法对消息重新签名。BAN逻辑的使用证明了初始的NaCl库无法抵抗不可抵赖攻击。另一方面,提出的修改解决了这个问题,并通过逻辑分析得到了证明。

  在本节中,图12和表1提供了原始NaCl和修改后的NaCl情况下通信双方(发送方和接收方)的执行时间比较。测试环境包括:处理器:1.6 GHz双核Intel酷睿i5,内存:8gb 1600 MHz DDR3,开发语言:C, IDE: Eclipse,计算时间以毫秒为单位,计算消息长度以字节为单位。修改后的NaCl消耗更多的时间,这是意料之中的,因为添加一个新的签名块将使执行时间增加50%,因为时间是计算三个块而不是两个块的。然而,修改后的NaCl库实现了不可否认性的安全目标,如表2所示。在表1中,总时间表示发送方和接收方进行加密操作所需的时间总和。

  图12

  figure 12

  发送方和接收方的总计算时间

  表1发送方和接收方的总计算时间

  表2原NaCl和修改后NaCl的安全目标

  消息长度为10字节时的运行代码示例:

  Alice的加密私钥:

  0 x0b, 0 xc7 0 x3e 0机加区,0 xfb 0 xd5 0 x40, 0 xc2 0 x48 0 x9f 0 xa3 0 x62 0 xe2 0 xb2 0 xaa 0 xb7 0 . xc6 0 x73 0×,0 xd7 0 xd3 0 xd3 0 xfd 0 x12 0 x24 0开发,x47 0 x64 0 xee, 0 x30 0 x7b, xbb 0 x57, 0

  Alice的加密公钥:

  0 x97, 0 x69 0 x63 0 x32, 0 xa7 0 x7c 0 xd6 0 x4e 0 xe4 0 xd5 0 x4c 0 x8c 0 xd1 0 x2f 0 x8d 0 x6f 0 x8c 0×50 0 xd0 0 x16, 0 xd2 0 x3c 0 xe0 0 x7e 0×,0 x33 0最后0 xf7 0 x98 0 25, 0 x5c 0开发。x47

  Bob的解密私钥:

  0 xba, 0 xb3 0 x3e 0 xdc, 0 x5f 0 x96, 0 x62 0 x88 0 xaf 0 x07 0 xaf 0 xa5 0 xd3 0 x92 0 x79 0 x0e 0 xb6 0 x2d 0 x7b, 0 xee, 0 xa0 0 x41 0 xc0 0 x5b 0 x1a, 0 x0e 0 x5f 0 x2f 0 x76 0 x5f 0 x2c 0 x53

  Bob的解密公钥:

  0 25, 0 x3c 0 x87 0 x2d, 0 x02, 0 x1d 0 xd1 0 x3c 0 x7e 0 x0b 0 x56 0 x30 0 xee, 0 x30 0 xe9 0 x17, 0 xce 0 xeb 0 xa8 0 x2c 0 x80 0 x03, 0 x30 0 x99 0 xb2 0 xc2 0 x53 0 x52 0 xaa 0 xd9 x4d 0 xd7, 0

  Alice的签名公钥:

  0 xdb 0 x73 0 x6a, 0将0 xf0 0 xb1 0 xbd 0 xad 0 xf8 0 x8c 0 x14, 0 xe7 0 x85, 0 x85, 0 x79 0 x59 0 x57 0 xa4 0 x45 0 x7f, 0 x7a 0 x81 0 x0b 0中,0 xc3 0 x66 0 x1c 0 x59 0 x94 0 x45 xd8 0 xdd, 0

  Alice的签名私钥:

  0 x68 0 x17, 0 xb2, 0 xcb 0机加区,0 x41 0 xdb, 0 x57 0 xf3 0 x64 0 x97 0 x9b 0 x17, 0 xc0 0 x44 0 x54 0 xe7 0 x57 0 xc8 0 x37 0 x79 0 x88 0 x20, 0 x00, 0 xf9, 0 (0 x02, 0 x0b 0 x41 0 x87 0 xc9 0 x76 0 xf0 0 x96, 0 x14, 0 x05 0 x09, 0, 0 x12 0 x61 0 x70、0 xac 0 xfa 0 x17, 0 x7d 0 x86, 0 x1f 0 xa9 0 xe2 0 xf0 0 xc9 0 x92 0 25, 0 x5e 0 x87 0 x5c 0 xe2 0 x8f 0 xe3 0 x58 0 xad 0 xac x64 0 x5a, 0

  加密签名前生成的随机消息:

  0 x00 0 x00 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x96, 0 x45 0 x46 0 xf8 0 x7d 0 x1c 0 xd6 0 x3a, 0 x00

  在发送方,使用Alice的加密密钥对一条消息(长度为10字节)进行签名,然后使用Bob的加密公钥进行加密,所消耗的时间为0.115 ms。那么,使用Alice的签名秘钥对消息进行签名的时间为1.992 ms。发送的消息如下:

  0 x82, 0 x8c 0 x49 0 x27, 0 xbe 0 xe5 0 x59 0 xe3 0 xca 0 xf6 0 xc3 0 x0c 0 x84 0 xf6 0 x0d 0 x19 0 xfd 0 x49 0 xff, 0 x1e 0 x7d 0 xcf 0 xfc 0 xe9 0 xa7 0 xa5 0 xe5 0 xf6 0 x28 0机加区,0 x16, 0 x2c 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 xb0 0 x26 0 x3b 0 xc3 0 x69 0 x51 0 x71 0 x8a 0 xf1 0 x39 0 x2f 0 xee, 0 x76 0 x2c 0 x20, 0 x6a 0 x40, 0 xe2 0 xef 0 x52 0 x95 0 xc1之前,0 xbe 0 x4a 0 xfc 0 xf9 0 x1e 0 xd6 0 x64 0 xd3 0 xbb 0 x7c 0 x09 0 xb1 0 xce 0 x3c 0 xfd 0 x8c 0 x1f 0 * 13, 0 x75 0 xe7 0 xd1 0 x92 0 xf8 0 xe2 0 x5a 0 x5a 0 xfd 0 x7c 0 x12 0 x38,0 x67, 0 xda 0 xa5 0 xb0, 0 x74, (

  在接收方,使用Alice的签名公钥验证接收到的消息所消耗的时间为0.1189 ms。那么,使用Bob的私钥解密消息和使用Alice的加密公钥进行验证的时间为5.963000 ms。输出消息是:

  0 x00 0 x00 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x96, 0 x45 0 x46 0 xf8 0 x7d 0 x1c 0 xd6 0 x3a, 0 x00

  因此,长度为10字节的消息在发送方和接收方的总消耗时间为8.462000 ms。

  区块链为多个应用提供了解决方案。区块链有能力提供以下特征:去中心化、匿名、隐私、信任和不变性。这使得它成为信息和通信技术行业中大多数发明的解决方案。它是第四次工业革命的支柱,是一种对密码学要求很高的技术,被认为是学术界最有影响力的话题之一。为了设计一个安全的应用程序,需要交付的安全服务包括机密性、完整性、身份验证和不可否认性。这些安全服务是使用加密算法提供的,加密算法是区块链功能的基础。许多区块链平台目前使用第三方加密库,这些库提供了许多加密原语,以确保用户免受网络攻击。NaCl及其分支是使用最广泛的加密库。众所周知,NaCl是提供可用性属性的最佳库之一。虽然NaCl易于使用,并且保证了保密性、完整性和真实性,但它不能提供不可否认的服务。本文提出了对区块链平台的改进,通过增强NaCl库来实现区块链平台中广泛使用的不可抵赖性。为了提供上述安全服务,NaCl操作基于对消息进行签名和加密。因此,通过对库应用BAN逻辑规则证明,不提供不可否认服务。为了提供不可否认性,我们提出了一个基于添加签名块的解决方案。使用BAN逻辑对修改后的库进行了分析,验证了所提方案的正确性。分析表明,提出的解决方案解决了上述问题。在区块链平台中添加不可否认性可以在技术滥用方面保持法律和秩序。在本文中,我们介绍了对构建在NaCl库及其分支上的区块链平台添加不可否认性的修改,并依赖于开发人员重新访问这些分支以实现建议的修改。添加签名块会增加提议修改的执行时间,因为时间是为三个块而不是两个块计算的。为了提高改进后的NaCl库的实现性能,建议在今后的工作中采用并行化和流水线化技术。

  下载原文档:https://link.springer.com/content/pdf/10.1007/s11416-023-00482-1.pdf

点击分享到