65.9K
CodeProject 正在变化。 阅读更多。
Home

如何使用 DE10-Nano 套件对远程设备进行身份验证

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2017年10月24日

CPOL

12分钟阅读

viewsIcon

10285

本教程将向您展示如何将数字签名算法 (DSA) 和密钥协商协议 (KAP) 集成到 DE10-Nano 板上的 Cyclone® V SoC FPGA 器件的可编程 FPGA 逻辑和 HPS 中。

合作撰写:SecureRF

概述

英特尔® Cyclone® V SoC FPGA 器件非常适合用于基站和物联网网关,这些设备必须以安全的方式与大量传感器和执行器进行交互。安全地交互意味着两个通信设备相互信任,并且它们之间传递的命令、消息和其他数据未被修改或泄露给窃听通信的未经授权的方。如果您参与了通过网络进行通信的产品的开发,本教程将向您介绍易于实施的对策,并帮助保护您的产品免受众所周知的安全漏洞的侵害。

以安全的方式与设备通信需要使用计算密集型的加密操作。SoC FPGA 器件之所以适合此应用,是因为它们能够直接在 FPGA 的可编程逻辑中执行最繁重的操作,从而加快结果并为硬件处理器系统 (HPS) 卸载任务,使其可以执行其他任务。

本教程将向您展示如何将数字签名算法 (DSA) 和密钥协商协议 (KAP) 集成到 DE10-Nano 板上的 Cyclone® V SoC FPGA 器件的可编程 FPGA 逻辑和 HPS 中。由于 DSA 和 KAP 例程也必须存在于 DE10-Nano 希望与之通信的任何设备(传感器、执行器和其他资源受限的设备)上,因此加密技术经过专门设计,可在低资源平台(包括由 8 位微控制器供电的平台)上运行。本教程将向您展示如何:

  1. 下载包含设计文件的 SD 卡镜像,并准备好 DE10-Nano 板以供使用。
  2. 从命令行运行签名验证和共享密钥计算。
  3. 比较软件与硬件进行共享密钥计算的速度。
  4. 执行远程设备身份验证(例如,连接到物联网网关的传感器)。
  5. 学习如何将示例代码改编到您自己的设计中。

级别:具有基本 Windows 或 Linux* PC 技能的初学者。

必备组件

  1. Terasic DE10-Nano 套件
    Terasic DE10-Nano 开发板基于英特尔® Cyclone V SoC FPGA,为创客、物联网开发者和教育工作者提供了一个可重构的硬件设计平台。您可以在此处购买该套件。
  2. MicroSD 卡 (4 GB)
  3. MicroSD 卡适配器(例如 USB 转 MicroSD)
  4. USB Type A 转 Mini-B 线缆
  5. 以太网线
  6. 安装了终端模拟器程序的 Windows* 或 Linux* PC,例如
  7. 已安装虚拟 COM 端口驱动程序,以支持从 (FTDI) 启用 USB UART

初始设置

步骤 1:下载 SecureRF DE10-Nano SD 卡镜像文件。

步骤 1.a:在您的工作站 PC 上,打开互联网浏览器并导航至以下 URL:https://www.securerf.com/developer/intel-de10-nano/

步骤 1.b:点击“下载 SD 卡镜像”按钮。

步骤 1.c:解压 SD 卡镜像文件(.img)。

步骤 2:将镜像文件写入 SD 卡

步骤 2.a:如果您使用的是 Windows PC,建议使用 Win32 Disk Imager 0.9.5 应用程序将镜像写入 SD 卡:https://sourceforge.net/projects/win32diskimager/files/Archive/

如果您使用的是 Linux PC,建议使用的命令是“dd”,例如:

dd if=srf_de10-nano.img of=/dev/sdb bs=1m(假设您的 SD 卡已挂载为 sdb)

您可以在此处找到其他 SD 卡写入说明:http://www.ev3dev.org/docs/tutorials/writing-sd-card-image-linux-command-line/

步骤 3:准备好板卡以供使用

步骤 3.a:将 SD 卡插入 microSD 卡插槽,并确保 FPGA 配置模式开关设置为 ON OFF ON OFF ON ON,如图 1 所示,以便 DE10-Nano 板从 microSD 卡启动。

Photo of device, MSEL DIP switches (SW10)

图 1:MSEL DIP 开关 (SW10)

步骤 3.b:将 USB Type A 转 USB Mini-B 线缆插入 DE10-Nano UART 连接器,如图 2 所示。

Photo of device, UART connector (J4)

图 2:UART 连接器 (J4)

步骤 3.c:在您的主机 PC 上,确定 PC 分配的 COM 端口。(注意:在确定此分配时,无需使用外部 +5V 电源为板卡供电。)如果您在 PC 上运行 Windows* OS,可以通过打开设备管理器来确定 COM 端口分配,如图 3 所示。

Screenshot of device manager showing UART COM port assignment

图 3:设备管理器显示 UART COM 端口分配“COM21”(您的 PC 上的分配可能不同)

步骤 3.d:在您的主机 PC 上,以 115,200 bps 的速度使用分配的 COM 端口启动 PuTTY、uCon 或其他终端模拟器程序。有关 PuTTY 中的示例,请参见图 4。

Screenshot, PuTTY configuration screen

图 4:PuTTY 配置屏幕

步骤 3.e:通过 DC 电源适配器为板卡供电 +5V。您应该会在串行终端模拟器中看到 Linux 启动序列,然后是登录屏幕,如图 5 所示。

Screenshot, Linux login screen

图 5:Linux 登录屏幕

步骤 3.f:登录到板卡

用户名:root
密码:root

演示和示例代码

SecureRF DE10-Nano SD 卡镜像包含 SecureRF 的 WalnutDSA 签名验证引擎的 FPGA IP 实现,以及 SecureRF 的 Ironwood 密钥协商协议 (KAP) 的共享密钥计算引擎。该镜像还包含 ARM® CPU 的软件,用于管理两个硬件引擎并协助加密密钥的传输。

SD 卡包含三个独立的应用程序,有助于演示签名算法和密钥协商协议的操作。

通过终端会话进行基本操作

提供了两个应用程序

  • walnut_dsa:使用 WalnutDSA 硬件引擎执行一次签名验证。在此演示中,通常会从远程端点发送到 DE10-Nano 的签名已硬编码到应用程序中。
  • Ironwood:使用 Ironwood 密钥协商协议引擎执行一次共享密钥计算。

两个应用程序都报告运行时间和结果。

步骤 4.a:在您的终端会话中,键入以下命令导航到主目录:

cd /home

键入以下命令启动签名验证应用程序:

./walnut_dsa

Screenshot, Signature Verification

图 6:签名验证

在此示例中,FPGA 硬件花费了 60µs 来执行一次签名验证。

步骤 4.b:键入以下命令,使用 Ironwood 引擎执行一次共享密钥计算:

./ironwood

Screenshot, Shared Secret Calculation

图 7:共享密钥计算

在此示例中,FPGA 硬件花费了 980µs 来执行一次共享密钥计算。

比较软件与硬件进行共享密钥计算的速度

在所有公钥加密系统中,计算共享密钥是在进行密钥交换操作以建立设备身份验证过程中最耗时的步骤。

此演示比较了在 ARM Cortex-A9 处理器上运行的软件与在 FPGA 逻辑中运行的硬件计算共享密钥的速度。演示由一个 Node.js* 应用程序提供服务,该应用程序会同时启动纯软件进程和纯硬件进程。两个进程并发运行。Node.js 应用程序还提供您在浏览器中查看的网页。

步骤 5.a:通过网络线缆将 DE10-Nano 板连接到您的 LAN。在终端窗口中键入以下命令以确定板卡的 IP 地址,如图 8 所示:

ifconfig

screenshot,  Run ifconfig to determine IP address

图 8:运行 ifconfig 以确定 IP 地址

步骤 5.b:启动 Node.js 应用程序

键入以下命令,将目录更改为 image painter demo 文件夹:

cd /home/root/Image_Painter_Demo

键入以下命令启动应用程序:

node server.js"

您应该会收到“HTTP server listening on port 8888”消息,如下所示:

Screenshot, Server.js message

图 9:Server.js 消息

步骤 5.c:例如,如果步骤 5.a 中发现的板卡 IP 地址是 10.100.3.31,请在您的网络浏览器中输入 http://10.100.3.31:8888 作为 URL。

在终端屏幕中,您应该会看到“Websocket connection received”消息。

Screenshot, websocket connection message

图 10:Websocket 连接消息

步骤 5.d:您应该会在浏览器中看到如图 11 所示的网页。

Screenshot, runtime comparison demo

图 11:运行时比较演示

步骤 5.e:点击“开始”以运行演示。

当两侧(硬件侧和软件侧)完成共享密钥计算后,它会向浏览器发送一条消息,以绘制下一个锁形图像的水平线像素。挂锁图像存储在“Image_Painter_Demo”下的“public/images”文件夹中;当您启动 server.js 应用程序时,Node.js 会从图像文件夹中读取挂锁图像,并将其内容传输到在浏览器中运行的 JavaScript 程序。

两侧都被编程为尽快计算共享密钥;因此,挂锁图像的绘制速率与共享密钥例程的执行速度直接成正比。您将看到,即使软件侧的时钟速度是硬件侧的 16 倍,硬件侧在执行加密计算时也更快。

步骤 5.f:要停止 Node.js 进程运行,请按 Ctrl+C,然后继续进行下一个演示。

身份验证远程设备

此演示最能代表 DE10-Nano 板(或 Intel Cyclone® V SoC)在实际应用中的使用方式。该演示包含软件,可使 DE10-Nano 板验证通过 TCP 套接字连接的远程设备。远程设备在运行于 Windows 或 Linux PC 上的 Java 应用程序中进行模拟。DE10-Nano 板充当基站或网关设备,而远程设备充当低资源物联网产品——可能是一个传感器或执行器。

Screenshot, block diagram of two IoT endpoints

图 12:两个物联网端点的框图

步骤 6.a:在您的 Windows 或 Linux PC 上安装“物联网远程设备模拟器应用程序”。

Windows PC 可在此处获取 .msi 安装程序(请以 Windows 管理员身份执行安装):
https://www.securerf.com/wp-content/uploads/2017/07/IoT_emulator-1.0.zip

如何以管理员身份安装 .msi 文件?

步骤 1:在开始菜单或开始屏幕搜索框中键入 CMD,然后同时按下 Ctrl+Shift+Enter 键,以提升权限打开命令提示符。

步骤 2:在命令提示符中,执行以下命令以管理员身份运行 MSI 文件:
msiexec /a <MSI 文件路径> 例如,如果您的 IoT Emulator MSI 文件位于 Downloads 文件夹中,则需要同时输入文件路径和 MSI 文件名。例如:
msiexec /a C:\Users\Bob\Downloads\IoT_emulator-1.0.msi

对于 Linux PC,可在此处获取 Debian 安装程序:
https://www.securerf.com/wp-content/uploads/2017/07/IoT-Emulator-1.0-deb.zip

步骤 6.b:在 DE10-Nano 板上启动 Ironwood 身份验证应用程序。

在 DE10-Nano 终端窗口中,导航到 Ironwood debug 文件夹。键入:

cd /home/root/TCP_Sockets_Hardware_Demo/Ironwood/Debug

键入以下命令启动身份验证应用程序:

./Ironwood 8025

步骤 6.c:在 PC 上启动物联网远程设备模拟器应用程序(IoT_emulator)。

在 Windows PC 上,找到 IoT_emulator 应用程序并运行它。安装期间,会在 SecureRF 文件夹中创建一个快捷方式,如图 13 所示。

Screenshot, location of IoT_emulator application shortcut

图 13:IoT_emulator 应用程序快捷方式的位置

步骤 6.d:在“Connect to IP”字段中输入 DE10-Nano 板的 IP 地址和端口 8025(例如,“10.100.3.201:8025”)。

步骤 6.e:点击“Create Shared Secret”按钮。

模拟器应用程序中的日志窗口应显示身份验证协议序列,如下所示。

Screenshot of remote IoT device showing an authentication session

图 14:显示身份验证会话的远程物联网设备屏幕截图

远程物联网模拟器用户界面允许您在五种不同的 Ironwood 公钥/私钥对之间进行选择。如果您使用一个密钥对运行演示,然后选择另一个密钥对并重新运行演示,您应该会注意到计算出的共享密钥是不同的。在此演示中,Ironwood 公钥和私钥已硬编码到 SD 卡上的演示 C 程序中。

当 DE10-Nano 板被指示对远程设备进行身份验证时,板卡首先读取远程设备的签名公钥,然后使用 FPGA 逻辑中的 WalnutDSA 验证引擎验证签名。如果签名验证正确,则板卡和远程设备完成密钥交换操作,其中远程设备证明其能够计算与板卡相同的共享密钥(即,它拥有一个真实但唯一的私钥)。

Screenshot of DE10-Nano terminal showing an authentication session

图 15:显示身份验证会话的 DE10-Nano 终端屏幕截图

在成功完成密钥交换后,DE10-Nano 板和远程设备可以使用它们的共享密钥来加密和解密在它们之间传递的数据。SD 卡上提供了示例代码,展示了如何使用 AES 加密来实现这一点。

请注意,共享密钥本身不用于加密/解密数据,因为这可能会将信息泄露给窃听通信的攻击者。相反,共享密钥与一个 nonce(一次性使用的随机数)结合,然后进行哈希处理以生成加密/解密会话密钥。下次运行会话时,会使用不同的 nonce,从而产生不同的数据,从而缓解重放攻击(攻击者记录两个设备在身份验证过程中交换的数据,然后回放该数据以尝试欺骗其中一个设备)。

在生产环境中实际部署英特尔 FPGA 上的 Ironwood IP 核时,Ironwood 私钥将包含在 FPGA 逻辑内的 ROM 中,该 ROM 从芯片外部无法读取和修改。

将示例代码改编到您的设计中

用于执行签名验证和密钥交换的 C 代码可供开发人员改编到他们自己的产品中。虽然此演示使用 TCP 套接字,但 SecureRF 加密原语完全与通信无关。

对于 DE10-Nano 端,实现远程设备身份验证(演示 3)的 C 源代码包含在 SD 卡的文件夹中:/home/root/TCP_Sockets_Hardware_Demo。主演示代码位于 ironwood_dma.c 中。

要重用代码,请将对 TCP 套接字函数的调用替换为实现您的产品使用的实际通信协议的代码(Bluetooth*、ZigBee、Z-Wave、6LowPAN、Thread、WiFi、Cellular、LoRaWAN 等)。每次 DE10-Nano 需要与远程设备通信时,您可能会调用身份验证会话。

Screenshot, location of demo sources

图 16:可用于您自己设计的演示源文件位置

对于远程端(通常是受限的物联网传感器、执行器或其他低资源设备),SecureRF 提供了物联网嵌入式 SDK(http://info.securerf.com/iot-embedded-sdk-development-kit),该 SDK 在软件中实现了与 DE10-Nano 上相同的方法。代码库适用于各种 8、16 和 32 位微控制器。将物联网嵌入式 SDK 集成到远程产品中,将使其能够对 DE10-Nano 进行身份验证,并被 DE10-Nano 进行身份验证。

有关 SecureRF 低资源、抗量子安全方法的背景信息,请访问 www.securerf.com/technology/cryptography/

© . All rights reserved.