0%

一、编码

此章的目的是弄清楚 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 »

一、比喻

Trampoline 指的是“蹦床”,也就是底下这个东西:

BERG Champion - Rectangular, round and oval trampolines

他是一种很有趣的比喻,人们不能直接跳到高空中,而是需要先往下跳,然后借助蹦床的弹力跳到高空中。

这个比喻出现在用户态和内核态的相互转变中,转变不能直接发生,而是必须要借助一个“蹦床”机制。

Read more »