tf.random.normal密码学安全吗?

问题描述

我想使用加密安全的库从正态分布中采样,然后将结果添加到TensorFlow张量。我听说python内置的random库不是一个选择。

tf.random.normal的密码安全吗?如果不是,知道有什么用吗?

解决方法

不。它们和tf.random中的其他方法都使用Philox和ThreeFry算法,尽管它们基于加密算法,但它们并没有主张加密安全性。正如介绍这些算法的论文所述:

任何加密块密码的修改将使其不适合其在安全方面的预期用途,但是PRNG设计在保持[统计质量]的同时以加密强度为代价进行交换是合理的。

(Salmon等人,“并行随机数:像1,2,3一样简单”,2011年。)

,

正如彼得所言//GET: File public JsonResult FileIndex() { List<byte> fileList = new List<byte>(); using (FileDBEntities db = new FileDBEntities()) { fileList = db.tblFiles.ToList(); foreach(var itemFile in fileList) { fileList.add(File.ReadAllBytes(itemFile)); } } return new JsonResult { Data = fileList,JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } 不是CSPRNG。因此,我将回答您“您知道有什么可行的方法吗?”问题,而不是标题中一直否定的问题。

Python的tensorflow.random.normal模块可以提供对操作系统CSPRNG的访问,例如getrandom(2)在Linux和* BSD下。这是通过SystemRandom类发生的,该类又使用os.urandom调用来访问主机的random系统调用(或Windows下的CryptGenRandom)。

要将其中的高斯变量转化为getrandom,您需要执行以下操作:

tensorflow

为您提供形状为import random import tensorflow as tf rng = random.SystemRandom() tf.convert_to_tensor([rng.gauss(0,1) for _ in range(10)]) 的{​​{1}}。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...