Page 263 - 《软件学报》2020年第11期
P. 263
3578 Journal of Software 软件学报 Vol.31, No.11, November 2020
21. for i=0 to γ−1 do
22. if (matchcount_i≥τ_i)
23. Flag_i=0;
24. else
25. Flag_i=1;
26. Return Flag;
由算法 2 可知,等级检测算法和水印分区嵌入算法在数据分区的确定、水印嵌入位置的选择、辅助数据的
计算方面相同.辅助数据 bit s 计算完毕之后,从 D s _i 中取出之前存储的辅助数据 bit_temp,并比较 bit s 和 bit_temp:
如果二者相同,匹配总数 matchcount_i 加 1,totalcount_i 加 1;否则,仅 totalcount_i 加 1.其中,bit_temp 的提取过程
具体见函数 2.
函数 2. Get(r.key,D s _i).
1. table basic _i_indexk=hash em mod m;
2. if (table basic _i[k] is NULL)
3. Return −1;
4. else {
5. if (hash em .exixtedIn(table overflow _i))
6. Return table basic _i[k].reverse(⋅);
7. else
8. Return table basic _i[k];}
所有的辅助数据统计完毕之后,依次判定所有的数据分区中是否包含水印.首先选择判定参数τ_i,如果
matchcount_i≥τ_i,Flag_i 置 0,表示数据分区 i 中不包含水印;如果 matchcount_i<τ _i,Flag_i 置 1,表示数据分区 i
中包含水印.最后返回 Flag,等级检测完成.其中,
• τ_i 表示判定数据分区 i 是否包含水印的参数.
totalcount _ i totalcount _!i
• threshold(totalcount_i,α)的返回值是满足 ∑ (1/ 2) totalcount _ i < α 的参
_ −
τ totalcount _!( i totalcount i τ )!
数τ,其具体分析见第 3 节.
根据函数 2,从 D s _i 提取元组 r 的辅助数据的具体过程是:首先计算 r 的辅助数据在 table basic _i 中的存储位
置 k.然后查询 table basic _i[k]是否为空.如果 table basic _i 为空,返回−1;如果不为空,查询 table overflow _i 是否存在
hash em .如果存在,返回 table basic _i[k]的相反值;否则,返回 table basic _i[k]的值.
2.5 水印检测
水印检测是实现关系数据版权保护的重要环节.检测出的水印串在逻辑异或解密之后,可还原出数据所有
者的标识信息,实现版权验证.
由水印分区嵌入算法可知,为了提高水印的抗攻击能力,各水印位被重复多次嵌入到原始数据中.如果嵌有
水印的数据遭受攻击,则受攻击元组可能会干扰水印检测,导致部分检测结果出错,所以需要一个少数服从多数
的投票过程来消除受攻击元组的干扰,以提高水印检测准确率.故方案采用了多数投票机制,以表 2 为例.
Table 2 Majority vote
表 2 多数投票
检测结果 1 0 1 1 1 0
检测结果 2 1 1 1 1 0
检测结果 3 0 1 1 1 1
投票结果 0 1 1 1 0
故水印检测的最终结果为 01110.