【密码算法 之八】GCM实战:从原理到TLS 1.3中的应用

【密码算法 之七】GCM 浅析 GCM 全称为 Galois/Counter Mode,其中 G 是指 GMAC,C 是指 CTR 模式,可以将 GCM 认为是认证模式的一种,提供认证和加密两种功能。GCM模式的分组大小为128bit。在进行GCM原理分析之前,首先应该了解一下GHASH函数及GCTR函数。GCM运算所需的对称加密算法的分组长度必须是128bit(DES\3DES不满足添加,AES\SM4满足条件);加密时,在计算MAC之前必别将附加数据(A)及密文(C)分别进行Block对齐; 阅读详情

1. 从“锁”到“封条”:为什么我们需要GCM?

聊到加密,很多朋友的第一反应可能就是“把内容变成乱码,别人看不懂”。这没错,但只做了一半。想象一下,你给朋友寄一个上锁的保险箱(加密),但运输途中有人偷偷把整个箱子调包了,或者往里面塞了张假纸条。你的朋友能打开锁,但他怎么知道里面的东西是不是你放的原件,或者箱子本身有没有被动过手脚呢?

这就是传统加密模式(比如我之前聊过的ECB、CBC、CTR)的短板:它们只管“保密”,不管“防篡改”。在网络安全里,这叫做缺乏“消息认证”。攻击者虽然看不懂密文,但他可以截获、复制、调换或者重放你的数据包,接收方解密后可能得到一堆垃圾信息,甚至被引导执行危险操作。

所以,现代安全通信需要一个“既上锁又贴封条”的方案。锁负责保密(加密),封条负责证明完整性和来源(认证)。GCM(Galois/Counter Mode,伽罗瓦/计数器模式)就是这样一个把两件事漂亮地打包在一起的算法。它本质上是一个“认证加密”(Authenticated Encryption)模式,一次操作,同时输出密文和一个叫做“认证标签”(Authentication Tag)的封条。接收方拿到后,先用密钥验证“封条”是否完好,如果完好,再解密;如果封条被破坏,直接丢弃数据,根本不用费劲去解密。

为什么GCM能脱颖而出,成为TLS 1.3等现代协议的首选?因为它不仅安全,而且快。它的核心是两个高效组件的结合:GCTR(基于CTR模式的加密流)负责高速加密,GHASH(在伽罗瓦域上计算的哈希)负责高速生成认证标签。这种设计特别适合当今需要处理海量、低延迟网络流量的场景,比如你的每一次HTTPS网页访问、每一次手机App与服务器的通信。

2. 拆解GCM的双引擎:GCTR与GHASH如何协同工作

要理解GCM为什么又快又稳,就得钻进它的引擎盖看看。别担心,我们不用深究复杂的数学证明,用比喻和流程把它讲明白。

2.1 加密引擎:GCTR(伽罗瓦计数器模式)

GCTR是GCM的加密部分,它脱胎于我之前讲过的CTR模式。CTR模式的核心思想是“用密钥和计数器生成一个伪随机的密钥流,然后像一次性密码本那样与明文进行异或运算”。GCTR继承了这个思想,并做了一些规整化。

它的工作步骤可以这样理解:

  1. 准备计数器:从一个初始计数器(叫做ICB或J0)开始。在GCM里,这个初始值通常由Nonce(一个只用一次的随机数)衍生而来。
  2. 生成密钥流:把计数器值(CB1, CB2, CB3...)用底层的分组密码(比如AES)加密。注意,这里加密的不是你的数据,而是计数器本身。加密后得到的就是一段段密钥流块。
  3. 异或加密:将这些密钥流块与你的明文数据块一一进行异或(XOR)运算,直接得到密文。对于最后一块不满128比特的数据,只取密钥流对应长度的部分进行异或。
# 一个非常简化的GCTR加密概念演示(非生产代码)
def gctr_encrypt(key, plaintext, initial_counter):
    ciphertext = b""
    counter = initial_counter
    # 将明文按128比特(16字节)分块
    for i in range(0, len(plaintext), 16):
        block = plaintext[i:i+16]
        # 加密当前计数器值,得到密钥流块
        keystream_block = aes_encrypt(key, counter)
        # 明文块与密钥流块异或
        encrypted_block = bytes(a ^ b for a, b in zip(block, keystream_block))
        ciphertext += encrypted_block
        # 计数器递增(GCM有特定的递增规则inc32)
        counter = increment_counter(counter)
    return ciphertext

GCTR的优势非常明显:并行化。因为每个计数器的加密都是独立的,所以可以同时处理多个数据块,充分利用现代CPU的多核能力,加密速度飞快。同时,它不需要像CBC模式那样依赖上一块的密文,避免了错误传播。

2.2 认证引擎:GHASH(伽罗瓦哈希)

GHASH是GCM的灵魂,负责生成那个至关重要的“认证标签”。它不是在普通算术上运算,而是在一个叫做“伽罗瓦域”(Galois Field, GF(2^128))的数学结构上进行的。在这个域里,加法和乘法都有特殊的定义,运算速度极快,尤其适合硬件实现。

GHASH计算认证标签的过程,可以想象成一个带密钥的“累积哈希”:

  1. 准备材料:需要认证的数据不只是密文(C),通常还包括一些“附加认证数据”(AAD),比如数据包的头部信息(协议版本、长度等)。这些数据保证了连包头一起被保护,防止“类型混淆”攻击。
  2. 分块与填充:将AAD和密文分别按128比特分块,并进行适当的填充,确保长度规整。
  3. 累积计算:
    • 初始化一个128比特的“状态”Y为0。
    • 将AAD的各个块、密文的各个块(以及长度信息)依次与当前状态Y进行伽罗瓦域上的特殊乘法(乘以一个固定的密钥H),然后再与下一个数据块进行伽罗瓦域上的加法(其实就是异或)。
    • 这个过程像滚雪球,把所有需要认证的数据都“混合”进了最终的状态值里。

这个最终的状态值,再经过一点处理(通常与加密后的初始计数器J0进行GCTR运算),就生成了最终的认证标签(Tag)。

关键点在于:任何对AAD或密文哪怕一个比特的改动,都会导致最终计算出的标签与发送过来的标签不匹配。接收方用同样的密钥H重新计算一遍GHASH,一比对就能发现数据是否被篡改。

2.3 双引擎合体:GCM完整流程

现在我们把两个引擎组装起来,看看一次完整的GCM加密认证是如何进行的:

  1. 输入:密钥K、唯一Nonce、明文P、附加数据A。
  2. 生成初始值:根据Nonce计算出初始计数器J0和用于加密的计数器J1。
  3. 加密:使用密钥K,从J1开始运行GCTR模式,对明文P进行加密,得到密文C。
  4. 认证:将附加数据A和刚得到的密文C,一起送入GHASH函数(使用由密钥K导出的子密钥H进行计算),生成一个中间认证值S。
  5. 生成标签:最后,对中间认证值S运行一次GCTR加密(使用密钥K,计数器为J0),输出最终的长度固定的认证标签T。
  6. 输出:发送方输出密文C和标签T。

解密验证过程则是镜像操作:接收方先拿到密文C和标签T。它首先用同样的密钥和Nonce重新计算期望的标签T‘(过程涉及GHASH和GCTR)。如果计算出的T‘与收到的T相等,说明数据完整且来源可信,然后才用GCTR去解密密文C。这个“先认证,后解密”的顺序至关重要,可以有效防止“选择密文攻击”。

3. GCM在TLS 1.3中的王者地位:为何是它?

TLS(传输层安全协议)是HTTPS的基石,保护着我们上网时数据的传输安全。TLS 1.3是2018年发布的最新版本,设计目标非常明确:更安全、更快速。在这个版本中,几乎所有的传统加密套件(如基于CBC模式的)都被移除了,而AES-GCM(特别是AES-256-GCM)成为了绝对的主流和推荐选择。这背后是GCM特性与TLS 1.3设计目标的完美契合。

3.1 满足TLS 1.3的核心安全需求

  • 认证加密(AEAD)是强制要求:TLS 1.3只支持AEAD(Authenticated Encryption with Associated Data)加密套件。这意味着加密和认证必须绑定在一起,作为一个原子操作。GCM天生就是AEAD模式,完全符合要求。它提供的认证确保了数据的完整性和真实性,能有效抵御篡改、重放等攻击。
  • 抗重放攻击:重放攻击就是攻击者截获一个有效的加密数据包,之后原封不动地再发送一次。GCM本身不直接防重放,但TLS 1.3协议层通过使用序列号和记录协议中的机制,结合每个连接唯一的Nonce,使得重放的数据包无法通过认证检查。GCM高效认证的特性为这种机制提供了可靠的基础。
  • 前向安全性:TLS 1.3强制使用具有前向安全性的密钥交换(如DHE或ECDHE)。这意味着即使服务器长期私钥泄露,过去的通信记录也无法被解密。GCM作为对称加密部分,每次连接使用的对称密钥都是临时生成的,完美配合实现了前向安全。

3.2 实现TLS 1.3追求的极致性能

  • 低延迟(Latency):TLS 1.3将握手过程从原来的两个往返(RTT)减少到了1个甚至0个(通过0-RTT)。更快的握手意味着连接建立更快。GCM的并行计算特性(尤其是GCTR加密部分)使得在握手完成后,数据加密传输的环节也能保持高速,进一步降低了整体通信延迟。
  • 高吞吐(Throughput):现代服务器需要处理成千上万的并发TLS连接。GCM的运算,特别是GHASH,在支持AES-NI和PCLMULQDQ指令集的CPU上,可以取得惊人的硬件加速效果。这意味着加解密和认证操作对CPU的消耗大大降低,服务器可以用更少的资源服务更多的安全连接。
  • 实现简洁,减少错误:相比旧的“加密+MAC”组合(如AES-CBC + HMAC-SHA256),GCM是一个内聚的算法。开发者只需要调用一个统一的接口,传入密钥、Nonce、数据和附加数据,就能得到密文和标签,或者完成验证和解密。这大大简化了实现复杂度,减少了因错误组合或使用加密和MAC而引入安全漏洞的风险。

3.3 TLS记录层中的GCM实战

在TLS 1.3的一条记录中,GCM是如何被调用的呢?我们来看一个简化的数据发送流程:

  1. 构造明文:应用层数据(如HTTP请求)经过压缩(TLS 1.3已禁用)和分片,形成TLS明文记录。
  2. 准备附加数据(AAD):AAD包含记录头部的关键信息,如记录类型、协议版本、以及明文的长度。注意,是明文长度!这在认证阶段非常重要。
  3. 生成Nonce:TLS 1.3通常采用“隐式Nonce”方案。一部分Nonce来自握手阶段商定的“IV”,另一部分来自记录序列号。这保证了每条记录的Nonce都是唯一的。
  4. 执行GCM加密:使用当前连接专用的对称密钥K、上一步生成的Nonce、明文记录作为P、记录头部信息作为AAD,调用GCM加密算法。
  5. 发送:将生成的密文C和认证标签T(在TLS中,标签通常与密文拼接在一起)作为新的TLS记录负载发送出去。记录头部类型字段会标明这是“应用数据”且使用AEAD加密。

接收方的处理就是逆过程:先解析记录,提取密文和标签,用相同的密钥、根据序列号重建Nonce,用记录头部信息作为AAD,调用GCM验证解密。验证失败,连接立即终止;验证成功,才将解密后的明文传递给上层应用。

4. 动手实验:用OpenSSL命令行体验AES-GCM

原理讲得再多,不如动手试一下。OpenSSL工具包提供了便捷的命令行接口,让我们可以直观地感受GCM的加密认证过程。这里我带你走一遍完整的流程,你会看到“附加数据”和“认证标签”具体是怎么玩的。

4.1 生成密钥和Nonce

首先,我们需要一个密钥和一个Nonce。在真实TLS中,这些是密钥协商出来的。这里我们手动生成。

# 生成一个256比特(32字节)的AES密钥,保存到文件
openssl rand -hex 32 > aes256.key

# 生成一个96比特(12字节)的Nonce,GCM推荐使用12字节Nonce,效率最高
openssl rand -hex 12 > nonce.hex

# 查看生成的内容
cat aes256.key
cat nonce.hex

4.2 准备明文和附加数据

我们创建一个简单的明文文件,同时设想一些需要认证但不加密的附加数据(比如数据包类型、版本号)。

# 创建明文文件
echo "This is a secret message for GCM demo. TLS 1.3 relies on it!" > plaintext.txt

# 创建附加认证数据(AAD)文件。假设AAD是"TLS13APP0001"
echo -n "TLS13APP0001" > aad.txt
# 注意:AAD的内容和长度在加解密时必须完全一致

4.3 使用GCM模式进行加密

现在,使用openssl的enc命令进行AES-256-GCM加密。我们需要指定:

  • -aes-256-gcm:算法和模式。
  • -K:十六进制格式的密钥(从我们生成的key文件读取)。
  • -iv:十六进制格式的Nonce。
  • -in:输入明文文件。
  • -out:输出密文文件。
  • -a:以base64格式输出,方便查看(可选)。
  • 关键参数:-A 表示AAD从文件读取,-tag 指定将生成的认证标签写入文件。
# 进行加密,并输出标签
key=$(cat aes256.key)
nonce=$(cat nonce.hex)

openssl enc -aes-256-gcm \
    -K $key \
    -iv $nonce \
    -in plaintext.txt \
    -out ciphertext.bin \
    -a \
    -A -aad aad.txt \
    -tag tag.bin

# 查看生成的密文(Base64编码)和标签(十六进制)
base64 ciphertext.bin
xxd -p tag.bin

执行后,你会得到一串Base64编码的密文,以及一个短的十六进制字符串(通常是16字节,128比特),那就是认证标签。这个标签和密文需要一起发送给接收方。

4.4 使用GCM模式进行解密验证

接收方拿到密文、标签、Nonce和AAD(AAD通常可以从协议头部得知),就可以进行解密验证了。注意:OpenSSL的解密命令在验证失败时会直接报错退出。

# 尝试解密验证
openssl enc -aes-256-gcm -d \
    -K $key \
    -iv $nonce \
    -in ciphertext.bin \
    -a \
    -A -aad aad.txt \
    -tag tag.bin \
    -out decrypted.txt

# 如果上一条命令成功执行(退出码为0),则查看解密结果
cat decrypted.txt

如果AAD、密文、标签、密钥、Nonce有任何一样对不上,解密命令都会失败,并提示类似 bad decrypt 或 tag mismatch 的错误。这正是GCM认证功能在起作用——数据不完整或不可信,绝不输出明文。

4.5 模拟篡改攻击

我们来做个破坏性实验,感受一下认证的威力。

# 尝试修改一下AAD,哪怕只改一个字节
echo -n "TLS13APP0002" > wrong_aad.txt

# 用错误的AAD去解密
openssl enc -aes-256-gcm -d \
    -K $key \
    -iv $nonce \
    -in ciphertext.bin \
    -a \
    -A -aad wrong_aad.txt \
    -tag tag.bin \
    -out decrypted_wrong.txt 2>&1
# 这条命令几乎肯定会失败,并在屏幕上输出错误信息。

你会看到解密失败。同样,如果你用文本编辑器轻微修改ciphertext.bin文件,或者修改tag.bin文件,解密也会失败。这个简单的实验生动地展示了GCM如何同时提供保密性和完整性保护。

5. 深入细节:GCM使用中的关键要点与常见“坑”

在实际项目里集成GCM,尤其是实现底层密码库或者进行安全审计时,有几个细节必须牢牢把握,否则很容易引入严重漏洞。这些是我在开发和评估系统时总结出来的经验。

5.1 Nonce的管理:生命线绝不能重复

GCM安全性的一个绝对前提是:同一个密钥下,Nonce绝对不能重复使用。如果两个不同的消息使用了相同的(密钥,Nonce)对,那么攻击者可以非常容易地计算出用于GHASH的认证子密钥H,从而导致整个认证机制完全失效,甚至可能恢复出部分明文。

最佳实践:

  • 对于TLS/DTLS这类协议:采用“Nonce = 固定部分(IV) + 序列号”的构造方式。IV在握手时确定,序列号每条记录递增,保证了唯一性。
  • 对于自己设计的协议:
    • 如果可能,为每次加密操作生成一个足够长的随机Nonce(如12字节)。但这要求有一个密码学安全的随机数生成器(CSPRNG)。
    • 使用一个计数器作为Nonce,并将该计数器与密钥一起安全地持久化存储,确保每次加密后计数器递增且不重复。
  • 绝对禁止:使用时间戳、进程ID等看似唯一但可能重复或可预测的值作为Nonce。

5.2 认证标签的长度:在安全与效率间权衡

GCM生成的认证标签长度可以是128比特及以下(如124、120、112、104、96比特)。标签越长,被暴力破解或碰撞攻击的可能性就越低,安全性越高,但也会增加一点网络开销。

  • TLS 1.3标准:强制认证标签长度为128比特。这是最安全的选择,也是目前通用的标准。
  • 其他场景:在一些带宽极度受限的物联网(IoT)环境中,可能会考虑使用96比特的标签以节省几个字节。但这需要仔细评估安全风险。我个人的建议是,除非有极其严格的限制,否则默认使用128比特标签。

在代码中,你需要确保在加密时指定了正确的标签长度,并且在解密验证时,比较的是完整长度的标签。OpenSSL等库通常提供参数来设置和验证标签长度。

5.3 附加认证数据(AAD)的设计:明确边界

AAD是GCM一个非常强大的特性,它让你可以保护那些不需要加密但必须防篡改的元数据。在TLS中,记录类型、版本号和长度字段就是AAD。

设计AAD时要注意:

  • 明确性:发送方和接收方必须就AAD包含哪些字段、这些字段的编码格式(字节序、长度)达成绝对一致。任何歧义都会导致验证失败。
  • 完整性:所有需要防篡改的上下文信息都应放入AAD。例如,如果你加密一个数据库字段,可以把数据库表名、记录ID作为AAD的一部分,防止密文被移动到错误的环境下解密。
  • 不要滥用:AAD不应包含秘密信息,因为它是以明文形式传输的。它的作用是认证,不是保密。

5.4 性能优化与硬件加速

GCM在纯软件实现上已经比“加密+HMAC”的组合要快,但其真正的威力在于硬件加速。现代x86/ARM服务器CPU普遍支持:

  • AES-NI:用于加速AES的GCTR部分(加密计数器)。
  • PCLMULQDQ:用于加速伽罗瓦域乘法,即GHASH的核心运算。

在编写高性能服务时(如Web服务器、VPN网关),务必确保你的密码库(如OpenSSL, BoringSSL, libsodium)在编译时启用了这些硬件加速支持,并且运行时环境能够检测并使用它们。在Linux上,你可以通过cat /proc/cpuinfo | grep -i aes和grep -i pclmul来查看CPU是否支持这些指令。启用后,GCM的性能可以提升一个数量级,使其能够轻松应对万兆甚至更高速的网络加密需求。

6. 超越TLS:GCM在其他领域的应用

虽然TLS 1.3是GCM最耀眼的舞台,但这个强大的算法模式早已渗透到各种需要高效认证加密的角落。

  • IPsec VPN:在保护企业内网通信或站点到站点连接的IPsec协议中,GCM(特别是AES-GCM)是IKEv2和ESP协议中推荐的加密套件之一,用于保护IP数据包,提供传输模式或隧道模式下的机密性和完整性。
  • 无线安全协议:Wi-Fi的WPA3个人和企业版安全协议中,强制使用了更安全的SAE(Simultaneous Authentication of Equals)握手,并在数据加密层面推荐使用GCMP(Galois/Counter Mode Protocol),它本质上就是基于GCM的。这取代了WPA2中存在漏洞的CCMP(基于CBC模式)。
  • 磁盘加密:一些现代的磁盘全盘加密方案和自加密硬盘(SED)支持XTS-AES模式,但对于需要认证的场景(防止攻击者原地篡改加密数据),也会考虑使用GCM的变体。不过由于磁盘数据的特性(随机访问),直接使用GCM有挑战,更多是研究中的课题。
  • 数据库字段级加密:在云数据库中,对特定敏感字段(如身份证号、信用卡号)进行应用层加密时,GCM是一个很好的选择。你可以将记录的主键作为AAD的一部分,确保加密后的密文即使被复制到另一条记录,也无法成功解密和验证,增强了数据的安全性。
  • 消息队列与流式数据:在处理金融交易、物联网传感器数据流时,需要保证消息在传输过程中的真实性和顺序。GCM可以用于加密和认证每一条消息,结合序列号作为Nonce的一部分,可以有效防止消息丢失、重放或篡改。

在这些场景中,GCM的选择理由与TLS中类似:它提供了将加密和认证合二为一的简洁API、较高的性能,以及经过充分验证的安全性。当你需要为一个新的协议或系统选择一种认证加密模式时,AES-GCM通常是一个安全、高效且未来-proof的起点。当然,就像我们前面讨论的,务必注意Nonce管理的正确实现。

TLS 1.2/1.3 加密原理介绍 TLS相关加密方法介绍 阅读详情

相关推荐

Java国密TLS开发实战:从算法原理到Netty集成与性能调优

在网络安全领域,TLS协议是保障数据传输机密性与完整性的基石,其核心依赖于密码学算法。非对称加密、对称加密和哈希算法共同构成了TLS的密码学基础,分别用于身份认证、密钥交换和数据加密。随着技术发展,采用自主可控的密码算法成为金融、政务等高安全要求领域的合规性需求。国密算法(SM2/SM3/SM4)作为我国商用密码标准,在TLS协议中的应用日益广泛。本文聚焦于**国密TLS**在Java生态中的工程实践,详细解析了**Bouncy Castle**等关键开发库的选型与集成,并深入探讨了从国密证书生成、SSLC

weixin_28568819的博客 244

GCM与CCM的的规格和加解密过程

CCM(Counter with CBC-MAC)是一种基于对称加密算法的认证加密(Authenticated Encryption)模式,结合了CBC-MAC(Cipher Block Chaining Message Authentication Code)用于消息认证和CTR(Counter)模式用于加密。这种模式可以确保信息的机密性和完整性。它主要用于无线网络安全标准,如IEEE 802.11i(WPA2)和IEEE 802.16e(WiMAX)。认证加密过程分为三个阶段:初始化、加密和认证。

Chahot的博客 6380

gctr

gctr

各种加密模式在TLS协议中的运用 3 (AEAD:GCM模式)

GCM,不知道该如何说起,因为涉及到群论、有限域等,先写个大概,有机会再补。 域 就是我们常见的一个集合,集合中的元素可以进行加减乘除,除了0以外的元素都有逆元。 例如实数域,R = (….,-1, 0, 1, 2, 3, 4 ….)就是一个域,他是无限大小的。 对于任意R中的x1 x2,加减乘的结果还在R中。0是加法单位元,1是乘法单位元。 不严谨的说,域就是一个集合。 好,过。...

Network, Linux Kernel 1万+

aes128加密算法的GCM工作模式详解

这个文档是在官方网站上下载的,讲述很详尽,还有很多加密数据的例子,方便验证自己的程序,不过是英文的 这个文档是在官方网站上下载的,讲述很详尽,还有很多加密数据的例子,方便验证自己的程序,不过是英文的

BUPT软件安全实验三

可以看出栈溢出对程序运行的安全性有很大的威胁,如果不对栈进行保护,只要系统中存在栈溢出漏洞,即可令攻击者通过非正当方法获取操作权限。(6)解决思考题,即:在不修改StackOverrun程序源代码的情况下,构造shellcode,通过JMP ESP的方式实现通过记事本打开shellcode.txt(可使用CreateProcessA或WinExec等API)。查看缓冲区信息,可以看到dest指向地址0x0012FAF0,其为数组的存放起始位置,也就是shellcode注入的起始位置。

7xun's space 1966

密码库LibTomCrypt学习记录——(2.15)分组密码算法的工作模式——GCM加密认证模式

GCM GCM是一种有大吞吐能力的加密认证模式。其中主要适用了CRT模式和类似CBC模式的GHASH模式。CRT模式基本上没有大多变化,GHASH则是利用有限域上的乘法进行HASH,此运算可以通常预先计算和查表优化加速。 GCM两个基本模块 GHASH和GCTR。加解密和认证验证过程都离不开这两个模块。 参考文献 NIST SP 800-38D The Galois Counter Mod...

专注商用密码落地,方案与技术解析,分享密码技术与安全经验。 2万+

基于PCA的故障诊断方法(matlab)

1. PCA原理分析 PCA的原理主要是将原始数据进行降维。其具体工作原理参照:CodingLabs - PCA的数学原理 2. 数据预处理 训练数据集(只有正样本)为维数据,即有n个采样值,每个采样值有m个特征。 2.1 数据归一化 将数据X针对每个特征归一化为均值为0,均方根为1的数据。 其中: 3. PCA降维 3.1 首先求取协方差矩阵 协方差矩阵的公式为: 计算出来的协方差矩阵为特征m*m维矩阵。 3.2 求取特征值和特征向量 求取协方差矩阵R的特征值.

tangxianyu的博客 1万+

从CTR到GHASH:拆解GCM认证加密模式,看它如何成为TLS 1.3的宠儿

本文深入解析了GCM认证加密模式如何通过结合CTR模式的高效加密与GHASH函数的强大认证能力,成为TLS 1.3协议的首选加密方案。文章详细探讨了GCM的双引擎架构、安全优势及性能表现,并提供了实际部署中的最佳实践,帮助读者理解其在现代网络安全通信中的核心地位。

weixin_29324401的博客 219

ptrade量化策略之沪深300指数增强

本策略的核心是在沪深300股票池中选股,选择的股票都是市值比较大,业绩比较好的白马股,根据市场相对位置以及基本面因子来选择股票

qq_29301281的博客 1192

OnePose++: Keypoint-Free One-Shot Object Pose Estimation without CAD Models

算法:首先采用LoFTR的细匹配模块,将粗匹配点周围的小窗口内,通过对比特征找到最相似的位置,细化当前特征点的位置。算法:PnP算法,利用3D点和2D投影点的对应关系,计算相机相对于物体的6D姿态(位置朝向)。算法:使用COLMAP,对2D粗匹配对(不依赖传统关键点匹配)进行特征轨迹计算并生成半稠密点云,每个3D点包含坐标和对应的2D投影点。算法:LoFTR粗匹配模块,将每一个像素点视为伪关键点,生成半稠密的2D匹配对。输入:优化后的3D、当前视图的2D特征点。输出:粗半稠密点云以及物体的特征轨迹。

雨落倾城的博客 888

TLS1.3---数据加密和完整性保护

AEAD(authenticated encryption with associated data) 在TLS1.3中,只保留了一种加密和保护完整性的方法就是AEAD(具有关联数据的加密认证) 定义 关联数据的认证加密,顾名思义,除可提供对密文数据的隐私、完整性和真实性保证外,还可提供对未加密的关联数据的完整性保证。常用的关联数据通常包括消息的长度和消息的编码方式。 可让receiver验证所收到消息中已加密和未加密信息的完整性。任何企图将有效加密信息与不同上下文结合的篡改都可通过AEAD发现。 背景

qq_35324057的博客 6237

Qt/C++音视频开发1-vlc解码播放

一、前言 最开始接触视频监控这块的时候,用的就是vlc作为解码的内核,主要是因为vlc使用简单方便,直接传入一个句柄即可,简单几行代码就可以实现一个视频流播放,很适合初学者使用,也推荐初学者用qt+vlc来做播放器,提供的接口还是非常友好的,而且门类特别多,想要获取媒体文件的各种信息比如宽高,设置宽高比等,直接调用接口函数传入参数就能设置。 所有用vlc做视频监控解码的人都会遇到一个问题,那就是鼠标事件被接管拦截了,不能识别鼠标事件,比如双击最大化等,这就很憋屈了,明明很好用的一个东西,怎么突然之间鼠标事件

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 4940

TLS是什么,为什么TLS1.0不安全

TLS,全名为 Transport Layer Security,即传输层安全协议。它是一种加密协议,用于在互联网上提供安全和数据完整性保证。TLS 的前身是 SSL(Secure Sockets Layer,安全套接字层协议),由 Netscape 公司在 1994 年开发。TLS 的主要作用是为两个应用程序提供一个安全的通信通道,使得它们可以在不被第三方读取或篡改的情况下交换信息。TLS 通常用于保护 Web 浏览器和服务器之间的通信,但也可以用于任何需要安全传输数据的场合。

TradingAgents-CN专栏 7920

太阳敏感器:卫星姿态控制的“指南针

在卫星姿态控制系统中,太阳敏感器(Sun Sensor) 是至关重要的光学姿态敏感器之一。它通过探测太阳光的方向,为卫星提供关键的姿态参考信息,确保卫星能够正确调整自身方位,维持稳定的对日定向,保障能源供应和任务执行。

ScilogyHunter的博客 1732

STM32实战开发(128):智能位移检测 - 使用STM32实现位移检测

STM32作为一款功能强大的微控制器,由于其出色的处理能力、丰富的外设接口和低功耗特点,成为实现智能位移检测系统的理想选择。未来,可以通过结合更多传感器、多种数据处理算法以及云平台技术,进一步提升系统的智能化水平,优化位移测量的精度和稳定性。本篇博客将介绍如何使用STM32微控制器实现智能位移检测系统,涉及硬件设计、传感器选择、软件开发等多个方面,提供详细的设计步骤,并给出完整的代码示例,帮助开发者快速搭建智能位移检测系统。蜂鸣器连接到STM32的GPIO端口,当位移超过设定的阈值时,蜂鸣器发出警报。

2201_76125393的博客 901

国密协议与TLS 1.3在GmSSL中的实现与应用分析

国密协议(国家商用密码算法体系)与TLS 1.3作为现代安全通信的核心技术,在GmSSL密码工具箱中得到了完整实现。本文将从技术实现、性能对比、部署实践三个维度,深入剖析TLCP(传输层密码协议)与TLS 1.3的技术特性,为安全通信协议的选型与优化提供系统性参考。 ## 协议技术架构对比 ### 核心设计差异 TLCP(依据GB/T 38636-2020标准)与TLS 1.3在协议栈设计上存

gitblog_00157的博客 385

华为OD机考双机位C卷 - 池化资源共享 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 池化资源共享 (OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 1072

Nginx禁用TLS 1.0和TLS 1.1

传输层安全性协议(英语:Transport Layer Security,缩写:TLS)及其前身安全套接层(英语:Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器-网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布TLS 1.0标准文件(RFC 2246)。随后又公布TLS 1.1(RFC 4346,2006年)、TLS

zyy247796143的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

对称密码体制:从AES-GCM原理到实战安全应用

对称密码体制是数据加密的基石,其核心原理在于通信双方使用相同的密钥进行加解密,如同传统的锁与钥匙系统。该技术通过高效的加密算法(如AES)和密钥,将明文转换为密文,确保数据传输的机密性。其技术价值在于极高的加解密速度和成熟的安全性,广泛应用于HTTPS、数据库加密等场景。在实际应用中,AES-GCM作为现代认证加密模式,结合了加密与完整性验证,有效防范了篡改风险。本文深入探讨了对称密码的流密码与分组密码两种操作模式,并重点解析了AES算法及其工作模式,同时提供了Python和OpenSSL的实战代码示例,帮

weixin_30570101的博客 307

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SM系列密码算法在网络安全中的工程化应用及最佳实践

给小伙伴们的意见是想清楚,自学网络安全没有捷径,相比而言系统的网络安全是最节省成本的方式,因为能够帮你节省大量的时间和精力成本。坚持住,既然已经走到这条路上,虽然前途看似困难重重,只要咬牙坚持,最终会收到你想要的效果。黑客工具&SRC技术文档&PDF书籍&web安全等(可分享)网络安全产业就像一个江湖,各色人等聚集。

Hacker_Oldv的博客 1651

TLS 1.3握手安全加固:国密算法在PSK与ECH场景下的实战应用

传输层安全协议(TLS)是保障网络通信机密性与完整性的基石,其核心握手流程通过非对称加密、密钥协商等机制建立可信连接。TLS 1.3引入的预共享密钥(PSK)和加密客户端Hello(ECH)等特性,旨在提升性能与隐私保护,但在复杂的分布式部署中,其组合可能存在逻辑缝隙,导致握手流程被潜在绕过,动摇加密信任链。从工程实践角度,这凸显了协议实现与算法自主可控的重要性。国密算法(SM2/SM3/SM4)作为我国自主研发的密码体系,为构建内生安全提供了关键技术选项。通过将其应用于TLS记录层加密、握手密钥交换乃至应

weixin_33860553的博客 321

tls协议

tls前言一、TLS 协议的组成二、ECDHE1.连接过程三、TLS1.31.过程 前言 tls是ssl协议的标准化,处于应用层(5层架构)和会话层(OSI),有着rsa方式和ecdhe两种, 一、TLS 协议的组成 握手协议:负责在客户端和服务器之间协商决定密码算法和共享密钥,包括基于证书的认证操作; 密码规格变更协议:负责向通信对象传达变更密码方式的信号,在TLS 1.3版本中不再需要该协议; 警告协议:负责在发生错误时将错误传达给对方; 记录协议:将TLS 上面承载的应用数据传达给通信对象的协议。

qq_43555156的博客 3990

OpenSSL 的异步 TLS 1.3 加密

TLS 1.3 负责安全性与速度:砍掉了老旧加密套件,握手由 2 次往返缩减到 1 次,生成一次性会话密钥。OpenSSL 异步框架负责高吞吐:利用类似协程的挂起/恢复机制,在进行大吞吐量对称加密(AES/ChaCha20)或非对称密码计算时释放 CPU,使单台服务器能够同时抗住数十万并发连接。

XINGXIN 325

密码学分组模式详解:从ECB到GCM的进化之路

模式安全性并行加密并行解密认证能力典型应用ECB极低支持支持无无CBC中不支持支持无传统TLS、文件加密GCM高支持支持有TLS 1.3、Wi-Fi、云存储。

qq2745567641的博客 2075

mbedtls TLS多版本兼容实战:3种部署策略与性能调优深度解析

在当今复杂的网络环境中,如何优雅地实现TLS 1.2到TLS 1.3的平滑过渡?mbedtls作为一款轻量级、可移植的TLS库,为我们提供了灵活的解决方案。本文将深入探讨mbedtls中多版本TLS支持的三种实现路径,分享实际部署中的常见陷阱,并提供详细的性能调优建议,帮助开发者在保障安全性的同时实现最佳性能。 ## 技术背景与架构设计 mbedtls采用模块化设计,将TLS 1.2和TLS

gitblog_00910的博客 421
上一篇: 人体姿态估计-评价指标深度解析:从OKS到PCK的实战指南
下一篇: 用Python+OpenCV实现8路监控实时拼接:港口安防项目避坑指南
code8
博客等级 码龄17年 65粉丝 1720原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值