现代密码学2.1--完美安全和完美不可区分/Perfectly secret, Perfectly indistinguishable

现代密码学2.1--完美安全和完美不可区分/Perfectly secret, Perfectly indistinguishable

博主正在学习INTRODUCTION TO MODERN CRYPTOGRAPHY (Second Edition) --Jonathan Katz, Yehuda Lindell,做一些笔记供自己回忆,如有错误请指正。整理成一个系列现代密码学,方便检索。

《现代密码学》第一章所介绍的古典密码,全都已经被破解了。之前由于没有正式的定义、精确的假设,无法证明一个密码方案是否具有严格的安全性。在第二章第一节中,《现代密码学》介绍了对抗具有无限算力的攻击者,也能被证明是安全的密码方案的定义,这样的密码方案被称为是完美安全的;而针对攻击者而言,密码方案的完美不可区分是等价于完美安全的。

完美安全

定义

对于信息空间 M \mathcal{M} M上的每一种概率分布,所有信息 m ∈ M m\in \mathcal{M} mM,所有密文 c ∈ C c\in \mathcal{C} cC,如果 P r [ C = c ] > 0 Pr[C=c]>0 Pr[C=c]>0,都满足 P r [ M = m ∣ C = c ] = P r [ M = m ] Pr[M=m|C=c]=Pr[M=m] Pr[M=mC=c]=Pr[M=m]

也就是,密文 c ∈ C c\in \mathcal{C} cC不会透露任何关于明文 m ∈ M m \in \mathcal{M} mM的信息,完美地隐藏了关于被加密明文 m m m的所有信息。

定理

如果对于 ∀ m , m ′ ∈ M , ∀ c ∈ C \forall m,m'\in \mathcal{M},\forall c\in \mathcal{C} m,mM,cC,都有 P r [ E n c K ( m ) = c ] = P r [ E n c K ( m ′ ) = c ] Pr[Enc_K(m)=c]=Pr[Enc_K(m')=c] Pr[EncK(m)=c]=Pr[EncK(m)=c],那么这个信息空间是 M \mathcal{M} M的密码方案是完美安全的。

证明:
要证明“密码方案是完美安全的”,即证满足“ P r [ M = m ∣ C = c ] = P r [ M = m ] Pr[M=m|C=c]=Pr[M=m] Pr[M=mC=c]=Pr[M=m]”。

  • P r [ M = m ] = 0 Pr[M=m]=0 Pr[M=m]=0,则 P r [ M = m ∣ C = c ] Pr[M=m|C=c] Pr[M=mC=c]肯定也是0,那么有 P r [ M = m ∣ C = c ] = P r [ M = m ] Pr[M=m|C=c]=Pr[M=m] Pr[M=mC=c]=Pr[M=m]
  • P r [ M = m ] > 0 Pr[M=m]>0 Pr[M=m]>0
    贝叶斯定理得 P r [ M = m ∣ C = c ] = P r [ C = c ∣ M = m ] ⋅ P r [ M = m ] P r [ C = c ] Pr[M=m|C=c]=\frac{Pr[C=c|M=m]\cdot Pr[M=m]}{Pr[C=c]} Pr[M=mC=c]=Pr[C=c]Pr[C=cM=m]Pr[M=m]
    = P r [ C = c ∣ M = m ] ⋅ P r [ M = m ] ∑ m ′ ∈ M P r
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
calibration_curve是一个在机器学习中可用于评估分类模型校准性的函数,它可以帮助我们了解模型的预测概率与实际概率之间的偏差。而c-index是一个用于度量模型预测排序能力的评价指标。在Python中,我们可以使用scikit-learn库中的相关函数和工具进行处理。 首先,我们需要导入scikit-learn库中的calibration_curve和metrics模块: ```python from sklearn.calibration import calibration_curve from sklearn import metrics ``` 接下来,我们可以使用calibration_curve函数来计算校准曲线的数据,同时传入模型的预测概率和真实标签: ```python probs = model.predict_proba(X_test)[:, 1] true_label = y_test fraction_of_positives, mean_predicted_value = calibration_curve(true_label, probs, n_bins=10) ``` 在这个例子中,我们使用X_test作为测试数据集的特征,y_test作为测试数据集的真实标签。model是我们训练好的分类模型。 接着,我们可以使用matplotlib库来绘制校准曲线: ```python import matplotlib.pyplot as plt plt.plot(mean_predicted_value, fraction_of_positives, 's-', label='Calibration curve') plt.plot([0, 1], [0, 1], '--', color='gray', label='Perfectly calibrated') plt.xlabel('Mean predicted value') plt.ylabel('Fraction of positives') plt.legend() plt.title('Calibration curve') plt.show() ``` 最后,我们可以使用metrics模块中的c-index函数来计算c-index: ```python c_index = metrics.roc_auc_score(true_label, probs) ``` 这样,我们就可以通过使用calibration_curve函数来绘制校准曲线,并使用c-index函数来计算模型的c-index值,从而对模型的预测效果进行评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值