本文提出了一种基于用户数据报协议的DNS传输中用户隐私保护的加密方法:DNSDEA。该方法采用PKI加密体系与DNS协议相融合,不仅解决了域名隐私保护问题,而且与传统DNS体系相兼容,保持了DNS系统的简单、高效的技术特点。

域名系统(DNS)是互联网基础服务,是互联网访问的重要入口,域名隐私保护是 DNS安全的研究热点。本文提出了一种基于用户数据报协议的DNS传输中用户隐私保护的加密方法:DNSDEA。该方法采用PKI加密体系与DNS协议相融合,不仅解决了域名隐私保护问题,而且与传统DNS体系相兼容,保持了DNS系统的简单、高效的技术特点。

域名系统(domain name system,DNS)是互联网的重要基础服务之一,主要通过域名和互联网协议地址(IP)等互联网基础资源之间的映射与转换,实现标识和定位互联网上服务器和服务入口。DNS是一个相对成熟的全球性分布式数据库,为互联网提供高效稳定的互联网标识解析服务。

1983 年,Mockapetris提出 DNS 架构,随后该构架在不断地持续演进和优化。在设计之初,域名系统在域名协议方面并没有考虑完备的安全机制。1999年,DNS安全扩展协议(domain name system security extensions,DNSSEC)被提出,其能够有效降低中间人攻击的风险,保证 DNS传输数据的完整性,从而提升 DNS系统的安全服务能力。2010年,互联网域名的根服务开始部署 DNSSEC服务,标志着域名服务开始向安全服务方向迈进,DNS 也从一个简单的名址转换服务向复杂的、可信的解析服务发展,传输层安全协议DANE(DNS-based authentication of named entities)就是基于 DNSSEC协议将数字证书通过 DNS服务进行发布,以确保证书来自特定的证书颁发机构。

随着互联网普及率的不断提高及其对生产生活的不断渗透,人们已经对互联网产生了越来越强的依赖性,当前的互联网已不仅是获取和分享信息的途径,而且已成为大多数传统行业业务系统的基础载体,因此隐私问题已经成为互联网亟待解决的一个重要问题。DNS 主要采用用户数据报协议(user datagram protocol,UDP)协议明文传输方式进行名址转换,虽然DNSSEC协议提升了数据篡改难度,但是依然采用明文方式提供解析服务。作为互联网基础服务,DNS 对于用户隐私保护依然表现出了脆弱性。目前 DNS 有关安全的命题被真正解决得还较少,而其中的隐私问题也已成为行业关注的焦点问题并逐渐得到重视。一方面,行业内采用查询最小化(query minimization)方法降低隐私窃取风险,使用数据最小化(data minimization)原理减少 DNS权威服务收集个人隐私信息;另一方面,针对 DNS解析服务过程中隐私泄露的问题,国际组织Internet Engineering Task Force(IETF)于2014年专门成立 The DNS PRIVate Exchange(DPRIVE)工作组讨论并制定 DNS 隐私保护协议,希望采用数据加密传输的方式实现 DNS隐私保护。基于此背景,本文提出一种基于UDP的DNS传输中用户隐私保护的加密方法。

研究现状

当前,绝大多数 DNS 服务和终端之间的数据交换(主要包含请求和反馈)采用明文、非加密的方式进行,这将导致用户隐私暴露在互联网通信中,其隐私方面的脆弱性将会被黑客所利用,例如黑客可以收集用户的访问痕迹(查询时间、访问内容、用户IP地址等)等信息分析用户习惯等。针对这个问题,目前主要有以下两种方法保护DNS查询过程中的用户隐私。

DNS数据报文加密

Dempsky 提出了 DNSCurve 方法,该方法基于现有 DNS 体系架构,使用Curve25519 在客户端和服务器端交换密钥以及提供认证和数据加密。服务端的公钥存放在“NS”记录中发送给客户端,因此使用 DNSCurve加密DNS报文并不会带来额外查询延迟。DNSCrypt是DNSCurve比较有名的一个实现,已在 OpenDNS的服务上得到广泛部署,用来解决终端用户的隐私保护问题。类似的ConfidentialDNS也使用了 DNS的扩展机制为 DNS协议增加加密功能。它提出一种新的资源记录类型“ENCRYPT”来传送 DNS服务器的公钥到客户端。然后客户端使用服务器公钥加密 DNS 查询请求,以及用来加密 DNS响应的客户端公钥,从而实现对 DNS请求和反馈数据进行加密保护。这两种方案虽然能有效解决DNS 明文传输所带来的脆弱性问题,但是需要在DNS通信两端都部署安装插件(或升级解析软件)实现DNS通信从明文到密文的目标,推广成本较大,所以目前使用并不广泛。

DNS通信链路加密

TLS(transport layer security)是一种为网络通信提供数据保密以及完整性的安全协议,它在传输层对网络连接进行加密。目前 TLS 最常见的一种应用是HTTPS协议,它使用公钥加密对网站进行认证,同时使用对称加密对数据传输进行加密。TLS需要 TCP协议来保证信道的可靠传输,不能直接用来加密保护 UDP协议的数据,如果 DNS希望使用 TLS加密保护数据,就必须使用 TCP协议。然而现状是绝大部分的 DNS查询使用 UDP协议,切换为 TCP协议是一个长期的过程,并且代价巨大。因此,就现阶段来说,DNS-over-TLS并不是一个可行的隐私保护方案。

DTLS(datagram transport layer security)数据包传输层安全协议是在TLS架构上提出的一种扩展,能够支持 UDP 协议。DTLS 使得直接加密 UDP 协议的 DNS 查询报文变得可行。IETF草案提出的DNS-over-DTLS详细描述了如何使用DTLS技术加密DNS报文。

DNS-over-TLS 和 DNS-over-DTLS 使用互联网标准协议 TLS 和 DTLS 来实现 DNS 密文通信。这两种方法都是采用 TLS 协议进行 DNS 改进,但该方法需要在通信之前需要建立握手、认证等一系列复杂网络通信才能实现,对于访问量巨大、开销相对较小的 DNS服务提出了较高的网络开销和性能要求。

上述两种方法对于延迟敏感、高吞吐量的互联网基础服务DNS来说,都带来了较大挑战。

DNS密文通信方法

提出了一种新的 DNS加密通信方法DNSDEA(DNS data encryption algorithm),该方法在现有 DNS架构和报文格式下采用非对称加密算法的密文方式通信。通过DNS查询传输客户端的公钥,以降低基于TLS等方法建立链接的开销,减低查询延时。同时,利用其无状态特性提高服务端的并发性。

报文结构

1)加密标记位。为标记一个 DNS 报文是否为加密报文,将 DNS 报文头部后的第一个字节定位为加密标记位。对于一个正常的未加密 DNS 报文,该字节表示查询域名第一段的长度,按照互联网协议标准(request for comments,RFC),长度应小于 64。将该字节拓展为加密标记位,若该字节小于 64,表示 DNS报文为非加密报文,若大于64,表示该报文为加密报文。

2)密钥格式。DNSDEA 采用非对称加密方法,在 DNS 终端和DNS 服务端分别独立生成通信密钥对(含公钥和私钥)。DNS 服务端的公钥通过现有的证书颁发架构(certificate authority infrastructure)发布,使用该 DNS 服务端的客户需手动配置该公钥。DNS客户端使用的密钥在查询过冲中临时生成。考虑到查询效率等因素,DNS客户端密钥在一段时间内可重复使用。

客户端的公钥由客户端在DNS 报文的附加段以EDNS0 格式添加,通过 DNS 查询发送给 DNS 服务端。具体格式如图1所示。

密钥的具体内容存放在上面的选项数据中,其中前两个字节为算法标记位,标识该密钥使用的加密算法,之后两个字节为预留的标识位,最后一部分为具体的公钥数据。具体格式如图2所示。

3)密报文格式。加密的 DNS报文的头部与普通的 DNS报文保持一致,头部后一个字节为加密标记位。标记位后两个字节为加密数据的长度,最后一部分为的加密数据,具体格式如图3所示。

加密查询方法

使用 DNSDEA 方法时,DNS 终端需要手动配置DNS服务端的公钥。服务端的公钥可通过 PKI体系进行验证。在 DNS终端向 DNS服务端发送查询请求时,使用 DNS 服务端的公钥对请求资源记录(RRset)进行加密,将DNS终端的公钥制作成RRset并使用DNS服务端的公钥将其加密,生成 DNS 报文格式数据,传输给DNS服务端。

DNS 终端将按照 DNS 协议要求,将生成的 DNS 查询报文发送给 DNS 服务端,DNS服务端使用自身私钥进行解密还原待查询的域名记录和 DNS终端的公钥信息,按照 DNS查询逻辑寻找查询结果,使用还原出来的DNS终端公钥对查询结果进行加密,发送给DNS终端。

DNS 终端接收到应答报文后,使用其私钥信息将应答报文的应答资源记录(RRset)进行解密,并按照DNS协议进行处理。

具体流程如图 4所示。以 www.example.com查询为例,实现加密查询方法,主要分以下步骤:(1)服务端通过 PKI发布公钥,客户端手动配置服务端公钥;(2)客户端生成密钥对;(3)客户端构造 www.example.com 的查询包,将客户端的公钥添加在查询包的附加段,并用服务端公钥加密后,将查询包发送给服务端;(4)服务端收到加密的查询包,使用服务端私钥解密,获取 DNS查询内容和客户端公钥;(5)服务端构造www.example.com的应答包,并用客户端的公钥加密后,将应答包发送给客户端;(6)客户端收到加密的应答包,使用客户端私钥解密,获得www.example.com的应答内容。

实验及分析

为测试 DNSDEA 的可行性,进行了相关实验,对DNSDEA 和基于 TLS、DTLS 加密方法的 DNS 查询进行对比,以验证DNSDEA 的可行性及相对于目前较流行加密方法的低延迟优势。

实验方法

由于 DNS 查询主要通过 UDP 传输,因此实验主要关注 DNSDEA 和基于 DTLS 加密方法下 DNS 查询包延迟。实验分别测试了两种加密方法使用RSA和ECC算法情况下不同大小数据包的性能表现,通过发起多次DNS查询取平均值,计算各方法下DNS查询时延,比较两种方法在DNS加密使用上的特点。

实验使用openssl-0.9.8 和crypto++5.6.5 加密库实现 RSA和 ECDSA加密,通过编程模拟了两种加密方法下DNS服务端和客户端的软件行为。客户端DNS查询均通过脚本定时循环调用实现,因此基于 DTLS加密的查询每次触发新的 DTLS连接,未使用历史会话。实验运行环境为CentOS 5.7,服务端和客户端分别部署在北京同城的不同节点。

实验结果与分析

1)固定通信字节时延对比。采用10 Bit的通信数据,利用不同强度的密钥进行测试,实验结果如图5所示。

从实验结果来看,在密钥长度相等的情况下,基于DTLS 加密的 DNS 查询由于在建立连接的过程中密钥协商耗时较大,DNS 查询整体延时大于 DNSDEA 方法下DNS延时。在RSA加密算法下,加密强度越小,密钥越短,与 DTLS方法比较,DNSDEA性能是 DTLS方法的2.79倍(定义加速比为DTLS方法与DNSDEA时延之比,其比率越高则说明 DNSDEA 时延越低,速度越快);随着RSA密钥长度的增长到2048 Bit时,由于DNSDEA需要将客户端的密钥加密后,通过 DNS 报文传送给服务端,加密耗时明显增长,但总时延仍低于 DTLS 加密方法。
使用 ECDSA 加密算法情况下,密钥长度为 112、160、256 Bit时,DNSDEA对密钥加密的开销小于DTLS密钥协商的通信开销,因此总体网络延时优于 DTLS方法,但随着加密强度增加到521Bit时,DNSDEA对密钥本身加密的开销显著增长,明显大于 DTLS密钥协商的通信开销,造成加密后的 DNS 查询时延急剧增长,在ECDSA 512下,性能低于DTLS方法。
2)固定密钥长度时延对比。使用RSA算法,选取密钥长度为1024位,测试了不同长度的DNS报文在DNSDEA、DTLS方法的时延情况,实验结果如图7所示。

由于 DTLS在密钥协商成功后,采用对称密钥加密数据,因此随着 DNS报文的加大,基于 DTLS 的 DNS加密方法时延增长不明显,而 DNSDEA 在 DNS 报文较大时,其传输时延明显增长。
实验可以看出,在 1024 位密钥加密条件下,采用DNSDEA 传输时延整体明显低于基于DTLS 的 DNS 加密方法。

综上所述,在密钥长度和传输报文较小时,DNSDEA时延明显低于 DTLS方法;基于DTLS加密的方法,由于在连接建立后,双方采用对称密钥加密,其耗时的增长幅度要小于DNSDEA;由于多数 DNS 报文的大小一般都在 200Byte 以内,因此相较于 DTLS 方法,DNSDEA 可以明显降低 DNS 加密传输时延。此外,DNSDEA 基于 DNS传输,其无状态的特性也可以明显提升服务端的并发性。

随着互联网个人隐私问题得到更多人的关注,DNS隐私泄露问题将会越发突出。针对DNS个人隐私问题的现有技术进行分析,在现有技术解决方法基础上提出了一种新的DNS加密通信方法:DNSDEA。与传统方法相比,该方法在现有 DNS 架构和报文格式下采用非对称加密算法的密文方式通信,不仅完成了 DNS 个人隐私保护,而且提升了域名解析核心算法的并行粒度,降低了 DNS终端与 DNS服务端之间的通信开销,有效保持了DNS低延迟的特性。

针对 RSA、椭圆加密算法(ECC)等加密算法进行了实验,以期为后续通信加密应用研究和 DNS 安全解析并行化研究提供一定参考,并且深入探索 DNSDEA 方法针对 DNSSEC TLSA协议的扩展,提升加密通信安全水平。后续将深入研究 DNSDEA方法对于网络社交和大数据交换领域的改进与影响,进一步减小互联网隐私泄露风险。

基于隐私保护技术的DNS通信协议介绍的更多相关文章

  1. 转:基于TLS1.3的微信安全通信协议mmtls介绍

    转自: https://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=2649286266&idx=1&sn=f5d049033e ...

  2. 大型.NET商业软件代码保护技术 技术与实践相结合保护辛苦创造的劳动成果

    列举工作以来遇到的各种类型的软件所采用的代码保护技术,只讲原理不涉及技术细节实现,以避免产生法律问题.有些朋友说直接把代码放在Github开源下载,开源可以促进技术交流与进步,然而值钱的代码都积压在硬 ...

  3. [转] GCC 中的编译器堆栈保护技术

    以堆栈溢出为代表的缓冲区溢出已成为最为普遍的安全漏洞.由此引发的安全问题比比皆是.早在 1988 年,美国康奈尔大学的计算机科学系研究生莫里斯 (Morris) 利用 UNIX fingered 程序 ...

  4. GCC 中的编译器堆栈保护技术

    GCC 中的编译器堆栈保护技术 前几天看到的觉得不错得博客于是转发了,但这里我补充一下一些点. GCC通过栈保护选项-fstack-protector-all编译时额外添加两个符号,__stack_c ...

  5. 露脸!钉钉通过SOC2隐私性原则审计,安全和隐私保护达超一流国际标准

    2018年4月3日,阿里巴巴钉钉宣布已经正式通过了两项安全方面的权威资质:SOC2Type1服务审计报告和ISO27018(公有云体系下的隐私保护)证书. 钉钉方透露,此次通过美国注册会计师协会(AI ...

  6. 关于隐私保护的英文论文的阅读—— How to read English thesis

    首先 开始我读论文时 也是恨不得吃透每个单词 但是后来转念一想 没必要每个单词都弄懂 因为 一些程度副词 修饰性的形容词等 这些只能增强语气罢了 对文章主题的理解并没有天大的帮助 而读文章应该首先把握 ...

  7. [破解] DRM-内容数据版权加密保护技术学习(上):视频文件打包实现

    1. DRM介绍: DRM,英文全称Digital Rights Management, 可以翻译为:内容数字版权加密保护技术. DRM技术的工作原理是,首先建立数字节目授权中心.编码压缩后的数字节目 ...

  8. 基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写

    基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...

  9. kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归

    使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...

随机推荐

  1. pytest文档8-参数化(parametrize)结合allure.title()生成不同标题报告

    参数化parametrize 先看一个简单的pytest参数化案例演示test_a.py # test_a.py import pytest import allure def login(usern ...

  2. 学习JAVAWEB第五天

    # 今日内容 1. JavaScript基础 ## JavaScript: * 概念: 一门客户端脚本语言 * 运行在客户端浏览器中的.每一个浏览器都有JavaScript的解析引擎 * 脚本语言:不 ...

  3. 计算机网络再次整理————tcp[二]

    前言 本文不会去介绍tcp的具体协议,因为这个tcp 应该不能说是单纯的连接和传输数据这么简单,里面还有很多机制. 正文 首先介绍一下什么是协议族(protocal Family),举个例子PF_IN ...

  4. ApacheCN 数据科学译文集 20211109 更新ApacheCN 数据科学译文集 20211109 更新

    计算与推断思维 一.数据科学 二.因果和实验 三.Python 编程 四.数据类型 五.表格 六.可视化 七.函数和表格 八.随机性 九.经验分布 十.假设检验 十一.估计 十二.为什么均值重要 十三 ...

  5. ApacheCN 捐赠名单 2019

    这是 ApacheCN 的捐赠名单,不是龙哥盟博客的(关于 ApacheCN). 最新的名单请见 https://home.apachecn.org/donate/. 捐赠者 金额(元) 时间 收入类 ...

  6. C# 实例解释面向对象编程中的单一功能原则

    在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原 ...

  7. 1.k8s的前世今生

    k8s是Kubernetes的缩写,Google 于 2014 年开源了 Kubernetes 项目. 一.k8s的历史演变 k8s的演变过程:首先从传统的服务-->虚拟机部署-->容器部 ...

  8. JDK8 的 Lambda、Stream、LocalDate

    前言 本篇主要讲述是Java中JDK1.8的一些新语法特性使用,主要是Lambda.Stream和LocalDate日期的一些使用讲解. 作者:虚无境 来源:cnblogs.com/xuwujing/ ...

  9. 基于redis实现tomcat的session会话保持 (转)

    出处:https://cloud.tencent.com/developer/article/1402997 基于redis实现tomcat的session会话保持 在实际生产中,我们经常部署应用服务 ...

  10. linux计划任务之at

    at是单次的计划任务 1.首先安装at yum -y install at 2.开启atd服务 systemctl start atd systemctl enabled atd 3.常用命令 -m ...