随机数检测(一)

news2025/1/14 1:06:41

随机数检测(一)- 随机数自测试概述

  • 1 概述
  • 2 产品形态划分和检测项目
  • 3 测试方式
    • 3.1 概述
    • 3.2 单比特频数检测方法
    • 3.3块内频数检测方法

1 概述

随机数发生器设计完成后,使用随机数发生器的产品需对其执行测试,防止应用过程中产生不合规的随机数。对于密码产品而言,对随机数发生器输出数据的检测一般称为随机数自测试。这里的随机数自测试为使用过程的自测试,注意与随机数发生器设计时的自测试区分开来。

确定密码产品需执行的随机数自测试项目前,应首先按照GM/T 0062确定产品所属类型。对应不同类型的密码产品,应执行不同阶段的检测项目。检测项目的实现方式在GM/T 0005中定义。

2 产品形态划分和检测项目

按照GM/T0062要求,密码产品可分为ABCDE五种类型。依据所属类型确定随机数自测试的检测项。

类型划分依据典型产品
A类不能独立作为功能产品使用随机数发生器芯片等
B类用时上电,随机数检测处理能力有限,对上电响应速度有严格要求IC卡
C类用时上电,随机数检测处理能力有限,对上电响应速度没有严格要求USBKey
D类长期加电,随机数检测处理能力有限,对上电响应速度没有严格要求POS机
E类长期上电,较强的随机数检测处理能力,对上电响应速度没有严格要求服务器

随机数检测包括送样检测、出厂检测、上电检测、周期检测和单次检测。其中:
1) 送样检测在检测机构对产品测试时执行。产品自身无需关注。
2) 出厂检测在产品出厂前执行。
3) 上电检测在产品加点时自动执行。
4) 周期检测按照一定时间周期自动执行。
5) 单次检测在每次使用随机数前自动执行。
实际上多数系统类产品都属于E类产品。以E类产品为例,各测试阶段的检测项如下图。
E类要求1
E类要求2

3 测试方式

3.1 概述

GM/T 0005-2021为最新的随机性检测规范,可以在实践中代替GB/T 32915。GM/T 0005-2021规定了15中随机性检测方法:单比特频数检测方法、块内频数检测方法、扑克检测方法、重叠子序列检测方法、游程总数检测方法、游程分布检测方法、块内最大游程检测方法、二元推导检测方法、自相关检测方法、矩阵秩检测方法、 累加和检测方法、近似熵检测方法、线性复杂度检测方法、Maurer通用统计检测方法、离散傅里叶检测方法。

规范定义的样本通过率显著性水平α=0.01。样本分布均匀性检测的显著性水平αT=0.0001,子区间数量k=10。

3.2 单比特频数检测方法

单比特频数检测方法

以下实现代码供参考。

def monobitFrequency(epsilon:bitarray):
    sn = epsilon.count(1) - epsilon.count(0)
    #2021version make change
    V = sn/sqrt(len(epsilon))
    pvalue = math.erfc(abs(V)/sqrt(2))
    qvalue = math.erfc(V/sqrt(2))/2
    return {'p':pvalue, 'q':qvalue} 

#test case
if __name__ == '__main__':
    # input = bitarray('11001100000101010110110001001100111000000000001001001101010100010001001111010110100000001101011111001100111001101101100010110010')
    input = readInputFile('.\\pi\\data.pi')
    ret = monobitFrequency(input)
    print('pvalue:', ret['p'])
    print('qvalue:', ret['q'])

3.3块内频数检测方法

块内频数检测方法

以下实现代码供参考。

def blockFrequency(epsilon:bitarray,m):
    # m = getblockFrequencyM(len(epsilon))
    N = int(len(epsilon)/m)
    epsilonList = epsilon.tolist()
    sumOfPi = 0
    for i in range(N):
        pi = sum(epsilonList[i*m:(i+1)*m:1])/m
        sumOfPi += (pi - 0.5)**2
    V = 4*m*sumOfPi
    pvalue = scipy.special.gammaincc(N/2, V/2)
    qvalue = pvalue
    return {'p':pvalue, 'q':qvalue}

test case
if __name__ == '__main__':
    input = bitarray('1100100100001111110110101010001000100001011010001100001000110100110001001100011001100010100010111000')
    # input = readInputFile('.\\pi\\data.pi')
    ret = blockFrequency(input,10)
    print('pvalue:', ret['p'])
    print('qvalue:', ret['q'])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis的数据类型及对应的数据结构(二)

接上篇:Redis的数据类型及对应的数据结构(一)_鱼跃鹰飞的博客-CSDN博客 本篇主要讨论剩下的几种数据结构的应用场景 应用场景 集合的主要几个特性,无序、不可重复、支持并交差等操作。 因此 Set 类型比较适合用来数据去重和保…

卧剿,6万字!30个方向130篇!CVPR 2023 最全 AIGC 论文!一口气读完。

一杯奶茶,成为 AIGCCV 视觉前沿弄潮儿! 25个方向!CVPR 2022 GAN论文汇总 35个方向!ICCV 2021 最全GAN论文汇总 超110篇!CVPR 2021 最全GAN论文梳理 超100篇!CVPR 2020 最全GAN论文梳理 在最新的视觉顶会 C…

Java多重捕获块

try块后面可以跟随一个或多个catch块。每个catch块必须包含一个不同的异常处理程序。因此,如果您在不同的异常发生时需要执行不同的任务,请使用Java多重捕获块。 需要记住的要点 一次只会发生一个异常,同时只有一个catch块被执行。 所有的ca…

实训五:数据库安全控制 - MySQL数据库 - 授权与撤销授权

MySQL数据库 - 授权与撤销授权 第1关:数据库授权任务描述相关知识用户管理授权方式 编程要求测试说明参考代码 第2关:数据库撤销权限任务描述相关知识撤销权限 编程要求测试说明参考代码 第1关:数据库授权 任务描述 本关任务:新…

Ubuntu安装Anaconda详细步骤(Ubuntu22.04.1,Anaconda3-2023.03)

本文主要讲述了在Ubuntu中安装anaconda的具体步骤 准备环境:Ubuntu22.04.1,Anaconda3 1.下载Anaconda3 在清华镜像下载Linux版本的anaconda 清华镜像官网Anaconda下载 我选择的是Anaconda3-2023.03-Linux-x86_64.sh 下载好的Anaconda3-2023.03-Linux-…

拦截器Interceptor及与过滤器Filter的区别

统一拦截–拦截器Interceptor 1.概述 概念:是一种动态拦截方法调用的机制,类似于过滤器。Spring框架中提供的,用来动态拦截控制器方法的执行。作用:拦截请求,在指定的方法调用前后,根据业务需要执行预先设定的代码。与过滤器Fil…

【Java|多线程与高并发】设计模式-单例模式(饿汉式,懒汉式和静态内部类)

文章目录 1. 前言2. 单例模式3. 如何保证一个类只有一个实例4. 饿汉式单例模式5. 懒汉式单例模式6. 实现线程安全的懒汉式单例7. 静态内部类实现单例模式8. 总结 1. 前言 设计模式是一种在软件开发中常用的解决复杂问题的方法论。它提供了一套经过验证的解决方案,用…

通信原理概述

通信是指人们通过某种媒介进行信息传递。通过某种介质或通道,将信息从一个地点传递到另一个地点的过程。通信可以是人与人之间的交流,也可以是设备、系统或网络之间的数据传输。 通信信号的分类方法: 1)模拟信号和数字信号(从信号…

数字游戏:如何统计能整除数字的位数?

本篇博客会讲解力扣“2520. 统计能整除数字的位数”的解题思路,这是题目链接。 本题的思路是:取出每一位,判断是否能整除。 如何取出每一位呢?可以采用“mod10除10”的策略。即:每次mod10取出最后一位数,再…

2022年软件测试面试题大全【含答案】

一、面试基础题 简述测试流程: 1、阅读相关技术文档(如产品PRD、UI设计、产品流程图等)。 2、参加需求评审会议。 3、根据最终确定的需求文档编写测试计划。 4、编写测试用例(等价类划分法、边界值分析法等)。 5、用例评审(…

C++面向对象 this指针 构造函数 析构函数 拷贝构造 友元

C面向对象 面向对象概念类与对象的区别 C中类的设计设计实例实例解释共有和私有类的认识 函数定义函数在类里定义和类外定义区别函数定义实例 C对象模型方案一:各对象完全独立地安排内存的方案方案二:各对象的代码区共用的方案: this指针this指针特点程序编译面向对象程序的过程…

【力扣刷题 | 第十四天】

目录 前言: 7. 整数反转 - 力扣(LeetCode) 面试题 16.05. 阶乘尾数 - 力扣(LeetCode) 总结; 前言: 今天仍然是无固定类型刷题, 7. 整数反转 - 力扣(LeetCode) 给你…

傅氏变换算法

半局积分算法的局限性是要求采样的波形为正弦波。当被采样的模拟量不是正弦波而是一个周期性时间函数时,可采用傅氏变换算法。傅氏变换算法来自于傅里叶级数,即一个周期性函数I(t)可用傅里叶级数展开为各次谐波的正弦项和余弦项之…

D117-72. 编辑距离

题目描述 链接:添加链接描述 跟只考虑删除的完全一样,只不过是dp[i-1][j-1]1 class Solution:def minDistance(self, word1: str, word2: str) -> int:# dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2&…

Qt 将某控件、图案绘制在最前面的方法,通过QGraphicsScene模块实现

文章目录 前言一、效果二、代码实现1.工程文件夹结构2.BackWidget类2.1 backwidget.h2.2 backwidget.cpp 总结 前言 在用Qt做一些应用的时候,有可能遇到和“绘制顺序”相关的问题,即要控制一些控件之间的显示前后问题,在常用的QWidget体系中&…

【数据结构与算法】力扣:翻转二叉树

翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root [2,1,3] 输出:[2,…

云HIS是什么?HIS系统为什么要上云?云HIS有哪些优点?

一、当前医疗行业HIS的现状与发展趋势 1.医院信息系统(HIS)经历了从手工到单机再到局域网的两个阶段,随着云计算、大数据新技术迅猛发展,基于云计算的医院信息系统将逐步取代传统局域网HIS , 以适应人们对医疗卫生服务越来越高的要…

BI-SQL丨角色和用户

角色和用户 在数仓的运维工作中,经常需要为用户开通不同权限的账号,使用户可以正常访问不同的数据,那么这就需要我们了解SQL Server的权限体系。 名词解释 登录名: 用来登录服务器的用户账号,例:sa&…

String类型

前言 之所以介绍是因为基本数据类型是系统中一切操作的基础,就像物理世界中的原子,高楼大厦中的砖瓦。当咱们整明白了这些基本数据类型,使用层面就是挑选和组合的问题了。本文小结下Redis中数据结构和使用场景,如果你有更骚气的挑…

Python中文件的读取

在Python中可以通过内置函数open()、read()和readline()实现文件的读取。 1 打开文件函数 1.1 open()函数的基本用法 open()是Python的内置函数,用来打开指定文件。该函数使用代码如下所示: fin open(words.txt) 其中,参数指定了要打开…