遗传算法求解最短路径
遗传算法求解最短路径的可行性
遗传算法是一种启发式算法,通过模拟生物界中的自然选择,来实现优胜劣汰,最终得到一个较优的解。只要一个问题可以给出解的表示,并且存在一种评判机制,可以判断给出解的适应度,那么就存在使用遗传算法进行求解的可能性。比如求最短路径,我们可以通过深度优先搜索给出起点至终点的路径表示,而评判机制便是路径的距离,所以存在使用遗传算法进行求解的可行性。
任意路径的表示
如果想要通过遗传算法求解最短路径问题,首先需要想一个能表示任意路径的方法,因为如果不能表示任意路径的话,就说明在演化过程中某些路径永远不会被考虑,这是不合理的。于是,我们可以使用深度优先搜索(Depth
First
Search)寻找一条可行路径,搜索所有可行路径的算法有很多,在此使用DFS是因为我们只需要优先找出一条可行路径。
DFS搜索路径时,当一个结点有多个可达结点,对下一个结点的选择是随机的,那如何让其变为选择性的呢?在此引入一种优先级编码的方式,为每个结点分配一个优先级(各不相同),通过优先级序列来表示路径。不过,优先级序列并不能直接表示路径,需要对其进行解码才 ...
相关能量分析攻击(Correlation
Power Analysis, CPA)
实验原理
CPA是利用密码芯片的假设模型,预测其加解密时的功耗大小,然后和实际测量的功耗大小进行相关性分析推测密钥。CPA攻击通常采用汉明重量模型,所谓汉明重量就是一个码字中1码元的总数目,汉明重量越大,芯片运算时的功耗就越大。
基础前提
AES密码芯片信息泄露特征符合汉明重量模型。明文为AES密码芯片加密的输入,泄露值为AES密码芯片加密过程中第一轮S盒输出对应的能量消耗(包括噪声)。当密钥猜测正确时,得到的相关迹与泄露值有较高的相关性。
实验步骤
pnsi.npy 分别是低、中、高噪声泄露数据文件 i = 0,1,2 ptsi.npy
分别是低、中、高噪声明文数据文件 i = 0,1,2
定义正确密钥元组以及猜测密钥列表,便于之后的恢复成功率测试
12key = ('0x72', '0x2c', '0xd3') # 各噪声下的正确密钥keys = [[], [], []]
切换文件路径,正确读取数据文件
12path = sys.path[0] # 获得该文件的目录o ...