我的简化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队列用于两个月以上的手动审查。先决条件库MB和libcpucycles系列已在Debian中提供。
所有的文本编写和打包工作都为编写一些代码奠定了基础。当我添加对的支持时sntrup761型
在里面libssh数据库,我开始熟悉OpenSSH代码库,所以很自然会返回OpenSSH,为Classic McEliece测试一个新的SSH KEX。DJB公司建议选择麦塞利6688128
并将其与现有的X25519+sntrup761
或者用普通的X25519型
。而三种算法的混合X25519型
,sntrup761型
和麦塞利6688128
对于那些不想失去sntrup761所提供的好处的人来说,这只是一个简单的选择X25519型
具有麦塞利6688128
.中的关键合路器sntrup761x25519
是一个简单的沙512
我能说的唯一好处是,它的描述和实现都很简单,而且由于它已经部署好了,所以不会引发太多问题。
在拖延了几个月的编码之后,一旦我坐下来工作,只花了几个小时就成功建立了Classic McEliece SSH连接。我想在我开始之前,我的大脑已经把背景中的所有东西都整理好了。要复制它,请在Debian测试环境中尝试以下操作(我使用播客以获得清洁的环境)。
#podman run-it--rm debian:测试-极限apt更新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(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/空虽然正确;执行$PWD/sshd-p 2222-f/dev/null;已完成&./ssh-v-p 2222 localhost-o Kex算法=mcelice6688128x25519-sha512@openssh.com日期
在客户端上,您应该看到如下输出:
OpenSSH_9.5p1,OpenSSL 3.0.11 2023年9月19日...debug1: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 2023debug1:通道0:空闲:客户端会话,nchannels 1传输:发送1048044,接收3500字节,0.0秒每秒字节数:发送23388935.4,接收78108.6debug1:退出状态0
请注意kex:算法:mcelice6688128x25519-sha512@openssh.com
输出。
网络带宽使用情况如何?下面是一个完整的SSH客户机连接的比较,例如上面登录、打印日期和注销的连接。普通25519平方米
大约7kb,X25519型
具有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-o KexAlgorithms=曲线25519-sha256日期>/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快乐!
更新:将mceliece6688128_keypair调用更改为mceliece6688128f_keypair(即使用完全兼容的f变体)会导致McEliece的速度与sntrup761型
在我的机器上。
2023-12-26年更新:初始IETF文档草案-josefsson-ssh-mceliece-00出版。