变色龙哈希介绍
一、使用场景
当前比特币、以太坊等主流数字货币都是不可修改的区块链,一旦不法分子将违法信息添加到区块链中那么该信息将被永远保持,因此该特性无法满足某些特定场景。因此需要设计一个可编辑的区块链,比特币系统依靠哈希函数抗碰撞性保证不可篡改,因此为满足可编辑特性要求需要使用变色龙哈希。下面介绍变色龙哈希,针对不同消息𝑚可以产生相同哈希,使得哈希值具有碰撞性。
二、使用细节
2.1 符号介绍
- ℎ:变色龙哈希输出的哈希值
- 𝐻:常见的密码哈希函数,如SHA25
2.2 公私钥产生算法( 𝐊 𝐞 𝐲 𝐆 𝐞 𝐧 𝐊𝐞𝐲𝐆𝐞𝐧 KeyGen)
- 选择一个有限循环群 𝐺 𝐺 G, 𝑔 𝑔 g为该群生成元, 𝑞 𝑞 q为该群的阶, λ \lambda λ为安全参数表示𝑞比特长度;
- 监管者选择私钥 𝑥 ∈ 𝑅 Z q ∗ 𝑥 \in_{𝑅}ℤ_{q}^{*} x∈RZq∗,计算公钥 𝑦 = 𝑔 𝑥 𝑦=𝑔^{𝑥} y=gx;
2.3 对消息 𝒎 𝒎 m哈希值 h h h计算
- 选择 𝑟 , 𝑠 ∈ 𝑅 Z q ∗ 𝑟,𝑠 \in_{𝑅}ℤ_{q}^{*} r,s∈RZq∗;
- 计算
h
=
r
+
(
g
s
y
H
(
m
∣
∣
r
)
)
m
o
d
q
h=r+(g^{s}y^{H(m||r)})\ mod\ q
h=r+(gsyH(m∣∣r)) mod q
- 其中 g s y H ( m ∣ ∣ r ) g^{s}y^{H(m||r)} gsyH(m∣∣r)需要先在 G G G中进行计算,然后再进行 m o d q mod\ q mod q计算。
2.4 对消息 𝒎 ′ 𝒎^{'} m′哈希值 h h h计算
- 选择 u ∈ 𝑅 Z q ∗ u \in_{𝑅}ℤ_{q}^{*} u∈RZq∗;
- 计算
r
′
=
h
−
g
u
m
o
d
q
r^{'}=h-g^{u}\ mod\ q
r′=h−gu mod q
- 和之前类似, g u g^{u} gu需要先在 G G G中进行计算,然后再进行 m o d q mod\ q mod q计算;
- 根据等式
g
u
=
g
s
′
y
H
(
m
′
∣
∣
r
′
)
g^{u}=g^{s^{'}}y^{H(m^{'}||r^{'})}
gu=gs′yH(m′∣∣r′)计算
s
′
s^{'}
s′
- s ′ = u − x ⋅ H ( m ′ ∣ ∣ r ′ ) s^{'}=u-x·H(m^{'}||r^{'}) s′=u−x⋅H(m′∣∣r′)
- 产生相同哈希值 h = r ′ + ( g s ′ y H ( m ′ ∣ ∣ r ′ ) ) m o d q h=r^{'} + (g^{s^{'}}y^{H(m^{'}||r^{'})})\ mod\ q h=r′+(gs′yH(m′∣∣r′)) mod q
三、应用实例
在将变色龙哈希应用至可编辑区块链时仅需对将构造交易头部哈希转变为变色龙哈希即可。当对之前某个区块进行修改时,构造新型𝑟′、𝑠′使得原有区块头哈希值保持不变但区块内容发生改变。