/randomness

该工具库实现了《GM/T 0005-2021 随机性检测规范》中描述的15种随机性检测方法

Primary LanguageGoMIT LicenseMIT

Randomness 二元序列随机性检测方法

Documentation GitHub go.mod Go version GitHub tag (latest SemVer)

在使用randomness前,请务必悉知 《randomness 免责声明》

项目概述

该工具库实现了《GM/T 0005-2021 随机性检测规范》中描述的15种随机性检测方法。

rundesp.png

检测工具

若您需要使用相关测试工具需要可以 从Release中下载编译版本手动编译程序,详见文档:

快速入门

rddetector检测工具只是randomness的一种应用方式,randomness提供丰富的API接口,您可以在根据需要定制化的使用。

安装randomness

go get -u github.com/Trisia/randomness

下面是10^6比特数据规模的扑克检测的例子:

package main

import (
	"crypto/rand"
	"fmt"
	"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)
}

更多API使用方法见:randomness API 文档

随机数发生器检测

randomness 实现了 《GM/T 0025-2014 SSL VPN 网关产品规范》 5.4.4.3 随机数发生器 4个不同应用阶段的随机数检测:

使用方法见 测试用例 detect_test.go

如果您的主机处理器含有多个核心,那么可以使用Fast系列的API来加速检测,见 测试用例 detect_fast_test.go

注意:离散傅里叶检测 10^8 bit 规模数据检测为了加速计算单次检测需要消耗1024MB以上内存,请注意主机并发数量防止发生内存溢出(OOM)。

发展

检测规范:

在 GM/T 0005-2021 中在 样本通过率判定 的基础上,增加了 样本均匀性判定 作为检测通过判定依据,详见 GM/T 0005-2021 6.3。

目前 randomness 已经升级至《GM/T 0005-2021 随机性检测规范》。