群山深处的“河谷镇”里,上百个自动发信的小信箱——温度传感器、水表、智能门锁——每天都要把读数寄往山外的“云端城”(云服务器)。信件要走一条穿过黑松林的驿道,那里常年蹲着一个爱偷看信件的邻居(窃听者),还潜伏着会换信、冒名的劫匪(中间人与伪造者)。今天要讲的 TLS/DTLS,就是给这批信件配的三重保险:密信暗号(加密)、官印令牌(证书)、进城时的核验仪式(握手)。这套机制让每一封 IoT 报文都变成打不开的密匣,让任何冒充“寄信人”的家伙当场现形。它是物联网安全的第一道防线,也是 AI 规模化接收海量设备数据的信任基石。

岗位关联

无论你是做数据管道、边缘计算还是 AIoT 平台,理解 TLS/DTLS 的运作原理,才能设计出真正可信、抗攻击的智能系统——这是踏入 IoT 安全领域的必修课。

目录
  1. 可视化演示
  2. 安全威胁与防线
  3. 密码学双子星
  4. 证书与身份认证
  5. TLS握手原理
  6. DTLS适配UDP
  7. 资源受限优化
  8. 落地与生态
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示IoT设备与云端之间的TLS握手过程、TLS与DTLS协议对比及安全防护机制,切换模式查看不同加密环节。

本节配有交互动效(进入视口后自动加载,约 3KB)。

TLS握手流程 ClientHello:客户端发起连接,携带支持的加密套件 ServerHello:服务器选择套件并返回证书 2-RTT握手:CH→SH→Cert→KE→Fin 握手完成后建立加密通道

安全威胁与防线

想象河谷镇的密信要在驿道上走三天。第一天,黑松林里的邻居悄悄拆开信封,温度、水位、门锁密码全部写在明面上——这是“窃听”。第二天,劫匪半路截下信,把“门外无人”改成“屋里空虚”,再送进城——这是“篡改与中间人攻击”。第三天,有人冒用镇长的落款,给云端城发去一封假命令——这是“伪造”。

这三种情况正是 IoT 通信中最经典的攻击:明文嗅探(eavesdropping)、中间人攻击(man-in-the-middle)、设备身份伪造(spoofing)。TLS/DTLS 防线的设计目标,就是同时挡住这三类威胁:加密让窃听者只能看到乱码,报文认证让篡改立即暴露,数字证书让伪造无处遁形。

我们把攻击看成三个动作组成的集合,TLS/DTLS 提供的安全属性(机密性、完整性、身份认证)恰好覆盖这个集合。但要注意,TLS 防的是“通信链路上”的攻击,设备被物理偷走、固件被逆向这类端侧风险并不在它的射程之内。

所以,TLS/DTLS 就是给那条黑松林驿道配的三重保险:密信(加密)、验印(身份认证)、封条(完整性)。有了它,河谷镇的信再经过邻居和劫匪身边时,只剩下一堆无意义的密文。

Attack={eavesdrop, modify, forge},TLS/DTLS⊇Attack\displaystyle \text{Attack} = \{\text{eavesdrop}, \ \text{modify}, \ \text{forge}\}, \qquad \text{TLS/DTLS} \supseteq \text{Attack}
通俗说:只要攻击属于“偷看、改信、冒名”这三类,TLS/DTLS 就能兜住;但如果窃贼直接搬走整栋房子(设备物理失窃),防线也鞭长莫及。
  1. Attack 集合把“偷看、篡改、冒名”三种动作放进一个大括号,表示这是我们要防住的全部对手。
    eavesdrop, modify, forge\text{eavesdrop}, \ \text{modify}, \ \text{forge}
  2. 覆盖号 ⊇读作“包含于其防护范围”,表示 TLS/DTLS 提供的安全属性能够防住集合中的每一项攻击。
    TLS/DTLS⊇Attack\text{TLS/DTLS} \supseteq \text{Attack}

密码学双子星

河谷镇的工匠发明了两种暗号。第一种是“密本”:寄信人和收信人各持同一本密码本,写信时查本子写、读信时反查本子解——这叫对称加密,快,但本子千万不能落到别人手里。第二种是“私章+公锁”:城门口挂一个任何人都能投递的公开信箱,投进去的信只有手持私章的城主能打开——这叫非对称加密,慢,但无需提前共享任何秘密。

TLS/DTLS 把两者搭配使用:握手阶段用“私章+公锁”(非对称)来交换密本,数据阶段用“密本”(对称)来快速加密正文。IoT 设备常用的 AES(对称)负责批量加密报文,ECC/RSA(非对称)负责加密密钥交换的“种子”。

除此之外还有哈希与 HMAC。哈希是一段内容的“指纹”,任何改动都会令指纹大变;HMAC 是带密钥的指纹,用来给报文贴“防拆封条”,保证中途没人动过手脚:

这就像河谷镇的信件:进城仪式上互相比对“私章”确认身份,谈妥后立刻换成共享“密本”——又快又安全;每封信再贴一张 HMAC 封条,谁拆过都能看出来。密码学双子星(对称+非对称)加上封条(哈希/HMAC),共同铸成 TLS/DTLS 的引擎。

c=Ek(m),m=Dk(c),tag=HMACk(m)\displaystyle c = E_{k}(m), \qquad m = D_{k}(c), \qquad \text{tag} = \text{HMAC}_{k}(m)
普通用户只需要记住:对称加密是“又快又轻的密本”,非对称加密是“安全但笨重的私章”,HMAC 则是“带钥匙的防拆封条”。
  1. 加密 E_k(m)用密钥 k 和加密算法 E,把明文 m 变成谁也读不懂的密文 c。
    c=Ek(m)c = E_{k}(m)
  2. 解密 D_k(c)用同一把密钥 k 反向计算,把密文还原成明文 m。
    m=Dk(c)m = D_{k}(c)
  3. HMAC 标签对消息 m 计算带密钥 k 的哈希指纹,得到 tag;验证时重新计算比对,不一致就说明被篡改。
    tag=HMACk(m)\text{tag} = \text{HMAC}_{k}(m)

证书与身份认证

河谷镇要防伪造,光有密本还不够——你怎么知道眼前这位自称“云端城城门官”的家伙不是劫匪扮的?镇上办法是:由“驿站衙门”(CA,证书颁发机构)给每个合法角色发一枚盖了大印的令牌(数字证书),令牌上刻着持证者的名字、他的公钥,以及有效期。

证书的核心是“权威背书 + 公钥绑定”:CA 用自己的私钥给“身份+公钥+有效期”这串信息盖上电子印章。对端验印时只需用 CA 的公钥解开印章,确认信息没被改过,就能确定“持证人确实是令牌上写的那个身份”。

在 IoT 场景中,设备出厂时预置证书,云端也持有自己的证书;连接时双方互相出示、互相验印,这就是 TLS 里的“双向认证”。伪造设备因为没有 CA 私钥,无法伪造印章,自然过不了验印关:

信任由此像驿站网络一样层层传递:衙门签给驿站、驿站签给邮差、邮差签给信箱。只要顶层 CA 可信,整条“信任链”上的设备都能被云端放心接纳。这也是为什么“CA 被攻破”在 IoT 界被视为灾难——那相当于官印模板失窃。

cert=SignskCA(deviceID ∥ pkdevice ∥ expiry)\displaystyle \text{cert} = \text{Sign}_{sk_{\text{CA}}}\big(\text{deviceID} \ \Vert \ pk_{\text{device}} \ \Vert \ \text{expiry}\big)
一句话:证书 = 身份证 + 公章,是“认证”的工具,不是“加密”的钥匙;它负责回答“你是谁”,而钥匙负责“信里写了什么”。
  1. 打包身份信息把设备唯一编号、设备公钥、有效期三样信息首尾拼接成一条记录。
    deviceID ∥ pkdevice ∥ expiry\text{deviceID} \ \Vert \ pk_{\text{device}} \ \Vert \ \text{expiry}
  2. CA 签名CA 用自己保管的私钥 sk_CA 对这条记录做签名,等于盖上无法伪造的官印。
    SignskCA(⋅)\text{Sign}_{sk_{\text{CA}}}(\cdot)
  3. 验证端验印任何持有 CA 公钥的端侧都可以解开印章、比对信息,验印通过即确认身份可信。
    VerifypkCA(cert)=true/false\text{Verify}_{pk_{\text{CA}}}(\text{cert}) = \text{true/false}

TLS握手原理

邮差第一次进城,不能拿了信就走:他要在城门口和门卫完成一套固定的仪式——互报暗号(ClientHello/ServerHello)、出示令牌(证书)、交换密本碎片、最后各自配出当天统一的密本。仪式结束后,正文才用密本书写。这套仪式,就是 TLS 握手(handshake)。

TLS 1.2 的握手通常要两个往返(2-RTT):一来一回确认身份与参数,再来一回完成密钥交换确认。TLS 1.3 把流程压缩到一个往返(1-RTT),并移除了大量过时算法,这对频繁发起连接的 IoT 设备意义重大。

关键的数学细节是密钥派生:客户端与服务器通过椭圆曲线 Diffie-Hellman(ECDHE)在公开信道上各自算出同一个“预主密钥”(premaster secret),再掺入双方生成的随机数,喂给密钥派生函数 KDF,榨出最终的会话密钥。整个过程私密值从不上线:

握手仪式虽然繁琐,但好处是只做一次。仪式一完成,河谷镇与云端城之间就建立了一条密信专线;此后的每一封信都是密本书写,劫匪再也插不上手。

Ksession=KDF(premaster, rclient, rserver)\displaystyle K_{\text{session}} = \text{KDF}\big(\text{premaster}, \ r_{\text{client}}, \ r_{\text{server}}\big)
通俗说:两边的“密本碎片”(premaster)加两把“随机盐”(随机数)一起丢进榨汁机(KDF),得到今天这封信专用的“密本”(会话密钥)。
  1. 预主密钥 premaster通过 ECDHE 在公网交换临时公钥后,双方独立算出的同一个秘密种子。
    premaster=kclient⋅pkserver=kserver⋅pkclient\text{premaster} = k_{\text{client}} \cdot pk_{\text{server}} = k_{\text{server}} \cdot pk_{\text{client}}
  2. 随机数 r_client / r_server双方各自随手生成的随机串,掺进去是为防止攻击者重放旧握手。
    rclient, rserverr_{\text{client}}, \ r_{\text{server}}
  3. KDF 派生把三项输入交给密钥派生函数,输出定长的会话密钥,之后所有业务数据都用它对称加密。
    Ksession=KDF(premaster, rclient, rserver)K_{\text{session}} = \text{KDF}(\text{premaster}, \ r_{\text{client}}, \ r_{\text{server}})

DTLS适配UDP

有些信走的是“驿道马车”(TCP):可靠、按顺序到达,但慢、握手重。还有些信走“信鸽”(UDP):几乎零延迟,但鸽子可能被山鹰叼走(丢包)、可能绕路先到(乱序)、还可能把同一封信送两遍(重复)。TLS 默认马车不会掉东西,遇到信鸽就水土不服了。

DTLS(Datagram TLS)就是给信鸽线路定制的 TLS 变体:加密算法几乎不变,但自己承担“可靠性适配”。它给每个报文盖上明文可见的序号,让接收端一眼看出:序号断了就是有报文丢失要重传;序号重了就是重放攻击要丢弃;序号乱序就按序缓存重组;序号带纪元(epoch)则标记密钥换代的边界。

其中 epoch 与计数器拼接成完整序号的设计非常巧妙——密钥每更新一次 epoch 加一,旧纪元下所有报文即便被重放也会被识别拒绝:

于是,走信鸽的实时消息(车辆位置、设备状态推送)也获得了与马车同等级别的安全:加密、验印、防重放、自动重传。虽然鸽子偶尔丢信,但云端凭着编号和重投机制,依然能拼出完整无缺的消息流。

seqfull=(epoch≪48) ∥ counter\displaystyle \text{seq}_{\text{full}} = (\text{epoch} \ll 48) \ \Vert \ \text{counter}
通俗说:每封信盖两个章,一个章写“第几任邮差”(epoch),一个章写“本任邮差送的第几封信”(counter),两个合起来就知道信是否新鲜、是否齐全。
  1. 纪元 epoch每次重新协商密钥时加 1,表示“第几代密钥”。
    epoch\text{epoch}
  2. 计数器 counter本代密钥内逐包递增,用于检测单代内的丢包与乱序。
    counter\text{counter}
  3. 拼接 64 位序号epoch 左移 48 位再拼上 counter,构成完整序号;接收端据此排序、去重、做重放检测。
    seqfull=(epoch≪48) ∥ counter\text{seq}_{\text{full}} = (\text{epoch} \ll 48) \ \Vert \ \text{counter}

资源受限优化

河谷镇的大多数信箱其实是“麻雀快递员”——巴掌大的传感器、电池要用三年、内存只有几十 KB。让它们背负 TLS 的完整装备(大证书、大密钥、复杂握手)实在吃力。怎么让麻雀也穿得上铠甲?答案是“定制轻量马鞍”。

工业界总结了四大招:一是握手开销裁剪,使用 ECDSA/ECDHE 等椭圆曲线算法,密钥短、计算省,比 RSA 更适合小芯片;二是会话复用降耗,第一次握手后云端发一张“会话票据”(session ticket),设备下次凭票直接恢复会话,免去重复验印;三是轻量密码套件,选用 CCM/GCM 等认证加密模式配合 AES-128,在 8 位单片机上也能跑;四是硬件加速,集成 ATECC608 这类安全芯片,把私钥运算和证书验签交给硬件,主控只负责业务。

多项优化叠加后效果显著:完整握手可能要几十毫秒和几千字节内存,而凭票据恢复会话几乎零成本:

麻雀快递员穿上了轻量铠甲,安全边际一点没少:认证、加密、完整性全套都在,只是把“重装甲”换成了“智能纤维”。这正是万亿级 IoT 设备能够规模化部署 TLS/DTLS 的秘密武器。

costresume≪costfull handshake\displaystyle \text{cost}_{\text{resume}} \ll \text{cost}_{\text{full handshake}}
通俗说:第一次进城要全套盘问(完整握手),以后凭“回头客令牌”(session ticket)扫一眼就放行,开销差一到两个数量级。
  1. 完整握手开销包括证书验签、密钥交换、多次往返和内存占用。
    costfull handshake\text{cost}_{\text{full handshake}}
  2. 会话恢复开销只传一个小票据或 PSK 标识,几乎零往返。
    costresume\text{cost}_{\text{resume}}
  3. 远小于 ≪表示会话恢复的开销比完整握手小一到两个数量级,这正是资源受限设备能用 TLS/DTLS 的关键。
    costresume≪costfull handshake\text{cost}_{\text{resume}} \ll \text{cost}_{\text{full handshake}}

落地与生态

单有河谷镇一家用密信不够——如果相邻的清水镇、对岸的铁匠坊各用各的暗号,驿道就乱了。安全的本质是“彼此信任的通用规则”。IoT 通信加密同样依赖标准化:TLS 1.3(RFC 8446)、DTLS 1.2(RFC 6347)、DTLS 1.3(RFC 9147)就是全行业共认的“驿站通则”。

落实通用规则需要整个产业链协作:芯片厂商做硬件加速,设备厂商烧录证书,云厂商开放 CA 与接入网关,测试机构做互操作验证,监管方定合规基线。任何一环掉队,都会成为攻击者的突破口。这也是行业强调“开放合作是加速规模落地的必由之路”的原因。

安全界有一个著名的“木桶定律”:系统的整体安全性不会超过最弱环节。通信加密解决的是链路上的安全,但证书私钥保管、固件升级通道、云端数据库防护,同样是一块块桶板:

所以,河谷镇的安全计划从来不只是多买几把锁,而是全镇统一标准、四方协作、持续演练。TLS/DTLS 是那条最关键的驿道防线,但要守住整条供应链,还需要标准、生态与运营一起发力。

Security(IoT)≤min⁡i Security(componenti)\displaystyle \text{Security}(IoT) \leq \min_{i} \ \text{Security}(\text{component}_i)
通俗说:驿路再安全,只要有一处山路没有设防,劫匪就会从那里下手。安全水平由最薄弱的一环决定。
  1. 组件集合IoT 系统由设备、通信链路、云端平台、运维流程等组件构成。
    componenti\text{component}_i
  2. 取最小值 min整体安全性等于所有组件安全性中最弱的那一个。
    min⁡i Security(componenti)\min_{i} \ \text{Security}(\text{component}_i)
  3. 小于等于 ≤通信加密再强,也不能独自撑起整个系统的安全天花板。
    Security(IoT)≤min⁡i Security(componenti)\text{Security}(IoT) \leq \min_{i} \ \text{Security}(\text{component}_i)

AI 应用场景

智能工厂预测性维护的数据管道

阶段:数据采集与传输阶段

解决的问题:工厂里上百台 PLC 和温振传感器要把数据持续喂给 AI 模型做预测性维护。传统明文传输时,攻击者可以窃听工艺参数,甚至在链路上注入伪造的高温读数,直接污染模型训练集。TLS 双向认证加加密,确保只有持有合法证书的真设备能上报、数据在途中无人能改。

具体案例:某锂电池厂为每台设备预置 ECC 设备证书,数据经 MQTT over TLS 上云;网关侧开启双向认证后,成功拦截了十几台被刷机冒充的“假传感器”,AI 故障预警准确率恢复到基线水平。

车路协同的低时延安全通信

阶段:实时推理的在线数据流阶段

解决的问题:车辆位置、速度以 100ms 频率上报,走 TCP 会因重传造成时延抖动,但明文 UDP 又会被伪造位置注入。DTLS 在 UDP 上提供加密与防伪,同时用序号和重传保证实时数据流的连续性,让 AI 路侧感知系统拿到的始终是可信输入。

具体案例:某车路协同路口的 OBU 采用 DTLS + PSK 预共享密钥方案,每 100ms 上报一次车辆状态;在 20% 丢包率的弱网测试中,靠自动重传仍保持 99% 的报文完整率,AI 碰撞预警未出现漏报。

智能门锁的低功耗云端同步

阶段:边缘设备与云端的可信连接阶段

解决的问题:智能门锁内存小、两天才唤醒一次,完整 TLS 握手耗电且占用资源。利用会话票据(session resumption)与轻量密码套件,唤醒后几乎零开销恢复加密会话,同时证书签发与轮换由云端 CA 统一管理,避免私钥长期暴露。

具体案例:某智能门锁产品将握手从 2-RTT 优化为凭票据的 0-RTT 恢复,单次同步功耗下降约 60%;配合 ATECC608 安全芯片存私钥,固件防回滚,通过了家电入网安全认证。

Python 演示

python83 行
"""模拟 DTLS 风格安全通信: 不可靠信道 + 序号 + 完整性校验 + 丢包重传"""import hashlibimport hmacimport random  class LossyChannel:    """模拟 UDP 不可靠信道, 30% 的报文会被吞掉"""     def __init__(self, loss_rate=0.3):        self.loss_rate = loss_rate        self.box = []     def post(self, data):        """投递一封加密信, 有一定概率被风刮丢"""        if random.random() >= self.loss_rate:            self.box.append(data)     def take(self):        """云端取信"""        return self.box.pop(0) if self.box else None  def derive_session_key(shared_secret):    """由握手产物派生会话密钥(教学中简化, 真实场景由 KDF 完成)"""    return hashlib.sha256(shared_secret.encode("utf-8")).hexdigest()[:32]  def hmac_tag(key, body):    """计算完整性标签, 防止信件被篡改"""    return hmac.new(key.encode("utf-8"), body.encode("utf-8"),                    hashlib.sha256).hexdigest()[:8]  def build_packet(seq, payload, key):    """设备打包: 序号 + 数据 + HMAC 封条"""    body = "%d:%s" % (seq, payload)    return "%s:%s" % (body, hmac_tag(key, body))  def main():    random.seed(11)    channel = LossyChannel(loss_rate=0.3)    # 真实场景中这个共享秘密由 TLS/DTLS 握手协商, 这里直接给定    key = derive_session_key("ecdh-shared-secret")    payloads = ["temp=%.1f" % (20.0 + i * 0.5) for i in range(6)]    packets = [build_packet(i, payloads[i], key) for i in range(6)]     for pkt in packets:        channel.post(pkt)  # 第一轮投递, 其中一部分会被"风"刮丢     received = {}    while True:        pkt = channel.take()        if pkt is None:            break        seq_s, payload, tag = pkt.split(":")        if hmac_tag(key, seq_s + ":" + payload) == tag:            received[int(seq_s)] = payload        else:            print("序号 %s 校验失败, 视为被篡改丢弃" % seq_s)     lost = [i for i in range(6) if i not in received]    print("云端第一轮收到: %s" % sorted(received))    print("丢失需要重传的序号: %s" % (lost if lost else "无"))     for seq in lost:        channel.post(build_packet(seq, payloads[seq], key))  # 重传     while True:        pkt = channel.take()        if pkt is None:            break        seq_s, payload, tag = pkt.split(":")        if int(seq_s) in lost and hmac_tag(key, seq_s + ":" + payload) == tag:            received[int(seq_s)] = payload     print("重传后云端最终收到: %s" % sorted(received))    print("完整率: %d/6" % len(received))  if __name__ == "__main__":    main()
目的:用约五十行代码复现 DTLS 的核心机制——报文在不可靠信道中丢失后,靠序号识别、靠 HMAC 验封条、靠重传补齐,最终云端拿到完整且未被篡改的数据流。
  1. channel = LossyChannel(loss_rate=0.3)模拟 UDP 式不可靠信道,三成报文会被“风”刮丢
  2. key = derive_session_key("ecdh-shared-secret")真实场景中这个共享秘密由 TLS/DTLS 握手协商,这里直接给定简化演示
  3. packets = [build_packet(i, payloads[i], key) for i in range(6)]设备给每封“信”盖上序号并贴 HMAC 封条
  4. channel.post(pkt)把信投进不可靠信道,可能被“风”刮丢
  5. if hmac_tag(key, seq_s + ":" + payload) == tag:云端验封条,不一致就视为被篡改丢弃
  6. lost = [i for i in range(6) if i not in received]按序号找出缺失报文,触发重传
  7. channel.post(build_packet(seq, payloads[seq], key))DTLS 风格重传,补齐缺口

常见误区

误区给设备加了 TLS 加密,通信就万事大吉,黑客再也进不来。

正解TLS/DTLS 只保护“传输链路”这一段:防窃听、防篡改、防伪造。设备固件有漏洞、云端数据库裸奔、证书私钥被偷,这些都不在它的管辖范围内。就像信封再严实,写信人家里进了贼,或收信人抽屉不上锁,照样泄密。

为何常见:初学者容易把“传输安全”误当成“整体安全”,忽略了安全是木桶效应。

误区DTLS 就是 TLS 换了个加密算法,其他没区别。

正解两者的加密算法几乎一样,核心区别在传输层适配:TLS 假设底层是可靠的 TCP,而 DTLS 必须自己在 UDP 上处理丢包、乱序、重放,靠 epoch+序号+重传机制补课。这是“协议工程”的差异,不是“换算法”的差异。

为何常见:只盯着“加密”两个字,忽略了 DTLS 真正的难点在于应对不可靠信道。

误区证书里装的就是用来加密数据的密钥,拿到证书就能解密通信内容。

正解证书是“身份证+公章”,用于身份认证和分发公钥,里面不包含私钥。真正加密业务数据的是握手后派生的对称会话密钥。证书负责回答“你是谁”,会话密钥负责“信里写了什么”,两者各司其职。

为何常见:把“认证”与“加密”两个功能混为一谈,是密码学入门最常见的认知偏差。

误区单片机内存才几十 KB,TLS 又胖又慢,IoT 设备只能用私有协议。

正解工业界早有成熟裁剪方案:会话票据让握手接近零开销,PSK 免去证书验签,CCM 轻量密码套件在 8 位机上可跑,安全芯片把密码运算下沉到硬件。IoT 设备完全能用上“轻量版 TLS/DTLS”。

为何常见:看到完整 TLS 的内存占用就望而却步,忽略了大量针对受限终端的优化实践。

面试题

Q1. DTLS 主要运行在哪种传输层协议之上?

单选题 · easy

  • A.依赖 TCP 可靠传输
  • B.依赖 UDP 不可靠传输← 正确答案
  • C.依赖 HTTP 语义传输
  • D.依赖 MQTT 广播传输

答案:B。DTLS 是为不可靠的 UDP 信道设计的 TLS 变体,自行解决丢包、乱序与重放问题。TCP 是 TLS 的地盘,HTTP/MQTT 是应用层协议,都不对。

Q2. TLS 握手中,数字证书的主要作用是?

单选题 · easy

  • A.用来加密全部业务数据
  • B.用来压缩传输报文
  • C.用来认证对端设备身份← 正确答案
  • D.用来提升链路带宽

答案:C。证书是“身份证+公章”,负责证明“你是谁”;业务数据加密用的是握手后派生的会话密钥,压缩和带宽与证书无关。

Q3. 会话恢复(Session Resumption)对 IoT 设备最大的好处是?

单选题 · easy

  • A.减少握手计算开销← 正确答案
  • B.提升屏幕显示亮度
  • C.增加传感器采样频率
  • D.降低卫星定位误差

答案:A。设备凭“回头客令牌”(session ticket)恢复会话,省去证书验签与密钥交换,是资源受限设备节电、省内存的关键手段,与显示、采样、定位无关。

Q4. DTLS 中引入 epoch 字段主要用于解决什么问题?

单选题 · mid

  • A.表示报文发送时刻
  • B.标记加密密钥代际← 正确答案
  • C.记录设备移动轨迹
  • D.统计网络丢包率

答案:B。epoch 在每次密钥重新协商时加一,标记“第几代密钥”。旧纪元报文即便被重放,也会因纪元不符被拒绝。它和报文发送时刻、轨迹、丢包统计无关。

Q5. TLS 1.3 相比 TLS 1.2 握手的主要改进是?

单选题 · mid

  • A.将握手压缩至一个往返← 正确答案
  • B.完全取消身份认证
  • C.改为明文传输密钥
  • D.删除全部密码算法

答案:A。TLS 1.3 把握手从 2-RTT 压缩到 1-RTT,同时移除了 RC4 等过时算法,但身份认证仍保留,密钥也不可能明文传输,更不会删除全部算法。

Q6. 在 DTLS 中,接收端如何发现报文丢失?

单选题 · mid

  • A.对比序号出现空缺← 正确答案
  • B.等待设备主动暂停
  • C.检查电量下降快慢
  • D.询问邻居设备意见

答案:A。DTLS 给每个报文盖序号章,接收端按序号检查连续性,发现缺口就知道有鸽子被山鹰叼走了,从而触发重传。这是可靠性的核心机制。

Q7. 以下哪些是 IoT 设备常用的轻量化安全手段?

多选题 · mid

  • A.会话票据复用连接← 正确答案
  • B.预共享密钥 PSK← 正确答案
  • C.轻量密码套件 CCM← 正确答案
  • D.每字节重复加密三次

答案:ABC。会话票据、PSK、CCM 都是为资源受限终端设计的标准优化;“每字节重复加密三次”既无安全增益又浪费算力,不是工程实践。

Q8. 设备证书的私钥被攻击者获取后,最先发生的风险是?

单选题 · hard

  • A.攻击者能冒充该设备← 正确答案
  • B.攻击者能破解所有密码
  • C.攻击者能直接修改 CA 规则
  • D.攻击者能删除云端数据库

答案:A。私钥是设备的“私章”,丢掉私章等于身份被冒用——攻击者可以伪装成该设备向云端上报假数据。它不能直接破解其他密码、修改 CA 规则或删库。

Q9. TLS/DTLS 能有效防护以下哪些攻击?

多选题 · hard

  • A.链路窃听和嗅探← 正确答案
  • B.中间人篡改报文← 正确答案
  • C.伪造设备身份接入← 正确答案
  • D.散热通道窃取密钥

答案:ABC。加密挡窃听、HMAC 挡篡改、证书挡伪造,这是 TLS/DTLS 的三重防线;散热通道攻击属于侧信道攻击,需物理防护,不在传输加密解决范围内。

Q10. 关于 DTLS 的序号与重传机制,下列说法正确的是?

多选题 · extreme

  • A.序号由纪元与计数器拼成← 正确答案
  • B.丢包后发送端需要重传← 正确答案
  • C.重放的旧包会被序号拒绝← 正确答案
  • D.序号由 CA 集中统一颁发

答案:ABC。DTLS 的 64 位序号由 epoch 左移 48 位拼上 counter 形成,接收端据此检测丢包、触发重传、拒绝重放;序号是端侧自主生成并随包携带的,与 CA 无关。