跳转到主要内容
博客

用于加密安全随机数生成的 PyTorch 框架 torchcsprng 现已可用

作者: 2020年8月24日2024年11月16日暂无评论

现代密码学的关键组成部分之一是伪随机数生成器。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, and David E. Shaw, D. E. 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 生成器的另一个优点是它们在 CPU 上是并行的,这与默认的 PyTorch CPU 生成器不同。

入门

开始使用 torchcsprng 的最简单方法是访问 GitHub 页面,在那里您可以找到安装和构建说明,以及更多的操作示例。

祝好,

PyTorch 团队

[1] 现代密码学导论:原理与协议 (Chapman & Hall/CRC 密码学与网络安全系列) 作者:Jonathan Katz 和 Yehuda Lindell