前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件安全性测试(连载19)

软件安全性测试(连载19)

作者头像
顾翔
发布2020-02-19 15:14:20
6510
发布2020-02-19 15:14:20
举报
文章被收录于专栏:啄木鸟软件测试

2.14 加密与认证

1. 区块链及其加密技术

在现在非常火爆的区块链技术关键部分就是加密技术,这节通过区块链来了解一下密码学。

1)对称加密与非对称加密

对称加密是指加密密钥与解密密钥相同,非对称加密是指加密密钥与解密密钥不同。区块链中使用的加密算法都是非对称加密。在此给大家简单介绍一下对称加密与非对称加密。36是一个典型的加解密过程。

36 加解密过程

如果加密密钥与解密密钥相同则为对称加密,否则为非对称加密。37是一个对称加密过程。

37 对称加密过程

这里明文为数字,加密算法与解密算法互为逆运算(×和÷),加解密密钥均为3。一般而言加密密钥为私有的,而解密密钥为共有的,由于对称加密加解密密钥相同,所以安全性是比较差的。38是一个非对称加密过程。

38 非对称加密过程

这里明文为小于1000的整数,加密算法与解密算法均为×,机密密钥为91,解密密钥为11。小学生都可知道一个形如ABC三位整数,乘以1001(1001=91×11),得到的结果为ABCABC。(二位整数:AB可以标记为0AB,乘以1001,得到的结果为:0AB0AB->AB0AB;一位整数:A可以标记为00A,乘以1001,得到的结果为:00A00->A00A)。如39所示。从来可知一个小于1000的整数乘以1001的结果是包含原元素和0的组合。

39 小于1000的整数乘以100过程图

当然,在现实工作中,没有使用上述的非对称密钥的,这里仅仅作为开场,让大家便于大家理解。真正的非对称解决方案后续会进行详细介绍。

2)区块链的私钥、公钥和地址

区块链是通过私钥生成公钥,然后通过公钥来生成地址的。并且要保证逆向是不可行的,即不可通过地址获得公钥,然后通过公钥获得私钥。如40所示。

40 区块链的私钥、公钥与地址

区块链的私钥是一个随机字符串进行SHA-256运算后生成的具有256位数的随机支付串。比如:1100010101000110101110000100101100101010101010010100000000011011010101010010101111010101010101000101010100110101010000111110001100011110011010100100001100011000100011001000101000101001010000110010100010000100011000001100101000001000101001001010001010010001010000101101011101010101001000001001010111001001010010010100010100101010010011001101001001101001001010010001000100100010,转换成16进制为:c546b84b2aa9401b552bd554553543e31e6a43188c8a2943288460ca08a4a29142d7552095c949452a4cd269291122。

区块链是通过一种叫做ECDSA椭圆曲线来进行公钥何私钥换算的,下面节点介绍一下ECDSA椭圆曲线。

ECDSA椭圆曲线指的是满足表达式y2=x3+ax+b,且这里-16(4a3+27b2)≠0。假设a=-1,b=+1,这是表达式y2=x3+ax+b变为y2=x3-x+1。在[-1.32,3.75]上的曲线如41所示。

41 y2=x3-x+1曲线图

现在定义曲线上两个点A、B,A+B如下定义。

l 连接A与B,并延伸与曲线相接与C。

l C对应于X轴为C’。

C’点即为A+B,如42所示。A+A如下定义。

l 在A处找到切线延长与曲线交于B点。

l B对应于X轴为B’。

B’点即为A+A,如43所示。

区块链根据给定的G点,假设G的坐标为(x,y),那么公钥P即为Kx,Ky的一种组合,标记为P=GK(K为私钥,P为公钥)。Kx表示x+x+x+…+x(k次相加),Ky表示y+y+y+…+y(k次相加)。

42 C’=A+B 43B’=A+A

在实际区块链中椭圆函数不是连续的,而是有一组符合ECDSA椭圆曲线的点组成的集合点组合的,并且限制在一个很大的质数区间之内,由于比较复杂在这里不进行展开。

区块链以Secp256k1标准定义,即:

l a=0

l b=7

l 相加的基点G坐标为(79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)

因此区块链的椭圆函数为y2=x3+7,如44所示。

44 区块链椭圆曲线函数图

下面介绍一下私钥与公钥在密码学中的应用。Alice有一篇重要文章,明文为f,要向Bob发送,传输需要加密,由于文章只能让Bob阅读,所以需要Bob的公钥Pb,加密后的文章为Pb(f)。Bob收到这篇密文后,由于Pb=KbG,所以密文为KbG(f)。所以Bob可以通过自己的私钥Kb和常量G进行解密得到明文f。同样,Bob有一篇重要文章,明文为g,要向Alice发送,传输仍旧需要加密,由于文章只能让Alice阅读,所以需要Alice的公钥Pa,加密后的文章为Pa(g)。Alice收到这篇密文后,由于Pa=KaG,所以密文为KaG(g)。所以Alice可以通过自己的私钥Ka和常量G进行解密得到明文g。

利用私钥与公钥除了可以处理加解密以外还可以进行数字签名。比如Tom写的一段文字M,他可以通过M与自己的私钥进行加密,即MK对外公布。大众可以用他的内容M与公钥P得到MP,由于MP=MGK=GMK。由于G是固定的值。所以很容易验证内容是不是篡改过。

最后来介绍下区块链地址。区块链地址在充值、提现都需要的地址,可看作银行账号。它由公钥经过一次SHA-256哈希运算后然后再进行一次RIPEND160运算(RIPEND160也是一种HASH函数。),最后进行Base58编码得到的,即区块链地址= Base58(RIPEND160(SHA-256(P)))。

HASH,一般翻译为散列、杂凑,或音译为哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。常见的HASH函数有MD4、MD5、SHA-1和SHA-256。由于HASH函数对于任意的输入产生一个固定长度的字符串,所以必定存在两个不同的输入得到相同的HASH值,这个叫做HASH碰撞。现在发现MD4、MD5、SHA-1都存在高概率的HASH碰撞,而SHA-256概率很低,所以目前为止使用最安全的散列函数为SHA-256,这也就是为什么区块链采用SHA-256的原因。

总结一下,私钥K= SHA-256(大的随机字符串),公钥P= KG(K为私钥,G为常量),区块链地址=Base58(RIPEND160(SHA-256(P)))(P为公钥)。

3)区块链的组成

现在简单介绍区块链,区块链是由多个区块组成的一个链表,每个区块分为块头(BlockHead)与块体(Block Body)。块头包含以下内容。

l Version:当前版本号。

l Pre_hash:前一个表头的HASH值。

l Time:时间戳。

l Mekle_root:Mekle树的Root信息。

l 难度系数:决定算法的难度

l Nonce:一个随机数。

块体记录记账信息,长度为1M。当发生交易后记账信息放入交易池中,由挖矿矿工找到满足条件的区块后加入区块链中。

首先对块头中的Pre_hash、Mekle_root、难度系数、Nonce做个介绍。

① Pre_hash

为前一个区块头的HASH值,Pre_hash=SHA_256(SHA_256(Pre_Head))。也就是对前一区块的头信息进行两次SHA_256运算的值。由Pre_hash使各个离散的区块形成一个链式结构,即区块链,如45所示。

45 区块链的链式结构

② Mekle_root

在介绍Mekle_root前必须介绍Mekle_Tree,什么叫做Mekle_Tree呢,假设现在区块内存入8个交易,每个交易的信息用SHA_256处理后得到的结果分别为:H1、H2、H3、H4、H5、H6、H7和H8。H12=SHA-256(H1+H2),H34=SHA-256 (H3+H4),H56=SHA-256 (H56+H4),H78=SHA-256 (H7+H8),然后H1234=SHA-256 (H12+H34),H5678=SHA-256 (H56+H78),最后H12345678= SHA-256 (H1234+H5678)。可见这是一个树状的结构,这个树叫Mekle_Tree,根H12345678叫Mekle_root,如46所示。

46 Mekle_Tree

③Nonce

是一个随机数。对于一个256位数,比如:c546b84b2aa9401b552bd554553543e31e6a43188c8a2943288460ca08a4a29142d7552095c949452a4cd269291122,要求头第1位为0的概率为1/16,要求头第2位为0的概率为1/162…要求头第n位为0的概率为1/16n。由于区块链的个数是有限的,要求平均产生一个区块的时间大约为10分钟,所以通过要求调整Nonce值,使当前区块HASH值(即SHA_256(SHA_256(Head其他部分+ Nonce)))为前面几位为0(也可以认为这个随机数小于100..0)的要求的过程即为挖矿。

④难度系数。

要求当前区块前几位为0决定了当前区块的难度,这个标记了难度系数。难度系数通过某个函数控制,维持产生一个区块的时间控制在10分钟之内。

由于区块链的HASH值是存储在下一区块头部的,如果本区块的内容作了篡改,毕竟会引起后面一连串的连锁反应,所以区块链的结构决定了内容的不可篡改性。

4)区块链的测试

2018年10月11日,中国区块链的评测标准出台,内容包括以下14项内容。

l 数据处理的基本功能。

l 节点管理功能。

l 身份认证功能。

l 查询历史数据功能。

l 共识机制的有效性。

l 数据私密性。

l 核心技术自主可控性。

l 数据可审计性。

l 故障恢复能力。

l 最小硬件要求。

l 密码技术合规性。

l 吞吐率要求。

l 应用层稳定性。

l 妥善的私钥管理措施。

以下是区块链测试的重点。

l 转账,向单/多签名地址转账,向脚本转账。

l 如果对币的机制有修改,需要进行双花攻击测试。(双花攻击又称51%攻击,因某个矿工或者矿池将一个加密货币多次支付而得名。通常,其目的并不仅是为了重复使用加密货币,而是为了攻击某个区块链网路,破坏它安全性,让它失去人们的信任。)

l 智能合约功能及安全测试。

l 打包及交易确认效率。

对于区块链性能测试的考虑点。

l 延迟:P2P系统中都是虚拟链接,实际路由可能每次都不一样。

l 共识率:在系统中设置一些节点,故意篡改释放假数据,观察是否成功。

l 吞吐率:查看矿工的效率,即整个系统每秒的有效交易的次数。

l 脱离网络规模和区块大小而言的每秒交易数(TPS)。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档