如何在字符串中隐藏秘密-用 JavaScript 隐藏现代文本

有时,最好的藏身之处就是可以看到的地方。

如果你是一个敌对国家的间谍,仅仅向美国发送一条信息就会被定罪。如果这条信息是加密的,很可能会导致更多的指控,而当你这个间谍拒绝为当局解密这条信息时,事情只会变得更糟。隐写术,字面意思是“隐藏的文字”,是关于隐藏信息的存在。

Python Forensics的创始人Chet Hosmer指出

隐写术隐藏了交流的存在。与其同类密码术不同的是,隐写术提供了最有趣的“隐藏在显而易见的地方”的方法。

你知道上面引用的隐写术,隐藏着一个看不见的秘密吗?如果我没有提到它,你能发现它的存在吗?

Unicode中的不可见字符

零宽度字符是非打印字符,是Unicode表的一部分。顾名思义,它们甚至不露面。它们被用来实现长单词中的换行、连接表情符号、将两个字符合并成一个连字,防止它们连接等等。

这些字符越来越多地找到了在文本中隐藏的方式,它们的完全隐形是一个显著的卖点。因为它们是多种语言和表情符号的组成部分,所以不能被屏蔽。而且,ZWCs并不是唯一看不见的字符。无形分隔符- U+2063。

这有一个小问题,Gmail会阻止U + 200B(零宽度空格)。更不用说,Twitter以将不必要的不可见字符列入黑名单而闻名,表中除了U+200C、U+200D和U+180e之外,其他字符都不能使用。所以我们现在有三个字符!

但U+180e并不是不可见的,而且在iOS设备中呈现的很奇怪。我们现在只有2个字符。

因此,我们拆分了Unicode表,并测试每个可能不可见的字符的跨平台/ web不可见性。幸运的是,我们又增加了4个字符,总共6个不可见的字符,我们可以用字符串来隐藏我们的秘密。都准备好了!准备好攻击…!

什么是StegCloak ?它是如何工作的?

StegCloak是一个纯JavaScript的隐写模块,在经过两层最大可能压缩和一层加密之后,可以用来在纯文本中隐藏秘密。因此,它不仅隐藏了这个秘密,而且还通过你选择的密码和一系列其他功能来保护它。来看看我们的演示吧。

隐藏信息

查看隐藏信息

关于StegCloak如何隐藏和压缩您的秘密的简要想法

步骤1:压缩和加密机密。

安全从来没有在这类“黑客”中扮演过一个角色,通过StegCloak,我们希望它能满足Kerckhoff的原则:
理想的加密系统应该是安全的,即使系统的所有信息都向公众公开,机密密钥除外。
即使攻击者确定了算法的工作原理,也不可以泄露秘密消息。

满足原则

为此,我们需要基于密码的对称加密。考虑到人们倾向于使用小而弱的密码,以及他们偏好多次使用同一个密码,我们决定从给定的密码中推出一个强密钥,并通过引入随机盐来增加密钥的随机性。通过分析同一个密钥生成的多个密文,需要密钥的随机性来防止攻击。现在,在像ECB或CBC这样的AES中通常的块密码模式导致了至少16字节块的额外填充。所以发送“Hi”CBC模式垫0使它的长度为16,并删除在提取期间。这是不好的。因此,我们使用流加密模式CTR (padding less cipher)来生成密文。

步骤2:使用多余的两个字符再次编码并压缩

如上图所示,尽管我们有6个ZWC字符,但只有4个字符被使用,因为6不是2的幂。这两个额外的字符(U+2063, U+2064)用于执行额外的一层抽象的霍夫曼压缩以减少冗余。在秘密被转换为ZWCs之后,流中两个最重复的ZWCs就被确定了,比如U+200D和U+200C。现在,每两个连续出现的U+200Ds和U+200Cs都被一个U+2063或U+2064取代。这节省了大量的冗余,因为经常观察到冗余。

步骤3:将不可见的流嵌入到封面文字的第一个空格中。

‘ Hi ‘现在隐藏在hello world中为6个字符,所以现在这个字符串的总长度是

10 + 6 = 16个字符

提取


反之亦然,并不复杂,但考虑到当我们添加加密和隐形等特性时,有效载荷的长度会增加,我们做了两层压缩(之前和之后),以尽可能减少成本。所以这只是救赎的一个小代价。
您可以在任何时间关闭某些功能以减少有效载荷长度,我们设计了StegCloak以灵活满足用户需求。

模块样式

StegCloak遵循函数式编程范式,整体上只包含两个函数:hide和reveal。这两个功能是用多个小的乐高积木构建的。这些作品都是纯函数或者是相同纯函数的不同版本。StegCloak只有一个非纯函数,即‘encrypt()’,因为它会生成一个随机的salt来增加密码的安全性。

运作流程


在我看来,采用功能性方法会使您的程序看起来更像流程图,从而提高了程序的可读性。


StegCloak使用称为RamdaJS的功能编程库。R.Pipe接受函数并将参数传递给第一个函数,在此将其输出作为管道中下一个函数的输入。您会看到,可以将这些碎片代理到另一个管道或对其进行操作,然后再发送到下一个管道。可读性和无点样式是设计的最大重点之一

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!