半夜玩儿了会儿“隐写术”,觉得很有意思。在东游西晃找资料的过程中,发现其实记录下一个问题的解决思路是很有意义的一件事情。
在这个小节里,我打算回顾一下asp的解决过程。
不过,首先,我还是想先复盘一下玩儿隐写术的过程,asp持续时间太长,对于俺的历史问题,俺得跟少奇同志一样,慢慢想。
可以提前说一句的是,现在搞开发,离了google真的玩儿不转啊。。。甚至可以说,对google的使用直接反应到开发的水准上。而对google的使用技巧,最直接的体现就是keyword的设定。
对一个模糊的问题,就是通过对google查询关键词的不断尝试,逐步收敛寻找范围,直到知道到底需要什么。
google的过程,其实就是一个帮助你理清思路、发现重点和关键的过程。
这里还想吐槽一下百度,我会说每次查询google被墙,我都在微博上发一条消息:“傻X百度”么?嘿嘿。。。
顺便感谢下我老妹,俺看的好多论文都是她给俺下载的,有免费的账号混cnki和万方真是爽啊~~
好了,言归正传,以下的文字就是记录一下俺使用google的过程:
故事的起因是这样的,在网上转着玩儿的时候,发现贴吧里面有种玩法是:贴上去一张图片,肉眼看到的可能是一只猫咪,但是实质上,这张图片中隐藏了发帖者想说的文字信息。不明觉厉啊~~~~
于是,开始了我的探险之旅:
1. google keywords 图片隐藏文字,得到结果:
SilentEye 0.4.0 (图片隐藏文字加密工具) - 腾讯下载频道
2. google SilentEye 得到结果:
SilentEye - Steganography is yours
3. 好吧,我已经没有兴趣点进去看了, 真正的关键词找到了: Steganography (隐写术) 继续google:
Steganography - Wikipedia, the free encyclopedia
4. 嗯,要找的就是这个。先猜测一下:
色彩空间指的是一个pixel 的 r g b 数值, 与数字3进行逻辑与 (& 11) 也就是取得后两位的bit值。
亮度增强85倍 是切换到HSL (hue色相、saturation饱和度、lightness亮度)再次进行计算(对L * 85)——得到猫咪。
5. 好吧,现在该考虑自己怎么实现一个的问题了。先看看别人怎么用的,在wiki的 Application : Example from modern practice 段落里,提到了这么一个东东—— least significant bit
6. google 关键词 least significant bit,找到了很多文档,个人比较喜欢这个《SLSB: Improving the Steganographic Algorithm LSB》
7. 读了一遍,看看结构图:
看到这句话:The choice of Sample Pairs analysis over other stegoanalitics methods is due to the results provided by the work of Ker [13], where this analysis shows that it is offering better results in terms of detecting hidden information.
8. 按图索骥 Reference :13 Ker, A.: Improved detection of LSB steganography in grayscale images. Proc. 6th Information Hiding Workshop. Springer LNCS, vol. 3200, pp. 97-115, 2004.
9. 继续看下载的pdf 《Improved Detection of LSB Steganography in Grayscale Images》
10. 嗯,其实ref 13 的工作是找到可疑的网络图片——这个是斯诺登(snowden)同志干的活儿啊。而《SLSB》就是根据 《Detection》反其道而行之,防止被识别。
11. 鉴于LSB是一个比较基础和简单的设计,应该把事情搞得复杂点儿。
12. 《SLSB》已经提到了一个概念,如分类为:空间域和变换域。不过一想起变换域,我脑海里就浮现出傅里叶大爷,至于文中还提到的离散余弦变换和小波变换,让我感觉非常头疼。。。
13. 算了,不想技术实现问题,先发散下,自己设计一个,比如:类似photoshop的“图形扭曲”效果?——真正的问题是:要确保变换是可逆的啊。。。
14. 好吧,keywords 设定为 图片 picture 、扭曲 twist 和 逆变换 inverse transform, google一下 “picture twist inverse transform”,得到:
CanonicalTransform
15. 不知道说啥,下载了看看。
16. 如我所料,这种资料头三句必然出现傅里叶大爷的身影(Fouriertransform)。傅里叶大爷,你真大爷的啊。。。
17. 先扫读一遍吧,看到
Reference:
1. Optimalfiltering with linear canonical transformations.
2. http://en.wikipedia.org/wiki/Arnold's_cat_map
19. 有点儿意思了:从有序到混沌然后返回有序。下图表示:一张猫咪图片迭代300次后恢复原状。
20. 结合之前《SLSB》提到的:Randomized Algorithm——收发两方使用同样的伪随机数生成器,通过一个随机种子,使得对方获得你想告知的数字。OK,可以传递当前迭代到的序号啊。
21. 嗯,大体可以这么设计:
a) 发送方先用SLB做一只猫咪
b) 迭代到第N步
c) 传递seed 告知对方 还需要 M 步
d) 收方获得图和seed,生成器产生数字 M
e) 迭代M步
f) 获得原始图
g) 解开SLB
h) 将获得的内容byte array处理(可能还需要继续解密或者unzip等)
i) END
22. 在玩儿的兴致差不多够了的时候,决定在看看 阿诺德的猫咪 到底是干啥的。
23. 哈哈,看来我的设想还真是靠谱:
找到这么一篇论文《一种带有猫映射动态置换盒的分组密码 》
对猫映射的混沌特性进行研究,提出一种基于迭代二维猫映射的动态置换盒(S-盒)生成方法,由此构造一种基于S-盒的加密算法。
虽然继续不明觉厉,但是,这只”猫咪“果然是干加密的”特工猫“啊~~~
24. 不过 S-盒 是干啥的呢? 抽完一支烟之后,俺决定还是洗了睡吧 -_-b