# LIPQUAP **Repository Path**: sdust66/lipquap ## Basic Information - **Project Name**: LIPQUAP - **Description**: LIPQUAP: Lightweight Post-Quantum Cryptography Authentication Protocol 轻量级抗量子认证协议 - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2024-12-17 - **Last Updated**: 2025-01-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LIPQUAP ## 简介 LIPQUAP协议为使用PQC算法设计的身份认证+内容认证协议,该协议的身份认证协议在开发板上运行时,相较于SM9协议有明显的性能优势。 ## 协议架构 ![协议架构](picture/architecture.jpg) ## 运行所需硬件与软件 运行本协议需要准备如下硬件设备和配套的软件 1. 支持OP-TEE的开发板两块(在Rock Pi 4B+开发板上测试通过) 2. 符合《智能IC卡及智能密码钥匙密码应用接口规范》的密码卡两块及配套的中间件 3. 路由器一台 4. 运行Linux的PC一台 ## 如何编译 编译源码需要在Linux系统中搭建交叉编译环境,安装必须的库之后编译运行,分为如下步骤 1. 安装交叉编译环境 2. 交叉编译optee_os 3. 交叉编译optee_client 4. 交叉编译liboqs 5. 安装libzmq 6. 交叉编译源码 ### 1. 安装交叉编译环境 **方法一** 1. 安装Ubuntu20.04操作系统 2. 从`https://developer.arm.com/downloads/-/gnu-a`下载交叉编译工具链,也可以使用提供的gcc9.2版(后续以gcc 9.2为例) 3. 将`gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz`和`gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz`放置于`\home\`下 4. 使用`tar -vxf gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz`和`tar -vxf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz`解压 5. 在环境变量中添加解压后的目录 **方法二** `sudo apt install gcc-aarch64-linux-gnu pkg-config-aarch64-linux-gnu g++-aarch64-linux-gnu gcc-arm-linux-gnueabihf pkg-config-arm-linux-gnueabihf` ### 2. 交叉编译optee_os 1. 安装git`sudo apt install git` 2. 使用`git clone https://github.com/OP-TEE/optee_os.git` 3. 安装make等工具`sudo apt install make python3-pyelftools device-tree-compiler` 4. 使用下列命令交叉编译optee_os ```bash make \ CFG_ARM64_core=y \ CFG_TEE_BENCHMARK=n \ CFG_TEE_CORE_LOG_LEVEL=3 \ CROSS_COMPILE=aarch64-linux-gnu- \ CROSS_COMPILE_core=aarch64-linux-gnu- \ CROSS_COMPILE_ta_arm32=arm-linux-gnueabihf- \ CROSS_COMPILE_ta_arm64=aarch64-linux-gnu- \ DEBUG=1 \ O=out/arm \ PLATFORM=vexpress-qemu_armv8a ``` ### 3. 交叉编译optee_client 1. 使用下列命令安装libuuid ```bash wget https://jaist.dl.sourceforge.net/project/libuuid/libuuid-1.0.3.tar.gz tar -xvf libuuid-1.0.3.tar.gz cd libuuid-1.0.3 ./configure CC=aarch64-linux-gnu-gcc --host=aarch64-linux-gnu make sudo make install ``` 2. 添加环境变量`export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/` 3. 使用`make CROSS_COMPILE=aarch64-linux-gnu-`命令交叉编译optee_client ### 4. 交叉编译liboqs 1. 安装编译所需库`sudo apt install astyle cmake gcc ninja-build libssl-dev python3-pytest python3-pytest-xdist unzip xsltproc doxygen graphviz python3-yaml valgrind` 2. 获取liboqs源码 ```bash wget https://github.com/open-quantum-safe/liboqs/archive/refs/tags/0.9.0.zip unzip 0.9.0.zip mv liboqs-0.9.0 liboqs && cd liboqs ``` 3. 编译liboqs源码 ```bash mkdir build && cd build cmake -GNinja -DCMAKE_TOOLCHAIN_FILE=../.CMake/toolchain_arm64.cmake -DOQS_USE_OPENSSL=OFF .. && ninja ``` ### 5. 安装libzmq 1. 下载源码`wget https://github.com/zeromq/libzmq/releases/download/v4.3.5/zeromq-4.3.5.tar.gz` 2. 配置编译文件`./configure --host=aarch64-linux CC=aarch64-linux-gnu-gcc AR=aarch64-linux-gnu-ar CXX=aarch64-linux-gnu-g++ -prefix=/opt/libzmq` 3. 安装`make && sudo make install` ### 6. 交叉编译源码 `make clean && make` ## 如何使用 1. 将编译后后`host`文件夹中的`node1`文件,放于开发板`/home/`目录下 2. 将密码卡配套的中间件命名为`libskf.so`,放于`node1`文件同目录下 3. 将`ta`文件夹中的`19038f64-871d-4773-b1f5-878697745eee.ta`文件和`ta2`文件夹中的`13538f64-871d-4773-b1f5-878697745eee.ta`文件放于开发板`/lib/optee_armtz` 4. 将密码卡接入开发板的USB接口 5. 在两块开发板上执行1-4步后,将两块开发板使用网线接入路由器提供的局域网中 6. 在两块开发板上使用`sudo ./node1`运行程序,按照提示输入对方节点IP等,查看协议运行效果