在 Windows Subsystem for Linux 上运行 Gentoo

最近因为更换了新的电脑,所以尝试在Windows 10上使用 WSL 代替双系统的配置。WSL 2采用了虚拟化的技术,并且具备一个真正的Linux内核。WSL 2的VM相比传统的全系统VM而言更加精简,并且Linux和Windows系统之间的可交互性更好:

  • 每个操作系统都可以通过9P协议访问对方的文件系统;
  • 每个操作系统都可以较方便地调用另一个操作系统的程序。例如,在PowerShell中使用grep一类的工具。
  • Linux的文件系统储存在 .vhdx 文件中,可以动态扩展和收缩,不需要单独分区;
  • VM的占用的内存是根据实际使用情况动态调整的。

听起来是个不错的选择。在新的预览版中,WSL 2更提供了GPU和GUI的支持。不过,我还没有用到预览版。

Gentoo on WSL, running neofetch
继续阅读 →

自制加密通信协议(二):密钥交换算法

使用对称密钥通信时,双方需要事先约定密钥。如何安全地操作是一个关键问题。Diffie-Hellman-Merkle算法使得在不安全的信道中交换密钥成为可能。

在Diffie-Hellman-Merkle算法中,事先约定整数G和M。通信双方Alice和Bob分别拥有自己的私钥a和b。Alice把自己的公钥A=Ga发送给Bob。同理,Bob把B=Gb发送给Alice。Alice计算Ba,Bob计算Ab。这样,他们就得到了共享密钥K=Gab

注意,这里的乘法是模 M 的乘法,即A=Ga mod M,等等。对于取模的指数运算,其逆运算是一个目前难以解决的问题。对于外界的观察者而言,只知道G、M、A、B,并不能容易地求出a、b或K。这样就确保了密钥交换过程的安全性。

在实践中,常用密钥派生函数KDF对密钥K进行处理,用派生密钥KDF(K)作为对称加密的实际密钥。

继续阅读 →

自制加密通信协议(一):对称加密算法

自古以来,有大量信息需要隐秘地传输,例如军事机密。密码学也随之发展起来。一种常用的加密算法是对称加密算法,它由加密函数E和解密函数D构成:

    C=E(T,K)
    T=D(C,K)

其中T为明文,C为密文。信息的传输双方事先约定一个共用的密钥K。密文可以在不安全的信道中传递,即使被敌人截获,在未知密码的情况下也很难恢复出原文。

继续阅读 →

组合的编码/解码

n 元集合 {0,1,…,n-1} 的 k 元子集共有 \(n\choose k\) 个。 设某个子集的元素为 \(c_1<c_2<\cdots<c_k\), 则该子集可以编码为 \[{c_k\choose k} + \cdots + {c_2\choose 2} + {c_1\choose 1}.\]

此编码最小值为 0, 最大值为 \[{n-1\choose k} + \cdots + {n-k+1\choose 2} + {n-k\choose 1} = {n\choose k}-1.\] 上式的证明: 在两边加上 \(n-k\choose 0\) 并使用恒等式 \({n\choose k}={n-1\choose k-1}+{n-1\choose k}\)。

继续阅读 →

圆锥曲线的反射性质

当一束光从焦点发射,并在与圆锥曲线相交的点处发生反射时,反射的光线必定:

  • 穿过另一焦点(椭圆);
  • 反向延长后穿过另一焦点(双曲线);
  • 与对称轴平行(抛物线)。这个性质使得它的旋转曲面很适合用来发出/收集平行光。

证明的办法:先在曲线上任取一点P,作焦点和P的连线(如果是抛物线则另作一条过P且与对称轴平行的线),然后证明所作的线与法线(或切线)构成的锐(直)角相等即可。

继续阅读 →

ABC记法

ABC是一种文本记谱法, 既方便人工录入,也方便计算机读取。

继续阅读 →

用SquashFS存储Portage树

Gentoo系统中的Portage树存储了软件仓库中所有软件的元信息。其中最主要的是Ebuild脚本,它记载了软件的编译方法、依赖关系等。它通常位于/usr/portage

可想而知,这个树中包含了大量的文件,因此占用了很大的磁盘空间。根据我最近的测量,

  • 所有文件的大小总和超过300MiB;
  • 实际占用磁盘空间超过600MiB (ext4)。

但实际上,其中大部分文件都比较小,且属于较易被压缩的文本文件。因此,值得考虑使用一种压缩的文件系统存放Portage树。

SquashFS是一种可压缩的只读文件系统。将Portage树的全部内容放在其中,只需约50MiB的存储空间。

在配置SquashFS的过程中,走了一些弯路。因此,我把操作过程记录在这里,以便日后参考。

继续阅读 →

近代科技:IRC

IRC (Internet Relay Chat) 是 90 年代提出的互联网协议。 用户可以连接到 IRC 上与其他用户进行即时通讯。多个用户可以在一个频道(类似聊天室的概念)交流,也可以进行两用户间的一对一交流。 协议很简陋,只能传输文本内容。即便如此,这个协议体现了早期互联网标准化和开放的特点:任何人可以根据标准,制作自己的实现;不同的实现可以互联互通。

和IRC有关的更多信息可以参考 http://www.irchelp.org/

继续阅读 →

文摘

严复在一篇文章中提到这样一句话:

華風之弊, 八字盡之: 始於作偽, 終於無恥。

话说得很重, 但有时也是非常准确的。

查询这句话的出处时, 又看见了他写的《論世變之亟》。 其中有一些句子至今仍值得思考。

继续阅读 →