开发者分享|基于 AMD Versal™ 自适应 SoC 的椭圆曲线数字签名验证的问题分析

科技   2024-08-20 19:00   北京  


本文作者:AMD 工程师 Peter Zhou


目前在 AMD Versal™ 自适应 SoC 上运行椭圆曲线数字签名验证的 Example 可参考以下源码:

https://github.com/Xilinx/embeddedsw/blob/master/lib/sw_services/xilsecure/examples/xilsecure_versal_ecdsa_server_example.c


有时候,为了检验 Versal 上椭圆曲线算法的正确性,可能会用 Openssl 来验证 Versal上椭圆曲线的数字签名。但是由于方法不得当,会导致验证不通过,或者走入一些误区,为此,我们写下这篇文章帮助大家避开这些问题。


这个 Example 的流程如下:

首先,根据私钥来生成一个 Key;然后再用私钥和临时私钥对一段 Hash 值进行数字签名,生成的数字签名由 R 和 S 这两个部分来组成;验证 Key,并用 Hash 值和 Key 来验证之前的数字签名;最后 Example 在 Versal 上验证成功。


下面是在 Openssl 下进行椭圆曲线数字签名验证的流程:


解决这个问题需要注意大小端,Openssl 用的是大端,而 Versal 上用的是小端。另外还要注意验证程序的流程问题。


下面 Example 用 Openssl 创建一个签名,并用上文所说的

xilsecure_versal_ecdsa_server_example.c 来验证这个签名,这个 Example 用到了一个 Makefile 内容如下:


用 Openssl 指令生成 Privkey,创建了一个文件 abc.txt,文件中包含 abc 三个字母。然后用 Openssl 指令对 abc.txt 文件进行签名,并生成 Hash。


执行一个 Python 脚本,该脚本用于将上述生成的 Hash 转化成 C 语言数组,以便于 Copy 到 xilsecure_versal_ecdsa_server_example.c 来验证这个签名。


上述 Python 脚本内容如下:


需要注意的是,每次运行这个 Makefile 的时候,生成的 Key 和签名可能都不一样,这是因为是 Openssl 随机生成的。


另外,

xilsecure_versal_ecdsa_server_example.c 中没有展示整个签名的过程,openssl dgst指令(1) hashing “abc”, (2) performing ECC math on the resulting hash。而 Ecdsa example 仅仅展示了第二步,所以您需要用 Xilsecure SHA3 的函数去执行第一步,即 Hashing “abc”。



AMD 自适应 SOC 及 FPGA 中文技术支持社区

欢迎您访问本社区论坛:

[https://support.xilinx.com/s/?language=zh_CN]

我们希望能帮助您快速找到所需内容。本网站是AMD 自适应 SoC 及 FPGA 支持资源登录页面,其中包括我们的知识库、社区论坛以及指向更多内容的链接。搜索并探索您所选主题的内容,然后登录以查看更多支持选项。



XILINX开发者社区
Xilinx开发者社区源于社区,服务社区,是面向广大开发者与产学研合作的平台,以技术为驱动,创建共享知识社区。(注: Xilinx is now a part of AMD)
 最新文章