CloudFlare发布了网络时间安全协议的开源实现
云Flare宣布了他们实现网络时间安全(N TS)协议的第一个主要版本。这是基于他们以前发布的Time.Cloudflare.com,他们的免费时间服务,支持网络时间协议(NT P)和NTS。
云Flare的免费时间服务time.cloudflare.com支持NTP和新兴的NTS协议。然而,在发布之时,NTS的客户端并不多。随着他们新的CFNTS项目的发布,Cloud Flare希望鼓励采用NTS协议。NTPSec最近还公布了对NTS的支持。
如果您使用NTPsec或其新的CFNTS项目,Cloud Flare建议启用NTS。他们确实注意到,您的守护进程将需要TLS1.3支持。
NTS是一个由两个子协议组成的套件。首先是网络时间安全密钥交换(NTS-KE)。该协议负责处理第二个协议NTPv4的关键材料和参数协商的创建。当前版本的NTP协议NTPv4允许客户端从远程服务器同步时间。
正如Cloud Flare的密码工程师Watson Ladd和Cloud Flare的软件工程师Pop Chunhapanya所指出的:
为了维护NTPV4的可伸缩性,服务器不维护每个客户端状态是很重要的。一个非常小的服务器可以为数百万的NT P客户端服务。在提供安全性的同时维护此属性是通过服务器提供给包含服务器状态的客户端的cookie来实现的。
为了在第一阶段完成这一任务,客户端将向NTS-KE服务器发送请求,并通过TLS获得响应。在这一阶段,有若干职能:
在第二阶段,客户端现在可以安全地将它们的时钟与协商的NTP服务器同步。为了确保这是安全地完成的,客户端发送具有四个扩展的NTPv4包。第一个扩展,唯一标识符扩展,包含一个用于防止重放攻击的随机非。下一个扩展NTS cookie扩展为客户端提供两个cookie中的一个。由于只有客户端记住了两个AEAD键(C2S和S2C),服务器需要这个cookie来提取密钥。每个cookie都包含在服务器持有的秘密密钥下加密的密钥。
在第三个扩展中,NTS cookie占位符扩展,从客户端发送信号请求服务器提供额外的cookie。这是为了确保响应不会明显长于防止放大攻击的请求。最后一个扩展名为NTS身份验证器和加密扩展字段扩展,包含以C2S为密钥的AEAD算法和NT P头、时间戳和所有以前的扩展名作为关联数据的密文。此标头是为了防止时间戳被欺骗。
正如Ladd和Chunhapanya所指出的:
第二次握手可以重复很多次,而不会回到第一阶段,因为每个请求和响应都给客户端一个新的cookie。因此,TLS中昂贵的公钥操作在大量请求中被摊销。
团队决定在Rust执行他们的服务,这偏离了他们通常的选择语言,Go。正如作者所指出的,他们决定使用Rust,因为“在响应NT P包的中间暂停垃圾收集将对准确性产生负面影响”。他们还指出,Rust的内存安全性、不可丢失性、线程安全性、不可和错误处理特性是选择中的关键考虑因素。
随着这个版本的发布,Cloud Flare已经向公共NT P池添加了他们的时间服务。NT P池是一项由志愿人员维护的服务,在世界各地提供NTP服务器。然而,他们注意到NTS在池模型中不能很好地工作。为了最好的安全性,Cloud Flare建议启用NTS并使用Time.Cloud Flare.com或其他NTS支持服务器。
根据第2款BSD许可证,CFNTS服务已经开源..云Flare希望他们的解决方案将使更多的客户能够在未来支持NTS。他们正在积极寻求对代码库的贡献。