如何评估加解密代码?

在不深入研究代码的具体实现的情况下,如何评估加解密代码的有效性、强度?

背景

迫于无赖,项目组只能安排1位新手设计一系列的加密算法,用于对本地文件和二进制代码的加密。幸运的是,对加密强度并没有过高的要求。

但也希望能够有效的评估代码,并实现自动化测试。评估方法只能建立在分析输入、输出数据、二进制代码的基础上。


1、有效性

即检测加解密代码是否正确。这个相对比较容易。PlainText - 原始数据,CipherText - 加密后的数据,Encrypt - 加密函数,Decrypt - 解密函数

那么通过2个断言可以基本确定,加解密过程的正确性。

EXPECT_NQ( PlainText, Encrypt(PlainText)) --> 保证加密后的 CipherText != PlainText

EXPECT_EQ( PlainText, Decrypt(Encrypt(PlainText)))  --> 保证经过加密、解密后数据被还原

显然,这会出现漏报。但实际具有可操作性,可以通过增强测试用例来,降低漏报的概率。


2、强度

这个很难评估。可以转而评估加密前后数据的相似度。相似度的计算参考了信号理论中的相关性。

float a,b,c,similarity;

a += PlainText[i] * CipherText[i]

b += PlainText[i] * PlainText[i]

c += CipherText[i] * CipherText[i]

similarity = a/(sqrt(b*c))


EXPECT_GT( MAX_SIMILARITY,  abs(similarity))

虽然,相似度低不一定就表示加密强度高。但通过,设置一定的相似度阀门也可以去除一部分设计得很弱的加密算法。

但这个检测方法与输入样本有关。

当输入样本的规律性很弱时(信号频率高且频带宽),即使很简单的加密(变换),其加密前后的数据也不会有太高的相关性;

当输入样本的规律性很强时,采用ECB模式的加密,其数据相关性必然很高。

需要寻找更合理的方法……


评估加密强度的另外一个指标是,字符频率是否变化(词频统计是密码攻击常用的手段)。

检测加密前后,字符频率是否变化。若无变化,也可认为该加密强度较弱。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值