面向实际软件的密码研究

丹尼尔·J.伯恩斯坦(Daniel J. Bernstein)是从事密码学和计算机软件研究的学者,与芝加哥伊利诺伊大学等机构有研究任职联系。其成果包括公钥系统Curve25519、流密码ChaCha,以及邮件软件qmail和域名服务软件tinydns、dnscache。

这些工作把抽象计算与网络服务的实际成本联系起来。不同成果的署名边界仍需保留:例如SipHash由伯恩斯坦与让-菲利普·奥马松共同设计,不能因为它与其他作品并列出现在个人简介中,就视为个人独作。软件得到部署也只说明实际采用,不能代替针对具体安全性质的论证。

参考:[1]

Curve25519与共享秘密的计算

Curve25519把椭圆曲线运算用于迪菲—赫尔曼式密钥建立。其底层素数为2的255次方减19;2016年的RFC 7748区分曲线与X25519函数,后者规定标量及坐标如何输入,并输出相应坐标。双方各自保留秘密标量,交换公开计算结果,再分别计算同一个共享秘密。

这里的工程目标不仅是让运算次数较少,也包括便于实现固定执行模式。规范强调,不同秘密值应尽量执行相同运算序列,避免内存访问与分支依赖秘密。但采用曲线本身不会消除所有侧信道,机器指令的耗时差异和程序实现仍然重要。密钥协商也不是数字签名,不能用它的名称概括所有身份认证功能。

参考:[2]

ChaCha与认证加密

ChaCha是伯恩斯坦在Salsa20基础上发展的流密码家族。ChaCha20采用20轮变换,核心以32位整数的模加、异或和循环移位混合状态,生成密钥流,再与明文异或得到密文。这与把公开密钥用于协商秘密解决的是不同问题。

RFC 8439规定的版本使用256位密钥和96位nonce,并将ChaCha20与Poly1305消息认证码组合,兼顾保密与篡改检测。同一密钥下重复nonce会重复密钥流及相应的一次性认证密钥,因此参数管理属于安全要求,不是可忽略的调用细节。

参考:[3]

设计、规范与性能结论

伯恩斯坦提出算法,与后来将它们整理为共同实现规范,并不是同一项署名工作。RFC 7748由兰利、汉堡和特纳撰写;RFC 8439由尼尔与兰利撰写,并明确说明其作用是提供稳定参考,而非首次发明所描述的算法。两份文件均属信息类RFC,不能仅因有RFC编号就称为互联网标准轨规范。

评价速度同样必须说明条件。是否有专用加密硬件、处理器体系结构及实现方式,都会改变比较结果;某个平台的软件优势不能概括为所有设备上永远最快。伯恩斯坦工作的一个共同方向,是把数学构造变成可部署的软件,同时让这些实现条件与限制可以接受公开检查。

参考:[1] [2] [3]