2025 年技术指引:让真实案例和经验为开发者开路 了解详情
写点什么

CloudFlare 开源网络时间安全协议:同时支持 NTP 和 NTS

  • 2019-12-24
  • 本文字数:1599 字

    阅读完需:约 5 分钟

CloudFlare开源网络时间安全协议:同时支持NTP和NTS

CloudFlare最近宣布网络时间安全(Network Time Security,NTS)协议发布第一个主要版本。该版本构建在他们之前发布time.cloudflare.com之上,这是其免费的时间服务,支持网络时间协议(Network Time Protocol,NTP)和 NTS。


CloudFlare 的免费时间服务 time.cloudflare.com,同时支持 NTP 和正在兴起的 NTS 协议。但是,在它发布的时候,并没有太多可用的 NTS 客户端。随着他们的新CFNTS项目的发布,CloudFlare 希望能够鼓励 NTS 协议的广泛采用。NTPSec最近发布了对 NTS 的支持。


如果你组合使用 time.cloudflare.com 和 NTPsec 或者它们的新 CFNTS 项目的话,CloudFlare 推荐启用 NTS。他们还提到 daemon 需要支持 TLS 1.3。


NTS 是由两个子协议形成的套件。第一个是网络时间安全秘钥交换(Network Time Security Key Exchange,NTS-KE)。该协议负责秘钥材料的创建,并且负责与第二个协议NTPv4的参数协商。NTPv4 是当前版本的 NTP 协议,允许客户端与远程的服务器同步时间。


CloudFlare 的加密工程师Watson Ladd和软件工程师Pop Chunhapanya这样说到:


为了维护 NTPv4 的可扩展性,很重要的一点就是服务器不维护每个客户端的状态。一个很小的服务器就能为数百万个 NTP 客户端提供服务。在提供安全性的同时又能保证这种属性是通过 cookie 来实现的,cookie 由服务器提供给客户端并且包含了服务器的状态。


为了在第一阶段完成这一点,客户端需要发送一个请求给 NTS-KE 服务器并通过 TLS 获取一个响应。在这个阶段,涉及到多个功能:


  • 协商在第二阶段使用的AEAD算法;

  • 协商第二个协议(目前,标准只定义了 NTS 如何与 NTPv4 协作);

  • 协商 NTP 服务器的 IP 地址和端口;

  • 创建第二阶段使用的 cookie;

  • 从 TLS 会话创建两个对称秘钥(C2S 和 S2C)。



NTS 过程的第一阶段


在第二阶段,客户端现在可以安全地与协商过的 NTP 服务器同步它们的时钟。为了确保安全完成,客户端会发送带有四个扩展的 NTPv4 包。第一个扩展为唯一的标识符扩展,包含了用于防止重播攻击的随机nonce。第二个扩展是 NTS cookie 扩展,它会为客户端提供两个 cookies 中的某一个。因为只有客户端记得两个 AEAD 秘钥(C2S 和 S2C),所以服务器端需要这个 cookie 来提取秘钥。每个 cookie 中包含了秘钥,这些秘钥由服务器端所持有的秘钥进行了加密。


第三个扩展是 NTS cookie 占位符扩展,这是客户端发送给服务端的一个信号,用来请求额外的 cookie。之所以需要它是为了确保响应不会比请求明显长太多,以避免放大攻击(amplification attacks)。最后一个扩展是 NTS 认证器和加密扩展字段的扩展,它包含 AEAD 算法的一个密文,以 C2S 作为密钥,NTP 头信息、时间戳和所有上述的扩展作为相关的数据。我们需要此头信息来防止时间戳仿造


按照 Ladd 和 Chunhapanya 所述:


第二次握手可以重复很多次,而不会回到第一个阶段,因为每个请求和响应都会给客户端一个新的 cookie。因此,TLS 中昂贵的公钥操作被分摊到大量请求中。


团队决定使用Rust来实现他们的服务,这与他们通常所选择的Go语言有所不同。正如作者们所指出的,他们决定使用 Rust 是因为“在响应 NTP 包的过程中垃圾收集暂停将会对精确性产生负面影响”。他们还指出,Rust 的内存安全性、不可为空性、线程安全性、不可变性和错误处理的特性是他们做出选择时的主要考虑因素。


随着这个版本的发布,CloudFlare 已经将他们的时间服务添加到公共NTP池中。NTP 池是一个由志愿者维护的服务,它在世界范围内提供 NTP 服务器。然而,他们注意到 NTS 在池模型中不能很好地运行。为了获得最佳的安全性,CloudFlare 建议启用 NTS 并使用 time.cloudflare.com 或其他支持 NTS 的服务器。


CFNTS服务已经基于2-Clause BSD许可证开源。CloudFlare 希望他们的解决方案能够让更多的客户在未来支持 NTS。目前,他们正在积极地寻求对代码库的贡献。


原文链接:


CloudFlare Releases Open Source Implementation of Network Time Security Protocol


2019-12-24 09:002058

评论

发布
暂无评论
发现更多内容

GitHub星标126K的京东「微服务进阶笔记」首次开源!好评如潮

Java你猿哥

Java 架构 微服务 Spring Cloud ssm

Git安装和配置教程:Windows/Mac/Linux三平台详细图文教程,带你一次性搞定Git环境

小万哥

git Linux 程序员 后端 C/C++

希尔伯特旅馆里,住着AI的某种真相

脑极体

AI 智能涌现

C语言编程—枚举

芯动大师

CSS小技巧使用 font-variation 让文字起飞

南城FE

CSS 设计 前端开发 动画 字体

利用springboot初始化机制三种实现策略模式的应用

Java你猿哥

Java spring Spring Boot 设计模式 ssm

太牛了!在GitHub上“千金难求”的SpringBoot趣味实战课免费分享

Java你猿哥

Java spring Spring Boot ssm SpringBoot实战

MySQL SQL脚本语句加上数据库存在判断

Andy

智能工厂 | 联合汽车电子有限公司汽车驱动科技上海智能工厂

工赋开发者社区

Parallels Desktop如何退出账号?PD18虚拟机退出账号方法

理理

Parallels Desktop下载 PD18虚拟机破解 Parallels如何退出账号

用Python做一个翻译器 | Python小知识

AIWeker

Python 人工智能 python小知识

QUIC 协议:特性、应用场景及其对物联网/车联网的影响

EMQ映云科技

车联网 物联网 mqtt QUIC

经典智能合约案例之发红包

timerring

区块链

Typora for Mac:一款极简风格Markdown写作软件

理理

Typora破解 Mac软件 Markdown文本编辑器 Typora Mac下载

ps神经滤镜是干什么的,神经滤镜的功能和作用

理理

ps神经滤镜 PS2023破解 Neural Filters下载 Photoshop2023 Mac

mac分屏功能怎么用?mac分屏软件推荐 magnet

理理

Magnet中文版 Magnet破解版 mac分屏功能 Magnet Mac下载 苹果窗口管理软件

Redis和MySQL的爱恨情仇!

Java你猿哥

Java MySQL redis ssm 缓存雪崩

StarUML教程:CLI(命令行界面)功能的使用

理理

StarUML教程 CLI(命令行界面) UML软件建模器 StarUML for Mac StarUML Mac破解下载

软件测试/测试开发丨学习笔记之用户端Web自动化测试

测试人

程序员 软件测试 自动化测试 测试开发 web自动化

MySQL 启动apollo-adminservice 报错 Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'serverconf0_.Cluster' in 'field list

Andy

写给程序员的可逆计算理论辨析

canonical

开源 低代码 Docker 镜像 可逆计算 Nop平台

七年老程序员的三四月总结:三十岁、准备婚礼、三次分享

拭心

程序人生 总结思考

软件测试/测试开发丨学习笔记之Web自动化测试

测试人

程序员 软件测试 自动化测试 测试开发 web自动化

大模型全情投入,低代码也越来越清晰

引迈信息

低代码 大模型 JNPF

iOS MachineLearning 系列(20)—— 训练生成CoreML模型

珲少

经典智能合约之智能拍卖

timerring

区块链

深度学习进阶篇-国内预训练模型[5]:ERINE、ERNIE 3.0、ERNIE-的设计思路、模型结构、应用场景等详解

汀丶人工智能

人工智能 自然语言处理 深度学习 文心 ERNIE Transformer

MySQL Idea 启动主程序 无法识别时区

Andy

文心一言 VS 讯飞星火 VS chatgpt (24)-- 算法导论4.2 6题

福大大架构师每日一题

福大大 ChatGPT 文心一言 讯飞星火

2023-05-28:为什么Redis单线程模型效率也能那么高?

福大大架构师每日一题

redis 福大大

GPT用于复杂代码生产所需要满足的必要条件

canonical

低代码 GPT GPT-4 可逆计算

CloudFlare开源网络时间安全协议:同时支持NTP和NTS_开源_Matt Campbell_InfoQ精选文章