【密码学】一文读懂视觉加密(Visual Cryptography)
近来,发现了一个比较有意思的加密体系,这个加密体系引起了我的童年的回忆,虽然这两个的原理不一样,本文,数学元素几乎没有,读者可以放心食用。
不知道,读者们是否看过《冒险小虎队》这一本书,每当书中扣人心弦的故事进入高潮的时候,书页便会留下一个悬念,“想知道接下来发生了什么?请取出解密卡”。
这张解密卡,可谓是好多人的童年回忆了。这个解密卡的原理,实际上是一个物理现象,莫尔条纹现象(Moiré pattern)[2],利用密码学的手段,也可以实现相同的效果,那便是本文所描述的视觉密码体系[3]。
**视觉密码(Visual Cryptography)**一词是由Naor和Shamir在1994年欧密会上正式提出的,它将秘密共享和数字图像结合了起来。
我们先来看一个例子,
这是一个最基本的例子,通过加密函数,把原始的秘密图形加密成为两个加密之后的图形,从加密之后的图像之上,没有办法看到具体的信息,但是,把这两个图像叠加之后,便可以恢复出来原始的图像信息。
可视密码的定义
接下来,我们就来看一下,可视密码的详细定义。对于秘密图像中的每一个像素都需要单独的处理,这里通过n个人共享,每个共享由m个黑白子像素组成。首先构建一个的布尔矩阵,当表示第i个共享者的第j个子像素为黑,反之第i个共享者的第j个子像素为白。然后,如果我们叠加共享的图片的时候,相当于对于每一行做了一个或运算。
这里,可以发现,叠加之后的图像的灰度值与进行或运算之后的向量V的汉明重量成正比,因为人眼会自动的处理这种叠加的状态,因此,我们可以把原始的图像给还原出来。
我们来看一下,可以解密成功的条件[3],对于一个的可视密码体系,我们定义两个维度是的布尔矩阵簇和,这里,我们所共享的消息有两种情况
-
如果,我们需要共享一个白色像素,那么从之中随机取出一个矩阵 -
反之,我们需要共享一个黑色像素,那么从之中随机取出一个矩阵
所选的矩阵定义了 n 个共享者中每一个子像素的颜色。如果下列条件满足则该方法有效
-
对于中的任意一个矩阵S, n行中任意k行进行或运算之后的向量的汉明重量 -
对于中的任意一个矩阵S, n行中任意k行进行或运算之后的向量的汉明重量 -
对于中的任意一个子集,将中的每一个矩阵限制到行上,得到两个矩阵簇一同样的频率包含同样的矩阵,因此不可区分。
其中:
-
m是像素扩展度,m越大,生成的图片就越大,因此,m越小越好 -
是相对差,简单理解,相对差越大,人眼识别图像越容易 -
矩阵簇是基础矩阵进行随机列置换之后的所有矩阵的集合
看了上面的定义,似乎也不是特别好理解,这里,我们通过一个例子,来看一下这一段过程。
Naor和Shamir(2, 2)方案
如上图所示,当原始图像中的某个像素X为黑像素时,我们随机选择下方的黑色像素中的任意一个,两份像素重叠之后,是黑色像素,反之,原始图像中的某个像素X为白像素时,我们随机选择上方白像素的任意一个,叠加之后是一黑一白。因为这些都是随机选取的,所以对于单张的共享的图片,是不会泄漏任何信息的,因此可以保证安全,只有当两张图片对齐之后,才可以解析获取到原始的图片。
对应的构造矩阵,可以写成下面这个样子。
我们,依次处理完成所有的像素,就可以得到对应的两份共享图片。
案例演示
这里,我们用一个简单的例子,来看一下,这个程序的过程。
第一个像素是白色,这里,我们随机选择一个,得到结果如下。
然后,依次的进行处理,可以得到如下的结果。
之后,我们叠加共享图像1和共享图像2,可以得到。
好了,到这里,整个演示过程就演示完成了。
总结
本文呢,我们看了一个,在解密的过程不需要进行数学运算的密码体系,我们只需要叠加透明的胶片,便可以实现解密的效果,整体来看,还是非常有趣的,当然,视觉加密体系其实也在发展,等有机会,再来细聊,快乐的时光过的特别快,又到了说再见的时候了,咱们下次再见~~
参考资料
-
https://baike.baidu.com/item/%E5%86%92%E9%99%A9%E5%B0%8F%E8%99%8E%E9%98%9F/5182065 -
https://en.wikipedia.org/wiki/Moir%C3%A9_pattern -
Naor, Moni; Shamir, Adi (1995). "Visual cryptography".Advances in Cryptology – EUROCRYPT'94. Lecture Notes in Computer Science. Vol. 950. pp.1–12.
原文始发于微信公众号(Coder小Q):【密码学】一文读懂视觉加密(Visual Cryptography)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论