8个版本

0.3.2 2021年2月23日
0.3.1 2019年11月13日
0.3.0 2019年10月30日
0.2.2 2019年5月12日
0.1.0 2018年12月16日

#191 in 机器学习

MIT许可证

115KB
2K SLoC

F-BLEAU

Build Status Version

F-BLEAU是一种通过黑盒方式(即仅通过查看秘密输入和相应的输出示例)来估计系统关于其秘密泄露的工具。它将一个通用系统视为黑盒,接收秘密输入并相应地返回输出,并测量输出“泄露”了多少关于输入的信息。它是在[2]中提出的。

F-BLEAU基于估计特定类别机器学习模型误差与估计信息泄露之间的等价性[1,2,3]。

此代码也被用于[2]的以下评估实验:Gowalla、e-passport和有限域指数的旁路攻击。

入门指南

F-BLEAU作为命令行工具提供,fbleau。也存在Python绑定(见下文)。

fbleau以CSV数据为输入,包含系统的输入和输出示例。它目前需要两个CSV文件作为输入:一个训练文件和一个验证(或测试)文件,例如

0, 0.1, 2.43, 1.1
1, 0.0, 1.22, 1.1
1, 1.0, 1.02, 0.1
...

其中第一列指定秘密,其余列指示输出向量。

它运行选定的方法来估计贝叶斯风险(敌手在给定相应输出预测秘密的最小错误概率),以及相对安全性度量。

一般语法是

fbleau <estimate> [--knn-strategy=<strategy>] [options] <train> <eval>

Arguments:
    estimate:   nn              Nearest Neighbor. Converges only if the
                                observation space is finite.
                knn             k-NN rule. Converges for finite/continuous
                                observation spaces.
                frequentist     Frequentist estimator. Converges only if the
                                observation space is finite.
    knn-strategy: ln            k-NN with k = ln(n).
                  log10         k-NN with k = log10(n).
    train                       Training data (.csv file).
    eval                        Validation data (.csv file).

示例

此示例考虑了根据几何分布(隐私级别为nu=4)生成的100K观察结果(详情见[2]);贝叶斯风险的真值为R*=0.456,通过分析计算得出。观察结果分为训练集(80%)和测试集(分别对应于examples/geometric-4.train.csvexamples/geometric-4.test.csv)。

可以使用 fbleau 来计算使用 ln 策略的 knn 估计(具体估计方法细节见下文)如下:

$ fbleau knn --knn-strategy ln examples/geometric-4.train.csv examples/geometric-4.test.csv
Random guessing error: 0.913
Estimating leakage measures...

Minimum estimate: 0.473
Multiplicative Leakage: 6.057471264367819
Additive Leakage: 0.44000000000000006
Bayes security measure: 0.5180722891566265
Min-entropy Leakage: 2.5987156557884865
You have new mail in /var/mail/joker

注意:根据您的机器配置,这可能需要一些时间。

默认情况下,F-BLEAU 在不断增加的训练样本上运行估计器,并在每一步计算估计值。返回的 R*(此处为 0.473)是此过程中观察到的最小值。

要记录每一步的估计值,请指定一个日志文件,使用 --logfile <logfile>

估计值

原则上,应该尝试尽可能多的估计方法,并选择产生最小估计值的那个 [2]。然而,某些估计器更适合某些情况。以下表格显示了:i)当估计器在足够的数据下保证收敛到正确值时,以及 ii)它们是否适合小型或大型系统。例如,小型系统可能具有多达 1K 的可能输出值;大型系统的输出空间可能更大。

估计 选项 收敛性 适用场景
频率派 如果输出空间是有限的 小型系统
nn 如果输出空间是有限的 小型/大型系统
knn --knn-strategy 始终 小型/大型系统
nn-bound 始终(然而,请注意,这是一个下界) 小型/大型系统

例如

fbleau nn <train> <test>

更多细节请见 [2]。

k-NN 策略

k-NN 估计器也需要定义一个“策略”。目前实现策略包括:

ln k-NN 估计器,其中 k = ln(n),其中 n 是训练样本的数量。

log 10 k-NN 估计器,其中 k = log10(n),其中 n 是训练样本的数量。

例如,您可以运行

fbleau knn --knn-strategy log10 <train> <test>

其他选项

默认情况下,fbleau 对所有训练数据运行。但是,可以指定一个停止条件,形式为 (delta, q)-收敛:当估计值的值至少 q 步没有超过 delta(《--delta》),在相对(默认)或绝对(《--absolute》)意义上时,fbleau 停止。

fbleau 可以通过指定 --scale 标志来缩放系统输出(“特征”)的个别值,使其在 [0,1] 区间内。

可以使用 --distance 选项来选择最近邻方法所需的最优距离度量。

其他选项请参阅帮助页面

fbleau -h

安装

代码是用 Rust 编写的,但它被认为是作为一个独立的命令行工具使用。

安装 rustup,这将使 cargo 可用于您的路径。然后运行

cargo install fbleau

现在您应该在您的 $PATH 中找到二进制文件 fbleau(如果没有找到,请再次检查 rustup)。

如果您的系统上没有 rustup(例如,某些 *BSD 系统),您仍然可以使用系统的包管理器安装 cargo,然后像上面那样安装 fbleau。如果不起作用,请提交一个工单。

Python 绑定

如果您希望使用Python通过F-BLEAU,我们现在提供了一个Python模块来实现基本功能。

安装

pip install fbleau

用法

>>> import fbleau
>>> fbleau.run_fbleau(train_x, train_y, test_x, test_y, estimate,
... knn_strategy, distance, logfile, delta, qstop, absolute, scale)

其中参数遵循上述约定。

train_x : training observations (2d numpy array)
train_y : training secrets (1d numpy array)
test_x : test observations (2d numpy array)
test_y : test secrets (1d numpy array)
estimate : estimate, value in ("nn", "knn", "frequentist", "nn-bound")
knn_strategy : if estimate is "knn", specify one in ("ln", "log10")
distance : the distance used for NN or k-NN
log_errors : if `true`, also return the estimate's value (error)
             for each step
log_individual_errors : if `true`, log the individual errors for each
                        test object, for the best estimator
                        (i.e., for the smallest error estimate)
delta : use to stop fbleau when it reaches (delta, qstop)-convergence
qstop : use to stop fbleau when it reaches (delta, qstop)-convergence
absolute : measure absolute instead of relative convergence
scale : scale observations' features in [0,1]

函数 run_fbleau() 返回一个字典,包含以下内容

  • min-estimate:最小贝叶斯风险估计(应使用该估计值)
  • last-estimate:使用完整训练数据计算出的估计值
  • random-guessing:随机猜测误差的估计(约为基础线,见[2])
  • estimates:(如果 log_errors=true)包含每次估计值的向量
  • min-individual-errors:(如果 log_individual_errors=true)包含每个测试对象个体误差的向量(true表示有误差,否则为false),对应于最佳(即最小的)估计值

简单示例

fbleau.run_fbleau(train_x, train_y, test_x, test_y, estimate='knn',
                  knn_strategy='ln', distance='euclidean', log_errors=false,
                  log_individual_errors=false, delta=None, qstop=None,
                  absolute=false, scale=false)

待办事项

目前,这里提供的代码

  • 基于频率统计和最近邻方法;未来我们希望扩展到其他机器学习方法;请注意,这不会影响结果的普适性,这些结果适用于任何“普遍一致”的分类器,
  • 一次计算一个估计值(即要计算多个估计值,需要多次运行fbleau);这可能在将来改变。

短期

  • 返回各种泄漏度量(而不是仅R*)
  • 重置估计值

中期

  • 同时预测多个估计器的结果
  • 从标准输入获取训练数据(在线模式)

也许

  • 其他机器学习方法(例如,SVM,神经网络)
  • Python 绑定

黑客攻击

如果您想尝试这段代码,可以在克隆存储库后使用以下命令编译它

cargo build

要编译Python模块,需要启用可选功能python-module;这需要夜间的Rust。安装maturin(pip install maturin),然后编译

maturin build --cargo-extra-args="--features python-module"

参考文献

[1] 2017, "Bayes, not Naïve: Security Bounds on Website Fingerprinting Defenses". Giovanni Cherubin

[2] 2018, "F-BLEAU: Fast Black-Box Leakage Estimation". Giovanni Cherubin, Konstantinos Chatzikokolakis, Catuscia Palamidessi.

[3](博客)“用于量化黑盒安全性的机器学习方法”. https://giocher.com/pages/bayes.html

依赖项

~6–9MB
~152K SLoC