×

量子随机数发生器之切尔诺贝利骰子

消耗积分:2 | 格式:zip | 大小:0.00 MB | 2023-06-19

分享资料个

描述

介绍

描述

切尔诺贝利骰子是一种量子随机数发生器 [0],它使用来自弱放射性样本的核衰变作为熵源。你可以在这里查看GitHub仓库和所有构建所需的文件:

https://github.com/nategri/chernobyl_dice

它由四个主要部分组成:

  • Arduino Nano 微控制器
  • 盖革计数器
  • 六个铀玻璃弹珠
  • 数码管显示

使用以下算法将盖革计数器事件(“点击”)转换为随机位:

1. 在环形缓冲区中,对于每个毫秒记录,要么是 0 要么是 1,具体取决于盖革事件是否发生

2. 使用 von Neumann 的方法 [0] 对这个 0 支配的流进行初始去偏

3. 通过将上一步中生成的位与自设备开机以来经过的 4 微秒间隔的 mod2 进行异或运算,进一步消除偏置

在每次盖革事件中,铀玻璃样品都会被一系列紫外线 LED 照亮,从而发出明亮的绿色荧光。这与样品的放射性无关,但它看起来确实很酷

手术

 

该设备具有三种操作模式,可通过旋转开关进行选择:

时钟模式

显示当前时间,盖革板未通电。可以通过打开和关闭拨动开关来设置时间(“16”拨动增加小时,“8”拨动增加 10 分钟,“4”拨动增加 1 分钟,“1”拨动重置秒).

串流模式

重复生成由切换指定大小的随机数(如果未设置切换,则为 0-255 的随机字节)。在此模式下生成的数字通过 USB 通过串行传输。此模式还有一个“turbo”设置以方便统计测试,可以通过按住按钮启用。当启用“turbo”时,显示屏上的 LED 会指示位生成,并且 Geiger“咔嗒”声将无声。

骰子模式

在骰子模式下,随机数生成是通过按钮启动的,要生成的随机数的大小由切换开关的总和设置(未设置开关,设备将生成 0-255 范围内的随机字节)。按一次生成号码,再按一次清除显示。要生成的号码的大小以闪烁的数字显示。

统计表现

需要进一步测试以确认结果的一致性,但目前切尔诺贝利骰子能够生成 1.5+ 兆位的文件,该文件通过了 NIST 统计测试套件 [1] 的 Python 实现这意味着切尔诺贝利骰子可能是一个非常公平的骰子。

SUMMARY
-------
monobit_test  0.279698915238  PASS
frequency_within_block_test 0.404035783453  PASS
runs_test 0.0688862287393 PASS
longest_run_ones_in_a_block_test  0.959135200804  PASS
binary_matrix_rank_test 0.532456847429  PASS
dft_test  0.000155432528185 FAIL
non_overlapping_template_matching_test  0.999998184707  PASS
overlapping_template_matching_test  0.55898054206 PASS
maurers_universal_test  0.224223569722  PASS
linear_complexity_test  0.672504584189  PASS
serial_test 0.424389760139  PASS
approximate_entropy_test  0.425255814114  PASS
cumulative_sums_test  0.348500456103  PASS
random_excursion_test 0.0753308212732 PASS
random_excursion_variant_test 0.207160448911  PASS


SUMMARY
-------
monobit_test  0.105735760191  PASS
frequency_within_block_test 0.436487225319  PASS
runs_test 0.648059641506  PASS
longest_run_ones_in_a_block_test  0.184787158208  PASS
binary_matrix_rank_test 0.310400523277  PASS
dft_test  0.156504142574  PASS
non_overlapping_template_matching_test  1.00000015958 PASS
overlapping_template_matching_test  0.629208901365  PASS
maurers_universal_test  0.938296605093  PASS
linear_complexity_test  0.0880093291441 PASS
serial_test 0.131826155057  PASS
approximate_entropy_test  0.137234909215  PASS
cumulative_sums_test  0.112328349057  PASS
random_excursion_test 0.17207234069 PASS
random_excursion_variant_test 0.299605480729  PASS

设备生成的两个212667字节随机二进制序列(“rand.binary.1”和“rand.binary.2”)的统计测试套件结果。专家注意:第一个序列的最后两个测试生成消息:“J 太小(J=181 < 500),结果不可靠”,因此对于该数据集,这些测试可能会被忽略。

该目录statistical_testing包含一些用于从设备评估和收集数据的实用程序,包括示例随机二进制数据文件rand.binary.1rand.binary.2.

CAD制图

可以通过以下 URL 查看和下载该设备的 Fusion 360 CAD 绘图:

https://a360.co/2OeFT1n

感谢以下 GrabCAD 用户提供的模型:

概述和零件清单

警告:这些说明和资源未经完善,并且未经测试。这是一个面向高级制造商的项目,您应该充分期待在构建自己的切尔诺贝利骰子时进行一些冒险!也就是说:如果您遇到麻烦,请给我发消息,我会尽力帮助您并改进说明。

 
poYBAGOSm1-AdguyAAQfmpbReic573.png
 

以下是组装所需步骤的粗略概述:

1. 从 GitHub 存储库中的文件打印或制作以下自定义部件

  • 外壳(使用 3D 打印机或 3D 打印服务)
  • 逻辑、数码显示和控制面板定制 PCB(使用 OSHPark 等威廉希尔官方网站 板制造服务)
  • 不锈钢前面板(使用 OSHCut 等服务)
  • 亚克力背板(使用 Sculpeo 等服务)

2. 订购其他组件(参见零件列表中的 URL)

3. 将黄铜支架嵌入外壳(这就是前后面板和定制 PCB 的安装方式)

提示

  • 在将它们压入之前,应将一滴氰基丙烯酸酯(强力胶)放入外壳的支架孔中(十字头螺丝刀的尖端可以很好地完成这项任务)
  • 如果顶部的一些孔从打印机出来时有点变形,那么可以通过在孔中拧动较大的十字头螺丝刀直到孔的顶部足够宽来轻松加宽它们。

4. 使用构建照片作为指南组装定制 PCB 和“exixe”数码管驱动板

提示

  • 用于数码管驱动器 PCB 的 Nixie Display Board 上的母头可以仅使用四个长母头条组装(例如,无需单独连接 16 个 7 针母头---见照片)
  • “CS”8 针公头目前是紧密配合的,因此您可能需要使用尖嘴钳将针脚推过威廉希尔官方网站 板
  • 对于控制面板 PCB,您可以暂时将拨动开关安装在前面板,然后将 PCB 压在开关背面的顶部以确保对齐良好——然后您可以将整个板和拨动组件从前面板焊接它,甚至将它焊接到位然后将其拉下
  • 提供文件“nixie_holder.stl”作为放置数码管的有用位置,同时将它们焊接到“exixe”驱动板上

5. 将丙烯酸背板和面板安装 USB 电缆连接到外壳后部

6. 在外壳内安装定制 PCB 并进行布线(参见布线示意图和构建照片)

7. 部分拆卸旋转开关以将其连接到“锁板”(lock_plate.stl)

8. 对不锈钢前面板进行任何必要的整理

提示

  • 一些用于拨动和开关的安装孔可能需要加宽(为此使用圆形文件)
  • 激光切割零件的表面光洁度可以通过使用 ~300 目砂纸打磨来改善(首先在背面测试)

9. 在前面板上安装开关和 PCB 组件、带支架的 LED 组件、旋转开关和锁板组件以及按钮

小费

  • 将 LED 连接到灯座时,滴一滴氰基丙烯酸酯(强力胶)以防止 LED 从灯座前部掉落

10. 进行控制面板的接线(见接线示意图和搭建照片)

11. 将八个数码显示驱动板安装到数码显示板的母头中

12. 将控制面板连接到逻辑板

13. 将前面板安装到外壳上,注意确保旋转开关锁板上的孔与放射性样品架前部的左上角对齐

支架尺寸指南

pYYBAGOSm2WAfCmgAACEGYctujQ871.png
 

注意:对于较大的内部支架距离(例如数码显示器支架),可以堆叠两个支架以获得所需的距离。

接线图

 
poYBAGOSm2qAF5PmAAGrH39oW1M565.jpg
 

如何连接切尔诺贝利骰子的内部接线。

构建照片

插入支架的外壳

 
poYBAGOSm3KANMLlAADtrwotA-k097.jpg
 

您可以忽略外壳左侧的白色面包板。这些有助于项目的早期迭代,并且不需要组装。

逻辑板安装

 
poYBAGOSm4uAOJqcAAD3jZ3IAqs303.jpg
 

请注意,UV LED 阵列的电线在逻辑板下方。

数码管接线

 
poYBAGOSm5GABCurAAD5Gkefzp8462.jpg
 

数码显示板安装和逻辑板接线

 
poYBAGOSm5eAaBXvAAEWoUUik9M706.jpg
 

盖革板安装

 
pYYBAGOSm5qAI1NjAAElFV5y6CU237.jpg
 

注意:您必须将 JMP2 跳线拉到 Geiger 板的中心附近(这会关闭板的内置扬声器——我们希望这些咔嗒声是可选的,而是由固件控制)。单击此处查看大图。

铀样品架下半部细节

 
poYBAGOSm6GAKIfcAAD29ac-0RE773.jpg
 

UV LED 和压电扬声器使用氰基丙烯酸酯(强力胶)粘合剂粘合安装到位。当安装上半部分时,铀玻璃弹珠将被机械固定到位。单击此处查看大图。

铀样品架下半安装

 
pYYBAGOSm6aAYHdpAAEnPNPIHHo573.jpg
 

中间支座用螺母固定在底部。单击此处查看大图。

铀样品架上半安装

 
pYYBAGOhWT2ALiJXAAEYn6bfLSk389.jpg
 

单击此处查看大图。

控制面板威廉希尔官方网站 板有线

 
poYBAGOhWUGAN4znAAELmyYruwA459.jpg
 

单击此处查看大图。

控制面板威廉希尔官方网站 板接线详图

 
pYYBAGOhWVGAN58UAADUmQUm4Uo777.jpg
 

 

致谢

非常感谢 Emily Velasco ( @MLE_Online ) 对不锈钢表面打磨的建议,以及对这个项目的热情。

参考

[0] “量子随机数发生器。” M. Herrero-Collantes 和 JC Garcia-Escartin。https://arxiv.org/abs/1604.03304

[1] “用于加密应用程序的随机和伪随机数生成器的统计测试套件”。https://csrc.nist.gov/publications/detail/sp/800-22/rev-1a/final


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'量子随机数发生器之切尔诺贝利骰子',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);