如何按照基于 ml 的分类顺序将十六进制字符串转换为有意义的数据?

Posted

技术标签:

【中文标题】如何按照基于 ml 的分类顺序将十六进制字符串转换为有意义的数据?【英文标题】:How to convert hex strings to a meaningful data in order of ml based classification? 【发布时间】:2021-10-01 13:14:15 【问题描述】:

我有一些代表 tcp 数据包有效负载的十六进制字符串。有效载荷使用 TLS 加密,我想为它找到一个模式。问题是仅使用 tcp 有效负载进行 tcp 数据包分类,因此我使用le = preprocessing.LabelEncoder() 进行KNN 分类,以便将有效负载的十六进制字符串更改为一个值。结果是分类准确率为 5% 我将分类更改为Random Forest,但结果和以前一样。您对基于加密负载的分类的解决方案是什么?

le = preprocessing.LabelEncoder()
df['payload'] = le.fit_transform(df['payload'])
one_hot_encoded_data = pd.get_dummies(df, columns = ['class'])
print(one_hot_encoded_data)

X = one_hot_encoded_data.iloc[:, one_hot_encoded_data.columns != 'class_1']
y = one_hot_encoded_data.class_1

#-----------------------------------------


x_train, x_test, y_train, y_test = train_test_split(X, y, train_size=0.6, random_state = 0)

model4 = RandomForestRegressor(random_state=0).fit(x_train, y_train)
print ('Random_Forest_train_accuracy:', model4.score(x_train, y_train))
print ('Random_Forest_test_accuracy:', model4.score(x_test, y_test))
y_pred4 = model4.predict(x_test)

【问题讨论】:

我不是密码学家,但我认为加密后的数据往往随机分布在定义加密函数的字段上,这也是原因之一为什么您无法从加密数据中追溯原始数据。当然,启发式方法是存在的,但是,除非您知道原始密钥,否则您的准确率总是会较低。 @cmbfast 是否可以定义统计模型,例如高斯并用它的第一、第二、……统计顺序来表示它? 听起来你正在尝试做p-hacking。 Steffen 在下面的回答很好地解释了为什么这样做可能不会给您带来任何有意义的结果。 【参考方案1】:

使用(正确)加密的内容作为机器学习的功能是没有意义的。正确加密的一个主要特性是原始内容和加密内容之间没有统计上的显着关系。加密内容的统计属性类似于随机数据,因此在机器学习中绝对没有任何价值。

有一些信息可以使用,例如

加密负载大小与原始负载大小相似但不完全相同 数据的时序和方向,也反映了原始数据的时序和方向 来自 TLS 握手的一些元信息,例如服务器名称 (SNI)、证书信息(最高 TLS 1.2)、TLS 客户端指纹 (JA3)、选择的密码...

其实有lots of publications这个话题。

【讨论】:

以上是关于如何按照基于 ml 的分类顺序将十六进制字符串转换为有意义的数据?的主要内容,如果未能解决你的问题,请参考以下文章

lua语言 如何将字符串整体转换为一个十进制数据 而不按照每个字符转为若干个十进制数

小数在内存中是如何存储的?

机器学习(ML)十六之目标检测基础

欺诈检测分类ML的经纬度转换

干货基于机器学习方法的POI品类推荐算法

如何防止 Azure ML Studio 在导入数据集时将特征列转换为 DateTime