感谢 zhebinhu 项目对基础算法实现
运行下面命令安装检测工具集合:
go get -u github.com/Trisia/randomness
func main() {
// 产生随机数序列
n := 1000_000
buf := make([]byte, n/8)
_, _ = rand.Read(buf)
// 转换为字节数组
bits := randomness.B2bitArr(buf)
// 运行测试组
p := randomness.PokerTest(bits)
fmt.Printf("扑克检测 n: 1000000, P-value: %f\n", p)
}
产品检测方法:
- 出厂检测 detect.FactoryDetect
- 上电检测 detect.PowerOnDetect
- 周期检测 detect.PeriodDetect
- 单次检测 detect.SingleDetect
使用方法见 测试用例
如果您的处理含有多个核心你可以使用Fast系列的API来加速检测,见 测试用例
目前《GM/T 0005-2012 随机性检测规范》已经升级至 《GB/T 32915-2016 信息安全技术 二元序列随机性检测方法》。
该工具库实现了《GB/T 32915-2016 信息安全技术 二元序列随机性检测方法》中描述的15中随机性检测方法:
- [ 1] 单比特频数检测 MonoBitFrequencyTest
- [ 2] 块内频数检测 FrequencyWithinBlockTest
- [ 3] 扑克检测 PokerTest
- [ 4] 重叠子序列检测 OverlappingTemplateMatchingTest
- [ 5] 游程总数检测 RunsTest
- [ 6] 游程分布检测 RunsDistributionTest
- [ 7] 块内最大“1”游程检测 LongestRunOfOnesInABlockTest
- [ 8] 二元推导检测 BinaryDerivativeTest
- [ 9] 自相关检测 AutocorrelationTest
- [10] 矩阵秩检测 MatrixRankTest
- [11] 累加和检测 CumulativeTest
- [12] 近似熵检测 ApproximateEntropyTest
- [13] 线型复杂度检测 LinearComplexityTest
- [14] 通用统计检测 MaurerUniversalTest
- [15] 离散傅里叶检测 DiscreteFourierTransformTest
检测参数说明:
- 样本长度:
10^6
比特 - 显著水平:
α = 0.01
各算法检测参数如下:
序号 | 检测项目 | 参数 |
---|---|---|
1 | 单比特频数检测 | - |
2 | 块内频数检测 | m = 100 |
3 | 扑克检测 | m = 8 |
4 | 重叠子序列检测 | m = 5 |
5 | 游程总数检测 | - |
6 | 游程分布检测 | - |
7 | 块内最大“1”游程检测 | m = 10000 |
8 | 二元推导检测 | k = 7 |
9 | 自相关检测 | d = 16 |
10 | 矩阵秩检测 | M = 32, Q= 32 |
11 | 累加和检测 | - |
12 | 近似熵检测 | m = 5 |
13 | 线型复杂度检测 | m = 500 |
14 | 通用统计检测 | - |
15 | 离散傅里叶检测 | - |
由于Golang支持多平台的跨平台编译,因此可以改造该工具库可以通过Go编译适应平台运行的动态库。
具体方法参照 《Go语言高级编程》 第2章 CGO编程