XML(Extensible Markup Language,可扩展标记语言)不是普通的文本语言,它用于置标电子文档,是一种使其数据具有结构化的置标语言。从而可利用些特性,将秘密的信息隐藏到XML文本中。
可以实现的原因,原理:
XML不是一种普通的文本文件,而是一种结构化的文本,通过改变XML的标示字体的物理特性或变换DTD声明及其应用能量中的原始XML文档的逻辑结构,将信息隐藏到XML的原始文档中。
信息隐藏技术是将秘密的信息隐藏到电子数据中。在这个领域中,有很多方法是通过设置秘密的通信渠道,利用这种渠道,发送者的身份很难被确定。可分为两类:一种将秘密的信息加到传送的信息中,一种是数字水印。
信息隐藏的两个领域:数字水印和密码学的方法。都通过将信息藏到消息中进行无察觉的秘密信息传送。
隐藏信息的一般过程分析:
称待隐藏的信息为秘密信息(Secret Message),而公开信息为载体信息(CoverMessage).其隐藏过程一般由密钥(Key)来控制,即通过嵌入算法(Embedding algorithm)将秘密信息隐藏于公开信息中,而隐蔽载体(隐藏有秘密信息的公开信息)则通过信道(Communication Channel)传递,然后检测器(Detector)利用密钥从隐蔽载体中恢复/检测出秘密信息。
信息隐藏技术的组成:
1、 信息嵌入算法,它利用密钥来实现秘密信息的隐藏。
2、 隐蔽信息检测/提取算法(检测器)、它利用密钥从隐蔽载体中检测/恢复出秘密信息。
三种文本信息隐藏技术:
1、 基于文本内容密度的方法
在这种方法中,载体文本和隐秘文本具有同样的意义。主要有两种方法:一种是运用同义词替换,在不改变隐秘文本意义的前提下来隐藏信息;另一种是密码学的方法,它是利用给定模版的自动文本格式来隐藏信息。
2、基于显示密度的方法
这种方法是在保证文本内容不变的情况下,在一定范围内改变文本的显示格式来隐藏信息。这种方法中的很多是被作为一种数字水印孤方法提出的,并且要求其文档有特殊的物理格式。
根据这种原理,可以有很多方法。如可以通边改变属性、单词、行之间的空白的大小来隐藏信息,也可以通过改变文档中字体的尺寸来隐藏信息。这样,可将信息隐藏到PDF和附件的文档中。
这些方法都依赖于文本的物理结构,当然,这些方法也同样可以用在XML文档中。
3、依赖于标示字体的隐藏方法
用这种方法,并不影响程序的运行结果,可通过改变标示字体的代号来隐藏信息,也可将信息隐藏到一行末尾的空白处。缺点:可能随着程序应用的改变而丢失。
XML中的信息隐藏
1、XML的特征
XML可以看作是SGML的一个子集,它是一种元置标语言,允许用户在XML文档中根据需要定义特定的置标及属性,使信息内容有结构的进行描述,从而使XML文件的结构可以复杂到任意程度。
2、XML中的信息隐藏方法
1)利用子元素进行信息隐藏
利用标记属性的表示方法不同进行信息隐藏。在XML文档中,标记属性的标示方法有几种,可以在标记中直接表示属性,也可以种用元素中的子元素来表示属性。
如:
Example 1:
密钥(一种表示方法嵌入一位数据)
<book write =“李林”></book>:0
<book><write>李林</write></book>:1
隐秘文本
<book write = “李林”>foot1</book>
<book><write>李林</write></book>
嵌入数据:01
2)样式变化的信息隐藏方法
仅仅改变文档的物理结构而非逻辑结构来将信息隐藏到文档中。
Example 2:
密钥(一种表示方法嵌入一位数据)
<event month = “月” data = “日”>EVENT</event>:0
<event month = “月” data = “日”>EVENT</event>:1
隐秘文本
<event month = “ 9” data = “ 4” > Independence day</event>
<event month = “ 10” data = “ 24” >Christmas</event>
嵌入数据:01
3)利用标示字体的变化在XML文档中隐藏信息
在XML文档中,标示字体是区分大小写的,可利用些特征进行信息隐藏,还有一点是可以通边改变标示字体的开头字母来隐藏信息。
Example 3:
密钥(一种表示方法嵌入一位数据)
<mytag>, </mytag>, or <mytag/>:0
<_mytag>, </_mytag>, or <_mytag/>:1
隐秘文本
<mytag>XML文档</mytag>
<_mytag>顺序</_mytag>
嵌入数据:0011
Example 4:
密钥(一种表示方法嵌入一位数据)
<mytag>, </mytag>, or <mytag/>:0
<_mytag>, </_mytag>, or <_mytag/>:1
隐秘文本
<mytag><name>李明</name></mytag>
<MYTAG><NAME>顺序</NAME></MYTAG>
嵌入数据:00001111
4)通过改变属性的命名来进行信息隐藏
XML属性与置标的命名原则一致:必须以字母或下划线开头,后面的字符可以是字母、数字、下划线、短横和圆点。属情名对大小写敏感,不允许在一个置标中出现同名的属性,即使是使用大小写进行区别也不能使用。可利用属性的开头字母和大小写的区分来隐藏信息。
Example 5:
密钥(一种表示方法嵌入一位数据)
<book name=“NAME” write = “WRITE”></book>:0
<book NAME=“NAME” WRITE = “WRITE”></book>:1
隐秘文本
<book name = “王丽” write = “foot”>order</book>
<book NAME = “理想” WRITE = “FOOT”>HOUTIAN</book>
嵌入数据:01
Example 6:
密钥(一种表示方法嵌入一位数据)
<book name=“NAME” write = “WRITE”></book>:0
<book _name=“NAME” _write = “WRITE”></book>:1
隐秘文本
<book name = “小张” write = “foot”>order</book>
<book _name = “小李” _write = “FOOT”>HOUTIAN</book>
嵌入数据:01
5)改变置标之间的尺寸来隐藏信息
在XML中,两个置标之间的大小是没有确切规定的,可通过改变起始置标和结束标之间的大小来隐藏信息。
Example 7:
密钥(一种表示方法嵌入一位数据)
<mytag>
</mytag>:0
<mytag></mytag>:1
隐秘文本
<root>
<mytag>
XML文档
</mytag>
<mytag>书店</mytag>
嵌入数据:01
6)改变同名元素的排列顺序来隐藏信息
当同名的元素被重复显示在XML文档中时,可以改变这些元素的排列顺序来隐藏信息,这些元素在XML文档中具有相同的意义。
Example 8:
密钥(一种表示方法嵌入一位数据)
rank_high-rank_low:0
rank_low-rank_high:1
隐秘文本
<last_name>胡小</last_name>
<last_name>李明</last_name>
<last_name>艾家</last_name>
<last_name>吴忧</last_name>
嵌入数据:01