一、介绍
BMEC:Blockchain-Based Mobile-Edge Computing
- 作用
BMEC解决了移动区块链环境中设备计算资源有限的问题,同时保证了计算资源的分布式部署和交易数据的可追溯性。 - 安全漏洞
区块链技术存在许多安全漏洞,其中针对一致性算法的攻击尤为严重,如双花费攻击、远程攻击和自私挖掘。所有这些攻击都可以破坏BMEC的完整性,允许正确的块记录被错误的块记录覆盖(攻击者可以秘密创建一个更长的私有链来重写区块链的原始记录历史)。
概述:将一个MEC服务器连接的移动设备用户设置为一个组,当发现新的区块时,每个组成员对其签名并聚合签名,(BLS签名算法)聚合签名交给其它组验证,验证成功之后加入区块链。
- 本论文的目的:
提出了一个适合BMEC架构的群签名方案,用于验证区块链块。BLS aggregate signature algorithm
如果每个新块获得块创建者所属的组的有效组集合签名,则该新块将被视为有效块。
我们详细描述了移动设备加入和离开BMEC时的认证和密钥变更过程。
安全性分析:计算了double-spend attack 的成功概率,以及其它 consensus-level attacks, 例如 stake-bleeding attack
二、相关知识
安全威胁以及安全性分析
工作证明(PoW)和利益证明(PoS)容易受到安全威胁。
对于一个MEC服务器来说,其计算资源也远远不足以破坏基于PoW的区块链系统的共识机制。
然而破解区块链守恒机制的计算能力已经显著下降。因此,如果BMEC采用PoW作为区块链共识机制,也不能完全保证BMEC架构的安全性。
解决区块链共识层的威胁:
- 增加块确认的数量和增加交易的价值
- 采用频繁的检查点机制来阻止远程攻击
- 群签名技术
BLS签名算法
(BLS签名算法)[]
双线性映射
BLS签名算法1
1>初始化
\(G_1\), \(G_2\) 是阶为 p 的乘法循环群,生成元分别是 \(g_1\),\(g_2\),e 是双线性映射:\(G_1 * G_2 →G_T\)
安全Hash函数H: {0,1}* → \(G_1\)
公开\(( G_1, G_2, G_T, e, g_1, g_2, p, H )\)
2>密钥生成
选择随机数\(x∈Z^*\), 将x作为私钥,公钥为\(v = g_2^x, v∈G_2.\)
公钥 \(x, g_2^x\)
私钥v
3>签名
对于消息“message”,首先映射到循环群中的一点,记为
\(h = H(m)\), 使用私钥签名,签名结果为$ δ = h^x$
4>验证签名
公钥验证签名,即验证等式$ e(δ, g_2) ==e(h, v)$是否成立
证明过程:
BLS数字签名2
1>准备阶段
秘密选取随机数字作为私钥pk,计算公钥P = pk × G,待签名的消息m。
2>签名阶段
- 将消息哈希H(m)映射到曲线上的点,记为q;
- 将结果点乘以私钥得到签名: S = pk × q;
3>验证签名
检验 e(P, q) = e(G, S)
曲线配对函数e:
它可以接受输入一条(或两条不同)曲线上两点P和Q,输出至一个数字:\(e(P, Q) → n\)
特殊性质:
\(e(a * P, b * Q) = e(P, ab * Q) = e(ab * P, Q) = e(P, Q)^{(ab)}\)
验证过程:
\(e(P, q) = e(pk * G, q) = e (pk * G, q) = e (G, pk * q) = e (G, S)\)
BLS聚合签名
群签名技术
setup
群管理员计算出
\(签名密钥K^{pub}_{sig}, K^{pri}_{sig}, 加密密钥K^{pub}_{enc}, K^{pri}_{enc}\)
公开\(K^{pub}_{sig},K^{pub}_{enc}\)
当新成员加入时
分配随机密钥s, 成员密钥membership key z = f(s)
该成员对z签名,并发送给群管理员
群管理员向他发送 \(v = K^{pri}_{sig}\)
签名
成员对message 使用成员密钥z和\(K^{pub}_{enc}\)
提供proof p,证明该成员知道s, v(\(K^{pri}_{sig}\))的值。
签名由密文enc(m) 和证明p组成。
验证签名
打开签名
通过\(K^{pri}_{enc}\)对enc(m)解密,可以得到成员密钥z,找到对应的成员。
攻击者可以创建更长的私有链,使使用同一令牌的交易两次有效
三、正文
本论文中的BMEC结构
每个MEC服务器和一组连接的移动设备被视为一个组,其中MEC服务器充当组管理器。
符号 | 含义 |
MU | 移动设备用户 |
MS | MEC服务器 |
AS | 认证服务器 |
RC | 注册中心 |
\(ID^{MS}_i\) | 第i组MEC编号 |
\(ID^{MU}_n\) | 移动设备n的编号 |
\(pk_n\) | 移动设备n的公钥 |
\(sk_n\) | |
\(pk^{as}\) | 认证服务器的公钥 |
\(sk^{as}\) | |
\(pk^{gm}_i\) | 第i组MEC服务器公钥 |
\(sk^{gm}_i\) | |
\(pk^{mu}_{i, n}\) | 第i组第n个移动设备的公钥 |
\(sk^{mu}_{i, n}\) | |
\(f( )\) | BLS聚合函数,可以聚合签名和公钥 |
\(GK_i\) | 聚合之后的群公钥 |
\(sig^{mu}_{i,n}(m)\) | 第i组第n个成员对m的签名 |
\(sig^{mu}_{i}\) | 第i组对m的聚合签名 |
\(v()\) | 聚合签名验证函数 |
MU加入一个组
step1:MU向AS发送自己的ID,AS通过安全通道向MU发送\(sk_n\),\(pk_n\)。
step2:MU向AS发送自己的ID和想加入的组的ID,然后通过下图方式验证。
step3:验证成功后发送ticket
- ticket包括\(pk^{mu}_{i, n},sk^{mu}_{i, n},pk^{gm}_i,GK_i,\)\(pk_n\)
- 以上信息通过\(pk^{gm}_i\)加密
step4:MU联系自己想要加入的第i组
MS接收ticket后,用\(SK^gm_i\)解密后再用\(pk_n\)加密传输,最终移动用户用户得到
\(pk^{mu}_{i,n}\)\(*sk^{mu}_{i,n}*\)\(pk^{gm}_i,GK_i,\)
MU更换一个组
当MU需要更换一个组,它们不需要再次与AS进行之前的认证过程,因为移动单元与位于云中的AS之间的会话延迟很大,并且认证步骤繁琐。
$MU (ID^{mu}n , pk_n, pk^{mu} ) $在加入组时存储在区块链上
第一轮验证
如果一个新的块是由第i组MS产生的,则该块在通过整个网络广播之前需要在第i组所有MU中进行验证。
如果某个MU通过了这次验证,则用他在组中的私钥
\(sk^{mu}_{i, n}\)生成 签名\(sig^{mu}_{i,n}(blkhash)\)。
只有当这个组中的所有成员都对这个块签名,这个块才能被告诉其它的组(之后还会有第二轮验证)。
为了减少签名数量,使用聚合函数(aggregate function)\(f()\)
\(sig^{mu}_i(blkhash)=f(sig^{mu}_{i,1}(blkhash),sig^{mu}_{i,2}(blkhash),...,sig^{mu}_{i,n}(blkhash))\)
第i组群公钥
\(GK_i = f(pk^{mu}_{i,1},pk^{mu}_{i,2},...,pk^{mu}_{i,n}\)\()\)
更新群公钥
新成员加入、老成员退出时\(GK_i\)会改变
Second Round of Block Validation
其他组的MU仅检查聚合签名
BLS聚合签名原理
假设
- 公钥pk
- 消息 m
- the curve generator G(用于生成公钥)\(pk^{mu}_{i, n} = G *sk^{mu}_{i, n}\)
- 签名sig(sig是BLS椭圆曲线上的四个点)
如果 \(v(pk, m) ==v(G, sig)\),则说明签名算法有效。
验签函数\(v()\)的性质:
- \(v(x ∗ P1, P2) = v(P1, x ∗ P2).\)
- \(v(G,sig_1)*v(G,sig_2)*...*v(G,sig_n) = v(G,f(sig_1,sig_2,...,sig_n))\)
由性质二,如果聚合签名有效则每个签名都有效
第一步:sig{mu}_i(blkhash)=f(sig{i,1}(blkhash),sig{mu}_{i,2}(blkhash),...,sig(blkhash))
第二步:sk^{mu}{i, n}生成 签名sig^{mu}(blkhash)。
第三步:将f()中每一项提取出blkhash
第四步:v(x ∗ P1, P2) = v(P1, x ∗ P2).
第五步:将 *G 加进f()中每一项
第六步:sk^{mu}{i, n}生成 签名sig^{mu}(blkhash)。
经过第二轮验证,这个块是合法的。