神经网络与随机数的安全性分析(下)( 二 )

  • 模型设计非常简单 – 几乎任何两个比特之间都可能发生一些复杂和不可预测的比特变化 。 还有一种隐藏状态 , 我们想通过序列来了解 , 它很好地映射到了LSTM 。 所以我们不需要在模型设计上有任何根本性的突破 , 至少乍一看是这样 。
  • 接下来 , 我打算把Xorshift128的每一个32位输出转换成它的二进制表示 , 即每个数字将被转换成一个32位的列表 , 而且我也知道这是几乎所有RNG代码都使用的底层表示法 。 另外 , 每一个训练示例理论上都是独立于前面4个数字之外的所有内容的 , 所以我们将把每个输出的列表分成这些数据的各个步长 , 即1,2,3,4,5,6,7,8,9变成[[1,2,3,4] , [5]] , ([2,3,4,5] , [6]) 。 然后 , 将每个单独的数字转换成二进制 。 具体如下所示 , 不过在本例中 , 我将把它们转换为4位数字 , 这样更易于阅读 。
    x1 = [[0,0,0,1],[0,0,1,0],[0,0,1,1],[0,1,0,0]] #[1,2,3,4]y1 = [0,1,0,1] #5x2 = [[0,0,1,0],[0,0,1,1],[0,1,0,0],[0,1,0,1]] #[2,3,4,5]y2 = [0,1,1,0] #6
    在机器学习术语中 , 我们想把这个长度为N的序列分成几个张量:32×4输入张量和32×1输出张量 。 现在 , 我们需要编写一些高性能的numpy代码 , 在多维张量上执行数据重塑操作 。
    接下来 , 我们可以使用一个LSTM来捕获基于状态的依赖关系 , 几个密集的网络足以覆盖所有的数据变换操作 , 然后用32位的最终数据层完成我们的任务:
    model.add(LSTM(units=1024,activation='relu',input_shape=(4,32,),return_sequences=False,))for depth in range(5):model.add(Dense(512,activation='relu'))model.add(Dense(32))
    下面的结果足以证明我们的想法:
    神经网络与随机数的安全性分析(下)文章插图
    这个模型实际上需要几次才能成功 , 之前的运行达到了75%到95%之间的峰值 。
    为此 , 我还专门给大家提供了一个针对Xorshift128算法的预测工具 , 感兴趣的同学可以下载下来使用一下 。 除此之外 , 这实际上是我第一次建立任何类型的新模型 , 所以我希望社区的广大同学们能够帮助我继续完善这款工具的源代码 , 以更好地提升其性能和预测准确率 。
    RngPredictor在安装好tensorflow之后 , 然后把该项目的源代码克隆至本地 , 你就可以直接运行predictor.py脚本了 。 该工具的GitHub代码库地址如下:
    GitHub传送门:
    欢迎登录安全客 -有思想的安全新媒体www.anquanke.com/加入交流群1015601496 获取更多最新资讯
    【神经网络与随机数的安全性分析(下)】原文链接: