You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求GMAC算法模拟器,验证电表通信安全校验参数正确性

电表GMAC校验问题解决方案

核心问题

  • 电表连接的4步安全校验中,前3步已通过,第4步因客户端不接受电表返回值失败
  • 厂商称该步骤使用GMAC算法,已获取全部计算参数,但对算法正确性存疑
  • 已抓取厂商软件与电表的通信数据,需GMAC模拟器验证参数及算法匹配度

验证GMAC参数的可行方法

1. 本地代码实现验证

用Python的cryptography库实现标准GMAC计算,代入你的参数即可验证:

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend

def validate_gmac(key_hex, nonce_hex, data_hex, expected_tag_hex):
    backend = default_backend()
    key = bytes.fromhex(key_hex)
    nonce = bytes.fromhex(nonce_hex)
    data = bytes.fromhex(data_hex)
    expected_tag = bytes.fromhex(expected_tag_hex)
    
    cipher = Cipher(algorithms.AES(key), modes.GCM(nonce), backend=backend)
    decryptor = cipher.decryptor()
    try:
        decryptor.update(data)
        decryptor.finalize_with_tag(expected_tag)
        return "参数匹配,GMAC计算正确"
    except Exception as e:
        return f"参数不匹配:{str(e)}"

# 替换为你的真实参数后运行
# print(validate_gmac("your_aes_key_hex", "your_nonce_hex", "your_data_hex", "meter_returned_tag_hex"))

2. 命令行工具验证

使用OpenSSL命令行直接计算GMAC值,与电表返回标签对比:

# 若数据为十六进制格式,先转成二进制再计算
echo -n "your_data_hex" | xxd -r -p | openssl dgst -sha256 -mac gmac -macopt key:your_key_hex -macopt nonce:your_nonce_hex

注意:确保OpenSSL版本支持GMAC,所有参数替换为你获取的十六进制值。

3. 算法特征校验(排查厂商是否误用算法)

对比标准GMAC的核心特征,判断厂商是否真的使用GMAC:

  • GMAC是AES-GCM的认证组件,必须依赖AES密钥、Nonce(随机数)、附加认证数据(AAD)和明文数据
  • 输出的认证标签(Tag)长度默认128位(16字节)
  • 同一AES密钥下,Nonce绝对不能重复使用
  • 计算结果仅与密钥、Nonce、输入数据相关,无额外自定义逻辑

若电表返回的标签不符合上述特征,大概率厂商使用了GMAC变种或其他认证算法。

内容的提问来源于stack exchange,提问作者Zeus8497st

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 13:03:14