0%

对于“死猪不怕开水烫”这句话,似乎每个人的理解是不同的:

有的人是“小太爷告诉你,咱得是猪,可不是那鸡鸭的便宜玩意儿”;

有的人是“跟嫩么说,别听前面的猪渍歪,介玩意儿就没带怕的”;

还有的人是“俺得用开水,不是开水可不瞻”。

但是很少有人想过”为什么我是死猪,为什么要用开水烫我“。

一、观感

天津真的很像十年前的石家庄。我指的不是发展程度,而是市容市貌。在街上随处可见将背心挽到胸口的大爷,拿着火钳子捅咕炉子,炭火上是一两只烤鸡翅或者烤虾。旁边的饭店有踩着趿拉板儿的姐姐拎着水管往街上滋着黑水。一个个脸上都是泥渍和晒疮的小孩子,将砖头揉碎了倒到书包里,两三个人拥着一辆比人都高的华丽的变速自行车,向着挤满三轮的岔路口奔去。而石家庄,可能是因为我不常回家的缘故,早已昏沉沉地睡去。

这是西北角的景象,而在五大道,我见过了最新奇的建筑群,洋房子里长出了商户,丝毫没有嫁接或者“捏到一起”的感觉。秃头或者蓬蓬头的胖大妈从一个漂亮的西式木头窗后探出头,这如果不是发生在天津,又能发生在哪里?

来到天津以后,我才感觉到,似乎我的一部分是在天津的。这个地方没有小红书上说得那么俏皮或者幽默,而更像是我小时候读到的《神鞭》一样,这里的人为了某种传统的生活方式,而憋着一口气,他们迫不及待地向别人证明,更向自己证明,我们这么活没有错。

Read more »

一、编码

此章的目的是弄清楚 ASCII, GBK, Unicode, UTF-8 编码的区别,大部分知识都来源于这里。所以我只是简单转述一下:

ASCII 是最为古老的编码方式,它指的是用一个字节也就是 8 bit 完成编码,实际上只用了 7 bit ,最高位的值衡为 0 (这也成了其他编码方式兼容 ASCII 的一个重要抓手)。也就是说,ASCII 只能编码 27 = 128 个文字,这对英文这种只有 26 个字母的语言体系是足够的。

但是 ASCII 并不能满足很多类似英语的语言体系,比如说 é, ג 这种字符都是原有的 ASCII 所没有的,但是幸运的是,很多语言的字符数本来就不多,比如俄语是 33 个,而法语是基础的 26 个英文字母加音标。所以这些语言同样可以用一个字节进行编码,英语字符占据了 0 ~ 127 ,它们就占据了 128 ~ 255 。这样的缺点就是不同国家的 128 ~ 255 表示不同的字母,彼此之间并不兼容。

但是像汉语这样的语言就没有那么轻松了,他们就算占据了 128 ~ 255 位,也最多增加 128 个字符,这对于有 10 万个字符的汉语来说是杯水车薪。所以中国就开发了 GB2312 编码系统,后来演变成了 GBK 系统。总的来说,就是采用两个 128 ~ 255 的字节来表示一个汉字(应该是差不多),这样的话大约可以表示 2 万多个汉字,但是这样其实有一些生僻一些的字也是无法表示的。

Read more »

一、块设备

外存是一种块设备(block device),是指以固定大小的块(block)为单位进行读写访问的设备。这些设备以块为最小的访问单元,每个块都有一个唯一的地址。我个人理解,可以将一个块设备理解成以 block 为元素的线性数组。

其中 block 大小一般是 512 字节,也被叫作扇区 sector。其实这个大小对于现在的计算机有些太小了,所以往往这些 block 也会聚集成一个更大的单位,这里就会产生一些混乱,比如说这个更大的单位可以被叫作簇 cluster,也可以被叫作块 block。

块设备在 Linux 中显示为 /dev/ 下的一个文件,他们命名往往是 xxy ,其中 ya, b, c, d 这样的字母,用于表示相同设备的编号。而 xx 表示设备的种类:

  • hd:指的是采用 IDE 磁盘接口的磁盘
  • sd:原本是 SCSI disk,SCSI 和 IDE 都是旧控制器协议,现在也只 SATA 接口的磁盘
  • vd:虚拟硬件设备,在一些虚拟化平台(如 KVM、QEMU、Xen)中,虚拟化主机的磁盘设备会被命名为 vdavdbxvdc 等类似的形式。
  • nvme:NVMe 是 non-volatile memory express,它是一个主机控制器接口和存储协议,用于加速企业和客户端系统以及固态驱动器(SSD)之间的数据传输。它通过电脑的高速 PCIe 总线工作。总结就是一个比 SATA 快的固态硬盘设备。
Read more »

一、结构

因为一直分不清 Cache 的结构名字,所以特地画了一个比较满意的图来标注各种结构。

这个示意图的参数在右上角。Cache 中的基本单位是 Cache Line,它又被叫作 Block,它是由多个 Word 组成的。多个 Cache Line 会组成一个 Cache Set,一个 Cache Set 内包含的 Cache Line 数量被成为 Way。比如图中就是 2-Way 的 Cache,那么每个 Cache Set 就有 2 个 Cache Line。相同 Cache Set 中的 Cache Line 的关系被称为 associative(相联),它们不能依靠 set index 进行区分,只能通过 tag 区分。

根据 Set 个数和 Way 的不同(其本质是 Cache Line 的位置确定),可以对 Cache 进行分类:

Read more »

一、总论

旁路攻击(Side Channel Attack)指的是利用计算机通信过程中产生的“副作用”发起的攻击。也就是说,攻击者没有选择像监听信道或者破解密码等“正面手段”,而是利用通信时的时延、电压变化、能耗变化、JTag、异常等“边缘特征”等来发起攻击,是一种“侧面突破”。

我个人感觉旁路攻击利用的边缘特征,往往都是在根本上无法避免的特征,我们并不能为了避免时延旁路攻击,就放弃使用 Cache,或者为了 JTag 旁路攻击,就放弃使用硬件调试,甚至为了避免能耗攻击,就不用电了?这也就意味着,不像加密一样,只要提出了一个破密复杂度极高的加密算法,就可以一劳永逸。旁路攻击的防范是不能停歇的,任何一个计算机系统运行产生的效果,都会导致一次可能的攻击。

为了解释一下定义,旁路实际上是因为边缘特征产生的信息通道,就叫旁路。


Read more »