经典McEliece进入IETF和OpenSSH

我的简化NTRU Prime的早期工作一直在进步。IETF文件SSH中的sntrup761已通过多个处理点。GnuPG的libgcrypt增加了对sntrup761的支持. The对sntrup761的libssh支持正在工作,但合并请求被卡住,主要是因为没有时间调试为什么回归测试套件在非-sntrup761型与补丁相关的部件。

基础基于格的后量子算法具有一定的不确定性围绕着它,我觉得量子后的故事不仅仅是增加sntrup761型到实现。经典McEliece我已经被提到过几次了,我花了一些时间学习它,并对提议的ISO标准并已发布草案-josefsson-mceliece在IETF中使算法易于IETF社区使用。Classic McEliece的高质量实现已发布为图书馆信仰我一直支持扬·莫伊什的工作Debian的libmcelice包唉,它被卡在了ftp-master NEW队列用于两个月以上的手动审查。先决条件库MBlibc循环已在Debian中提供。

所有这些文本编写和打包工作都为编写一些代码创造了条件。当我添加对的支持时sntrup761型在里面libssh数据库,我开始熟悉OpenSSH代码库,因此很自然会返回OpenSSH,为Classic McEliece尝试新的SSH KEX。DJB公司建议选择麦塞利6688128并将其与现有的X25519+sntrup761或者用普通的X25519型而三种算法的混合X25519型,sntrup761型麦塞利6688128对于那些不想失去sntrup761所提供的好处的人来说,这只是一个简单的选择X25519型具有加拿大6688128.中的关键合路器sntrup761x25519是一个简单的SHA512型我能说的唯一好处是,它的描述和实现都很简单,而且由于它已经部署好了,所以不会引发太多问题。

在拖延了几个月的编码之后,一旦我坐下来工作,只花了几个小时就成功建立了Classic McEliece SSH连接。我想在我开始之前,我的大脑已经把背景中的所有东西都整理好了。要复制它,请在Debian测试环境中尝试以下操作(我使用播客以获得清洁的环境)。

#podman-run-it-rm debian:测试slimapt更新apt dist-upgrade-yapt安装-y wget python3库dbytes-dev libcpucycles-dev gcc生成git autoconf libz-dev光盘~wget-q-O-https://lib.mceliece.org/libmcelice-20230612.tar.gz|焦油xfz-cd libmcelice-20230612/./配置进行安装ldconfig(ldconfig)光盘。。git克隆https://gitlab.com/jas/openssh-portable网址cd openssh-可移植git结帐jas/mcelice自动侦察./configure#verify“libmcelice支持:是”make#CC=“CC-DDEBUG_KEX=1-DDEBUG _KEXDH=1-DDEBUG-KEXECDH=1”

现在您应该有一个支持Classic McEliece的工作SSH客户端和服务器!通过运行验证支持./ssh-Q密钥它应该提到mcelice6688128x25519-sha512@openssh.com

要让它打印大量调试输出,可以删除#角色在最后一行,但不要在生产中使用这样的内置。

您可以按如下方式进行测试:

./ssh-keygen-A#写入/usr/local/etc/ssh-host_。。。#通过运行以下命令设置基于公钥的登录:./ssh-keygen-t rsa-f~/.ssh/id_rsa-P“”cat~/.ssh/id_rsa.pub>~/.ssh/授权密钥adduser—系统sshdmkdir/var/空虽然正确;do$PWD/sshd-p 2222-f/dev/null;已完成&./ssh-v-p 2222本地主机-oKex算法=mcelice6688128x25519-sha512@openssh.com日期

在客户端上,您应该看到如下输出:

OpenSSH_9.5p1,OpenSSL 3.0.11 2023年9月19日...调试1:SSH2_MSG_KEXINIT已发送调试1:SSH2_MSG_KEXINIT已接收调试1:kex:算法:mcelice6688128x25519-sha512@openssh.comdebug1:kex:主机密钥算法:ssh-ed25519调试1:kex:server->客户端密码:chacha20-poly1305@openssh.comMAC:压缩:无调试1:kex:client->服务器密码:chacha20-poly1305@openssh.comMAC:压缩:无debug1:需要SSH2_MSG_KEX_ECDH_REPLY调试1:收到SSH2_MSG_KEX_ECDH_REPLYdebug1:服务器主机密钥:ssh-ed25519 SHA256:YognhWY7+399J+/V8eAQWmM3UFDLT0dkmoj3pIJ0zXs...debug1:主机“[localhost]:2222”已知,并且与ED25519主机密钥匹配。debug1:在/root/.ssh/known_hosts:1中找到密钥debug1:134217728块后重新键入调试1:SSH2_MSG_NEWKEYS已发送debug1:需要SSH2_MSG_NEWKEYSdebug1:收到SSH2_MSG_NEWKEYS调试1:在134217728块之后重新键入...调试1:发送命令:date调试1:保证:分叉调试1:permanently_set_uid:0/0环境:USER=根LOGNAME=根HOME=/root路径=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/binMAIL=/var/MAIL/root外壳=/bin/bashSSH_CLIENT=::1 46894 2222SSH_连接=::1 46894::1 2222debug1:client_input_channel_req:通道0 rtype退出状态回复0调试1:client_input_channel_req:channel 0 rtypeeow@openssh.com回复012月9日星期六22:22:40 UTC 2023调试1:通道0:空闲:客户端会话,通道1传输:发送1048044,接收3500字节,在0.0秒内每秒字节数:发送23388935.4,接收78108.6debug1:退出状态0

请注意kex:算法:mcelice6688128x25519-sha512@openssh.com输出。

网络带宽使用情况如何?下面是一个完整的SSH客户机连接的比较,例如上面登录、打印日期和注销的连接。普通X25519型大约7kb,25519平方米具有sntrup761型大约9kb,并且麦塞利6688128具有X25519型约为1MB。是的,Classic McEliece有很大的密钥,但对于许多环境来说,用于会话建立的1MB数据几乎不引人注目。

./ssh-v-p 2222 localhost-oKexAlgorithms=curve25519-sha256 date 2>&1|grep^已传输传输:发送3028,接收3612字节,0.0秒./ssh-v-p 2222本地主机-oKex算法=sntrup761x25519-sha512@openssh.comdate 2>&1|grep^已转移传输:发送4212,接收4596字节,0.0秒./ssh-v-p 2222本地主机-oKex算法=mcelice6688128x25519-sha512@openssh.comdate 2>&1|grep^已转移传输:发送1048044,接收3764字节,0.0秒内

那么会话建立时间呢?

日期;i=0;测试$i-le 100时;这样做/ssh-v-p 2222 localhost-oKexAlgorithms=curve25519-sha256 date>/dev/null 2>&1;i=`expr$i+1`;完成;日期12月9日星期六22:39:19 UTC 20232023年12月9日星期六22:39:25 UTC#6秒日期;i=0;测试$i-le 100时;这样做/ssh-v-p 2222本地主机-oKex算法=sntrup761x25519-sha512@openssh.com日期>/dev/null 2>&1;i=`expr$i+1 `;完成;日期2023年12月9日星期六22:39:29 UTC12月9日星期六22:39:38 UTC 2023#9秒日期;i=0;测试$i-le 100时;这样做/ssh-v-p 2222本地主机-oKex算法=mcelice6688128x25519-sha512@openssh.com日期>/dev/null 2>&1;i=`expr$i+1 `;完成;日期12月9日星期六22:39:55 UTC 20232023年12月9日星期六22:40:07 UTC#12秒

我从未注意到添加sntrup761型,所以我很确定我也不会注意到这种增长。这一切都在继续我的笔记本电脑运行Trisquel所以,要慎重考虑,但至少幅度是明确的。

未来的工作项目包括:

量子后SSH’ing快乐!

更新:将mceliece6688128_keypair调用更改为mcelice6688128f_keypaire(即使用完全兼容的f变量)会导致McEliece的速度与sntrup761型在我的机器上。

2023-12-26年更新:初始IETF文档草案-josefsson-ssh-mceliece-00出版。

ppc64el上的Trisquel:Talos II

这个Trisquel 11.0“Aramo”的发行说明提到对POWER和ARM体系结构的支持,但是下载区域仅包含x86的链接,并且论坛帖子建议缺少如何在非x86上运行Trisquel的说明。

自从Trisquel 11发布以来,我一直忙于从Debian公司去Trisquel。有人会认为我会在这段时间后完成,但重新安装和迁移机器真的很耗时,尤其是如果你每次注意到确实需要改进的东西时都会分心。兔子一路往下钻。我的一台生产机器正在运行Debian 11“牛眼”塔洛斯II Lite机器来自猛禽计算机系统将该主机上运行的虚拟机(包括为该博客提供服务的虚拟机)迁移到运行Trisquel的x86机器上,我感到很不满意。我想将我的计算迁移到与兼容的硬件上FSF尊重你的自由在这里,我必须在使用较新的Debian中的非自由软件和大多数x86系统隐含的非自由程序之间做出选择:这不是一个容易的选择。所以我已经忽略了这个两难处境有一段时间了。毕竟,机器运行的是Debian 11“牛眼”,它是在Debian开始要求使用非自由软件之前发布的。随着牛眼计划的终止日期临近,这似乎不是一个可持续的选择。

有一个关于提供ppc64el ISO的报告已打开这是由Jason Self在发布后不久创建的,但好几个月都没有发生任何事情。大约一个月前,路易斯·古兹曼提到初始ISO构建我开始测试它。这个设置已经运行了一个月了,我想在这篇文章中提供如何安装和运行它的说明,因为它仍然没有出现。

我即将推出的新生产机器的设置:

  • 塔洛斯II Lite
  • POWER9 18核v2 CPU
  • Inter-Tech公司4U-4410型带ASPOWER电源的机架箱
  • 8x32GB DDR4-2666 ECC远程数据接口模块
  • HighPoint SSD7505(火箭1504或1204将是一个更具成本效益的选择,但我重新使用了我放在周围的组件)
  • PERC H700又名LSI MegaRAID 2108 SAS/SATA(也可在附近找到)
  • 2x1TB NVMe
  • 3x18TB磁盘

根据第14期注释ISO图像位于https://builds.trisquel.org/debian-installer-images网站/以及以下命令下载、完整性检查并将其写入U盘:

wget-qhttps://builds.trisquel.org/debian-installer-images/debian-installer-images_20210731+deb11u8+11.0危险14_ppc64el.tar.gztar xfa debian安装程序-images_20210731+deb11u8+11.0 risquel14_ppc64el.tar.gz/安装程序-ppc64el/20210731+deb11u8+11/images/netboot/mini.iso回声’6df8f45fbc0e7a5fadf039de7fa2dc57a4d466e95d65f2eabeec80577631b7/安装程序-ppc64el/20210731+deb11u8+11/images/netboot/mini.iso'|sha256sum-csudo wipefs-a/dev/sdXsudo dd if=/installer-ppc64el/20210731+deb11u8+11/images/netboot/mini.isoof=/dev/sdX conv=sync status=progress

遗憾的是,没有发布哈希校验和或OpenPGP签名。

关闭设备电源,插入U盘,然后接通电源,您会看到Petitboot菜单提供从U盘启动。出于某种原因“专家安装”是菜单中的默认值,而我选择“默认安装”定期体验。对于这篇文章,我将忽略BMC/IPMI,因为没有必要与之交互。除非你愿意进入地牢,否则请确保不要连接BMC/IPMI以太网端口。VGA控制台与普通USB键盘配合良好,您可以选择仅使用第二个enP4p1s0f1网卡选择菜单中的网卡。

如果您熟悉Debian netinst ISO,则可以直接安装。我将两个RAID1分区分区在两个NVMe棒上,一个RAIDI分区用于75GB ext4根文件系统(discard,noatime),一个RAID分区用于虚拟机的900GB LVM卷组,以及每个NVMe杆上的两个20GB交换分区(为了消除缺少交换的警告,我不确定交换是否仍然是一个好主意?)。3x18TB磁盘使用DM集成但是,RAID1的安装程序不支持DM-integraity,所以我必须在安装后创建它。

还有两件事值得一提:

  • 选择apt镜像并没有x86安装程序提供的著名Trisquel镜像列表。相反,我必须手动输入存档镜像,幸运的是档案.trisquel.org主机名和路径值是默认值,所以我只需按enter键,并在安装完成后进行修复。您可能希望本地镜像的主机名/路径在手边,以加快速度。
  • 安装程序问我要使用哪个内核,而x86安装程序没有这样做。我相信老的Trisquel/Ubuntu安装程序会问这个问题,但它已经在x86的aramo中消失了。我选择默认值“linux-图像通用“这给了我一个可预测的5.15 Linux-libre内核,尽管您可能想选择”linux-image-generic-hwe-11.0“更新的6.2 Linux-libre内核。也许这是针对非x86平台的故意借记行为?

我已经重新安装了几次机器,现在已经完成了生产设置的安装。我没有遇到任何严重的问题,系统也很稳定。是时候结束了,庆祝一下我现在运行的操作系统与免费系统分发指南在与匹配的硬件上尊重你的自由-Hacking真的很开心!

强制包装和分拣-satb

对于Debian包维护者包装和分拣工具是我偶尔使用一次的好工具之一,每次都必须重新阅读文档才能得出结论,我想使用--包装始终--短缩进--拖尾命令--排序副包装选项(或-卫星导航卫星简称)。每一次,我都希望我能自动完成这项工作,并且总是调用它来保持我的debian公司/目录整洁,所以我不必每个月都手动执行一次。我还没有找到一种方法来以一种不引人注目的方式实现这种自动化,这种方式与我基于git的打包工作流交互良好。理想情况下,我想在gbp构建包检查这一点-想法?

与此同时,我想出了一个方法来确保我不会忘记跑步包装和分拣长期以来,处理同一个包的其他人也不会:创建一个自动重量测试萨尔萨CI/CD管道使用以下内容作为debian/tests/wrap-and-sort以下为:

#!/垃圾桶/桶set-欧盟TMPDIR=$(mktemp-d)陷阱“rm-rf$TMPDIR”0 INT QUIT ABRT PIPE TERMcp-借记$TMPDIRcd$TMPDIR包装和分拣-卫星差异-ur$OLDPWD/debian debian

将以下内容添加到debian/测试/控制调用它&故意不适当缩进,这样自检就会失败,这样您就可以了解它的行为。

测试:包裹和分拣取决于:devscripts、python3-debian限制:肤浅

现在,一旦我将包上传到Salsa中,就会出现构建失败,这通常是我在上传到Debian之前所做的。我将得到一个diff输出,除非我使用running的输出推送一个commit,否则它不会满意包装和分拣用我确定的参数。

While期间自动重量测试用于测试已安装的软件包、周围的工具自动重量测试是强大的,很容易让这种轻微的滥用其目的,以愉快的QA改进。

思想?黑客攻击快乐!

应对Debian中的非自由软件

我是如何从Debian的家中搬出来,为自己的道德计算找到了两个新家,其中有Trisquel和Guix,同时也解决了我对Debian进一步贡献的困惑。

Debian公司他对自由软件社区的贡献是巨大的。Debian是20世纪90年代早期的发行版之一,它将GNU(全球导航单元)工具(编译器、链接器、shell、编辑器和一组Unix工具)Linux内核并发布了自由软件操作系统。当时,关于如何发布自由软件二进制文件的指导很少,更不用说整个操作系统了。缺乏既定的社区进程和冲突解决机制,也缺乏激励工作的指导原则。与技术工作同时进行的社区建设努力,在过去几年中产生了稳定的释放量。

来自理查德·斯塔尔曼自由软件基金会(FSF)在20世纪80年代和90年代初,当时已经有一个自由软件的定义受自由软件定义的启发,以及社会契约有助于建立社区和解决冲突的信念,Debian与自由软件社区的社会契约(DSC)于1997年出版DSC包括Debian自由软件指南(DFSG),这直接导致了开放源代码定义

Slackware 3.5英寸磁盘
我早期的一个Slackware安装磁盘集,出于怀旧原因而保留。

我是通过发行版在20世纪90年代初(哦,天哪,那些夜晚正在计算XFree86车型调试sendmail.cf)主要用于RedHat Linux大约在1995-2003年期间。我在伍迪发布周期,当原始RedHat Linux被遗弃,Fedora上线。正是Debian明确的社区流程和基础设施吸引了我。社区流程的缓慢特性也让我长期使用RedHat:集中式和教条式的决策流程通常会产生快速有效的结果,我认为RedHat Linux在技术上优于Debian ca 1995-2003。然而,RedHat模式不可持续,导致RedHat与Fedora分裂。Debian迎头赶上,并在其社区进程停滞不前后达到了技术稳定。大约在2006年末,我开始加入Debian社区。

我对Debian的社会契约Debian应该是在免费许可下100%许可的作品发行版。Debian社区向来包容非自由软件,创建了控制/非自由并允许使用bug跟踪器来帮助解决非免费作品的问题。这在社会契约中都有解释。自由工作和非自由工作之间一直有明确的界限,并且承诺Debian系统本身将100%免费。

当时,对RedHat Linux不是100%自由软件的担忧对我来说并不重要:我主要(并且很高兴)在Solaris、IRIX、AIX、OS/2、Windows等上运行GNU工具。在RedHat Linux上运行GNU工具是一种改进,我还没有意识到可以在自己的主计算机上删除所有非自由软件。Debian为我实现了这个目标。从那时起,我就一直相信这种模式。我可以使用Solaris、macOS、Android等,因为我可以选择使用100%免费的Debian。

虽然对非自由软件的包容性方法招致并值得批评(一些人认为,包容非决定性行为是一个坏主意),但我认为Debian的方法是一种成功的生存技巧:通过包容自由和非自由社区,并在两者之间达成妥协,Debian能够保持相关性并为这两种环境做出贡献。如果Debian没有为自由社区服务并做出贡献,我相信自由软件人会停止贡献。如果Debian完全拒绝了非免费作品,我认为它不会成功Ubuntu公司发行本应基于Debian。

我早在2022年9月就写了上面的大部分文字,打算把它作为一种为我的在Debian中保持现状的建议。我之所以没有发布它,是因为我觉得我说的是显而易见的,显而易见的东西不需要重复,而其余的帖子只是我在回忆。

Debian项目一直是一个100%免费操作系统的可持续生产商,直到Debian 11牛眼。非免费固件的解决方案社区决定放弃长期以来导致100%免费Debian的模式。Debian的目标不再是发布100%免费的操作系统,而是添加了以下内容:“Debian官方媒体可能包含固件”。事实上Debian 12书虫新闻稿证实,这不仅是一种可选的可能性。Debian社区本可以发布一个100%免费的Debian,与非免费Debian并行,并且仍然与他们新采用的政策保持一致,但选择了不这样做。结果是Debian的政策与他们的行动不一致。当Debian安装程序包含非自由软件时,声称Debian是100%免费的是没有意义的。行动胜于雄辩,所以我只能把这些政策读作精心准备的散文,不再用于指导,而是为了让生活在象牙塔中的人们安心。我想也是为了吸引资金。

那么,从个人层面上来说,该如何应对呢?早在2022年10月投票后,我就没有答案。我还不清楚我是否愿意根据推广非自由软件的新社会合同向Debian捐款。去度假了与此同时,Debian 12书虫被释放,证实了我的担忧。我不停地回头看这篇文章,我唯一的想法是在我的机器上使用Debian是不道德的。让行动说话,我转而PureOS(纯操作系统)10月份在我的主笔记本电脑上,几乎没有注意到任何区别,因为它是基于Debian 11的靶心。去年12月,我买了一台新笔记本电脑,并尝试了Trisquel公司吉他因为他们承诺了一条通往ppc64升PureOS没有。

当我思考如何接近我的谦逊Debian供款,我开始学习Trisquel获得信任我把一台又一台Debian机器迁移到Trisquel公司,并开始使用吉他在其他人身上。迁移很容易,因为Trisquel基于基于Debian的Ubuntu。使用Guix有其挑战,但我喜欢它的连贯的文档环境。我所有重要的自托管服务器(VM主机、DNS、电子邮件、WWW、Nextcloud、CI/CD构建器、备份等)现在都使用Trisquel或Guix。我迁移了许多GitLab CI/CD规则,以使用Trisquel而不是Debian,从而为软件开发和部署提供更符合道德规范的计算基础。我希望周围有官方的Guix docker图片。

时间已经过去了,当我现在想到Debian的任何贡献时,我对排除100%免费Debian感到有点失望。我意识到今天我可以像使用macOS、Android、RHEL或Ubuntu一样使用Debian。是什么阻止我为那些平台上的自由软件做出贡献?因此,我将再次偶尔做出Debian贡献,因为我知道这也会间接地改善Trisquel。为了避免安装Debian,我需要一个Trisquel开发环境,它允许我构建Debian包。我找到了一个这样做的食谱:

#系统命令:
苏多apt-get安装debhelper git构建的包debian-archive-keyring
苏多wget公司-O/usr/share/debootstrap/scripts/debian-common命令https://sources.debian.org/data/main/debootstrap/1.0.128%2Bnmu2/scripts/debian-普通
苏多wget公司-O/usr/share/debotstrap/scripts/sidhttps://sources.debian.org/data/main/debootstrap/1.0.128%2Bnmu2/scripts/sid
#运行一次以创建生成映像:
DIST=sidgit-pbuilder公司创建--镜像http://deb.debian.org/debian网站/--debootstrapopts“--exclude=usr-is-merged”--基本路径/var/cache/pbuilder/base-sid.cow
#使用debian/在目录中运行以构建包:
gbp构建包--git-pbuilder--git-dist=sid

如何可持续地交付100%的免费软件二进制发行版似乎是一个悬而未决的问题,与20世纪90年代或2000年代初相比,所面临的挑战也没有多大不同。我希望Debian能回来提供一个100%免费的平台,但我担心Debian会在自由软件理念上进一步妥协,而不是相反。通过添加非自由固件时使用的类似参数,Debian可能会损害Linux引导过程的自由软件精神(如Debian签署的非自由引导映像)和媒体处理(如web浏览器和DRM),正如Debian已经为非自由软件(Python pip)实现了appstore-like功能一样。要了解Debian打包中的其他自由问题,请浏览Trisquel的助手脚本可能会照亮你。

Debian的挫折和RHEL衍生分布的最近挫折令人难过的是,这将是对这些社区的一个挑战,以找到内部一致的一致性前进。我祝他们好运,因为Debian和RHEL对于更广泛的自由软件生态系统非常重要。让我们看看Trisquel、Guix和其他人周围的社区FSDG公司-分布会在未来发展。

尽管Debian和RHEL遇到了挫折,但今天自由软件的情况似乎比几年前要好,这一点值得记住!我不记得在现代笔记本电脑现代服务器就像我今天能做的那样简单。

快乐黑客!

附录2023年7月22日:此帖子的原始标题是应对非自由借记,并且有一个关于它的帖子其中包括对标题的反馈。我确实同意我最初的头衔是对抗性的,我已经把它改为更具体的了应对Debian中的非自由软件。我非常感谢Debian中所有优秀的自由软件,并希望它能够继续并改进,尽管我对大多数开发人员表达的意见表示怀疑。对于有哲学倾向的人来说,思考一下软件编译是自由许可的意味着什么是很有趣的。软件汇编在什么时候应该被贴上免费与非免费的标签?Windows可能包含一些发布为免费软件的软件,比如说Windows是1%免费的。苹果编写了许多自由软件(顺便说一句,苹果公司生产的自由软件可能比Debian公司生产的要多),假设macOS包含20%的自由软件。Solaris(或一些仍在维护的衍生产品,如Open印第安纳州)现在大多是免费许可的,不是吗?假设它是80%免费的。Ubuntu和RHEL更接近95%的自由软件。Debian过去是100%,但现在稍微少了一点,可能是99%。Trisquel和Guix达到100%。在什么情况下称编译为免费是合理的?Debian值得被称为自由许可吗?macOS吗?甚至有可能以任何有意义的方式将这些标签用于编译吗?所有数字都是凭空得出的。它甚至不清楚如何测量(二进制字节?代码行?CPU周期?等等)。有关许可证审查错误的警告适用。我忽视了Debian自己关于Debian是100%自由软件的说法,我认为这是不一致的,在任何合理的客观分析下都不再正确。在固件投票之前,情况并非如此,因为Debian在Linux内核中附带了非自由blob。

简化的NTRU Prime sntrup761加入IETF

这个打开SSH项目增加了对混合动力车的支持优化的NTRU Prime量子密钥后封装方法sntrup761型加强其基于X25519的违约版本8.5发布于2021-03-03虽然人们对后量子密码有很多讨论,但我的印象是,在过去两年中,它们的实施和部署速度有所放缓。为什么?不管答案是什么,我们都可以尝试协同更改,但奇怪的是,这些算法的IETF文档似乎缺失了一项工作。

在一些早期工作的基础上X25519/X448至SSH,在我花了一天时间阅读OpenSSH和微型SSH了解其工作原理的源代码。虽然我对最终密钥是如何从sntrup761/X25519机密中派生出来的并不十分满意,但这是对串联机密的SHA512调用,我认为应该对构造进行更好的记录,为增加信心或更好的设计铺平道路。此外,重复使用RFC5656第4条structs的规范更糟糕(一个不必要的规范性引用),但实现可能更简单。我已经发表了草案-josefsson-ntruprime-ssh-00在这里。这里的学分是Jan MojžíšTinySSH设计的早期的sntrup4591761x25519-sha512@tinyssh.org2018年,Markus Friedl于2019年将其添加到OpenSSH,Damien Miller于2020年将其更改为sntrup761。有谁能为这部作品的历史增添更多内容吗?

有一次我把我的xml2rfc很容易编写一个文档来描述sntrup761密钥封装机制和X25519密钥协商方法之间以非SSH方式的混合构造。我不知道这项工作是否有用,但它可以作为进一步研究的参考。我发表了草案-josefsson-ntruprim-hybrid-00在这里。

最后,基于Streamlined NTRU Prime的IETF文档怎么样?解释所有的细节,尤其是它背后的数学,将是一项巨大的努力。我开始这样做,但意识到停止解释是一种主观要求。如果我们不能假设读者了解格数学,那么像这样的文档是教授格数学的最佳场所吗?我选择了最简单的方法,只是简单介绍了算法,包括SageMath公司和C参考实现以及测试向量。IETF的观众很少理解数学,所以我认为最好把注意力放在网络和算法接口上。这里的一切都是由Streamlined NTRU Prime团队创建的,我只是稍微修改了一下,希望我不会破坏太多。我现在发表了草案-josefsson-ntruprime-streamlined-00在这里。

我维护IETF上的文档我的ietf-ntruprime GitLab页面,请随时打开合并请求或提出问题以帮助改进它们。

为了对代码的正常工作有信心,我最终准备了一个带有sntrup761的分支对于GNU(全球导航单元)-项目荨麻并已提交上游审查。我很不幸不得不理解和执行NIST的DRBG-CTR计算sntrup761已知答案测试,这真是一团糟。为什么确定性随机生成器支持重新播种?为什么它支持非完全熵推导?密钥大小与块大小的混淆是什么?可选参数是什么?有多个算法描述是什么?幸运的是我能够提取一个最小但有效的实现这很容易阅读。我找不到DRBG-CTR测试向量,有人吗?是否有人拥有不使用DRBG-CTR的sntrup761测试向量?关于发布使用随机数据的算法的已知答案测试的最后一点思考:测试向量在实现算法的不同方法上是否稳定?只要考虑一些优化,将一个随机抽取调用移动到另一个调用之前,那么输出不会有所不同吗?还有其他方法来验证实现的正确性吗?

一如既往,快乐黑客!