机器学习在数据安全与攻击中的应用
1. 深度学习用于密码破解
现代密码破解工具如 John the Ripper 能在数秒内测试数十亿个潜在密码。这些工具不仅可以尝试常见密码字典中的每个密码,还能通过拼接(如 password1234)、替换字符(如 p4s5w0rd)等技术自动转换密码。然而,寻找更多有效的转换规则是一项困难的任务。
PassGAN 是一种使用生成对抗网络(GAN)的机器学习系统,它通过观察大量真实密码数据集(从实际密码泄露语料库中收集)自动学习这些规则,并生成高概率的密码候选。
1.1 准备工作
- 克隆 PassGAN 仓库:
git clone https://github.com/emmanueltsukerman/PassGAN.git
-
下载密码数据集并放置在
data文件夹下,例如下载著名的 rockyou 密码数据集:
curl -L -o data/train.txt https://github.com/brannondorsey/PassGAN/releases/download/data/rockyou-train.txt
- 确保已预先安装 CUDA 8,并安装所需的 pip 包:
pip install -r requirements.txt
1.2 操作步骤
- 在数据集上训练神经网络:
python train.py --output-dir output --training-data data/train.txt
- 生成 100,000 个密码猜测列表:
python sample.py \
--input-dir pretrained \
--checkpoint pretrained/checkpoints/195000.ckpt \
--output gen_passwords.txt \
--batch-size 1024 \
--num-samples 100000
1.3 工作原理
首先,在步骤 1 中直接训练神经网络,根据需求可以使用一些额外的标志来定制训练。训练完成后,在步骤 2 中输出 100,000 个由模型生成的密码列表,这些密码可作为破解密码的候选。
1.4 流程图
graph TD;
A[克隆仓库] --> B[下载数据集];
B --> C[安装依赖];
C --> D[训练神经网络];
D --> E[生成密码猜测列表];
2. 深度隐写术
隐写术是将消息(秘密)隐藏在另一种介质(如文件、文本、图像或视频)中的技术。当秘密嵌入到载体中后,结果称为容器。在这个案例中,我们将使用深度神经网络来实现隐藏和揭示过程。与常见的隐写方法不同,深度学习将秘密分布在所有比特中。
2.1 准备工作
需要访问 GPU。
2.2 操作步骤
- 克隆仓库:
git clone https://github.com/emmanueltsukerman/PyTorch-Deep-Image-Steganography.git
- 准备预训练模型:
cat ./checkPoint/netH.tar.gz* | tar -xzv -C ./checkPoint/
-
在
example_pics文件夹中准备秘密图像和载体图像。 - 执行预训练模型以生成容器图像和重建的秘密:
CUDA_VISIBLE_DEVICES=0 python main.py –test=./example_pics
-
在
training文件夹中查看结果,应该能看到四行图像:第一行是载体图像,第二行是容器图像,第三行是秘密图像,第四行是重建的秘密图像。
2.3 工作原理
在步骤 1 中克隆深度隐写项目的仓库。该项目的基本思想是有一个隐藏网络(H-net)和一个揭示网络(R-net),它们是对抗训练的。步骤 2 准备预训练模型,该模型在 ImageNet 的 45,000 张图像上训练,并在 5,000 张图像上评估。步骤 3 选择两张图像作为载体和秘密。步骤 4 和 5 运行模型,生成容器图像和结果图像。容器图像和载体图像在人眼看来是无法区分的,意味着没有人能发现你在载体图像中隐藏了秘密。
2.4 表格:隐写术步骤
| 步骤 | 操作 |
|---|---|
| 1 | 克隆仓库 |
| 2 | 准备预训练模型 |
| 3 | 准备图像 |
| 4 | 执行模型 |
| 5 | 查看结果 |
3. 基于机器学习的隐写分析
隐写术的主要技术之一是通过将消息比特替换图像像素的最低有效位(LSB)来隐藏消息。由于改变像素的 LSB 时,像素值仅改变很小的量,因此人眼无法区分隐藏了消息的图像与原始图像。
3.1 LSB 方法
- LSB 替换 :如果消息比特与 LSB 相同,则 LSB 位保持不变;否则,该位被改变。这会导致奇数像素强度减 1,偶数像素强度加 1,从而使图像直方图失衡,容易被统计方法检测到。
- LSB 匹配 :在 LSB 位不匹配的情况下,随机将像素值加 1 或减 1,避免了直方图失衡的问题,使得仅使用简单统计方法进行隐写分析变得困难。
3.2 准备工作
建议在 Linux 机器上完成此操作。
1. 安装 octave 及其
image
和
signal
包:
sudo apt-get install octave octave-image octave-signal
- 克隆 aletheia 仓库:
git clone https://github.com/emmanueltsukerman/aletheia.git
- 下载 BOSS 数据集:
wget http://dde.binghamton.edu/download/ImageDB/BOSSbase_1.01.zip
-
解压数据集并重命名
BOSSbase文件夹:
unzip BOSSbase_1.01.zip
3.3 操作步骤
- 创建 LSB 数据库:
python aletheia.py lsbm-sim bossbase 0.40 bossbase_lsb
- 提取 BOSS 数据集的特征:
./aletheia.py srm bossbase bossbase.fea
- 提取 LSB 数据集的特征:
./aletheia.py srm bossbase_lsb bossbase_lsb.fea
- 在 Python 环境中创建变量指向提取的特征路径:
bossbase_features_path = "bossbase.fea"
bossbase_lsb_features_path = "bossbase_lsb.fea"
features_with_labels = [(bossbase_features_path, 0), (bossbase_lsb_features_path, 1)]
- 收集特征和标签并放入数组:
X = []
y = []
for feature_path, label in features_with_labels:
with open(feature_path, "r") as f:
for line in f:
fv = line.split()
X.append(fv)
y.append(label)
- 进行训练 - 测试分割:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=11)
- 实例化并训练随机森林分类器:
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier()
clf = clf.fit(X_train, y_train)
- 在测试集上评估分类器:
print(clf.score(X_test, y_test))
输出结果为 0.825。
3.4 工作原理
首先使用 Aletheia 软件创建大量 LSB 隐写容器图像数据集。Aletheia 提供了多种功能,可通过
./aletheia.py
命令查看。在步骤 2 和 3 中,使用 Aletheia 的
srm
命令提取普通图像和容器图像的特征。然后创建变量指向数据集路径,收集特征和标签,进行训练 - 测试分割,训练并测试分类器。在平衡数据集上达到 80% 的性能表明,这些特征有助于区分普通图像和容器图像,即机器学习可以检测隐写术。
3.5 流程图
graph TD;
A[安装依赖和克隆仓库] --> B[下载并解压数据集];
B --> C[创建 LSB 数据库];
C --> D[提取特征];
D --> E[收集特征和标签];
E --> F[训练 - 测试分割];
F --> G[训练分类器];
G --> H[测试分类器];
4. 对物理不可克隆函数(PUF)的机器学习攻击
传统密码学通过秘密密钥和大量资源来保护电子设备,但实际中很难保证信息的机密性。因此,人们发明了 PUF(物理不可克隆函数),它是一种物理设备,其输出易于评估但难以预测。
4.1 认证原理
要使用 PUF 进行认证,需要构建一个挑战 - 响应对(CRP)数据库。挑战是长度为 n 的二进制字符串,响应是长度为 m 的二进制字符串。为了验证一个未知设备是否为指定的 PUF,需要向其发出一系列挑战,验证其响应是否正确,直到达到所需的概率确定它是同一个 PUF。需要注意的是,PUF 本身并非 100% 可靠,由于环境条件和噪声的影响,相同的挑战可能会产生不同的响应。
4.2 准备工作
在 pip 中安装
pandas
、
sklearn
和
xgboost
:
pip install pandas sklearn xgboost
同时,需要使用
CRPDataset.csv
数据集。
4.3 操作步骤
- 加载 CRP 数据集:
import pandas as pd
df = pd.read_csv("CRPdataset.csv")
数据由对 (x, y) 组成,其中 x 是长度为 64 的二进制字符串(挑战),y 是二进制数字(响应)。
2. 将 pandas 数据框转换为 NumPy 数组:
y = df.pop("Label").values
X = df.values
- 进行训练 - 测试分割:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=11)
- 实例化并训练 XGBoost 分类器:
from xgboost import XGBClassifier
clf = XGBClassifier()
clf.fit(X_train, y_train)
print(clf.score(X_train, y_train))
输出结果为 0.6405208333333333。
5. 在测试集上测试分类器:
clf.score(X_test, y_test)
输出结果为 0.6270833333333333。
4.4 工作原理
首先将 CRP 数据集读入数据框,然后创建 NumPy 数组来存储特征和标签。接着进行训练 - 测试分割,训练并测试分类器。从性能结果可以看出,机器学习能够准确预测 PUF 挑战的响应。这意味着可以使用训练好的模型构建 PUF 的软件克隆,并用于(虚假)认证。
4.5 表格:PUF 攻击步骤
| 步骤 | 操作 |
|---|---|
| 1 | 加载数据集 |
| 2 | 转换为 NumPy 数组 |
| 3 | 训练 - 测试分割 |
| 4 | 训练分类器 |
| 5 | 测试分类器 |
5. 基于深度学习的加密
加密是将信息转换为代码以防止未经授权访问的过程。这里将使用卷积神经网络来进行数据的加密和解密。
5.1 准备工作
在 pip 中安装
click
、
keras
、
tensorflow
和
tqdm
包:
pip install click keras tensorflow tqdm
克隆仓库:
git clone https://github.com/emmanueltsukerman/convcrypt.git
5.2 操作步骤
-
对要加密的图像或文件运行
encrypt.py脚本:
python encrypt.py --input_file "input file path" --output_file "encrypted file path" --key_file "key file name"
尝试打开加密后的文件,会发现由于加密而无法打开。
2. 对加密文件和密钥文件运行
decrypt.py
脚本来解密文件:
python decrypt.py --input_file "encrypted file path" --output_file "reconstructed file path" --key_file "key file name"
结果将得到原始文件。
5.3 工作原理
首先使用 ConvCrypt 对图像进行加密。ConvCrypt 是一个概念验证的实验性加密算法,使用 n 维卷积神经网络,目前仅支持三维卷积。然后进行解密操作并测试,确保结果是原始文件。ConvCrypt 算法首先将数据分成块,然后为 3D 卷积生成一个密钥,这是一个与数据块大小相同的随机生成的比特立方体。最后,训练卷积神经网络将密钥卷积到每个数据块中,使得每个数据块都有自己训练好的网络。加密后的数据是每个网络的权重(核张量的值)。
5.4 流程图
graph TD;
A[安装依赖和克隆仓库] --> B[加密文件];
B --> C[尝试打开加密文件];
C --> D[解密文件];
D --> E[验证结果];
综上所述,机器学习在数据安全与攻击领域有着广泛的应用,包括密码破解、隐写术、隐写分析、PUF 攻击和加密等方面。通过上述的方法和步骤,我们可以更好地理解和应用这些技术,同时也需要注意其可能带来的安全风险。
超级会员免费看

被折叠的 条评论
为什么被折叠?



