现代密码学的关键组成部分之一是伪随机数生成器。Katz和Lindell表示:“使用设计不当或不合适的随机数生成器通常会使好的密码系统容易受到攻击。必须格外小心,使用专为密码使用而设计的随机数生成器,而不是使用“通用”随机数生成器,这对于某些应用程序可能是好的,但对于那些要求密码安全的应用程序却不是。” [1]此外,由于大多数伪随机数生成器的顺序性质,它们无法很好地扩展到大规模并行高性能计算。其他人不满足密码安全属性。
torchcsprng是PyTorch C ++ / CUDA扩展,可为PyTorch提供加密安全的伪随机数生成器。
TORCHCSPRNG 概述
从历史上看,PyTorch只有两种伪随机数生成器实现:用于CPU的Mersenne Twister和用于CUDA的Nvidia的cuRAND Philox。尽管具有良好的性能,但它们都不适合于加密应用程序。在过去的几个月中,PyTorch团队开发了torchcsprng扩展API。基于PyTorch调度机制和操作员注册,它允许用户扩展c10 :: GeneratorImpl并实现自己的自定义伪随机数生成器。
torchcsprng使用其生成器之一在CPU上生成随机的128位密钥,然后使用CUDA在CPU或GPU上以CTR模式运行AES128 。然后,这会生成一个随机的128位状态,并应用转换函数将其映射到目标张量值。这种方法基于并行随机数:容易做到1,2,3(John K. Salmon,Mark A. Moraes,Ron O. Dror和David E. Shaw,DE Shaw Research)。它使Torchcsprng在CPU和CUDA上同时具有加密安全性和并行性。
由于torchcsprng是PyTorch扩展,因此可以在提供PyTorch的平台上使用(在未来几个月中将提供对Windows-CUDA的支持)。
使用TORCHCSPRNG
torchcsprng API的使用非常简单,并且与PyTorch随机基础结构完全兼容:
步骤1:通过二进制分发安装
Anaconda:
conda install torchcsprng -c pytorch
pip:
pip install torchcsprng
第2步:照常导入软件包,添加csprng
import torch import torchcsprng as csprng
步骤3:从/ dev / urandom创建加密安全的伪随机数生成器:
urandom_gen = csprng.create_random_device_generator('/dev/urandom')
并简单地将其与现有的PyTorch方法一起使用:
torch.randn(10, device='cpu', generator=urandom_gen)
步骤4:使用Cuda进行测试
Torchcsprng生成器的优点之一是它们可以与CPU和CUDA张量一起使用:
torch.randn(10, device='cuda', generator=urandom_gen)
torchcsprng生成器的另一个优点是,它们与默认的PyTorch CPU生成器不同,它们在CPU上是并行的。
torchcsprng入门的最简单方法是访问GitHub页面,可以在其中找到安装和构建说明以及更多使用方法示例
接下来,给大家介绍一下租用GPU做实验的方法,我们是在智星云租用的GPU,使用体验很好。具体大家可以参考:智星云官网: http://www.ai-galaxy.cn/,淘宝店:https://shop36573300.taobao.com/公众号: 智星AI