这是一篇关于密码学工程的文章,主要内容如下:
- ECC 实现结构:椭圆曲线密码学实现大致包含基域实现、群逻辑、标量域实现和高层协议(密钥交换、签名等)。基域是模大素数的数集,实现了域内的算术运算等;群是椭圆曲线上的点集,通过点加法公式定义;标量域也是模大素数的数集,其实现与基域实现不同,某些高层协议对其操作有特定需求。
- fiat-crypto:字段实现中隐藏着一些微妙而可怕的错误,fiat-crypto 项目使用形式化方法证明字段算术运算逻辑的正确性,并生成各种语言的代码来实现这些操作,作者用它替换了 Go 标准库中的 NIST 曲线基域实现。
- “圣诞树”:大多数 edwards25519 实现使用相同的标量实现,其中一个函数包含大量硬编码整数常量,被称为“圣诞树”。
- 宽缩减:标量值可能高于标量域阶,而字段实现只能接受低于阶的值,作者请求 fiat-crypto 作者添加宽缩减函数,Frank Denis 提出将值表示为 a + b 2^192 + c 2^384 的形式进行处理,通过这种方式删除了 ref10 标量实现的最后一部分代码。
- 图片:作者在美丽的湖边删除代码,配图为夜晚湖边的景象。
脚注说明:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。