python os.urandom 安全_python SystemRandom/os.urandom总是有足够的熵来获得良好的加密
我有一个密码生成器:
import random, string
def gen_pass():
foo = random.SystemRandom()
length = 64
chars = string.letters + string.digits
return ''.join(foo.choice(chars) for _ in xrange(length))
根据文档,SystemRandom使用os.urandom,它使用/ dev / urandom来抛出随机的cryto位。在Linux中,您可以从/ dev / urandom或/ dev / random获取随机位,它们都使用内核可以获得的任何熵。可以使用tail / proc / sys / kernel / random / entropy_avail检查可用熵的数量,这将返回一个数字,如:129.更多的熵可用数量。 / dev / urandom和/ dev / random之间的区别是,如果熵_avail足够高(如至少60),/ dev / random将只会吐出位,并且/ dev / urandom将总是吐出位。该文档说/ dev / urandom对加密是有好处的,你只需要使用/ dev / random来执行ssl证书等。
我的问题是,gen_pass是否会永久地进行强密码级密码?如果我尽可能快地调用这个功能,我会停止在某个时候得到强的cryto位,因为熵池耗尽?
这个问题也可能是为什么/ dev / urandom总是产生强大的cryto位,而不在乎熵_avail?
有可能/ dev / urandom被设计为使其带宽被你猜测的周期数量与熵量相关联,但这是猜测,我找不到答案。
这也是我的第一个stackoverflow问题,请批评我。我很担心,当知道答案的人可能知道背景时,我给了很多背景。
谢谢
更新
在/ dev / urandom读取时,我写了一些代码来查看熵池:
import subprocess
import time
from pygooglechart import Chart
from pygooglechart import SimpleLineChart
from pygooglechart import Axis
def check_entropy():
arg = ['cat', '/proc/sys/kernel/random/entropy_avail']
ps = subprocess.Popen(arg,stdout=subprocess.PIPE)
return int(ps.communicate()[0])
def run(number_of_tests,resolution,entropy = []):
i = 0
while i < number_of_tests:
time.sleep(resolution)
entropy += [check_entropy()]
i += 1
graph(entropy,int(number_of_tests*resolution))
def graph(entropy,rng):
max_y = 200
chart = SimpleLineChart(600, 375, y_range=[0, max_y])
chart.add_data(entropy)
chart.set_colours(['0000FF'])
left_axis = range(0, max_y + 1, 32)
left_axis[0] = 'entropy'
chart.set_axis_labels(Axis.LEFT, left_axis)
chart.set_axis_labels(Axis.BOTTOM,['time in second']+get_x_axis(rng))
chart.download('line-stripes.png')
def get_x_axis(rng):
global modnum
if len(filter(lambda x:x%modnum == 0,range(rng + 1)[1:])) > 10:
modnum += 1
return get_x_axis(rng)
return filter(lambda x:x%modnum == 0,range(rng + 1)[1:])
modnum = 1
run(500,.1)
如果运行这个并运行:
while 1 > 0:
gen_pass()
那么我很可靠地得到一个如下图形:
在运行cat / dev / urandom时,图形显示smiler,并且cat / dev / random丢弃为空,并保持低速非常快(这也只读出每3秒左右的字节)
更新
如果我运行相同的测试,但有六个gen_pass()实例,我得到这个:
所以看起来好像是有这样的情况,我有足够的熵。我应该测量密码的生成率,并确保其实际上被限制,因为如果不是那样的事情可能会发生。
更新
这表示,一旦池只有128位,urandom就会停止拉熵。这与上述结果非常一致,意味着在这些测试中,我经常生产垃圾密码。
我以前的假设是,如果熵值足够高(高于64位),那么/ dev / urnadom输出是好的。这不是这样,/ dev / urandom被设计为为/ dev / random留下额外的熵,以防需要它。
现在我需要找出一个SystemRandom调用需要的真正随机位数。
python os.urandom 安全_python SystemRandom/os.urandom总是有足够的熵来获得良好的加密相关推荐
- python os.urandom 安全_python SystemRandom/os.urandom总是有足够的熵来实现好的cryp吗
我有一个密码生成器:import random, string def gen_pass(): foo = random.SystemRandom() length = 64 chars = stri ...
- python中sys用法_python中os和sys模块的区别与常用方法总结
python 的 python中os和sys模块的区别与常用方法总结 前言 本文主要介绍了关于python中os和sys模块区别与常用方法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看 ...
- python查看模块功能_Python模块Os系统功能
Os模块简介系统功能 python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关. OS模块使用实例 执行dos命令 Python os.sys ...
- python os.walk模块_Python之os.walk和os.path.walk
一.os.walk() 函数声明:os.walk(top,topdown=True,οnerrοr=None) (1)参数top表示需要遍历的顶级目录的路径. (2)参数topdown的默认值是&qu ...
- python os模块详细_python之os模块详解
importos#os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径#print(os.getcwd()) # G:\python二期\一月\day18 #os.curdi ...
- python的os模块使用_Python之os模块的常见用法
转自:http://zhpfbk.blog.51cto.com/4757027/1561926 在Python的标准库os模块中包含普遍的操作系统功能 os 模块引入的方法是: import os 以 ...
- python里os什么模块_python中os模块的主要方法
print(os.getcwd()) # 获取当前的工作目录 print(os.chdir(r'D:\pycharm')) #改变当前脚本目录 print(os.curdir) #返回当前目录 pri ...
- python tabula 使用方法_Python中os.walk()的使用方法
os.walk()主要用来扫描某个指定目录下所包含的子目录和文件.这篇文章将通过几个简单的例子来说明python中os.walk()的使用方法. 假设我们的test文件夹有如下的目录结构: 我们首先用 ...
- python中os什么意思_python里os是什么意思?
os是operation system(操作系统)的缩写,这个库就是对操作系统的封装.os模块提供了多数操作系统的功能接口函数. 常用的os模块命令: 1.os.name--name顾名思义就是'名字 ...
最新文章
- 文本文件 java,java 写文本文件
- UVa 11388 - GCD LCM
- 微软亚太区资料科学总监:R 语言是 VS 生态第一顺位
- mysql8以上的连接配置
- php 数据类型 map,es6中Set和Map的对比介绍(附代码)
- ip=request.servervariables(Remote_Addr)获得ip显示::1
- nginx websocket 代理
- RGB图像任意角度旋转
- JUC与JVM并发编程学习笔记02
- 波束形成matlab程序,mVDR波束形成matlab程序
- easyUI设置表格中的背景色
- 机器学习入门好文,强烈推荐
- poi-ooxml-lite:5.0.0 与 poi-ooxml-schemas:4.1.1 正式环境冲突
- Docker:架构分解
- 【Codeforces Round #185 (Div. 2) D】Cats Transport
- 可用的公开 RTSP/ RTMP 在线视频流资源地址(亲测可行)
- 在EXCEL中通过VBA实现批量读取文件夹内的文件名称
- 论文阅读:U-Net++: Redesigning Skip Connections to Exploit Multiscale Features in Image Segmentation
- 中职计算机应用专业核心素养的,基于核心素养的中职计算机应用专业“课程革命”...
- 愿我们在路上聪明绝顶但不绝顶
热门文章
- 前端技术分享:算法入门之“二分算法”
- python使用环境_使用python之环境管理
- 2.Java之路(Java语言开发环境搭建)
- VTK:点定位器可视化用法实战
- boost::mpl::minus相关的测试程序
- boost::cuthill_mckee_ordering用法的测试程序
- boost::geometry::strategy::distance::cross_track用法的测试程序
- boost::fusion::push_front用法的测试程序
- boost::reference_wrapper用法实例
- Boost:BOOST_ASSERT用法的测试程序