用零宽度字符水印揭穿泄密者身份

用零宽度字符水印揭穿泄密者身份零宽度字符是躲藏不显现的,也是不行打印的,也便是说这种字符用大多数程序或编辑器是看不到的。最常见的是零宽度空格,它是Unicode字符空格,就像假如在两个字母间加一个零宽度空格,该空格是..

零宽度字符是躲藏不显现的,也是不行打印的,也便是说这种字符用大多数程序或编辑器是看不到的。最常见的是零宽度空格,它是Unicode字符空格,就像假如在两个字母间加一个零宽度空格,该空格是...

零宽度字符是躲藏不显现的,也是不行打印的,也便是说这种字符用大多数程序或编辑器是看不到的。最常见的是零宽度空格,它是Unicode字符空格,就像假如在两个字母间加一个零宽度空格,该空格是不行见的,表面上两个字母仍是挨在一起的。就比如说,我在这句话中刺进了10个零宽度空格,你能看到吗?(F​or exam​ple, I’ve ins​erted 10 ze​ro-width spa​ces in​to thi​s sentence, c​an you tel​​l?)

请你仿制括号中的英文语句到 Diff Checker中找找不同就一望而知了。前有NSA经过打印机水印追寻到了泄密者的事例,而某种程度上来说,咱们这儿所说的零宽度字符可作为辨认某些用户身份的“指纹”数据,也可十分方便地追溯到某些隐秘数据的走漏源。

为什么零宽度字符能够起到这种作用呢?
这还要从多年前的一个事情说起,其时,我仍是一支视频游戏竞赛竞技团队的队员,在团队网站中有一个私家留言板,用来发布团队内部重要的告诉信息。但终究,这些仅可内部知晓的音讯却被走漏到了其它网络论坛中,团队竞赛战略也随之被泄密。看来,这种用来同享内部信息和战略的留言板机制防不住“内鬼”。
咱们的团队网站安全做的还算到位,仅有或许的原因便是某位内部登录用户经过仿制粘贴办法把私家留言板信息走漏到其它论坛中。所以,我为网站后台保护团队写了一个脚本嵌入到留言板中,该脚天性荫蔽标识阅读了留言板布告信息的每位内部用户。
最近看到 Zach Aysan 宣布的零宽度字符的许多用途,所以我也计划把该办法给咱们共享出来,终究作用能够经过这个交互式demo来测验,其间的代码实例为JavaScript,但逻辑作用大致相同。
完结原理
具体过程和完结原理如下正向逆向Fingerprint进程所示,其用户名字符串会被转化为二进制方式,然后这些二进制方式会被转化为一系列用二进制位表明的零宽度字符,零宽度字符会被荫蔽地刺进到文本内容中。假如这种刺进了零宽度字符的文本内容被仿制粘贴到网络其它论坛中后,经过提取其间荫蔽的零宽度字符就能标识出仿制了这些信息的登录用户身份。
向文本内容中参加指纹辨认(正向Fingerprint)
1 提取登录用户的用户名,把其转化为二进制方式。这儿,咱们把用户名中的每个字母都转化为它对应的二进制方式:
const zeroPad = num => ‘00000000’.slice(String(num).length) + num;
const textToBinary = username => (
  username.split('').map(char =>
    zeroPad(char.charCodeAt(0).toString(2))).join(' ')
);
2 把这些经过二进制转化的用户名字母转化为零宽度字符。该进程中,二进制串中的每个1转化为零宽度空格,每个0转化为零宽不连字符(zero-width-non-joiner),每个字母完结转化后再在其后边加上一个零宽连字符(zero-width joiner ),然后再对下一个字母进行相似转化。
const binaryToZeroWidth = binary => (
  binary.split('').map((binaryNum) => {
    const num = parseInt(binaryNum, 10);
    if (num === 1) {
      return '​'; // zero-width space
    } else if (num === 0) {
      return '‌'; // zero-width non-joiner
    }
    return '‍'; // zero-width joiner
  }).join('') // zero-width no-break space
);
3 将终究转化过的“用户名”刺进到需求保密的信息文本内容中。只需向信息文本内容中刺进零宽度字符块即可。
向参加指纹辨认的文本内容中提取用户名信息(逆向提取Fingerprint)
1 从参加指纹辨认的文本内容中提取出零宽度方式的用户名。也便是删去那些咱们看得到的文本信息,只留下零宽度字符。
2 把零宽度方式的用户名转化为二进制方式。这儿咱们依据之前增加的零宽度不连字符空格来切割整个字符串,咱们会得到每个字母对应的与其零宽度字符等效的二进制字符,对一切零宽度字符进行迭代之后,咱们就得到了二进制方式的1和0数字串。假如没找到对应的1或0,有或许是你忘了正向Fingerprint中过程2中每个字母转化后还加了一个零宽连字符。
const zeroWidthToBinary = string => (
  string.split('').map((char) => { // zero-width no-break space
    if (char === '​') { // zero-width space
      return '1';
    } else if (char === '‌') {  // zero-width non-joiner
      return '0';
    }
    return ' '; // add single space
  }).join('')
);
3 将二进制方式的用户名转化为实践可看的用户名文本。咱们能够经过解析把1和0组成的二进制串转化为实践可看的用户名文本。
const binaryToText = string => (
  string.split(' ').map(num =>
    String.fromCharCode(parseInt(num, 2))).join('')
);
总结
许多公司采取了多种办法避免“内鬼”向外进行信息泄密,这种零宽度字符的办法不失为一种值得一用的技巧。当然,这得依据公司的工作和信息存储形式来看,但从危险上来说,无疑一个一般的仿制粘贴行为就或许会露出自己泄密者的身份。现在,很少的的应用程序会解析到零宽度字符。
再回到之前说到的留言板场景下,咱们把零宽度字符指纹脚本嵌入之后,按计划进行布置,然后在留言板上发布了一条内部信息布告,仅在几个小时之后,这些搀杂了零宽度字符的信息布告内容就被走漏到了其它论坛,好在,其间参加的指纹辨认功用发挥效应,终究咱们发现了泄密者,从此注销了他的账号,及时封堵了信息走漏源。
 

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/7457.html

(0)

相关推荐

  • 重返()()(重回基础——FBpixel)

    在运行广告之前,放一段11月dropshipper大会上一头大牛发布的数据,刷新大家。 是的,你没看错。自来水一天36万美元。 刷新后,我们来谈谈FB Pixel FB Pixel...

    电商 2022年1月3日
  • A级防火保温材料

    A级防火保温材料 A级防火保温材质就是属于防火等级为A级的防火保温材质, A级保温材质重要有A1级材质和A2级材质。A级防火保温材质有泡沫玻璃板、岩矿棉板、膨胀珍珠岩制品、玻化微珠制品等。外墙保温材质防火等级A级为

    生活 2021年10月14日
  • 国内疫情什么时候能稳定控制下来

    国内疫情什么时候能稳定控制下来 新冠病毒还在全球继续蔓延,国内疫情也时有发生,此轮疫情自10月中旬开始还没有控制下来,大家都希望本轮疫情可以早一点结束,最新消息31省区市新增本土确诊32例,国内疫情何时能稳定?国

    电商 2021年11月15日
  • 两药均用于胃痛胀满,香砂养胃丸与香砂六君丸有何不同?选哪个?

    组成成分决定功效,组成成分是基础,香砂养胃丸和香砂六君子丸的不同的实质在于二者的组成不尽相同。 香砂养胃丸是由白术、木香、砂仁、豆蔻(去壳)、广藿香、陈皮、姜厚朴、醋香附、茯苓、枳...

    生活 2021年9月19日
  • 中医巧治病,中医治病疗法

    做人留一面,日后好相见,互相留条路,你好,我好,大家好。

    生活 2021年12月14日
  • 淘宝刷太多单会不会封,淘宝刷单被抓

    淘宝刷单封号是什么情况如果我们登录账号的时候,发现账号被封了,首先要考虑的是不是因为自己刷单了,如果只是刷一两单,一般是不会封号的,如果近期有频繁大量接刷单任务,可能就会导致账号被封。

    电商 2021年10月28日