V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
noli
V2EX  ›  奇思妙想

一种利用 DNS 进行协商的、同端口上支持多种协议的实现方式

  •  
  •   noli · 2018-10-20 14:18:49 +08:00 · 1690 次点击
    这是一个创建于 2219 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前提

    预先分配密钥,或者通信双方预先知道对方的证书。

    步骤

    1. 客户端 bind 0 绑定一个客户端本地端口
    2. 客户端向服务器上的 DNS 发起预设的域名查询,
    4 条回复    2018-10-23 06:44:54 +08:00
    noli
        1
    noli  
    OP
       2018-10-20 14:36:05 +08:00
    手抖,没写完就发送出去了。。。

    步骤

    1. 客户端生成一个本地 TokenC

    2. 客户端向指定服务器发起符合预设格式的 DNS 查询,用以向服务器申请 TokenS,以及告知 TokenC

    3. 服务器通过 DNS 答复,发送 TokenS,经过签名的 TokenC 用以证明自身身份,防止中间人

    4. 客户端对 TokenS 签名为 sign(TokenS) ,并向服务器 443 发起 TCP 连接,先行发送 sign(TokenS) 以验证身份

    5. 服务器在 443 监听,通过 sign(TokenS) 辨别特殊流量,并作特殊处理。连接完成
    noli
        2
    noli  
    OP
       2018-10-20 14:40:06 +08:00
    在第 4 步,先行发送 sign(TokenS) ,我想表达的意思是,在特殊流量前,插入 sign(TokenS) ,与特殊流量一起发送。
    类似于一个 0-RTT 的过程。
    ZRS
        3
    ZRS  
       2018-10-23 05:55:27 +08:00 via iPhone
    你都有 preshared key 了还这么麻烦干什么…直接加密发送数据不就行了
    noli
        4
    noli  
    OP
       2018-10-23 06:44:54 +08:00 via iPhone
    @ZRS 即使有 preshared key 也不一定能支持多个用户,在同一时间段内,在同一个端口上,使用不同的 preshared key,进行通信。例如著名的某协议 。

    这是为了不暴露协议特征而故意设计成无协商无握手过程。tls 可以协商密钥,但是握手特征非常明显,于是可以有明确的判定方法。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2336 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:50 · PVG 09:50 · LAX 17:50 · JFK 20:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.