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.
   258   259   260   261   262   263   264   265   266   267   268