跳转到主要内容

ANU量子随机数服务器Python接口

项目描述

本项目提供与ANU量子随机数生成器(qrng.anu.edu.au)交互的工具。它与他们的JSON API进行通信,并提供一个qrandom命令行工具、Python API和一个Linux /dev/qrandom 字符设备。

quantumrandom支持Python 2和3。

安装

pip install quantumrandom

命令行工具

$ qrandom --int --min 5 --max 15
7
$ qrandom --binary
���I�%��e(�1��c��Ee�4�������j�Կ��=�^H�c�u
oq��G��Z�^���fK�0_��h��s�b��AE=�rR~���(�^Q�)4��{c�������X{f��a�Bk�N%#W
+a�a̙�IB�,S�!ꀔd�2H~�X�Z����R��.f
...
$ qrandom --hex
1dc59fde43b5045120453186d45653dd455bd8e6fc7d8c591f0018fa9261ab2835eb210e8
e267cf35a54c02ce2a93b3ec448c4c7aa84fdedb61c7b0d87c9e7acf8e9fdadc8d68bcaa5a
...
$ qrandom --binary | dd of=data
^C1752+0 records in
1752+0 records out
897024 bytes (897 kB) copied, 77.7588 s, 11.5 kB/s

创建 /dev/qrandom

quantumrandom自带一个用户空间的多线程字符设备。当读取时,此设备将启动多个线程来获取数据。您不仅可以将其用作rng,还可以将数据反馈到您的系统熵池中。

为了构建其依赖项,您需要安装以下软件包:svn gcc-c++ fuse-devel gccxml libattr-devel。在Fedora 17及更高版本上,您还需要安装kernel-modules-extra软件包,用于cuse模块。

pip install ctypeslib hg+https://cusepy.googlecode.com/hg
sudo modprobe cuse
sudo chmod 666 /dev/cuse
qrandom-dev
sudo chmod 666 /dev/qrandom

默认情况下,它将使用3个线程,可以通过将“-t #”传递给qrandom-dev来更改。

测试随机性以符合FIPS 140-2规范

$ cat /dev/qrandom | rngtest --blockcount=1000
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 1000
rngtest: FIPS 140-2 failures: 0
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 0
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=17.696; avg=386.711; max=4882812.500)Kibits/s
rngtest: FIPS tests speed: (min=10.949; avg=94.538; max=161.640)Mibits/s
rngtest: Program run time: 50708319 microseconds

向Linux随机数生成器添加熵

sudo rngd --rng-device=/dev/qrandom --random-device=/dev/random --timeout=5 --foreground

监视您的可用熵级别

watch -n 1 cat /proc/sys/kernel/random/entropy_avail

Python API

量子随机Python模块包含一个低级get_data函数,该函数模仿了ANU量子随机数发生器的JSON API。它返回由uint16hex16数据组成的可变长度列表。

>>> quantumrandom.get_data()
[26646]
>>> quantumrandom.get_data(data_type='uint16', array_length=5)
[42796, 32457, 9242, 11316, 21078]
>>> quantumrandom.get_data(data_type='hex16', array_length=5, block_size=2)
['f1d5', '0eb3', '1119', '7cfd', '64ce']

有效的data_type值是uint16hex16,而array_lengthblock_size不能超过1024。如果由于某种原因API调用不成功,或者从服务器返回的数据量不正确,此函数将引发异常。

基于此get_data函数,量子随机还提供了一系列高级辅助函数,使得执行各种任务变得简单。

>>> quantumrandom.randint(0, 20)
5
>>> quantumrandom.hex()[:10]
'8272613343'
>>> quantumrandom.binary()[0]
'\xa5'
>>> len(quantumrandom.binary())
10000
>>> quantumrandom.uint16()
numpy.array([24094, 13944, 22109, 22908, 34878, 33797, 47221, 21485, 37930, ...], dtype=numpy.uint16)
>>> quantumrandom.uint16().data[:10]
'\x87\x7fY.\xcc\xab\xea\r\x1c`'

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

quantumrandom-1.9.0.tar.gz (7.6 kB 查看哈希值)

上传时间

由以下提供支持