精华内容
下载资源
问答
  • [rn] = qrand(n) 返回 0 到 65525 之间的 n 个随机数,其中 n 是 1 到 1024 之间的整数。这些数字是从位于https://qrng.anu.edu.au/的 ANU QRNG 服务器获得的。
  • 智能手机相机使用的新型量子随机数生成算法
  • 在基于真空的量子随机数发生器中增强可提取的量子熵
  • 利用超辐射发光二极管的放大自发辐射噪声作为量子随机熵源, 设计并实现了一种高速小型化光量子随机数发生器(QRNG)。为减小经典噪声及不完美器件对随机性带来的影响, 基于对量子熵源的最小熵估计, 在现场可编程门阵列...
  • 量子随机数发生器的后处理:熵评估和随机性提取
  • 随机数是使用 Quantis USB 量子随机数生成器 ( ) 生成的。 服务器的协议兼容EGD( )和PRNGD( )。 该项目试图在 Quantis USB 设备和 OpenSSL 之间架起一座桥梁。 Quantis USB 设备无法开箱即用地向 openSSL ...
  • 用于量子随机数生成器的HTTP API服务器。 屏幕截图 API文档 访问 执照 Copyright 2021 Andika Wasisto Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in ...
  • 利用量子力学的无法预测属性,意大利和西班牙团队开发出了集成电路能产生真随机数。随机数对于确保数据安全的加密方案至关重要。今天的随机数生成方法都称不上完美,很多时候你只...量子随机数生成器并不是今天才...

    利用量子力学的无法预测属性,意大利和西班牙团队开发出了集成电路能产生真随机数。随机数对于确保数据安全的加密方案至关重要。今天的随机数生成方法都称不上完美,很多时候你只需要等待足够长的时间,就可以发现数据之间的关联,这些信息最终能帮助你破解随机数生成方案。

    根据定义,量子物理学是无法预测的,你无法根据目前的信息猜测出未来的数字。量子随机数生成器并不是今天才有,但研究人员的目标是可携性,有朝一日可以将其整合到移动设备上。研究报告发表在《Optica》期刊上。

    本文转自d1net(转载)

    展开全文
  • 岳排槐 编辑量子位 出品 | 公众号 QbitAI据消息,潘建伟团队日前成功实现了器件无关的量子随机数,将在数值模拟、密码学等领域广泛应用,并有望形成新的随机数国际标准。...
        

    640?wx_fmt=jpeg

    岳排槐 编辑
    量子位 出品 | 公众号 QbitAI

    据消息,潘建伟团队日前成功实现了器件无关的量子随机数,将在数值模拟、密码学等领域广泛应用,并有望形成新的随机数国际标准。


    相关研究成果于北京时间20日由国际权威学术期刊《自然》在线发表(http://dx.doi.org/10.1038/s41586-018-0559-3)。


    640?wx_fmt=png


    中科大教授潘建伟及其同事张强、范靖云、马雄峰等与中科院上海微系统与信息技术研究所、日本NTT基础科学实验室合作,利用量子纠缠的内禀随机性,在国际上首次实现器件无关的量子随机数。这是目前安全性最高的随机数产生装置。


    随机数在科学研究和日常生活中都有着重要应用。


    例如,天气预报、新药研制、材料设计、工业设计和核武器研制等领域,常常需要通过数值模拟进行计算,关键就是要有大量随机数输入;游戏、人工智能等领域,需要使用随机数来控制系统演化;在通信安全、现代密码学等领域,则需要第三方完全不知道的随机数作为安全性的基础。


    根据量子力学,科学家可以制造出真正的随机数产生器,即使采用恶意第三方制造的组件,或者使用计算能力超强的量子计算机,也无法预测或获知它所产生的随机数。目前国际上纷纷开展这种随机数产生器的研制工作。


    潘建伟介绍,其团队的这一成果是在此前技术基础上,优化了纠缠光子收集、传输、调制等效率,并采用上海微系统所开发的高效率超导单光子探测器件,实现了高性能纠缠光源的高效制备;通过设计快速调制并进行合适的空间分隔设计,满足了器件无关的量子随机数产生装置所需的类空间隔要求。


    “无论经典密码学还是量子保密通信,都需要真正的随机数作为保障。”潘建伟说,在现有的量子保密通信系统中,如果采用自己制备的或者可信制造商制备的量子随机数产生器,其安全性可以得到保障。但如果不小心采用了恶意第三方制造的器件,可能会发生随机数泄漏。


    新的成果确保即使是使用不信任第三方的器件,也可以产生真随机数并且不会泄漏,从而确保通信安全。


    以往通常有两类获取随机数的途径:基于软件算法实现或基于经典热噪声实现。


    软件算法实现的随机数是利用算法根据输入的随机数种子给出均匀分布的输出。然而,对于确定的输入,固定的算法将给出确定的输出序列,从这个角度上来说,这类随机数本质上是确定性的,并不真正随机。


    基于经典热噪声的随机数芯片读取当前物理环境中的噪声,并据此获得随机数。这类装置相对于基于软件算法的实现,由于环境中的变量更多,因此更难预测。然而在牛顿力学的框架下,即使影响随机数产生的变量非常多,但在每个变量的初始状态确定后,整个系统的运行状态及输出在原理上是可以预测的,因此这一类装置也是基于确定性的过程,只是某种更难预测的伪随机数(pseudo random number)。


    量子力学的发现从根本上改变了这一局面,因为其基本物理过程具有经典物理中所不具有的内禀随机性,从而可以制造出真正的随机数(true random number)产生器。


    量子力学这种内禀的概率特性,从量子力学理论发展的初期就一直深深困扰着爱因斯坦、薛定谔和温伯格等重要物理学家。


    640?wx_fmt=jpeg

    △ 基于量子纠缠的量子随机数产生示意图

    爱因斯坦坚信“上帝是不会掷骰子的” (God does not play dice),他认为一定存在着一个更高的确定性理论,量子力学只是该理论的近似,而量子力学的内禀随机性则只是因为我们不了解这种理论而带来的误解。


    爱因斯坦和薛定谔等人提出了量子纠缠的概念,试图用量子纠缠这种奇怪的量子状态来论证量子力学基础的不完备和量子随机性的荒谬。而以玻尔为首的哥本哈根学派则捍卫量子随机性,认为量子力学的基础是完备的。


    两个学派进行了长达30年的争论,但在当时,两种观念没能给出在实验上可以加以严格区分的精确预言,所有的争论都局限于哲学层面。


    直到1964年,美国物理学家贝尔发现通过对量子纠缠进行关联测量,量子力学和定域确定性理论会对测量结果有着不同的预言。利用这个特性即可开展贝尔实验检验,从而判定量子力学的基础是否完备和量子随机性是否存在。


    贝尔的理论提出之后的几十年中,世界各国的众多科研小组进行了大量的实验,量子力学和量子随机性经受住了相关的实验检验。然而到目前为止,尚有两个漏洞需要关闭,即自由选择漏洞(freedom-of-choice loophole)和塌缩的定域性漏洞(collapse locality loophole)。


    潘建伟小组长期从事量子力学基础检验,针对这两个漏洞,他们分别利用观察者自主选择和遥远星体发光产生的随机数,于今年分别实验实现了超高损耗下和有观察者参与的贝尔实验检验,文章先后发表在《物理评论快报》[Phys. Rev. Lett. 120,140405 (2018)]、[Phys. Rev. Lett. 21,080404 (2018)]和《自然》杂志[Nature 557, 212 (2018)]杂志上,为最终实现无漏洞贝尔实验检验奠定坚实的科学和技术基础。


    640?wx_fmt=jpeg


    重要而有趣的是,由于贝尔实验与量子内禀随机性存在着深刻的内在联系,贝尔实验的检验可以从根本上排除定域确定性理论,从而实现不依赖于器件的量子随机数,即器件无关量子随机数。


    这类随机数发生器被认为是安全性最高的随机数产生装置,即使采用恶意第三方制造的组件,或者窃听者拥有计算能力最强的量子计算机,也无法预测或获知它所产生的随机数。


    因此目前国际上纷纷开展这种随机数产生器的研制工作,美国国家标准局(NIST)正计划利用器件无关的量子随机数产生器建立新一代的随机数国家标准。


    实现器件无关的量子随机数产生器在实验上具有极高的技术挑战:整套随机数产生装置需要以极高的效率进行纠缠光子的产生、传输、调制、探测;同时,不同组件间需要设置合适的空间距离以满足类空间隔要求,才能以最高的安全性保证任何窃听者不能通过内部通信伪造贝尔不等式测试的结果。


    潘建伟、张强研究组在此前系列贝尔实验中发展的技术基础上,经过三年多的努力发展了高性能纠缠光源,首先优化了纠缠光子收集、传输、调制等效率,并采用中科院上海微系统所开发的高效率超导单光子探测器件,实现了高性能纠缠光源的高效探测([Phys. Rev. Lett. 120,010503 (2018)])。


    然后通过设计快速调制并进行合适的空间分隔设计,满足了器件无关的量子随机数产生装置所需的类空间隔要求。最终,在世界上首次实现了器件无关的量子随机数产生器。


    640?wx_fmt=jpeg

    △ 器件无关量子随机数实验装置

    该工作及后续工作将为密码学和数值模拟以及需要随机性输入的各个领域提供真正可靠的随机性来源,同时由于可信任的随机数源是现实条件下量子通信安全性的关键环节,器件无关随机数的实验实现也进一步确保了现实条件下量子通信的安全性。


    未来,中国科大团队将建设高速稳定的器件无关量子随机数产生装置,通过提供基于量子纠缠内禀随机性的、高安全性的随机数,争取形成新一代的国家随机数标准。


    该研究工作得到了中科院、科技部、国家自然科学基金委、教育部和安徽省的支持。


    未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。


    未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)云脑研究计划,构建互联网(城市)云脑技术和企业图谱,为提升企业,行业与城市的智能水平服务。

      如果您对实验室的研究感兴趣,欢迎加入未来智能实验室线上平台。扫描以下二维码或点击本文左下角“阅读原文”

    640?wx_fmt=jpeg

    展开全文
  • 量子通信有助于我们提高通信的安全性和效率,并加深我们对量子物理学的理解。...我们回顾了量子通信技术的背景和现状,重点介绍了量子密钥分配,量子随机数生成以及一个相对热门的话题:设备独立协议。
  • 本文中主要包含有三个领域的知识点:随机数的应用、量子计算模拟产生随机数与基于pytest框架的单元测试与覆盖率测试,这里先简单分别介绍一下背景知识。 随机数的应用 在上一篇介绍量子态模拟采样的算法中,我们就...

    技术背景

    本文中主要包含有三个领域的知识点:随机数的应用、量子计算模拟产生随机数与基于pytest框架的单元测试与覆盖率测试,这里先简单分别介绍一下背景知识。

    随机数的应用

    在上一篇介绍量子态模拟采样的算法中,我们就使用到了随机数,随机数在各种蒙特卡洛方法与数值计算中,扮演着非常重要的角色。在金融领域,随机数则是在加密算法中扮演重要角色,其风险在于,如果随机数可被预测,那么恶意用户就可以利用这一特点,破解对称加密甚至是非对称加密的算法(非对称加密如RSA算法的私钥的挑选其实也有可能使用到随机数)。在python代码中,可以通过调用random库或者numpy.random库进行随机数的生成,仅需要通过如下的代码即可实现:

    import random
    random_number = random.random() # 产生[0,1)之间的均匀随机数
    import numpy as np
    random_array = random.randn(10) # 产生10个随机数并存储到np格式的一维数组中

    这些库所产生的随机数,往往被认为是不安全的随机数,其主要特点是通过随机数生成算法,结合硬件的一些独有编号来产生一系列数串。但是随机数生成算法一般都是已知的,因此还是有一定的潜在风险。有一个python库函数叫secrets可以产生"安全随机数",其特点在于不仅利用了一些硬件系统独有信息,如ip和MAC等,主要还利用了系统熵源来生成随机数,增强了所产生随机数的不可预测性。关于secrets的使用方法, 可以参考其官方文档。但是,即使是这里所谓的安全随机数,也并不是真随机数,真随机数的产生不依赖于算法。

    量子计算与随机数

    前面写过一篇博客介绍两比特量子系统的模拟,读者可以从中了解到量子计算的一些基本原理与模拟实现。而另一篇关于量子线路模拟的博客,则介绍了关于开源量子计算框架ProjectQ的一些基本使用方法,在这篇文章中我们也会使用到。通过量子硬件,我们可以直接读取一系列的随机串,由于这些随机串是由硬件直接给出来的结果,不是通过算法来生成的,因此是完成不可预测的,被称为"真随机数"。

    基于pytest的python单元测试框架

    在使用python编程实现算法时,需要对算法函数或者类进行功能验证,这就需要写测试用例。python第三方库pytest提供了非常好的自动化测试的功能,配合html插件和覆盖率测试插件,还可以进行更多的测试以及更好的展示测试的结果。

    量子计算产生随机数

    量子计算是基于量子叠加与量子纠缠两种特性进行计算的方案,其结合量子算法的复杂性优势,在量子处理器上可以实现经典计算机无法在有效时间内完成的任务,一般称之为量子优越性。量子叠加是对量子比特重要特性的一个总结,如下图所示(图片来自于参考链接1),区分于经典比特,量子比特不仅可以表示01,还可以表示处于01之间的状态,比如0.50.2243等等。这些状态我们不能直接读取,在硬件上我们只能够读取到0或者1两种状态,这跟经典比特是一样的。区别在于,即使我们不改变量子比特的状态,不同的测试却会给出不同的结果,而0.5等中间状态,则表示的是出现0或者1状态分别的概率。


    由于量子测量会导致量子态的坍缩,也就是说,每一次测量之后,都需要重新制备量子态。而制备一个产生随机数的量子态,我们可以用如下所示的\(H\)量子门操作来实现。其具体的矩阵表述可以参考这篇博客,量子计算本质上就是用特殊的硬件方法,快速的实现大规模的矩阵运算,这也是其展现量子优势的来源。

    这里我们直接使用开源量子计算框架ProjectQ来实现这个门操作,就省去了自己去模拟实习的繁琐操作:
    # random_number.py
    from projectq import MainEngine
    from projectq.ops import H, Measure
    
    def random_number_generator():
        eng = MainEngine()
        qubit = eng.allocate_qubit()
        H | qubit
        eng.flush()
        Measure | qubit
        random_number = int(qubit)
        eng.flush(deallocate_qubits=True)
        return random_number
    
    if __name__ == '__main__':
        random_number = random_number_generator()
        print ('Random number generated by quantum simulator is: {}'.format(random_number))

    这里顺带的介绍下ProjectQ的一些操作实现的方法,在ProjectQ中将众多的量子比特作为寄存器来进行调用,这些寄存器都在给定的engine下赋予了各种操作,如量子门操作、打印线路、编译优化等。编程框架与实际的量子比特并不在架构上的同一个层次,每次传送指令都是通过eng.flush()打包进行编译优化之后,再传送到后端去逐一执行。因此如果要测量量子比特(在ProjectQ模拟器中必须只能全部执行测量操作,不能只测量其中的某一个部分),或者是读取某一个量子态的概率时,都需要先执行eng.flush()才行。接下来简单看下上述代码的执行效果:

    [dechin@dechin-manjaro pytest]$ python3 random_number.py 
    Random number generated by quantum simulator is: 1
    [dechin@dechin-manjaro pytest]$ python3 random_number.py 
    Random number generated by quantum simulator is: 1
    [dechin@dechin-manjaro pytest]$ python3 random_number.py 
    Random number generated by quantum simulator is: 0
    [dechin@dechin-manjaro pytest]$ python3 random_number.py 
    Random number generated by quantum simulator is: 0
    [dechin@dechin-manjaro pytest]$ python3 random_number.py 
    Random number generated by quantum simulator is: 1

    在这个案例中,每一次都会产生一个新的随机数0或者1,并且在量子比特使用结束之后,通过eng.flush(deallocate_qubits=True)可以初始化该寄存器,所有的振幅和测量结果都会被丢弃。

    注意!!!

    需要注意的是,由于这里我们是使用了模拟器来模拟量子计算机的行为,因此得到的随机数结果还是伪随机数。只有当这一串代码执行在量子处理器上时,我们才能得到真随机数。

    pytest测试

    安装pytest库

    首先我们可以通过pip来更新安装pytest:

    [dechin@dechin-manjaro pytest]$ python3 -m pip install -U pytest
    Collecting pytest
      Downloading pytest-6.2.2-py3-none-any.whl (280 kB)
         |████████████████████████████████| 280 kB 464 kB/s 
    Requirement already satisfied, skipping upgrade: iniconfig in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest) (1.1.1)
    Requirement already satisfied, skipping upgrade: pluggy<1.0.0a1,>=0.12 in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest) (0.13.1)
    Requirement already satisfied, skipping upgrade: attrs>=19.2.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest) (20.3.0)
    Requirement already satisfied, skipping upgrade: toml in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest) (0.10.1)
    Requirement already satisfied, skipping upgrade: packaging in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest) (20.4)
    Requirement already satisfied, skipping upgrade: py>=1.8.2 in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest) (1.9.0)
    Requirement already satisfied, skipping upgrade: pyparsing>=2.0.2 in /home/dechin/anaconda3/lib/python3.8/site-packages (from packaging->pytest) (2.4.7)
    Requirement already satisfied, skipping upgrade: six in /home/dechin/anaconda3/lib/python3.8/site-packages (from packaging->pytest) (1.15.0)
    Installing collected packages: pytest
      Attempting uninstall: pytest
        Found existing installation: pytest 6.2.1
        Uninstalling pytest-6.2.1:
          Successfully uninstalled pytest-6.2.1
    Successfully installed pytest-6.2.2

    安装完成后,可以通过如下指令来查看安装的pytest版本:

    [dechin@dechin-manjaro pytest]$ pytest --version
    pytest 6.2.2

    pytest单元测试用例撰写

    根据前面一个章节中的random_number.py文件,我们可以对照的写一个简单测试用例:

    # test_random_number.py
    import pytest
    from random_number import random_number_generator as rng
    
    def test_random_number_generator():
        for i in range(10):
            random_number = rng()
            assert random_number == 0 or random_number == 1

    该测试用例的含义为:导入rng函数之后,测试10次该函数的返回值,所返回的值必须是0或者1的随机数,如果输出了这两个数字以外的返回结果,那么说明这个随机数产生器功能上存在问题。基于pytest的测试代码可以通过如下的指令来运行:

    [dechin@dechin-20n2s01200 pytest]$ py.test
    =========================================== test session starts ============================================
    platform linux -- Python 3.8.5, pytest-6.2.2, py-1.9.0, pluggy-0.13.1
    rootdir: /home/dechin/projects/2021-python/pytest
    plugins: cov-2.11.1, metadata-1.11.0, html-3.1.1
    collected 1 item                                                                                           
    
    test_random_number.py .                                                                              [100%]
    
    ============================================= warnings summary =============================================
    ../../../anaconda3/lib/python3.8/site-packages/projectq/ops/_gates.py:118
      /home/dechin/anaconda3/lib/python3.8/site-packages/projectq/ops/_gates.py:118: PendingDeprecationWarning: the matrix subclass is not the recommended way to represent matrices or deal with linear algebra (see https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html). Please adjust your code to use regular ndarray.
        return np.matrix([[1, 0], [0, 1j]])
    
    ../../../anaconda3/lib/python3.8/site-packages/projectq/ops/_gates.py:133
      /home/dechin/anaconda3/lib/python3.8/site-packages/projectq/ops/_gates.py:133: PendingDeprecationWarning: the matrix subclass is not the recommended way to represent matrices or deal with linear algebra (see https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html). Please adjust your code to use regular ndarray.
        return np.matrix([[1, 0], [0, cmath.exp(1j * cmath.pi / 4)]])
    
    test_random_number.py: 40 warnings
      /home/dechin/anaconda3/lib/python3.8/site-packages/projectq/ops/_gates.py:69: PendingDeprecationWarning: the matrix subclass is not the recommended way to represent matrices or deal with linear algebra (see https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html). Please adjust your code to use regular ndarray.
        return 1. / cmath.sqrt(2.) * np.matrix([[1, 1], [1, -1]])
    
    -- Docs: https://docs.pytest.org/en/stable/warnings.html
    ====================================== 1 passed, 42 warnings in 0.50s ======================================

    从返回的结果来看,出现了1 passed而没有failed,说明所有的测试用例都已经执行成功了,但是这里存在不少的告警warnings信息。

    pytest初始化配置文件

    在上一节的测试结果中,我们发现有非常多的测试告警。假如我们确认这些告警信息可以忽略,那么我们可以通过在指令中配置忽略告警信息,或者直接使用这里介绍的pytest.ini来忽略相应的告警信息:

    # pytest.ini
    [pytest]
    filterwarnings = 
            ignore::PendingDeprecationWarning

    在当前目录下的ini配置文件中,我们添加了PendingDeprecationWarning作为忽略项,然后我们再回头看一下上述用例的测试结果:

    [dechin@dechin-manjaro pytest]$ py.test
    =========================================== test session starts ============================================
    platform linux -- Python 3.8.5, pytest-6.2.2, py-1.9.0, pluggy-0.13.1
    rootdir: /home/dechin/projects/2021-python/pytest, configfile: pytest.ini
    plugins: cov-2.11.1, metadata-1.11.0, html-3.1.1
    collected 1 item                                                                                           
    
    test_random_number.py .                                                                              [100%]
    
    ============================================ 1 passed in 0.50s =============================================

    这里返回的结果中就没有告警信息了。

    pytest生成html格式报告

    为了更好的展现测试的结果,这里我们需要先安装一个组件pytest-html

    [dechin@dechin-manjaro pytest]$ python3 -m pip install pytest-html
    Collecting pytest-html
      Downloading pytest_html-3.1.1-py3-none-any.whl (14 kB)
    Collecting pytest-metadata
      Downloading pytest_metadata-1.11.0-py2.py3-none-any.whl (10 kB)
    Requirement already satisfied: pytest!=6.0.0,>=5.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest-html) (6.2.1)
    Requirement already satisfied: attrs>=19.2.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest!=6.0.0,>=5.0->pytest-html) (20.3.0)
    Requirement already satisfied: py>=1.8.2 in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest!=6.0.0,>=5.0->pytest-html) (1.9.0)
    Requirement already satisfied: toml in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest!=6.0.0,>=5.0->pytest-html) (0.10.1)
    Requirement already satisfied: packaging in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest!=6.0.0,>=5.0->pytest-html) (20.4)
    Requirement already satisfied: pluggy<1.0.0a1,>=0.12 in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest!=6.0.0,>=5.0->pytest-html) (0.13.1)
    Requirement already satisfied: iniconfig in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest!=6.0.0,>=5.0->pytest-html) (1.1.1)
    Requirement already satisfied: six in /home/dechin/anaconda3/lib/python3.8/site-packages (from packaging->pytest!=6.0.0,>=5.0->pytest-html) (1.15.0)
    Requirement already satisfied: pyparsing>=2.0.2 in /home/dechin/anaconda3/lib/python3.8/site-packages (from packaging->pytest!=6.0.0,>=5.0->pytest-html) (2.4.7)
    Installing collected packages: pytest-metadata, pytest-html
    Successfully installed pytest-html-3.1.1 pytest-metadata-1.11.0

    安装成功后,执行如下指令,可以在当前目录下生成一个指定文件名的html文件,如下图所示,就比较全面且美观的展示了测试中的信息:

    [dechin@dechin-manjaro pytest]$ py.test --html=pytest_report.html
    =========================================== test session starts ============================================
    platform linux -- Python 3.8.5, pytest-6.2.2, py-1.9.0, pluggy-0.13.1
    rootdir: /home/dechin/projects/2021-python/pytest, configfile: pytest.ini
    plugins: cov-2.11.1, metadata-1.11.0, html-3.1.1
    collected 1 item                                                                                           
    
    test_random_number.py .                                                                              [100%]
    
    --------- generated html file: file:///home/dechin/projects/2021-python/pytest/pytest_report.html ----------
    ============================================ 1 passed in 0.51s =============================================


    不过在问题数量并不是很多的情况下,直接看命令行输出也是比较方便的。

    pytest覆盖率测试

    在一个python仓库中我们有可能有非常多的函数、类和文件等,为了保障结果的准确性,我们需要能够给出一个可信的覆盖率测试的结论,只有当覆盖率达到100%时,我们才能认为测试工作已经比较全面的考虑。当然,覆盖率100%的测试,其实并不能保障100%的不出问题,这就是另外的话题了。首先我们又需要补充安装一个组件pytest-cov

    [dechin@dechin-manjaro pytest]$ python3 -m pip install pytest-cov
    Collecting pytest-cov
      Downloading pytest_cov-2.11.1-py2.py3-none-any.whl (20 kB)
    Collecting coverage>=5.2.1
      Downloading coverage-5.4-cp38-cp38-manylinux2010_x86_64.whl (245 kB)
         |████████████████████████████████| 245 kB 15 kB/s 
    Requirement already satisfied: pytest>=4.6 in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest-cov) (6.2.1)
    Requirement already satisfied: attrs>=19.2.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest>=4.6->pytest-cov) (20.3.0)
    Requirement already satisfied: packaging in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest>=4.6->pytest-cov) (20.4)
    Requirement already satisfied: iniconfig in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest>=4.6->pytest-cov) (1.1.1)
    Requirement already satisfied: toml in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest>=4.6->pytest-cov) (0.10.1)
    Requirement already satisfied: py>=1.8.2 in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest>=4.6->pytest-cov) (1.9.0)
    Requirement already satisfied: pluggy<1.0.0a1,>=0.12 in /home/dechin/anaconda3/lib/python3.8/site-packages (from pytest>=4.6->pytest-cov) (0.13.1)
    Requirement already satisfied: six in /home/dechin/anaconda3/lib/python3.8/site-packages (from packaging->pytest>=4.6->pytest-cov) (1.15.0)
    Requirement already satisfied: pyparsing>=2.0.2 in /home/dechin/anaconda3/lib/python3.8/site-packages (from packaging->pytest>=4.6->pytest-cov) (2.4.7)
    Installing collected packages: coverage, pytest-cov
    Successfully installed coverage-5.4 pytest-cov-2.11.1

    然后在当前目录下执行以下指令:

    [dechin@dechin-manjaro pytest]$ py.test --cov=random_number ./ --cov-report=html
    =========================================== test session starts ============================================
    platform linux -- Python 3.8.5, pytest-6.2.1, py-1.9.0, pluggy-0.13.1
    rootdir: /home/dechin/projects/2021-python/pytest, configfile: pytest.ini
    plugins: cov-2.11.1, metadata-1.11.0, html-3.1.1
    collected 1 item                                                                                           
    
    test_random_number.py .                                                                              [100%]
    
    ----------- coverage: platform linux, python 3.8.5-final-0 -----------
    Coverage HTML written to dir htmlcov
    
    
    ============================================ 1 passed in 0.76s =============================================

    这里会提示我们去htmlcov目录下找测试报告,我们打开相应的index.html文件,效果如下:


    这里我们看到random_number.py文件的测试覆盖率为86%,我们可以点开链接查看剩下未覆盖的测试是什么内容:

    原来是main函数中的几行指令没有被测试到,一般我们在正式仓库中,是需要去掉main函数的,如果不是测试文件的话。

    使用flake8进行python编码规范检查

    首先我们还是使用pip来直接安装flake8组件,其集成了PEP8的python编码规范:

    [dechin@dechin-manjaro pytest]$ python3 -m pip install -U flake8
    Requirement already up-to-date: flake8 in /home/dechin/anaconda3/lib/python3.8/site-packages (3.8.4)
    Requirement already satisfied, skipping upgrade: mccabe<0.7.0,>=0.6.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from flake8) (0.6.1)
    Requirement already satisfied, skipping upgrade: pyflakes<2.3.0,>=2.2.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from flake8) (2.2.0)
    Requirement already satisfied, skipping upgrade: pycodestyle<2.7.0,>=2.6.0a1 in /home/dechin/anaconda3/lib/python3.8/site-packages (from flake8) (2.6.0)

    查看安装的flake8版本号:

    [dechin@dechin-manjaro pytest]$ flake8 --version
    3.8.4 (mccabe: 0.6.1, pycodestyle: 2.6.0, pyflakes: 2.2.0) CPython 3.8.5 on Linux

    使用方式较为简单,在当前目录下直接执行flake8即可,检查项会以当前路径为rootdir,递归的进行检索:

    [dechin@dechin-manjaro pytest]$ flake8
    ./test_random_number.py:2:1: F401 'pytest' imported but unused
    ./test_random_number.py:5:1: E302 expected 2 blank lines, found 1
    ./random_number.py:5:1: E302 expected 2 blank lines, found 1
    ./random_number.py:15:1: E305 expected 2 blank lines after class or function definition, found 1
    ./random_number.py:17:10: E211 whitespace before '('
    ./random_number.py:17:80: E501 line too long (87 > 79 characters)

    假如我们不想包含测试用例的风格检查,我们可以在命令行中屏蔽相关文件,或者创建配置文件,在配置文件中屏蔽相关文件,这里介绍后者的使用方法:

    # .flake8
    [flake8]
    exclude = ./test*

    这个配置的意义在于,将当前目录下,所有以test开头的文件,都将会忽略python编码规范的检查,配置文件支持通配符的表达形式。接下来看下最新的执行结果:

    [dechin@dechin-manjaro pytest]$ flake8
    ./random_number.py:5:1: E302 expected 2 blank lines, found 1
    ./random_number.py:15:1: E305 expected 2 blank lines after class or function definition, found 1
    ./random_number.py:17:10: E211 whitespace before '('
    ./random_number.py:17:80: E501 line too long (87 > 79 characters)

    我们发现前面出现的关于测试用例中的编码规范,已经不在这个列表的范围了。这个列表中的问题我们一般最好是处理下,但是如果遇到一些判断不需要处理的规范,则同样可以在配置文件中添加相应的规范ID,这里仅作示例使用,前面显示的编码规范问题后面都会改。如下所示就是两个忽略:

    # .flake8
    [flake8]
    exclude = ./test*
    ignore = E302, E305

    对应的执行结果如下所示:

    [dechin@dechin-manjaro pytest]$ flake8
    ./random_number.py:17:10: E211 whitespace before '('
    ./random_number.py:17:80: E501 line too long (87 > 79 characters)

    我们发现被忽略的问题已经没有显示了。flake8还有一个特点,是可以配置max-complexity,其采用的基本复杂性计算方法为McCabe度量法,可以参考这篇博客中的介绍内容,这里就不过多的赘述。为了更加美观简明的看到输出的结果,我们可以补充安装一个组件flake8-html

    [dechin@dechin-manjaro pytest]$ python3 -m pip install flake8-html
    Collecting flake8-html
      Downloading flake8_html-0.4.1-py2.py3-none-any.whl (13 kB)
    Requirement already satisfied: pygments>=2.2.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from flake8-html) (2.7.2)
    Requirement already satisfied: flake8>=3.3.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from flake8-html) (3.8.4)
    Requirement already satisfied: jinja2>=2.9.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from flake8-html) (2.11.2)
    Requirement already satisfied: importlib-metadata in /home/dechin/anaconda3/lib/python3.8/site-packages (from flake8-html) (2.0.0)
    Requirement already satisfied: pycodestyle<2.7.0,>=2.6.0a1 in /home/dechin/anaconda3/lib/python3.8/site-packages (from flake8>=3.3.0->flake8-html) (2.6.0)
    Requirement already satisfied: mccabe<0.7.0,>=0.6.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from flake8>=3.3.0->flake8-html) (0.6.1)
    Requirement already satisfied: pyflakes<2.3.0,>=2.2.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from flake8>=3.3.0->flake8-html) (2.2.0)
    Requirement already satisfied: MarkupSafe>=0.23 in /home/dechin/anaconda3/lib/python3.8/site-packages (from jinja2>=2.9.0->flake8-html) (1.1.1)
    Requirement already satisfied: zipp>=0.5 in /home/dechin/anaconda3/lib/python3.8/site-packages (from importlib-metadata->flake8-html) (3.4.0)
    Installing collected packages: flake8-html
    Successfully installed flake8-html-0.4.1

    使用方法如下:

    [dechin@dechin-20n2s01200 pytest]$ flake8 --format=html --htmldir=flake-report
    ./random_number.py has issues: medium: 4

    在当前目录执行后,相关的规范的issue就不会在命令行里面逐一显示,都在flake-report目录下的index.html中可以查看:


    我们可以点击进入相应文件的issue清单中去查看:

    可以点击每一个issue,展开内容中包含了issue所对应行的代码内容:

    经过一番修改之后,我们得到的flake8配置文件和源代码文件如下:
    # .flake8
    [flake8]
    exclude = ./test*
    ignore = W391
    # random_number.py
    from projectq import MainEngine
    from projectq.ops import H, Measure
    
    
    def random_number_generator():
        eng = MainEngine()
        qubit = eng.allocate_qubit()
        H | qubit
        eng.flush()
        Measure | qubit
        random_number = int(qubit)
        eng.flush(deallocate_qubits=True)
        return random_number
    
    
    if __name__ == '__main__':
        random_number = random_number_generator()
        print('Random number generated by quantum simulator is:\
                {}'.format(random_number))

    最终我们的目的是使得flake8执行的issue清零:

    [dechin@dechin-manjaro pytest]$ flake8 --format=html --htmldir=flake-report
    [dechin@dechin-manjaro pytest]$

    总结概要

    本文通过引入一个随机数生成器的案例,介绍了在量子计算中产生真随机数的方案,同时给出了量子计算模拟实现。借此机会也同时介绍了python的单元测试库pytest的一些常规和扩展使用方法,以及python的编码规范测试库flake8的基本使用方法,希望能够对大家有所启发以及帮助。

    版权声明

    本文首发链接为:https://www.cnblogs.com/dechinphy/p/random_number_test.html
    作者ID:DechinPhy
    更多原著文章请参考:https://www.cnblogs.com/dechinphy/

    参考链接

    1. https://cn.bing.com/images/search?view=detailV2&ccid=X1pIP1mm&id=0CF2CDDD1C700A051F3FEB4701669068CE05B9FA&thid=OIP.X1pIP1mmVKohO5UC1CvbuQHaED&mediaurl=https%3A%2F%2Fth.bing.com%2Fth%2Fid%2FR5f5a483f59a654aa213b9502d42bdbb9%3Frik%3D%2brkFzmiQZgFH6w%26riu%3Dhttp%3a%2f%2fwww.supernovapcrepair.co.uk%2fimages%2fquantum%2Bsuperposition.png%26ehk%3DEt3zyrD9NqYgaMFwpPb%2bcZAohbR0ERpeRfCEkgKy6i0%3d%26risl%3D%26pid%3DImgRaw&exph=199&expw=363&q=quantum+superposition&simid=608026555008484117&ck=E74E3E03947D89427ED1A5352402AADB&selectedIndex=3&FORM=IRPRST&ajaxhist=0
    展开全文
  • 2020年5月14日,三星和SK Telecom推出了全球首款Galaxy A Quantum量子随机数发生器(QRNG)智能手机。常规随机数生成器用于输入各种服务,例如支付平台。但是,...


    2020年5月14日,三星和SK Telecom推出了全球首款Galaxy A Quantum量子随机数发生器(QRNG)智能手机。

    常规随机数生成器用于输入各种服务,例如支付平台。但是,QRNG芯片是世界上最小的,尺寸仅为2.5 x 2.5毫米(如下图所示),它使用LED和CMOS图像传感器,其中LED负责发出“图像噪声”。

    三星的量子加密手机解决方案,是利用CMOS图像传感器捕获的光源散粒噪声产生随机序列,QRNG芯片可以通过测量光量子态得到的随机数来加密信息,从而提升密码系统安全的破解难度。量子随机数生成芯片一旦检测到故障,还能够自动恢复再次产生新的密码。

    据SK Telecom的开发人员称,今天没有技术可以破解这样的系统。这使Galaxy A Quantum成为市场上最安全的手机之一。而且从现在的技术来看,基本上不存在破译的可能。

    该智能手机配备了具有全高清分辨率的6.7英寸Super AMOLED Infinity-O显示屏和指纹读取器。后置摄像头由四个小型摄像头组成:一个64百万像素的主摄像头,一个12百万像素的超广角摄像头,一个五百万像素的微距相机和一个五百万像素的深度传感器。前面板上是一台32百万像素的相机。

    Galaxy A Quantum具有集成的Exynos 980处理器,该处理器运行带有一个UI 2.0的Android 10。智能手机具有8 GB的RAM和128 GB的磁盘。该设备还支持5G技术。

    这款手机采用了SKT IDQ S2Q000 QRNG芯片组,该芯片组由SK Telecom的瑞士子公司ID Quantique研发,它通过量子密码技术生成随机数,创建无法被预测的安全密钥,增强设备的安全性。

    量子随机数生成器 QRNG利用随机数生成,来加密互联网上传输的数据。


    2016年以来,ID Quantique和SK Telecom一直在合作开发面向电信和物联网市场的量子技术。

    去年,SK Telecom已经在其5G移动核心网络中使用了ID Quantique量子随机数发生器系统,提高用户身份验证的安全性。

    ID Quantique称,Guantis量子随机数发生器芯片可以嵌入任何智能手机,确保对敏感信息进行可靠的身份验证和加密,它将为手机行业带来安全保护的新高度。这确实是量子技术的首个大众市场应用。

    我已经猜到了有人会赶紧抢一台回来拆了研究一下芯片了。

    Galaxy A Quantum将于5月22日在韩国上市,售价为649,000韩元(530美元,约合人民币3743元)。手机机身有三个颜色供消费者挑选,分别为黑色、蓝色和银色。

    据悉,三星和SK 电讯通力合作,已在通信领域创造了多项纪录。2019年9月,两家公司宣布正在共同研发全球首款5G+8K电视。

    -------------

    黑莓手机表示:等着,我也搞一台。

    2018年的旧闻,现在不知道怎么样了。

    多喝热水

    上期:默克尔证实俄情报部门入侵其电子邮件

    展开全文
  • 真伪随机数SecureRandom

    2021-05-31 19:24:03
    实际上真正的真随机数只能通过量子力学原理来获取,而我们想要的是一个不可预测的安全的随机数,SecureRandom就是用来创建安全的随机数的: SecureRandom sr = new SecureRandom(); System.out.println(sr.nextInt...
  • 无论是网上购物还是从ATM取现,凡是涉及到数字交易,安全和隐私都是重中之重,而保护它们的,就是加密技术。...利用光子集成电路技术,研究人员造出了又小又快的量子随机数生成器。图中心的小芯片包含了...
  • 具有冷战美学的量子随机数生成器。
  • 量子密钥分配(QKD)系统具有量子随机数生成器,用于保护量子通信环境中的数据流。 从密码分析的角度来看,有必要使用统计概率,随机过程和时间序列来评估量子密码序列中平稳随机性的质量。 ..在本文中,提出了一种...
  • 量子密钥分配(QKD)系统具有量子随机数生成器,用于保护量子通信环境中的数据流。 从密码分析的角度来看,有必要使用统计概率,随机过程和时间序列来评估量子密码序列中平稳随机性的质量。 ..在本文中,提出了一种...
  • 解密随机数生成器(1)——真随机数生成器     从小就一直很好奇,MP3播放器的随机播放功能是如何实现的,今天读到...无论是玩扑克牌麻将骰子时的点数,玩LOL时的玩家匹配,还是高大上的量子物理,核聚变,都...
  • 我直接整个随机数宁自己量子力学去吧 随机数的生成 首先,要说明的是通常情况下我们看到的函数生成的随机数不是真的随机数而是通过一定的“魔术算法”生成的伪随机数 那么为啥嘞? rand与srand 函数功能: int rand...
  • 解密随机数生成器

    万次阅读 2015-05-29 14:53:51
    从小就一直很好奇,MP3播放器的随机...无论是玩扑克牌麻将骰子时的点数,玩LOL时的玩家匹配,还是高大上的量子物理,核聚变,都无一例外地随机数有关,在混沌理论中,这个世界本身就是一系列随机过程的产物——好吧,
  • 随机数生成器

    千次阅读 2018-11-05 12:20:51
    上帝到底掷不掷骰子?... 一直被人们视为他否定量子力学的证据(虽然事实好像并非如此),而量子力学把随机性看做物理世界的内在性质。 很多人持有这样的观点,即宇宙中所发生的一切从宇宙诞生的那一刻(...
  • 用于node.js的量子随机数生成器。 从ANU量子随机数生成器获取N个长度的随机数 请参阅此处以获取更多信息: : 安装 npm i qranode 用法: const qranode = require ( 'qranode' ) // promise qranode ( 'uint8' ,...
  • 随机数种子 + 伪随机数...真正的随机数必须使用专门的设备,比如热噪信号、量子力学的效应、放射性元素的衰退辐射,或使用无法预测的现象,譬如用户按键盘的位置与速度、用户运动鼠标的路径坐标等来产生。 来自 <...
  • 首先,「真随机」也有不同的含义, 真正的真随机目测只有量子力学了……一般的所谓真随机不是指这个,而是指统计意义上的随机,也就是具备不确定性,可以被安全的用于金融等领域,下面的真随机也均指这个。...
  • 量子随机数发生器 这是一个Android应用,可生成几乎完全随机的数字。 访问。 Play商店说明: 使用量子真正随机数的工具包括:---彩票游戏选择,包括LottoMax,Euro Millions,Lotto 6/49等。-使用字母,数字和数字...
  • 首先,「真随机」也有不同的含义,若想要「真正的真随机」目测只能靠量子力学了。一般的所谓真随机不是指这个,而是指统计意义上的随机,也就是具备不确定性,可以被安全的用于金融等领域,下面说的也是这种。答案是...

空空如也

空空如也

1 2 3 4 5 6
收藏数 112
精华内容 44
关键字:

量子随机数