ktz币最新价格(ktz是什么货币)

区块链安全是信息安全的一个应用领域。

信息安全是指:保证信息系统中的数据在存取、处理、传输和服务的保密性、完整性和可用性,以及信息系统本身能连续、可靠、正常的运行,并且在遭到破坏后还能迅速恢复正常使用的安全过程。

本文就三个典型的区块链应用:比特币、以太币、Zcash中的比特币进行分析。

区块链安全|主流区块链安全属性分析——比特币

比特币

比特币(BitCoin)是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。比特币不依靠特定货币机构发行,它依据特定算法,通过大量的计算产生,比特币经济使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保货币流通各个环节安全性。

从最初的比特币源代码可以看出,比特币系统没有明确的模块划分,下图是根据目前的代码情况勾画的比特币架构图。

?

区块链安全|主流区块链安全属性分析——比特币

比特币架构

比特币源代码bitcoin中含有两个与密码算法相关的文件夹: secp256k1和crypto。

假设用户A和用户B进行交易,用户A支付12个比特币到用户B的地址muPB5AygrXA4eT4Tj3WJJnVtEYpqm91ygZ,生成的交易原始数据为:

0100000001b82a1c86ad0fa4f634dfc0cf82ca3ab996b10a5883520cea76a17b735bbf11e00100000000ffffffff02008c8647000000001976a91498191988a4686997b024161668911f0910ac920188ac6081ad2f000000001976a9140e34abbd759901843cb0240cbcb3d841daa0de8388ac00000000

使用ECDSA对这段数据签名得到:

0100000001b82a1c86ad0fa4f634dfc0cf82ca3ab996b10a5883520cea76a17b735bbf11e0010000006a4730440220531df7a34b069e0f8e9b1095c172ef55524a9e5d4262d8fa7589f392c9d014bf02204a8af854d4340a018ed499490039168406b5b8a2b74076e6db43d37533f597b9012103b8a10e3d5edab3ef718077f15a91d607ede92bbc63df73d27afc22115e184eb6ffffffff02008c8647000000001976a91498191988a4686997b024161668911f0910ac920188ac6081ad2f000000001976a9140e34abbd759901843cb0240cbcb3d841daa0de8388ac00000000

解析这段数据得到:

区块链安全|主流区块链安全属性分析——比特币

解析后的交易信息

攻击者C截取交易信息后,把交易的接收地址改为自己的地址:mvXf3anW6XizkRBAFfFMMtjwJr 2sL4ZuBd。

修改后的交易原始数据为:

0100000001b82a1c86ad0fa4f634dfc0cf82ca3ab996b10a588 3520cea76a17b735bbf11e00100000000ffffffff02008c8647000000001976a914

a4abe7500b3f7bb2ebd76b4a8f1db900b79db0fc88ac6081ad2f000000001976a9140e34abbd759901843cb0240cbcb3d841daa0de8388ac00000000

其中黑体字符对应修改后的地址。由于ECDSA的签名需要用户A的私钥,所以攻击者C无法伪造数字签名,此时攻击者再转发交易,将返回验签错误。

?

区块链安全|主流区块链安全属性分析——比特币

验证交易

密码设备在运算过程中会泄露各种物理信息,如功耗、电磁辐射、时间、声音、可见光等。利用这些物理信息也是可以破解出秘密信息的,这种攻击方法被称为侧信道攻击。这类新型攻击的有效性远高于密码分析的数学方法,因此给密码设备带来了严重的威胁。1996年美国科学家Kocher首先发现针对密码芯片的时间攻击法。该方法通过对密码芯片运算过程中执行时间信息的采集,结合密码算法的内部实现,证实了算法指令和执行时间存在相关性,从而推测出密钥信息。1999年,Kocher等人又提出了利用功耗采集数据去分析密码电路中的秘密信息,并提出了简单功耗分析(SPA)和差分功耗分析(DPA)的方法。

比特币的ECDSA算法在实现过程中考虑了防御侧信道攻击。

区块链安全|主流区块链安全属性分析——比特币

点加、倍点函数

Crypto文件夹主要处理地址,采用了SHA-256和RIMEMD-160两个hash函数。

同时,crypto还提供了hash函数SHA-1,强烈建议不要使用这个函数,因为它已经不再安全。我国密码管理局在2017年4月3日发布了《关于使用SHA-1密码算法的风险提示》: 近期,SHA-1杂凑密码算法碰撞攻击实例公布,对SHA-1算法的攻击从理论变为现实,继续使用SHA-1算法存在重大安全风险。

比特币核心钱包(Bitcoin Core)是官方发布的用于管理比特币私钥的客户端。拥有比特币地址的私钥代表拥有对应的比特币的控制权,为了防止非授权用户使用比特币,以及防止比特币被盗,应该对比特币钱包进行加密,加密比特币钱包的命令为:

./bitcoin-cli encryptwallet <passphrase>

加密完成后,需要重启客户端来加载加密后的钱包。进行交易前,需要先把passphrase存入内存,以解密钱包:

./bitcoin-cli walletpassphrase <passphrase> <timeout>

timeout是指这个口令在内存中有效的时间,计时单位是秒,超过这个时间后,需要重新调用这条命令。为了安全起见,timeout这个值不应该设置很长,尽量做到每次交易都要输入一次口令。

私钥一旦丢失将无法恢复,也就意味着比特币的丢失,因此,备份好钱包非常重要。备份钱包的命令为:

./bitcoin-cli backupwallet <destination>

这条命令把wallet.dat文件复制到目标文件夹中。为了安全起见,wallet.dat应该备份到安全的地方,比如离线的U盘。在多个地方安全地保管钱包文件可防止意外情况发生的时候恢复比特币。

为了保证资金的安全性,还可以使用冷存储,即把私钥存储在一台永不上线的电脑上,交易时使用离线签名。

具体步骤为:先在离线电脑上生成钱包wallet.dat,并生成比特币地址,然后删除这个钱包中的密钥,再把这个没有密钥的钱包复制到在线电脑上,冷存储比特币时,只需把比特币转账到该钱包中的地址;当需要使用冷存储的比特币时,需要先用在线电脑生成未签名的原始交易RawTransaction,然后把这个原始交易放到离线电脑上进行签名,最后使用在线电脑广播签名后的交易。但是,比特币官方钱包bitcoin core 0.14.2版本还未实现删除wallet.dat中的密钥,所以还不支持冷存储。可以使用其他钱包进行冷存储,比如armory钱包 https://www.bitcoinarmory.com/。

Bitcoin core的钱包提供多重签名,可以通过createmultisig命令来生成带有多重签名的地址。下面我们来演示如何生成一个3取2的多重签名地址,即有3个管理员,只需任意2个完成签名,就可以进行交易。具体过程如下:

先生成3个管理员的密钥,而且为了达到安全级别II,建议这3组密钥在不同地方生成和存储,以便防范火灾、洪水、地震等风险。

./bitcoin-cli getnewaddress [account]得到3个地址:

mumwWHRHzXaS2fCYB6MrjSg2runDwxa4ZQ

n3LoBtt2mmcTk5dchm7Ba4RbU7pVpE1q43

mrEmwE8r9Wq9sNefGWbpyqP5uSZgscQDr4

利用./bitcoin-cli dumpprivkey <bitcoinaddress>获得3个私钥:

cPzefVCmScBJWA2cQ7ngHqwWpMzypwFfvxrw2ykPias19moC9Ssg;

cTuYQj2oumFLf4rWJHqJRxw9K3tsZoBH8488KaUbXWNz1jV5tPgj;

cUW3QnvoebJVSkJbvVEtJTBFYzsy6z1Pu5yQXfpF8HVTJkrqfAWk。

再利用./bitcoin-cli validateaddress <bitcoinaddress>获得对应的3个公钥:

039f03c79800b56825dcafbb6c85c1f84964006a337c0d47b3a1bef7a5d835d897;

02c870602256f042039aec374a1164e9168128ada4ddad498c02a50fdbf39e375c;

03fd9030258cdf1001335db26ef9fc7a3ae3563ff8b1356afeb81dd95b81bfdf56。

然后生成多重签名地址

./bitcoin-cli createmultisig 2 <‘[“pubkey1″,”pubkey2″,”pubkey3”]’>

?

区块链安全|主流区块链安全属性分析——比特币

生成多重签名地址

生成的地址为:

2N9ZbKTZPPDnuiwGDNxX7VbEdus8nm1iUjC。再添加多重签名地址到钱包

./bitcoin-cli addmultisigaddress 2<‘[“pubkey1″,”pubkey2″,”pubkey3”]’>

可以通过./bitcoin-cli getaddressesbyaccount <account>来查看是否已经将地址添加到钱包。接下来,我们再演示如何使用这个多重签名地址进行交易。

先使用命令./bitcoin-cli sendtoaddress <bitcoinaddress> <amount>给多重签名地址2N9ZbKTZPPDnuiwGDNxX7VbEdus8nm1iUjC

转入1个比特币。然后创建一个交易把0.7个比特币从这个地址转出到

mvXf3anW6XizkRBAFfFMMtjwJr2sL4ZuBd。./bitcoin-cli createrawtransaction [{“txid”:txid,”vout”:n},…] 生成的交易原始数据为:

0100000001133cb5d63d89577c72413392ffc7e695c840d6ffa5fd5e0148bd16d213e79acc0100000000ffffffff02801d2c04000000001976a914a4abe7500b3f7bb2ebd76b4a8f1db900b79db0fc88ace03cc801000000001976a9140e34abbd759901843cb0240cbcb3d841daa0de8388ac00000000

使用第一个地址对应的私钥进行签名

?

区块链安全|主流区块链安全属性分析——比特币

第一次签名

从图可以发现,第一次签名后,complete字段是false,因为我们创建的这个地址2N9ZbKTZPPDnuiwGDNxX7VbEdus8nm1iUjC需要至少两次签名,这样可以提高钱包中资产的安全性。使用第三个地址对应的私钥进行签名。

区块链安全|主流区块链安全属性分析——比特币

第二次签名

此时,complete字段为true,表明交易创建完成,可以使用./bitcoin-cli sendrawtransaction <hexstring> 发送了。在真实的比特币网络中,等待6次确认后,就可以通过./bitcoin-cli getreceivedbyaddress <bitcoinaddress>来查看是否收到转入金额。

比特币密钥生成时会调用bitcoin/src/random.cpp中的GetStrongRandBytes函数来生成随机数。这个函数会先调用Openssl中的GetRandBytes函数生成256比特随机数,再调用GetOSRand函数生成256比特随机数,最后如果能获取的话,会调用硬件的随机数生成函数GetHWRand,来生成256比特随机数。接着把这三部分串接在一起,使用hash函数生成一个512比特的随机数,最后取出前256比特作为密钥。为了测试比特币密钥的随机性,我们调用GetStrongRandBytes函数生成了1200个长度为10的6次方的随机数比特流,然后使用NIST STS的随机数测试套件对这个比特流进行了测试,NIST STS的随机数测试套件一共有15项测试:单比特频数检测、块内频数检测、累加和检测、游程检测、块内最大“1”游程检测、矩阵秩检测、离散傅里叶检测、非周期模块匹配检测、重叠模块匹配检测、通用统计检测、近似熵检测、随机游动检测、随机游动变体检测、序列检测、线性复杂性检测,测试结果如下:

?

区块链安全|主流区块链安全属性分析——比特币

GetStrongRandBytes生成的随机数测试1

区块链安全|主流区块链安全属性分析——比特币

GetStrongRandBytes生成的随机数测试2

由于测试结果很长,所以我们只截取了前后两部分。可以看出: 绝大部分比特流都通过了测试,仅有极少数比特流没有通过,比如Frequency测试中,在1200个比特流中通过了1188个,测试结论底部已经说明:在1200个中只要通过1177个就表明这一项测试通过。只有random excursion (variant)测试例外,只要在740个样本中,大于724个通过就行了。从以上测试分析可以得知:GetStrongRandBytes生成的随机数通过了NIST STS的所有15项测试。所以,比特币中的密钥是一个足够随机的数。

下一章我们将介绍另外一个典型应用——以太币。

感谢机械工业出版社华章分社的投稿,本文来自于华章出版的著作《区块链安全技术指南》。

作者简介:

黄连金

硅谷Dynamic Fintech Group管理合伙人

吴思进

33复杂美创始人及CEO

曹锋

PCHAIN发起人,中物联区块链协会首席科学家

季宙栋

Onchain分布科技首席战略官,本体联合创始人,

马臣云

北京信任度科技CEO、信息安全专家、产品管理专家

李恩典

美国分布式商业应用公司董事与中国区总裁

徐浩铭

CyberVein数脉链项目技术负责人

翁俊杰

IBM 10余年开发及解决方案经验,批Fabric应用开发者,NEO核心开发者之一

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)
   
验证码:
微信号已复制,请打开微信添加咨询详情!