从 linux 访问自定义硬件加速器:用于 openVPN/openSSL

Accessing a custom hardware accelerator from linux: for use with openVPN/openSSL

我正在尝试让 openVPN 使用我为其加密操作设计的自定义硬件加速器(为了简单起见,假设我只是想让 openVPN 使用我拥有的自定义 AES 加速器在 FPGA 上设计)。我将在 Xilinx ZYNQ 平台 运行 linux 上使用 openVPN,并且我将对 FPGA 逻辑进行内存映射访问。

我已经编写并验证了用于多种加密操作(RSA、SHA256、AES)的加速器,但只能设法通过裸机编程接口使用它们。

我正在寻找一种方法让 openVPN 使用这些加速器,但我一无所获,需要一些指导。

我知道 openVPN 使用 openSSL 库,可以通过使用它们的 "engines" 配置为使用 /dev/Crypto (cryptodev) API,但我仍然不知道是什么为了在我的加速器块和 openSSL 之间建立连接,确实需要这样做。几乎没有 CryptoDev 的文档,我什至很难理解它是如何与 openSSL 一起工作的。

我知道我需要编写某种内核 module/device 驱动程序(或者可能只是将我的加速器的内存地址 mmap() 到内核 space?)但这只允许 linux 到 "see" 我的加速器。

请帮助我理解我需要做什么才能让 openSSL(以及 openVPN)能够使用我的硬件加速器。这可以是高层次的,但我只需要大致知道需要采取哪些步骤,这样我就可以开始了。

编辑:如果您对此一无所知,请不要让 Xilinx ZYNQ 吓到您,假设我制作了自己的硬件加速器,它神奇地映射到物理内存中。现在我只需要将它集成到 openSSL/cryptodev.

谢谢!

您需要做的第一件事是为您的加速器安装内核 space 驱动程序。接下来,您需要通过在加速器 (struct crypto_alg)

中提供支持的 AES 密码列表来注册支持的密码(使用 linux/crypto.h 中的 crypto_register_algs 函数)

您可以在此处找到更多信息:

接下来使用 cryptoDev 模块允许用户space 访问通过 cryptoAPI 注册的自定义加密驱动程序(加速器)。

重新编译 OpenSSL 以通过 -DHAVE_CRYPTODEV 使用 CryptoDev。使用“-engine cryptodev”选项使用 cryptodev 引擎