Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions Applications/pqc_trustflow_rocm/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
*.exe
*.dll
*.o
*.obj
*.pdb
*.pyc
__pycache__/
*.demo_secret
*receiver_sk*
*ss_sender*
*ss_receiver*
outputs/
logs/
*.zip
*.tar
*.tar.gz
*.bak*
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Unsupported Function Development: ROCm PQC API

This folder is prepared for the competition item:

```text
(1) Development of currently unsupported functions
```

## What This Adds

The contribution adds a ROCm/HIP post-quantum cryptography backend and an upper-layer file workflow:

- `kem_api/`: Kyber/Aigis-enc batch KEM backend with file-level keygen, encaps, and decaps API paths.
- `sig_api/`: ML-DSA/Aigis-sig batch signature backend with file-level sign and verify API paths.
- `trustflow_frontend/`: a multi-file secure packaging frontend that calls the ROCm KEM/SIG backends.
- `docs/`: quick-start and API notes for reproducing the workflow.

## Key API Examples

```bash
./kyber768_amd --api-kem-keygen --batch 128 --pk-out kem_pk.bin --sk-out receiver_sk.demo_secret
./kyber768_amd --api-kem-encaps --batch 128 --pk-in kem_pk.bin --ct-out kem_ct.bin --ss-out ss_sender.demo_secret
./kyber768_amd --api-kem-decaps --batch 128 --sk-in receiver_sk.demo_secret --ct-in kem_ct.bin --ss-out ss_receiver.demo_secret
```

```bash
./mldsa65_amd --api-sig-sign --batch 128 --msg-in manifest.payload.json --pk-out sig_pk.bin --sk-out sig_sk.demo_secret --sig-out manifest.sig
./mldsa65_amd --api-sig-verify --batch 128 --msg-in manifest.payload.json --pk-in sig_pk.bin --sig-in manifest.sig
```

## Build And Smoke Tests

```bash
cd kem_api
bash build_hip.sh kyber768
bash run_kem_smoke_amd.sh
```

```bash
cd sig_api
bash build_sig_amd.sh
bash run_sig_policy_smoke.sh 128
```

## Why It Fits The Scoring Item

This folder shows a previously unsupported ROCm application path: post-quantum KEM and signature workloads are not only ported to HIP, but also exposed as reusable file-level APIs and connected to a complete TrustFlow packaging workflow.
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
# 文件级 KEM/SIG 接口说明

本文档说明 PQC TrustFlow ROCm 前端实际调用的后端文件级接口。项目目标不是只展示单项 benchmark,而是提供可被前端和应用流程调用的后量子密码组件。

## 1. 总体数据流

发送端:

```text
输入文件
-> 计算 SHA-256 摘要
-> Kyber/Aigis-enc KEM encaps 得到 shared secret 和 KEM ciphertext
-> SHA-256(shared secret) 派生 AES-256-GCM key
-> AES-256-GCM 加密每个文件
-> 生成 manifest
-> ML-DSA/Aigis-sig 对 manifest payload 签名
-> 输出 pqcpack 安全包
```

接收端:

```text
pqcpack 安全包
-> Kyber/Aigis-enc KEM decaps 恢复 shared secret
-> SHA-256(shared secret) 派生 AES-256-GCM key
-> 验证 manifest 签名
-> AES-256-GCM 解密文件
-> 校验 SHA-256 摘要
-> 输出恢复目录
```

## 2. KEM 文件级接口

可执行文件:

```text
kyberandaigis-enc/kyber768_amd
```

密钥生成:

```bash
./kyber768_amd \
--api-kem-keygen \
--batch 128 \
--pk-out kem_pk.bin \
--sk-out receiver_sk.demo_secret
```

封装:

```bash
./kyber768_amd \
--api-kem-encaps \
--batch 128 \
--pk-in kem_pk.bin \
--ct-out kem_ct.bin \
--ss-out ss_sender.demo_secret
```

解封装:

```bash
./kyber768_amd \
--api-kem-decaps \
--batch 128 \
--sk-in receiver_sk.demo_secret \
--ct-in kem_ct.bin \
--ss-out ss_receiver.demo_secret
```

正确性判断:

```bash
cmp ss_sender.demo_secret ss_receiver.demo_secret
```

如果两端 shared secret 一致,则 KEM 文件级接口正确。前端不会直接把 shared secret 当明文密钥使用,而是执行:

```text
AES-256-GCM key = SHA-256(shared secret)
```

随后用该 AES key 对文件内容进行加密和解密。

## 3. SIG 文件级接口

可执行文件:

```text
mldsaandaigis-sig/mldsa65_amd
```

当前开发包中如果目录仍为 `amd_sig_anchor_results_20260605_031411`,最终改名为 `mldsaandaigis-sig` 后,需要同步更新前端后端路径。

签名:

```bash
./mldsa65_amd \
--api-sig-sign \
--batch 128 \
--msg-in manifest.payload.json \
--pk-out sig_pk.bin \
--sk-out sig_sk.demo_secret \
--sig-out manifest.sig
```

验签:

```bash
./mldsa65_amd \
--api-sig-verify \
--batch 128 \
--msg-in manifest.payload.json \
--pk-in sig_pk.bin \
--sig-in manifest.sig
```

前端中被签名的对象不是单个文件本身,而是 `manifest.payload.json`。该 payload 包含文件名、密文路径、nonce、tag、SHA-256 摘要、KEM ciphertext 路径和算法配置等信息。这样可以一次性保护整个传输包的结构和文件完整性。

## 4. 安全包关键文件

一次成功运行会生成类似结构:

```text
pack_xxx/
manifest.json
kem/
kem_pk.bin
kem_ct.bin
sig/
manifest.payload.json
manifest.sig
sig_pk.bin
encrypted/
*.enc
recovered/
...
```

关键含义:

`manifest.json`:安全包主清单,记录算法配置、文件摘要、密文位置、KEM/SIG 后端信息和验证所需元数据。

`kem/kem_ct.bin`:KEM ciphertext,接收端使用私钥 decaps 后恢复 shared secret。

`sig/manifest.payload.json`:被 ML-DSA/Aigis-sig 签名的清单载荷。

`sig/manifest.sig`:manifest payload 的签名。

`encrypted/*.enc`:AES-256-GCM 加密后的文件密文。

`recovered/`:验证通过后恢复出的明文文件目录。

## 5. Batch/decomp 设计说明

本项目不强行使用单实例签名 CLI 作为主路径。原因是 ML-DSA/Aigis-sig 在 AMD ROCm 平台上存在更明显的资源压力,单实例或过重 kernel 容易受到 private segment、scratch、occupancy 等因素影响。

因此前端采用 batch/decomp 文件级接口作为实际应用路径:

```text
batch 提供 GPU 并行吞吐
decomp pipeline 降低单个签名路径的资源压力
文件级 API 让前端能够真实调用 KEM/SIG 能力
```

这也是项目的主要工程贡献之一:不是只给出 isolated benchmark,而是把 Kyber/Aigis-enc 和 ML-DSA/Aigis-sig 接成可演示、可验证、可扩展的 ROCm 后量子安全传输流程。
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
# PQC TrustFlow ROCm 快速运行说明

本文档用于评审或复现实验时快速启动前端、执行完整流程,并确认输出结果是否正确。

## 1. 进入项目目录

在 AMD JupyterLab 服务器终端中执行:

```bash
cd /app/PQC_TrustFlow_ROCm
export LD_LIBRARY_PATH=/opt/python/lib/python3.12/site-packages/_rocm_sdk_devel/lib:$LD_LIBRARY_PATH
```

如果项目目录尚未改名,也可以先在当前解压目录中运行;最终提交版本建议统一使用 `/app/PQC_TrustFlow_ROCm`。

## 2. 启动 Notebook 前端

打开 `pqc_trustflow_widgets_demo.ipynb`,执行:

```python
%cd /app/PQC_TrustFlow_ROCm

import os
os.environ["LD_LIBRARY_PATH"] = "/opt/python/lib/python3.12/site-packages/_rocm_sdk_devel/lib:" + os.environ.get("LD_LIBRARY_PATH", "")

from pqc_trustflow_frontend import launch_app
launch_app()
```

启动后会显示 PQC TrustFlow 前端界面。推荐配置:

```text
KEM: Kyber-768
SIG: ML-DSA-65
batch: 128
mode: paper
```

## 3. 前端按钮含义

`准备`:生成或检查演示输入文件,并初始化流程状态。

`生成安全包`:调用 ROCm KEM 文件级接口生成共享密钥材料,使用 AES-256-GCM 加密文件,再调用 ROCm ML-DSA/Aigis-sig 文件级接口签名 manifest。

`查看安全包`:显示本次生成的安全包目录、zip 包、密文文件、KEM ciphertext 和 manifest 信息。

`查看证明`:显示签名载荷、签名文件、ROCm 后端日志、KEM/SIG API 调用结果。

`解包并验证`:执行 KEM decaps,恢复 AES 密钥,解密文件,校验 SHA-256 摘要,并验证 manifest 签名。

`篡改测试`:复制安全包,自动篡改一个密文或摘要相关文件,再重新验证,确认系统能检测异常。

`查看恢复目录`:查看解密后恢复出的文件。

`一键运行`:自动执行准备、生成安全包、解包并验证,适合快速演示。

`重置`:清空当前前端状态,重新开始一次流程。

## 4. 期望前端结果

正常流程中,`流程` 标签页应显示:

```text
准备: PASS
生成安全包: PASS
解包验证: PASS
```

`结果与证据` 标签页应包含:

```text
正常包验证: PASS
KEM 后端: ROCm KEM batch file API
签名后端: ROCm ML-DSA/Aigis-sig batch file API
KEM ciphertext: kem/kem_ct.bin
签名载荷: sig/manifest.payload.json
签名文件: sig/manifest.sig
```

执行 `篡改测试` 后,期望结果为:

```text
篡改检测: PASS
篡改包验证结果: FAIL
```

这表示正常包可以通过解密、验签和摘要校验;被篡改后的包无法通过验证。

## 5. 终端一键验证

如果需要在终端生成一份可归档的 smoke test 输出,可执行:

```bash
cd /app/PQC_TrustFlow_ROCm
mkdir -p results/smoke_tests results/logs results/screenshots
export LD_LIBRARY_PATH=/opt/python/lib/python3.12/site-packages/_rocm_sdk_devel/lib:$LD_LIBRARY_PATH

python3 - <<'PY' | tee results/smoke_tests/trustflow_smoke_$(date +%Y%m%d_%H%M%S).txt
from pqc_trustflow_frontend.backends import ensure_sample_docs, create_secure_pack, create_tampered_copy_and_verify
import json
from pathlib import Path

src = ensure_sample_docs()
r = create_secure_pack(src, "Kyber-768", "ML-DSA-65", 128, "paper", run_rocm=True)

print("pack:", r.pack_dir)
print("zip:", r.pack_zip)
print("verified:", r.verified)
print("logs:", json.dumps(r.rocm_logs, ensure_ascii=False, indent=2))
print("notes:", r.notes)

m = json.loads(Path(r.manifest_path).read_text())
print("kem_backend:", m.get("kem_backend"))
print("signature_backend:", m.get("signature_backend"))
print("kem_ciphertext_file:", m.get("kem_ciphertext_file"))
print("sig_payload:", m.get("sig_payload"))
print("manifest_signature:", m.get("manifest_signature"))

t = create_tampered_copy_and_verify(r.pack_dir)
print("tamper_detected:", t["tamper_detected"])
print("tamper_verified:", t["verified"])
print("file_errors:", t["file_errors"])
print("kem_ok:", t.get("kem_ok"))
print("sig_api_ok:", t.get("sig_api_ok"))
PY
```

期望关键输出:

```text
verified: True
notes: []
kem_backend: ROCm KEM batch file API
signature_backend: ROCm ML-DSA/Aigis-sig batch file API
tamper_detected: True
tamper_verified: False
```

## 6. 结果文件归档建议

运行完成后,建议保留以下证据:

```text
results/
screenshots/
01_frontend_full_ui.png
02_pack_encrypt_sign.png
03_decrypt_verify_digest.png
04_tamper_detection.png
05_repository_layout.png
06_one_click_test.png
07_generated_artifacts.png
smoke_tests/
trustflow_smoke_*.txt
logs/
kemapi_keygen_sample.log
kemapi_encaps_sample.log
kemapi_decaps_sample.log
sigapi_sign_sample.log
sigapi_verify_sample.log
```

其中 `screenshots/` 放人工截图,`smoke_tests/` 放终端一键测试输出,`logs/` 放关键 ROCm KEM/SIG 文件级 API 日志样例。
Loading