发明名称 一种基于顶点插入的矢量地图完整性认证方法
摘要 本发明属于地理信息科学、信息隐藏领域,具体涉及一种基于顶点插入的矢量地图完整性认证方法。本发明包括:划分矢量地图区域;矢量地图块分类;记录矢量地图块类型;生成认证水印;嵌入认证水印;嵌入认证水印;水印认证及原始数据恢复。本发明将矢量地图划分为若干区域,利用顶点插入的方法在每个区域中嵌入相应的认证信息,在认证阶段,不仅能够实现完整性认证,而且能够精确定位篡改区域,有效减少因无法准确检测篡改数据而导致的数据重传次数;本发明的误警率为零,漏警率为(1/2)<sup>L</sup>,能够有效检测篡改。
申请公布号 CN103903217A 申请公布日期 2014.07.02
申请号 CN201410120970.5 申请日期 2014.03.28
申请人 哈尔滨工程大学 发明人 门朝光;王娜娜;田泽宇;门宇博;王思佳
分类号 G06T1/00(2006.01)I 主分类号 G06T1/00(2006.01)I
代理机构 代理人
主权项 1.一种基于顶点插入的矢量地图完整性认证方法,其特征在于:(1)划分矢量地图区域;将矢量地图图元划分为互不重叠的块,将矢量地图划分的块的行数和列数记为N<sub>R</sub>和N<sub>W</sub>,块的总数记为N<sub>B</sub>,N<sub>B</sub>=N<sub>R</sub>×N<sub>W</sub>,第i,i=1,2,…,N<sub>B</sub>个矢量地图块记为B<sub>i</sub>,包含块B<sub>i</sub>的区域范围的矩形的左上顶点和右下顶点分别记为<img file="FDA00004835796900000110.GIF" wi="352" he="87" />和<img file="FDA0000483579690000011.GIF" wi="532" he="96" />和<img file="FDA0000483579690000012.GIF" wi="127" he="77" />分别表示<img file="FDA0000483579690000013.GIF" wi="64" he="73" />的x坐标和y坐标,<img file="FDA0000483579690000014.GIF" wi="128" he="75" />和<img file="FDA0000483579690000015.GIF" wi="100" he="75" />分别表示<img file="FDA0000483579690000016.GIF" wi="60" he="70" />的x坐标和y坐标;(2)矢量地图块分类;将所有的块划分为两类,normal块和empty块,将块B<sub>i</sub>的顶点数目记为<img file="FDA0000483579690000017.GIF" wi="108" he="79" />如果<img file="FDA0000483579690000018.GIF" wi="174" he="80" />则块B<sub>i</sub>为normal块;否则,块B<sub>i</sub>为empty块;(3)记录矢量地图块类型;生成包含N<sub>B</sub>个元素的序列F,记录步骤(2)中每个块的类型,F={f<sub>i</sub>|f<sub>i</sub>∈{0,1},i=1,...,N<sub>B</sub>}其中,f<sub>i</sub>=0表示第i块为一个normal块,f<sub>i</sub>=1表示第i块为一个empty块;(4)生成认证水印;生成步骤(2)中每个normal块的认证水印,将块B<sub>i</sub>的水印信息记为H<sub>i</sub>,H<sub>i</sub>={h<sub>i,j</sub>∈{0,1},j∈[0,L-1]}其中,L表示Hi中比特的数目,h<sub>i,j</sub>(0≤j≤L–1)表示Hi中第j个比特;(5)嵌入认证水印;将步骤(4)中生成的认证水印嵌入到normal块中,在normal块中嵌入水印(5.1)依据矢量地图块B<sub>i</sub>的边界,计算B<sub>i</sub>的中心<img file="FDA00004835796900000111.GIF" wi="396" he="78" />和<img file="FDA00004835796900000112.GIF" wi="70" he="69" />分别表示中心B<sub>c,i</sub>的x坐标和y坐标;(5.2)生成一个以B<sub>c,i</sub>为中心,r为半径的圆CB<sub>i</sub>(B<sub>c,i</sub>,r),将在圆CB<sub>i</sub>(B<sub>c,i</sub>,r)的圆周上插入含水印顶点以隐藏认证水印,半径r的取值为:<maths num="0001"><![CDATA[<math><mrow><mo>(</mo><msubsup><mi>B</mi><mrow><mi>i</mi><mo>,</mo><mi>max</mi></mrow><mi>x</mi></msubsup><mo>-</mo><msubsup><mi>B</mi><mrow><mi>i</mi><mo>,</mo><mi>min</mi></mrow><mi>x</mi></msubsup><mo>,</mo><msubsup><mi>B</mi><mrow><mi>i</mi><mo>,</mo><mi>max</mi></mrow><mi>y</mi></msubsup><mo>-</mo><msubsup><mi>B</mi><mrow><mi>i</mi><mo>,</mo><mi>min</mi></mrow><mi>y</mi></msubsup><mo>)</mo></mrow></math>]]></maths>(5.3)将认证水印Hi转换成要嵌入的水印序列W<sub>i</sub>={W<sub>i,j</sub>|j∈[0,N<sub>A</sub>–1]},W<sub>i,j</sub>表示序列Wi中第j个元素,N<sub>A</sub>表示序列W<sub>i</sub>中元素数目;(5.4)根据密钥K<sup>d</sup>,生成双精度浮点数序列A<sub>i</sub>={A<sub>i,j</sub>|j∈[0,N<sub>A</sub>–1],(0≤A<sub>i,j</sub>&lt;180)},A<sub>i,j</sub>表示序列A<sub>i</sub>的第j个元素,序列A<sub>i</sub>即用来嵌入水印序列W<sub>i</sub>的角度序列;(5.5)对于序列Wi的每个元素W<sub>i,j</sub>(j∈[0,N<sub>A</sub>–1]),嵌入到序列A<sub>i</sub>中的第j个角度A<sub>i,j</sub>的尾数部分,将得到的含水印角度记为A<sub>i,j</sub>';(5.6)依据含水印角度A<sub>i,j</sub>',计算在圆CB<sub>i</sub>的圆周上的含水印顶点<img file="FDA0000483579690000021.GIF" wi="281" he="77" />的位置,<maths num="0002"><![CDATA[<math><mfenced open='{' close=''><mtable><mtr><mtd><msubsup><mi>r</mi><mi>j</mi><mi>a</mi></msubsup><mo>=</mo><msub><mi>A</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>&prime;</mo><mo>&times;</mo><mrow><mo>(</mo><mi>&pi;</mi><mo>/</mo><mn>180</mn><mo>)</mo></mrow></mtd></mtr><mtr><mtd><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mi>x</mi></msubsup><mo>=</mo><msubsup><mi>B</mi><mrow><mi>c</mi><mo>,</mo><mi>j</mi></mrow><mi>x</mi></msubsup><mo>+</mo><mi>r</mi><mo>&times;</mo><mi>cos</mi><mrow><mo>(</mo><msubsup><mi>r</mi><mi>j</mi><mi>a</mi></msubsup><mo>)</mo></mrow></mtd></mtr><mtr><mtd><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mi>y</mi></msubsup><mo>=</mo><msubsup><mi>B</mi><mrow><mi>c</mi><mo>,</mo><mi>i</mi></mrow><mi>y</mi></msubsup><mo>+</mo><mi>r</mi><mo>&times;</mo><mi>sin</mi><mrow><mo>(</mo><msubsup><mi>r</mi><mi>j</mi><mi>a</mi></msubsup><mo>)</mo></mrow></mtd></mtr></mtable></mfenced></math>]]></maths>其中,<img file="FDA0000483579690000023.GIF" wi="69" he="76" />和<img file="FDA0000483579690000024.GIF" wi="54" he="76" />分别表示v<sub>i,j</sub>的x坐标和y坐标,将计算得到的含水印顶点集合记为V<sub>i</sub>={v<sub>i,j</sub>|j∈[0,N<sub>A</sub>–1]};(5.7)将V<sub>i</sub>中的含水印顶点插入到矢量地图中,得到含水印矢量地图;(6)水印认证及原始数据恢复;将含水印矢量地图的图元划分为互不重叠的块;根据步骤(3)中序列F识别每个块的类型;对于empty块,块中含有顶点,则视其遭到了篡改;否则,认为该块通过认证,对于normal块:(6.1)根据步骤(5)中计算块B<sub>i</sub>'的中心<img file="FDA0000483579690000025.GIF" wi="332" he="76" />并生成以B<sub>c,i</sub>'为中心,r'为半径的圆<img file="FDA0000483579690000026.GIF" wi="388" he="74" />和<img file="FDA0000483579690000027.GIF" wi="84" he="75" />分别表示中心B<sub>c,i</sub>'的x坐标和y坐标;(6.2)搜索CB<sub>i</sub>'圆周上所有的顶点,将CB<sub>i</sub>'圆周上所有顶点的集合记为<maths num="0003"><![CDATA[<math><mrow><msubsup><mi>V</mi><mi>i</mi><mi>c</mi></msubsup><mo>=</mo></mrow></math>]]></maths><maths num="0004"><![CDATA[<math><mrow><mo>{</mo><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mi>c</mi></msubsup><mrow><mo>(</mo><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mrow><mi>c</mi><mo>,</mo><mi>x</mi></mrow></msubsup><mo>,</mo><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mrow><mi>c</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>)</mo></mrow><mo>|</mo><mi>j</mi><mo>&Element;</mo><mo>[</mo><mn>0</mn><mo>,</mo><msub><mi>N</mi><mi>c</mi></msub><mo>-</mo><mn>1</mn><mo>]</mo><mo>)</mo><mo>}</mo><mo>,</mo><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mi>c</mi></msubsup></mrow></math>]]></maths>表CB<sub>i</sub>'圆周上第j个顶点,<maths num="0005"><![CDATA[<math><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mrow><mi>c</mi><mo>,</mo><mi>x</mi></mrow></msubsup></math>]]></maths>和<maths num="0006"><![CDATA[<math><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mrow><mi>c</mi><mo>,</mo><mi>y</mi></mrow></msubsup></math>]]></maths>分别表示顶点<maths num="0007"><![CDATA[<math><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mi>c</mi></msubsup></math>]]></maths>的x坐标和y坐标,N<sub>c</sub>表示V<sub>i</sub><sup>c</sup>包含的顶点数目;(6.3)获得所有可能的含水印顶点集合,将含水印顶点集合的序列记为<maths num="0008"><![CDATA[<math><mrow><msubsup><mi>V</mi><mi>i</mi><mi>p</mi></msubsup><mo>=</mo><mo>{</mo><msubsup><mi>V</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mi>p</mi></msubsup><mo>|</mo><mi>j</mi><mo>&Element;</mo><mo>[</mo><mn>0</mn><mo>,</mo></mrow></math>]]></maths><maths num="0009"><![CDATA[<math><mrow><msub><mi>N</mi><mi>p</mi></msub><mo>-</mo><mn>1</mn><mo>]</mo><mo>}</mo><mo>,</mo><msubsup><mi>V</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mi>p</mi></msubsup><mo>=</mo><mo>{</mo><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>,</mo><mi>k</mi></mrow><mi>p</mi></msubsup><mrow><mo>(</mo><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>,</mo><mi>k</mi></mrow><mrow><mi>p</mi><mo>,</mo><mi>x</mi></mrow></msubsup><mo>,</mo><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>,</mo><mi>k</mi></mrow><mrow><mi>p</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>)</mo></mrow><mo>|</mo><mi>k</mi><mo>&Element;</mo><mo>[</mo><mn>0</mn><mo>,</mo><msub><mi>N</mi><mi>A</mi></msub><mo>-</mo><mn>1</mn><mo>]</mo><mo>}</mo></mrow></math>]]></maths>表示一个可能的含水印顶点集合,通过从<maths num="0010"><![CDATA[<math><msubsup><mi>V</mi><mi>i</mi><mi>c</mi></msubsup></math>]]></maths>中选取N<sub>A</sub>个不同的顶点获得,<img file="FDA00004835796900000216.GIF" wi="96" he="81" />表示可能含水印顶点集合<img file="FDA00004835796900000217.GIF" wi="80" he="74" />中第k个顶点,<img file="FDA00004835796900000218.GIF" wi="101" he="78" />和<img file="FDA00004835796900000219.GIF" wi="89" he="78" />分别表示顶点<img file="FDA00004835796900000220.GIF" wi="94" he="81" />的x坐标和y坐标,<img file="FDA00004835796900000221.GIF" wi="222" he="90" />表示可能含水印顶点集合的数目;(6.4)对于<img file="FDA00004835796900000222.GIF" wi="74" he="67" />中每个可能含水印顶点集合<img file="FDA00004835796900000223.GIF" wi="104" he="77" />(6.4.1)利用步骤(4)中描述的水印生成方法生成B<sub>i</sub>''的水印信息H<sub>i</sub>'={h<sub>i</sub>,<sub>j</sub>'|h<sub>i</sub>,<sub>j</sub>'∈{0,1},j∈[0,L–1]},B<sub>i</sub>''表示不包含<img file="FDA00004835796900000224.GIF" wi="79" he="77" />中顶点的块B<sub>i</sub>';(6.4.2)生成一个含水印顶点集合<maths num="0011"><![CDATA[<math><mrow><msub><mi>V</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>&prime;</mo><mo>=</mo><mo>{</mo><msub><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>,</mo><mi>k</mi></mrow></msub><mo>&prime;</mo><mrow><mo>(</mo><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>,</mo><mi>k</mi></mrow><mi>x</mi></msubsup><mo>&prime;</mo><mo>,</mo><msubsup><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>,</mo><mi>k</mi></mrow><mi>y</mi></msubsup><mo>&prime;</mo><mo>)</mo></mrow><mo>|</mo><mi>k</mi><mo>&Element;</mo><mo>[</mo><mn>0</mn><mo>,</mo><msub><mi>N</mi><mi>A</mi></msub><mo>-</mo><mn>1</mn><mo>]</mo><mo>}</mo><mo>,</mo><msub><mi>v</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>,</mo><mi>k</mi></mrow></msub><mo>&prime;</mo></mrow></math>]]></maths>表示V<sub>i,j</sub>'的第k个顶点,<img file="FDA0000483579690000031.GIF" wi="109" he="77" />和<img file="FDA0000483579690000032.GIF" wi="106" he="75" />分别表示顶点v<sub>i,j,k</sub>'的x坐标和y坐标;(6.4.3)如果<img file="FDA0000483579690000033.GIF" wi="240" he="78" />块B<sub>i</sub>'包含其相应的含水印顶点,块B<sub>i</sub><sup>'</sup>通过完整性认证,删除<img file="FDA0000483579690000034.GIF" wi="79" he="76" />中的顶点以恢复原始数据,块B<sub>i</sub>'的认证过程到此结束;否则,重复步骤(6.4)直至<img file="FDA0000483579690000035.GIF" wi="72" he="76" />所有的集合都测试完毕;(6.5)如果<img file="FDA0000483579690000036.GIF" wi="74" he="76" />中没有一个可能含水印顶点集合是块B<sub>i</sub>'的含水印顶点集合,则认为块B<sub>i</sub>'遭到了篡改。
地址 150001 黑龙江省哈尔滨市南岗区南通大街145号哈尔滨工程大学科技处知识产权办公室