Page 261 - 《软件学报》2020年第11期
P. 261

3576                                Journal of Software  软件学报 Vol.31, No.11, November 2020

                 文和密钥加密密钥分别存储于专用的 USB 磁盘.
                    密钥备份采用 Shamir 的(k,n)门限秘密共享方案(k≤n)           [28] .数据所有者可使用该方案将密钥分为 n 份子密
                 钥,并分别交由不同的管理人员保管或者在不同的存储位置保存.后期进行密钥恢复时,仅需 k 份密钥即可.
                    其中,密钥生成在预处理阶段完成.要注意的是,本方案所涉及密钥主要用于水印嵌入及检测等相关操作,
                 不需要频繁的密钥更换.因此与一般的数据加密方案相比,本方案中密钥管理相对简单且容易实现,不考虑密钥
                 更新和密钥销毁的问题.
                 2.3   水印分区嵌入
                    水印分区嵌入阶段的任务是将可声明数据版权的水印嵌入到数据当中,同时预设数据质量等级,以便后期
                 进行水印检测和数据质量等级操作.该阶段的主要工作包括数据分区的划分、辅助数据的计算和存储以及水印
                 的嵌入等.水印分区嵌入算法如算法 1 所示.
                    算法 1.  水印分区嵌入算法.
                    Input: k,sk,D,W,S.
                    Output: D s ,D w .
                    1.   for each tuple r∈D 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.            A_index x =hash em  mod ε;
                    7.            if (A_x is NULL)
                    8.               continue(⋅);
                    9.            bit_index y=hash em  mod ξ;
                    10.           WS_indexz=hash em  mod ω;
                    11.           bit s =bit_y xor S_z;
                    12.           Store(D S _i,bit s );
                    13.           bit w =bit_y xor W_z;
                    14.           Update(bit_y,bit w );}
                    15.     else
                    16.          next tuple;
                    17.   Return D w ,D s ;
                    水印分区嵌入算法执行前需设定数据分区的个数γ,预设数据质量等级.在数值上,数据分区的个数等于数
                 据质量等级数.算法 1 给出了水印分区嵌入的主要步骤:对于任意元组 r,首先计算分区哈希值 hash part ,确定 r 所
                 在数据分区.数据分区的确定由 hash part 和数据分区数γ决定.其中,hash part 的计算以主键 r.key 和分区密钥 k 为输
                 入.相同的输出值 i 归为同一数据分区.然后,计算嵌入哈希值 hash em ,依次选择待嵌入水印的元组、属性值、比
                 特位.其中,hash em 的计算以 r.key 和分区嵌入密钥 sk_i,ε,ξ,ω分别表示数据属性个数、属性值最低有效位的位数、
                 水印串和辅助串的长度.另外,算法在执行过程中遇到空值,则跳入下一循环,处理下一元组.其后,计算并存储辅
                 助数据 bit s .其中,Store(D s _i,bit s )表示将辅助数据 bit s 存入数据分区 i 的辅助数据存储结构 D s _i,其具体存储过程
                 见函数 1.bit s 存储完毕之后,执行水印嵌入操作.需要说明的是,辅助数据的计算和水印的嵌入均基于异或运算
                 xor 实现.最后,输出嵌入水印的数据 D w 和所有的辅助数据 D s ,水印分区嵌入完成.
                    函数 1. Store(D s _i,bit s ).
                    1.   table basic _i_indexk=hash em  mod m;
                    2.   if (table basic _i[k] is NULL)
   256   257   258   259   260   261   262   263   264   265   266