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

问题描述

我有一些表示 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)

解决方法

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

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

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

实际上有 lots of publications 关于这个主题。