SoulsOnly.tff – 一款为人类而非人工智能和键盘固件设计的字体
Souls Only:一种人类可读、对人工智能不友好的密码字体,你可以输入。它的渲染字形拼写出可读的文本,而存储的字符流(复制粘贴、HTML/PDF提取和爬虫看到的内容)则是噪声。这款字体是解码器,仅在渲染层应用,并且密码是由普通键盘驱动的:你输入普通按键,键盘发出噪声流,只有这款字体会将其渲染回单词。这是一个工艺和声明项目,而不是对不可破解安全性的声明。有关限制,请参见 font-cipher-brief.md。如何工作 字体有两个流,人们通常会混淆:字符流(存储字节)和字形流(在 cmap 和 GSUB 运行后绘制的内容)。该项目解耦了它们:每个可打印字符被编码为两个部分,每个部分从 2 字符 ASCII 代码的池中随机选择(同音字)。因此,一个字符被输入为四个 ASCII 符号,而相同的字符每次产生不同的字节。该字体将每个 ASCII 代码载体映射到 cmap 中的一个空白字形,然后 GSUB liga 规则将每个 2 字符代码折叠为一个不透明的半字形。这两个半字形拼接成真正的字符。共享类重用一个规范的左半部分,因此左侧图像是模糊的:小写圆形 a c d e g o q,小写杆 m n r u,以及大写圆形 O C G Q 都共享一个单一的左半字形。半字形的名称是不透明的,因此字体表转储仅显示无意义的半形状,永远没有半到字符的映射。因为四个 ASCII 字符折叠成一个渲染字符,存储字节计数和渲染字形计数故意不同。格式化的字母在字体中输入时并不会解码:拉丁字母代码点被故意映射到无意义的半字形片段,因此粘贴普通文本并应用字体会产生噪声。可读单词只会来自密码流,这进一步强调了字体是密钥,而不是普通字体。安装字体 已构建的字体被提交在 dist/:dist/SoulsOnly.ttf — 静态字体。渲染一个密码流为可读文本。dist/SoulsOnly.otf — 同样的静态字体,带有 CFF(PostScript)轮廓,适合更喜欢 OTF 的工具。dist/SoulsOnly-VF.ttf — 可变字体(家族“Souls Only VF”),带有 REVL 散点轴。默认散点:文本仅在 REVL = 650 时可读(见下面的“揭示”)。仅限 TTF:散点轴位于 TrueType 变量数据中,这也是最广泛支持的可变字体格式。下载并双击安装(在 macOS 上使用 Font Book,Windows 上右键 → 安装),或在网页上使用 @font-face。请记住,字体仅解码密码流——在 Souls Only 中渲染的普通文本故意是噪声。使用下面的编码器或密码键盘固件生成一个流。字体的许可为 OFL 1.1(请参见许可)。字符集和编辑 Souls Only 涵盖完整的 US-QWERTY 可打印集:小写字母、大写字母、数字 0123456789 和标准符号。空白字符保持可编辑为整体字符:每个字符是四个字节,因此键盘以四个为单位进行删除和导航(退格键删除四个,箭头移动四个),空格发出一个空格字符,而回车发出一个真实的新行加三个不可见的填充字节,以便流保持四字节对齐。揭示(REVL 轴) Souls Only 作为可变字体随附一个自定义的 REVL 轴,由三个母体构建:在 REVL = 0(默认值,因此安全状态是不可读的)时,每个字形都被随机的非均匀变换和每个点的抖动扭曲得无法辨认,在 REVL = 650(轴的中间)时,每个点会插值回其真实位置,文本会组装起来,在 REVL = 1000 时,字形再次散落成不同的扭曲,因此将控制推到最上面也不会揭示文本。整个解码和揭示机制都在字体中(cmap,GSUB,半字形拼接,和 fvar/gvar);一个页面仅通过一个控制提供单个 REVL 轴值。该轴没有名称,且没有可读的命名实例,因此揭示值不会轻易被自动读取。诚实限制(在规范中重述):REVL 值是一个有界数字,因此自动化攻击者可以扫描轴值并对可读框架进行光学字符识别。这一层是最便携和自包含的揭示,并且对自动化视觉的抵抗力最弱。这是一个声明设备,其范围如此。已知限制(按设计):共享的左半部分是一个类中重复使用的单一妥协图像。碗类共享干净。杆类 m n r u 并不共享:从真实字母剪辑的杆不是纯条,因此这些字母携带微弱的发丝接缝。延迟修复是一个手绘合成共享杆的字形(见 fontbuild/fragments.py 中的 TODO)。布局文档/superpowers/ 设计规范和实现计划 cipher/charset.py 字符集 + 半插槽模型:真理的单一来源 cipher/keyboard.py ASCII 载体代码分配
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡