Page 265 - 《软件学报》2020年第11期
P. 265
3580 Journal of Software 软件学报 Vol.31, No.11, November 2020
• 然后,确定元组所在数据分区、选择水印嵌入位置、提取辅助数据,此部分与等级检测算法相同.辅助
数据 bit s 提取完毕之后,需判定其是否等于−1:如果等于−1,表示 bit s 无效,并跳入下一循环,检测下一元
组;否则,计算包含水印元组的辅助数据 bit ws ,执行水印检测操作.
• 接着,执行多数投票.如果 W D _z 等于 1,count_i 加 1;反之,count_i 减 1.
• 所有元组检测完毕之后,统计多数投票结果.先判断|count_i|是否大于或等于 totalcount_i 与参数μ的乘
积:如果满足条件,表示投票结果有效,继续判断出水印位即可;否则,令 W D _i 为−1,表示此水印位的多数
投票无效.其中,参数μ是个比例阈值,用来提高多数投票机制的有效性.比如,totalcount_i=100,μ等于
0.02,则|count_i|等于 0 或 1 均不能作为水印位判定的依据.
μ的引入增加了水印检测算法的可靠性,但如果将μ设置的过高,则会导致大量的水印位检测无效.所以,用
户根据实际应用的要求对μ进行设定.
2.6 数据质量等级提升
数据质量等级提升的本质是去除某些数据分区中的水印,控制嵌有水印的数据分区数.假如数据使用者不
满足当前数据的可用性,可向数据所有者申请或购买密钥进行数据质量等级提升,以提高数据可用性.另外,数
据质量等级提升的程度不受限制,既可以逐级提升,也可以越级提升.等级提升算法如算法 4 所示.
算法 4. 等级提升算法.
Input: D w ,D s ,k,sk′,Flag.
Output: D′ .
w
1. for each tuple r∈D W do
2. hash part =H(r.key,k);
3. i=hash part mod γ;
4. hash em =H(r.key,sk′_i);
5. if (hash em mod η equals 0) {
6. if (Flag_i=1) {
7. A w _index x=hash em mod ε;
8. if (A_x is NULL)
9. continue(⋅);
10. bit w _index y=hash em mod ξ;
11. WS_index z=hash em mod ω;
12. bit s =Get(r.key,D s _i);
13. if (bit s equals −1){
14. continue(⋅); }
15. else {
16. bit ws =bit w _y xor S_z;
17. W D _z=bit s xor bit ws ;
18. bit_y=bit w _y xor W D _z;
19. Update(bit w _y,bit_y); }}
20. else
21. next tuple;
22. Return D′ ;
w
由算法 4 可知,等级提升算法与水印检测算法在确定元组的数据分区、选择水印嵌入位置、辅助数据的提
取以及具体水印位的检测均相同.检测出当前元组中嵌入的水印位 W D _z 后,计算原始比特位 bit_y,并执行更新
操作.最后返回等级提升后的关系数据 D′ ,等级提升完成.需要注意的是,输入的密钥 sk′只包含当前数据质量等
w