首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传感器生成的真随机数

传感器生成的真随机数
EN

Cryptography用户
提问于 2013-05-15 12:51:39
回答 2查看 3.9K关注 0票数 7

使用传感器原始数据是生成真正随机数的好方法吗?我的意思是使用IPhone的陀螺仪/加速度计的原始输出作为产生一个真正随机数数组的基础。

EN

回答 2

Cryptography用户

回答已采纳

发布于 2013-05-15 15:26:52

Tl博士:理论上说,是的,如果你仔细做的话。但是在实践中,最好使用SecRandomCopyBytes()。

先把它分解一下,我们进入一个定义。您正在讨论的“真”随机数是那些真正不可预测的随机数,其中前面的数据与下一个数据完全没有关系。这种不可预测性的度量被随机数群人称为“熵”。

你是在问“物理传感器是熵的好来源吗?”答案是“他们可以”,但这在很大程度上取决于他们在测量什么以及他们取样的频率。

如果手机躺在你的桌子上,iPhone中的加速度计是一个糟糕的熵源,因为如果我测量一串值,它们都是相等的,那么下一个值也是相等的。它也不是一个很好的来源,如果你只是阅读,而业主正在进行有节奏的活动,如步行。步行过程中加速度计的运动是如此的可预测,以至于智能计步器(如fitbit)有一个加速度剖面,可以区分走路和仅仅摇动它。

这是由抽样率驱动的。如果你以每秒60次的速度阅读样本,那么这个步行轮廓曲线将会非常明显。但是,如果你每十分钟只取样一次,即使是行军乐队成员也不太可能在这段时间内得到可预测的值。当然,随着时间的推移,采样很少产生比快速采样更少的可用熵。

如果您可以使用加速度计识别事件,例如“步行步”或运动反转,则可以使用高精度定时器或CPU周期计数器来测量事件之间的时间。重复的人体运动仅在一定程度上是精确的,例如十分之一毫秒。任何用更细粒度的时钟进行的测量,例如纳秒,都会受到它们之间的随机生物差异的影响。如果在两个加速度计事件之间采用纳秒计时(或CPU周期计数),并且只保留倒数8位,它们都将是不可预测的。

大多数安全的随机数生成器都在机器上连续运行“熵收集服务”。它的工作是随着时间的推移从多个来源获取熵。使用高精度时钟或CPU周期计数器测量用户按键计时和鼠标移动,在给定时间运行的进程数,分配的内存字节总数,网络连接时间,硬盘查找时间,所有这些工程师“希望”不可预测的事情,每一次只测量几位,这些比特被混合并存储在熵池中。池中的值通常通过将它们输入密码算法(例如流密码或分组密码)来“拉伸”,从而从较小的输入产生更大的不可预测的数字序列。我相信微软的CryptoAPI会从池中提取出类似于512位的数据,并将它们作为种子来填充随机字节的缓冲区。每当请求随机数时,都会立即从此缓冲区返回数据。缓冲区容纳不超过128 kb的随机字节,然后随机数生成器返回到池中以获得更多的种子位并重新填充缓冲区。

如果你仔细地识别一个静止的传感器,而不是在它不动的时候采集产生的比特,并且在事件之间使用非常精确的时间,而不是直接采样事件期间产生的原始值,那么加速度计将是池的一个很好的贡献者。

票数 7
EN

Cryptography用户

发布于 2013-05-16 05:33:43

不是的。我不建议您使用这种方式在iPhone上生成加密强度随机数。这听起来既可爱又聪明,但这可能是个坏主意。

相反,在iPhone上,您应该使用iOS的内置方法:SecRandomCopyBytes()。为了安全起见,这种方法是精心设计的。

其他移动平台还提供了生成密码强度随机数的好方法。。使用那些平台支持的方法;不要尝试使用自己的方法。通常最好避免自己滚动。:如果您自己尝试这样做的话,很容易无意中引入一些安全问题。密码随机数生成器是臭名昭著的狡猾,和过去的系统由于随机数生成不好而被打破了。。不要冒险--使用现有的、经过良好审查的现有平台提供的方法。

票数 3
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/8358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档