电子证据哈希校验基础知识
作者:琚新国律师 发表时间:2025-1-6
内容摘要:本文以图片数据为例,介绍电子数据及哈希校验基础知识。
关键词:电子数据 电子证据 哈希校验
一、图片的组成
图片是由一系列的点组成的。我们在屏幕上把图片放大,就可以看到:
当放大到一定程度,我们就会发现一些小方格,每一个方格就是一个“像素点”,也是一个单一颜色的“点”,只不过放大了以后,电脑屏幕需要用一定大小的面积来表示这个点,所以就显示成了方格。(其实,多大属于点,多大属于面,通常情况下人们是根据感觉来说的。在数学意义上,点是没有大小的。只要有大小,都属于面。本文暂且用“点”这个词语来代表一个像素,不是从数学意义上说的,而是为了方便大家理解。)第一张图之所以看上去最清晰,是因为恰好电脑屏幕的一个像素显示图片的一个像素,而且电脑屏幕的每一个像素又足够小,小到人类肉眼可以忽略的程度。(人眼能识别的像素点大小约为0.1毫米,当像素点直径等于或小于0.1毫米时,人眼就看不到像素点了,也就是说,人眼只能看到多个像素点组成的大于0.1毫米的点或面了。)我们平常所讲的“分辨率”如“1024×768”就是指“横向有1024个像素点、纵向有768个像素点”,总共有1024×768=786432个点。图片的清晰度是人眼的感觉,与像素点的大小有关,而与显示屏的大小无关。当显示屏大小固定时,像素点越多,则每个像素点越小,显示的清晰度越高。
二、电子图片的组成
既然图片是由像素点组成的,那么,只要把所有的像素点都按顺序保存下来,就把图片保存下来了。需要重现图片的时候,只要按原来顺序重新排列显示所有的像素点就可以了。电子图片就是这样的,它首先在图片上逐行选取像素点(像素点面积越小,扫描出来的点越多,分辨率越高),把每一个像素点的颜色用一个数字记录下来,需要重现图片的时候,再把每一个数字还原显示为它所代表的颜色,并按原来顺序拼好。原理很简单,但实际做起来会发现,我们选出来的颜色太多,几乎选不到完全相同的颜色,为什么会这样的呢?因为自然界颜色太多了。我们平常所说的红、绿、蓝、黄、等,只不过是人眼感觉最敏感的几种颜色而已。
如上图,就是我们在中学课堂上用三棱镜对自然光散射后形成的彩色光,在红、黄、绿、蓝过渡区,有无数种颜色,在左右不同位置选取颜色,选出来的颜色都是不同的,选取的位置越靠近,颜色越接近。只是人眼识别能力有限,所以,当位置足够近,人眼会觉得选出来的颜色是一样的。例如:
上图说明,当两个颜色分开时,人眼识别不了,当两个颜色叠加时,人眼就识别出来了,说明人眼的识别能力在不同的情况下会有差别。但是,当两个颜色十分接近时,即使叠加起来,人眼也识别不了,那么,人眼识别的极限就可以被测量出来了。经过反复试验,当我们把自然光分解成1000万种颜色左右时,就达到了人眼识别的极限,于是,再细分下去对于人眼而言就没有意义了,所以,我们可以预先把这1000万种颜色确定下来,以后无论碰到什么颜色,都用这1000万种颜色中最接近的颜色来表示(反正人眼也识别不出来有什么不同),就可以“逼真还原”了。
接下来,我们需要做的工作是对这1000万种颜色进行编码,也就是给每一种颜色赋予一个数字代码,固定下来,以后在所有场合,都用这个数字代码代表这一个颜色,于是,1000万种颜色就都有了代码。(比如:红色为1、绿色为2、粉色为3……蓝色为9800……白色为10000000。总之,需要1000万个数字。)
我们知道,计算机是“二进制”的,它只能识别类如“01010011”这样的二进制数字代码,所以我们要用二进制来表示颜色,就需要1000万个二进制数(从0开始:0、1、10、11、100、101、111、1000、1001、……100110001001011010000000),即:一直从0排到“100110001001011010000000”(这个值等于十进制的1000万)。由于这个值总共有24个“0”和“1”,我们就称之为“24位”数。只有这样长的二进制数才足够把1000万种颜色逐一编码,这样编出来的1000万种颜色,我们称之为“24位真彩色”。
现在,我们再回到前面,当我们在图片上选取像素点时,每选出来一个点,就对它的颜色进行分析,看它最接近1000万种颜色中的哪一个颜色,就用那个颜色来代替,然后把对应的“24位编码值”记录下来就行了。
所以,电子图片,可以理解为就是所有像素点的颜色代码。
一张图片动不动就是几十万、几百万、几千万个像素点,所以,图片在计算机中是比较占地方的。但是,无论占再多的位置,它都只不过是更多的“0”和“1”组成的更长的“二进制串”而已。所以,一张图片保存在电脑里的样子就是像这样的:“01010001110101011110101010010001010111010110100000110101101001010101000100011110101101110100001011001010010101011……(后面还有很长很长)”这个长串奇妙之处就在于它既是一串代表颜色的代号,又是一串二进制数值。当它被看作一个二进制数值时,就可以用数学方法对它进行各种运算变化,而哈希校验值就是一种具体的运算应用。
三、电子图片作为证据时的取证要求——哈希校验值
电子图片作为证据使用时,应当计算哈希校验值。
这里举例一个“哈希算法”的过程就可以帮你理解什么是哈希校验值:第一步,先把图片数据的原始二进制值进行切割,比如把“01010001110101011110101010010001010111010110100000110101101001010101000100011110101101110100001011001010010101011……(后面还有很长很长)”切割成一段一段的,每段的长度是256位,总共得到400个段(最后一段如果位数不足,就用0或1补足)。第二步,加密计算,对400个段进行加减乘除(或更复杂的)运算,最后得到一个结果值,就把这个结果值看作是一个“特征码”。第三步,记好这个特征码(一般转换成16进制值,以便保存)。第四步,对图片进行复制粘贴操作。第五步,验证一下复制粘贴后的图片是否与原图完全一致?验证过程就是对图片复制件也进行一次与前面完全一样的“哈希计算”,也得出一个“特征码”,与前面那个“特征码”进行比较,看是否一致。由于数学计算是比较精确的,只要数值稍有差错,结果就会不一致,因此,用这种方法能更为容易的判定图片在复制粘贴后是否与原图片一致。在图片比较简单,容易用肉眼看出差别的情况下,哈希校验没有什么优势。但是,在图片复杂、或数据量较大的情况下,凭肉眼就不能胜任了,就需要用哈希校验的方法来辅助判定了。(进一理解哈希校验,需要理解计算机内存陈列、内存地址与寻址、哈希值与寻址的关系等,有兴趣的读者可阅读《计算机组成原理》、《数据结构》等)
四、哈希校验只能证明数据的一致性,不能直接证明数据的真实性、客观性。
由前述可知,为了检验复制、粘贴、下载后的数据是否与原始数据一致,我们事先计算了哈希值。这就要求:在第一次计算哈希值之前,必须确保数据本身是真实的、完整的、未被修改的,如果在第一次计算哈希值之前,数据已经被修改,那么,这第一个哈希值就没有多大意义了,因为它只能用于检验在它之后的复制粘贴是否与此前数据一致,而不可能用于检验是否与更早的数据一致。所以,我们必须明确:哈希校验只能证明“两份数据是否一致”,而不能用于直接证明“数据是否真实客观”。只有当事先已经确定了真实客观的数据并以此数据作为比较的样本(且以此数据产生了正确的哈希值),才能进一步用哈希校验的方法证明第二份数据是否也是真实的。所以,当我们对一份电子数据证据产生质疑的时候,如果哈希校验表面上看没有问题,就需要进一步查明哈希校验值本身是否可靠,查明的方法就是:探讨“计算这个哈希校验值所使用的数据源”是否真实可靠、哈希校验值产生时间是否正确,以及计算的过程是否可信。