首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解密macsec帧python (AES-GCM)

解密macsec帧python (AES-GCM)
EN

Stack Overflow用户
提问于 2020-05-21 15:05:01
回答 1查看 584关注 0票数 1

我是一名法国学生,为了练习,我的教授让我用蟒蛇解密一个macsec框架。我有钥匙,但有一个问题:ValueError: Mac检查失败。

在这里,框架:

00 0c 29 45 13 e1 00 0c 29 b0 53 b2 88 e5 2c 00 00 00 00 16 00 0c 29 b0 53 b2 00 01 64 ad 0a 24 7f 79 b4 68 2a 4b 37 6e 20 72 c5 e7 af ee 90 7f b6 8c de e7 5e 84 d1 01 9e f2 b6 a4 91 8f f3 bd 62 69 9a 44 86 ad 5a 29 08 a0 98 64 98 74 52 a1 e0 ae 89 10 55 90 a4 5e 99 99 72 d5 91 ac dc c0 c5 c2 c8 93 8f 3f 25 59 d0 9c b6 89 15 86 ae ec 93 0f ce 3b ae f5 91 94 3e 22 67 4d 73 75 39 8b 67 de

在这里,算法:

代码语言:javascript
复制
key = binascii.unhexlify('fe0969aac4e169dfc89011326418aeae')
data = binascii.unhexlify('000c29b053b2000100000016000c294513e1000c29b053b28888e52C0000000016000c29b053b2000164ad0a247f79b4682a4b376e2072c5e7afee907fb68cdee75e84d1019ef2b6a4918ff3bd62699a4486ad5a2908a09864987452a1e0ae89105590a45e999972d591acdcc0c5c2c8938f3f2559d09cb6891586aeec930fce3baef591943e22674d7375398b67de')

iv, tag = data[:24], data[-32:]
cipher = AES.new(key, AES.MODE_GCM, iv)
cipher.decrypt_and_verify(data[24:-32], tag)

你能帮我一下吗?

EN

回答 1

Stack Overflow用户

发布于 2020-05-24 08:55:53

任务本质上是从帧中识别AES-GCM所需的组件,即nonce、AAD和tag。

该帧从MAC DA (目标地址)和MAC SA (源地址)开始,它们各有6个字节长。然后是16字节长的SecTAG (安全标签),由2字节长的MACsec以太类型(0x88e5)、1字节长的TCI/AN (标签控制信息/关联号)、1字节长的SL (加密数据的短长度)、4字节长的PN (数据包号)和8字节长的SCI (安全通道标识符)组成。然后是加密的数据,最后是16字节长的ICV (完整性检查值):

代码语言:javascript
复制
MAC DA:             0x000c294513e1
MAC SA:             0x000c29b053b2
MACsec Ether Type:  0x88e5
TCI/AN:             0x2c
SL:                 0x00
PN:                 0x00000016
SCI:                0x000c29b053b20001

enc. user data:     0x64ad0a247f79b4682a4b376e2072c5e7afee907fb68cdee75e84d1019ef2b6a4918ff3bd62699a4486ad5a2908a09864987452a1e0ae89105590a45e999972d591acdcc0c5c2c8938f3f2559d09cb6891586aeec930f

ICV:                0xce3baef591943e22674d7375398b67de

这些部分映射到GCM组件,如下所示:12个字节GCM对应于按此顺序级联的SCI和PN。GCM依次为MAC DA、MAC SA和SecTAG (以太类型、TCI/AN、SL、PN、SCI)的级联数据。GCM标签对应于ICV:

代码语言:javascript
复制
GCM nonce:          0x000c29b053b2000100000016
GCM AAD:            0x000c294513e1000c29b053b288e52c0000000016000c29b053b20001
GCM tag:            0xce3baef591943e22674d7375398b67de

因此,加密的数据可以用PyCryptodome解密,如下所示:

代码语言:javascript
复制
from Crypto.Cipher import AES
import binascii

key = binascii.unhexlify('fe0969aac4e169dfc89011326418aeae')
nonce = binascii.unhexlify('000c29b053b2000100000016')
aad = binascii.unhexlify('000c294513e1000c29b053b288e52c0000000016000c29b053b20001')
tag = binascii.unhexlify('ce3baef591943e22674d7375398b67de')
data = binascii.unhexlify('64ad0a247f79b4682a4b376e2072c5e7afee907fb68cdee75e84d1019ef2b6a4918ff3bd62699a4486ad5a2908a09864987452a1e0ae89105590a45e999972d591acdcc0c5c2c8938f3f2559d09cb6891586aeec930f')

cipher = AES.new(key, AES.MODE_GCM, nonce)
cipher.update(aad)
decrypted = cipher.decrypt_and_verify(data, tag)

print(decrypted.hex())

产出如下:

代码语言:javascript
复制
080045000054607040004001c6160a01000b0a0100160800b716022b0007a6c0c25e0000000012c5040000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637

更多的细节可以找到这里 (测试向量,标识GCM组件)和这里 (SecTAG的结构)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61937514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档