diff --git a/sig/Hygon Arch/assets/HCT/white_paper/hct_wp1.png b/sig/Hygon Arch/assets/HCT/white_paper/hct_wp1.png new file mode 100644 index 0000000000000000000000000000000000000000..525748301738edcb05cffe64db2ecc14b66ae37c Binary files /dev/null and b/sig/Hygon Arch/assets/HCT/white_paper/hct_wp1.png differ diff --git a/sig/Hygon Arch/assets/HCT/white_paper/hct_wp2.png b/sig/Hygon Arch/assets/HCT/white_paper/hct_wp2.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5ed812480e53aa56b0ac3320cdc1bda86c83c6 Binary files /dev/null and b/sig/Hygon Arch/assets/HCT/white_paper/hct_wp2.png differ diff --git a/sig/Hygon Arch/assets/HCT/white_paper/hct_wp3.png b/sig/Hygon Arch/assets/HCT/white_paper/hct_wp3.png new file mode 100644 index 0000000000000000000000000000000000000000..79cc2304b0d61e23e797c862865e15e995d2f2f8 Binary files /dev/null and b/sig/Hygon Arch/assets/HCT/white_paper/hct_wp3.png differ diff --git a/sig/Hygon Arch/assets/HCT/white_paper/hct_wp4.png b/sig/Hygon Arch/assets/HCT/white_paper/hct_wp4.png new file mode 100644 index 0000000000000000000000000000000000000000..0c658569d68a8bad36152d5cb55b525bef50facd Binary files /dev/null and b/sig/Hygon Arch/assets/HCT/white_paper/hct_wp4.png differ diff --git a/sig/Hygon Arch/assets/HCT/white_paper/hct_wp5.png b/sig/Hygon Arch/assets/HCT/white_paper/hct_wp5.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e055df953e0853be116559183b157201a2d1f2 Binary files /dev/null and b/sig/Hygon Arch/assets/HCT/white_paper/hct_wp5.png differ diff --git a/sig/Hygon Arch/assets/HCT/white_paper/hct_wp6.png b/sig/Hygon Arch/assets/HCT/white_paper/hct_wp6.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d9758b934a4e0cbb99f2f090985013fd2fbdfc Binary files /dev/null and b/sig/Hygon Arch/assets/HCT/white_paper/hct_wp6.png differ diff --git a/sig/Hygon Arch/assets/TKM/hgsc_tkm.png b/sig/Hygon Arch/assets/TKM/hgsc_tkm.png new file mode 100644 index 0000000000000000000000000000000000000000..522a27e98411e5246e7b832656a1dec58ecd8d0c Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/hgsc_tkm.png differ diff --git a/sig/Hygon Arch/assets/TKM/tkm-1.png b/sig/Hygon Arch/assets/TKM/tkm-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7428314463ccee3997f8a8dadf46b191e6a4f3 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-1.png differ diff --git a/sig/Hygon Arch/assets/tkm-10.png b/sig/Hygon Arch/assets/TKM/tkm-10.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-10.png rename to sig/Hygon Arch/assets/TKM/tkm-10.png diff --git a/sig/Hygon Arch/assets/tkm-11.png b/sig/Hygon Arch/assets/TKM/tkm-11.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-11.png rename to sig/Hygon Arch/assets/TKM/tkm-11.png diff --git a/sig/Hygon Arch/assets/tkm-12.png b/sig/Hygon Arch/assets/TKM/tkm-12.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-12.png rename to sig/Hygon Arch/assets/TKM/tkm-12.png diff --git a/sig/Hygon Arch/assets/tkm-13.png b/sig/Hygon Arch/assets/TKM/tkm-13.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-13.png rename to sig/Hygon Arch/assets/TKM/tkm-13.png diff --git a/sig/Hygon Arch/assets/TKM/tkm-14.png b/sig/Hygon Arch/assets/TKM/tkm-14.png new file mode 100644 index 0000000000000000000000000000000000000000..f99eab0094fcc04254fc18a2ac960b24abbf7ee7 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-14.png differ diff --git a/sig/Hygon Arch/assets/tkm-15.png b/sig/Hygon Arch/assets/TKM/tkm-15.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-15.png rename to sig/Hygon Arch/assets/TKM/tkm-15.png diff --git a/sig/Hygon Arch/assets/TKM/tkm-16.png b/sig/Hygon Arch/assets/TKM/tkm-16.png new file mode 100644 index 0000000000000000000000000000000000000000..70bea265752b041caf7db5ac020079e570c32b46 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-16.png differ diff --git a/sig/Hygon Arch/assets/tkm-17.png b/sig/Hygon Arch/assets/TKM/tkm-17.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-17.png rename to sig/Hygon Arch/assets/TKM/tkm-17.png diff --git a/sig/Hygon Arch/assets/TKM/tkm-18.png b/sig/Hygon Arch/assets/TKM/tkm-18.png new file mode 100644 index 0000000000000000000000000000000000000000..c7a202a023f6d83d01f7a6046c0dc713b22a2d7a Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-18.png differ diff --git a/sig/Hygon Arch/assets/tkm-19.png b/sig/Hygon Arch/assets/TKM/tkm-19.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-19.png rename to sig/Hygon Arch/assets/TKM/tkm-19.png diff --git a/sig/Hygon Arch/assets/tkm-2.png b/sig/Hygon Arch/assets/TKM/tkm-2.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-2.png rename to sig/Hygon Arch/assets/TKM/tkm-2.png diff --git a/sig/Hygon Arch/assets/tkm-20.png b/sig/Hygon Arch/assets/TKM/tkm-20.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-20.png rename to sig/Hygon Arch/assets/TKM/tkm-20.png diff --git a/sig/Hygon Arch/assets/tkm-21.png b/sig/Hygon Arch/assets/TKM/tkm-21.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-21.png rename to sig/Hygon Arch/assets/TKM/tkm-21.png diff --git a/sig/Hygon Arch/assets/tkm-22.png b/sig/Hygon Arch/assets/TKM/tkm-22.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-22.png rename to sig/Hygon Arch/assets/TKM/tkm-22.png diff --git a/sig/Hygon Arch/assets/tkm-23.png b/sig/Hygon Arch/assets/TKM/tkm-23.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-23.png rename to sig/Hygon Arch/assets/TKM/tkm-23.png diff --git a/sig/Hygon Arch/assets/tkm-24.png b/sig/Hygon Arch/assets/TKM/tkm-24.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-24.png rename to sig/Hygon Arch/assets/TKM/tkm-24.png diff --git a/sig/Hygon Arch/assets/tkm-25.png b/sig/Hygon Arch/assets/TKM/tkm-25.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-25.png rename to sig/Hygon Arch/assets/TKM/tkm-25.png diff --git a/sig/Hygon Arch/assets/tkm-26.png b/sig/Hygon Arch/assets/TKM/tkm-26.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-26.png rename to sig/Hygon Arch/assets/TKM/tkm-26.png diff --git a/sig/Hygon Arch/assets/tkm-27.png b/sig/Hygon Arch/assets/TKM/tkm-27.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-27.png rename to sig/Hygon Arch/assets/TKM/tkm-27.png diff --git a/sig/Hygon Arch/assets/tkm-28.png b/sig/Hygon Arch/assets/TKM/tkm-28.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-28.png rename to sig/Hygon Arch/assets/TKM/tkm-28.png diff --git a/sig/Hygon Arch/assets/tkm-29.png b/sig/Hygon Arch/assets/TKM/tkm-29.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-29.png rename to sig/Hygon Arch/assets/TKM/tkm-29.png diff --git a/sig/Hygon Arch/assets/tkm-3.png b/sig/Hygon Arch/assets/TKM/tkm-3.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-3.png rename to sig/Hygon Arch/assets/TKM/tkm-3.png diff --git a/sig/Hygon Arch/assets/tkm-30.png b/sig/Hygon Arch/assets/TKM/tkm-30.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-30.png rename to sig/Hygon Arch/assets/TKM/tkm-30.png diff --git a/sig/Hygon Arch/assets/tkm-31.png b/sig/Hygon Arch/assets/TKM/tkm-31.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-31.png rename to sig/Hygon Arch/assets/TKM/tkm-31.png diff --git a/sig/Hygon Arch/assets/tkm-32.png b/sig/Hygon Arch/assets/TKM/tkm-32.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-32.png rename to sig/Hygon Arch/assets/TKM/tkm-32.png diff --git a/sig/Hygon Arch/assets/tkm-33.png b/sig/Hygon Arch/assets/TKM/tkm-33.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-33.png rename to sig/Hygon Arch/assets/TKM/tkm-33.png diff --git a/sig/Hygon Arch/assets/tkm-34.png b/sig/Hygon Arch/assets/TKM/tkm-34.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-34.png rename to sig/Hygon Arch/assets/TKM/tkm-34.png diff --git a/sig/Hygon Arch/assets/tkm-35.png b/sig/Hygon Arch/assets/TKM/tkm-35.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-35.png rename to sig/Hygon Arch/assets/TKM/tkm-35.png diff --git a/sig/Hygon Arch/assets/tkm-36.png b/sig/Hygon Arch/assets/TKM/tkm-36.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-36.png rename to sig/Hygon Arch/assets/TKM/tkm-36.png diff --git a/sig/Hygon Arch/assets/tkm-37.png b/sig/Hygon Arch/assets/TKM/tkm-37.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-37.png rename to sig/Hygon Arch/assets/TKM/tkm-37.png diff --git a/sig/Hygon Arch/assets/tkm-38.png b/sig/Hygon Arch/assets/TKM/tkm-38.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-38.png rename to sig/Hygon Arch/assets/TKM/tkm-38.png diff --git a/sig/Hygon Arch/assets/TKM/tkm-39.png b/sig/Hygon Arch/assets/TKM/tkm-39.png new file mode 100644 index 0000000000000000000000000000000000000000..147a074f7cd9e75cdf8cfd085b624b2bc82ab5a7 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-39.png differ diff --git a/sig/Hygon Arch/assets/tkm-4.png b/sig/Hygon Arch/assets/TKM/tkm-4.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-4.png rename to sig/Hygon Arch/assets/TKM/tkm-4.png diff --git a/sig/Hygon Arch/assets/TKM/tkm-40.png b/sig/Hygon Arch/assets/TKM/tkm-40.png new file mode 100644 index 0000000000000000000000000000000000000000..54b444e019028d0f4d303b4664c7dfb41373cc11 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-40.png differ diff --git a/sig/Hygon Arch/assets/TKM/tkm-41.png b/sig/Hygon Arch/assets/TKM/tkm-41.png new file mode 100644 index 0000000000000000000000000000000000000000..0707962817f54bfadbf68a8862aec68630bfdf34 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-41.png differ diff --git a/sig/Hygon Arch/assets/TKM/tkm-42.png b/sig/Hygon Arch/assets/TKM/tkm-42.png new file mode 100644 index 0000000000000000000000000000000000000000..8c326f6e8ec0892ef343e4889dbcd06318f6d5f9 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-42.png differ diff --git a/sig/Hygon Arch/assets/TKM/tkm-43.png b/sig/Hygon Arch/assets/TKM/tkm-43.png new file mode 100644 index 0000000000000000000000000000000000000000..8099e8e90d3ebf43ecde09f990453333709bcd5f Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-43.png differ diff --git a/sig/Hygon Arch/assets/TKM/tkm-44.png b/sig/Hygon Arch/assets/TKM/tkm-44.png new file mode 100644 index 0000000000000000000000000000000000000000..da0d79fb712ca18d89e855eb0a9a05f3a8bc26a2 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-44.png differ diff --git a/sig/Hygon Arch/assets/TKM/tkm-45.png b/sig/Hygon Arch/assets/TKM/tkm-45.png new file mode 100644 index 0000000000000000000000000000000000000000..e136632089da7a26792ae149435828693d612cdb Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-45.png differ diff --git a/sig/Hygon Arch/assets/TKM/tkm-46.png b/sig/Hygon Arch/assets/TKM/tkm-46.png new file mode 100644 index 0000000000000000000000000000000000000000..313c5635d3f332293428e89ca57679c536f07923 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-46.png differ diff --git a/sig/Hygon Arch/assets/TKM/tkm-47.png b/sig/Hygon Arch/assets/TKM/tkm-47.png new file mode 100644 index 0000000000000000000000000000000000000000..2712bef4f097267b05b00123da4daf7e763deeeb Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-47.png differ diff --git a/sig/Hygon Arch/assets/tkm-48.png b/sig/Hygon Arch/assets/TKM/tkm-48.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-48.png rename to sig/Hygon Arch/assets/TKM/tkm-48.png diff --git a/sig/Hygon Arch/assets/tkm-49.png b/sig/Hygon Arch/assets/TKM/tkm-49.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-49.png rename to sig/Hygon Arch/assets/TKM/tkm-49.png diff --git a/sig/Hygon Arch/assets/tkm-5.png b/sig/Hygon Arch/assets/TKM/tkm-5.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-5.png rename to sig/Hygon Arch/assets/TKM/tkm-5.png diff --git a/sig/Hygon Arch/assets/tkm-50.png b/sig/Hygon Arch/assets/TKM/tkm-50.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-50.png rename to sig/Hygon Arch/assets/TKM/tkm-50.png diff --git a/sig/Hygon Arch/assets/tkm-51.png b/sig/Hygon Arch/assets/TKM/tkm-51.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-51.png rename to sig/Hygon Arch/assets/TKM/tkm-51.png diff --git a/sig/Hygon Arch/assets/tkm-52.png b/sig/Hygon Arch/assets/TKM/tkm-52.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-52.png rename to sig/Hygon Arch/assets/TKM/tkm-52.png diff --git a/sig/Hygon Arch/assets/tkm-53.png b/sig/Hygon Arch/assets/TKM/tkm-53.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-53.png rename to sig/Hygon Arch/assets/TKM/tkm-53.png diff --git a/sig/Hygon Arch/assets/TKM/tkm-54.png b/sig/Hygon Arch/assets/TKM/tkm-54.png new file mode 100644 index 0000000000000000000000000000000000000000..050468182ecece5390342688595edf8ae1a03003 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm-54.png differ diff --git a/sig/Hygon Arch/assets/tkm-55.png b/sig/Hygon Arch/assets/TKM/tkm-55.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-55.png rename to sig/Hygon Arch/assets/TKM/tkm-55.png diff --git a/sig/Hygon Arch/assets/tkm-56.png b/sig/Hygon Arch/assets/TKM/tkm-56.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-56.png rename to sig/Hygon Arch/assets/TKM/tkm-56.png diff --git a/sig/Hygon Arch/assets/tkm-57.png b/sig/Hygon Arch/assets/TKM/tkm-57.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-57.png rename to sig/Hygon Arch/assets/TKM/tkm-57.png diff --git a/sig/Hygon Arch/assets/tkm-58.png b/sig/Hygon Arch/assets/TKM/tkm-58.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-58.png rename to sig/Hygon Arch/assets/TKM/tkm-58.png diff --git a/sig/Hygon Arch/assets/tkm-59.png b/sig/Hygon Arch/assets/TKM/tkm-59.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-59.png rename to sig/Hygon Arch/assets/TKM/tkm-59.png diff --git a/sig/Hygon Arch/assets/tkm-6.png b/sig/Hygon Arch/assets/TKM/tkm-6.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-6.png rename to sig/Hygon Arch/assets/TKM/tkm-6.png diff --git a/sig/Hygon Arch/assets/tkm-60.png b/sig/Hygon Arch/assets/TKM/tkm-60.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-60.png rename to sig/Hygon Arch/assets/TKM/tkm-60.png diff --git a/sig/Hygon Arch/assets/tkm-61.png b/sig/Hygon Arch/assets/TKM/tkm-61.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-61.png rename to sig/Hygon Arch/assets/TKM/tkm-61.png diff --git a/sig/Hygon Arch/assets/tkm-62.png b/sig/Hygon Arch/assets/TKM/tkm-62.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-62.png rename to sig/Hygon Arch/assets/TKM/tkm-62.png diff --git a/sig/Hygon Arch/assets/tkm-63.png b/sig/Hygon Arch/assets/TKM/tkm-63.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-63.png rename to sig/Hygon Arch/assets/TKM/tkm-63.png diff --git a/sig/Hygon Arch/assets/tkm-64.png b/sig/Hygon Arch/assets/TKM/tkm-64.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-64.png rename to sig/Hygon Arch/assets/TKM/tkm-64.png diff --git a/sig/Hygon Arch/assets/tkm-65.png b/sig/Hygon Arch/assets/TKM/tkm-65.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-65.png rename to sig/Hygon Arch/assets/TKM/tkm-65.png diff --git a/sig/Hygon Arch/assets/tkm-66.png b/sig/Hygon Arch/assets/TKM/tkm-66.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-66.png rename to sig/Hygon Arch/assets/TKM/tkm-66.png diff --git a/sig/Hygon Arch/assets/tkm-67.png b/sig/Hygon Arch/assets/TKM/tkm-67.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-67.png rename to sig/Hygon Arch/assets/TKM/tkm-67.png diff --git a/sig/Hygon Arch/assets/tkm-68.png b/sig/Hygon Arch/assets/TKM/tkm-68.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-68.png rename to sig/Hygon Arch/assets/TKM/tkm-68.png diff --git a/sig/Hygon Arch/assets/tkm-69.png b/sig/Hygon Arch/assets/TKM/tkm-69.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-69.png rename to sig/Hygon Arch/assets/TKM/tkm-69.png diff --git a/sig/Hygon Arch/assets/tkm-7.png b/sig/Hygon Arch/assets/TKM/tkm-7.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-7.png rename to sig/Hygon Arch/assets/TKM/tkm-7.png diff --git a/sig/Hygon Arch/assets/tkm-8.png b/sig/Hygon Arch/assets/TKM/tkm-8.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-8.png rename to sig/Hygon Arch/assets/TKM/tkm-8.png diff --git a/sig/Hygon Arch/assets/tkm-9.png b/sig/Hygon Arch/assets/TKM/tkm-9.png similarity index 100% rename from sig/Hygon Arch/assets/tkm-9.png rename to sig/Hygon Arch/assets/TKM/tkm-9.png diff --git a/sig/Hygon Arch/assets/TKM/tkm_get_key_usage.png b/sig/Hygon Arch/assets/TKM/tkm_get_key_usage.png new file mode 100644 index 0000000000000000000000000000000000000000..5727027d3d1601b03f900038a48beed29d71abf2 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/tkm_get_key_usage.png differ diff --git a/sig/Hygon Arch/assets/TKM/vTKM-1.png b/sig/Hygon Arch/assets/TKM/vTKM-1.png new file mode 100644 index 0000000000000000000000000000000000000000..111c87580241684995150772768f33a10ffbf86f Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/vTKM-1.png differ diff --git a/sig/Hygon Arch/assets/TKM/vTKM-2.png b/sig/Hygon Arch/assets/TKM/vTKM-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e8edeccb74385da8e787344d456e9f1abac3fb4d Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/vTKM-2.png differ diff --git a/sig/Hygon Arch/assets/TKM/vTKM_CSV_launch.png b/sig/Hygon Arch/assets/TKM/vTKM_CSV_launch.png new file mode 100644 index 0000000000000000000000000000000000000000..350fb2aac0ce00f1446a68016a99e70770bab245 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/vTKM_CSV_launch.png differ diff --git a/sig/Hygon Arch/assets/TKM/vTKM_all_key_usage.png b/sig/Hygon Arch/assets/TKM/vTKM_all_key_usage.png new file mode 100644 index 0000000000000000000000000000000000000000..b00902558411c89f328ece349a6c552d977c0321 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/vTKM_all_key_usage.png differ diff --git a/sig/Hygon Arch/assets/TKM/vTKM_dev_info.png b/sig/Hygon Arch/assets/TKM/vTKM_dev_info.png new file mode 100644 index 0000000000000000000000000000000000000000..a866c6e58cd60bce5ff0574b825624240e773822 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/vTKM_dev_info.png differ diff --git a/sig/Hygon Arch/assets/TKM/vTKM_exclusive_vid_create.png b/sig/Hygon Arch/assets/TKM/vTKM_exclusive_vid_create.png new file mode 100644 index 0000000000000000000000000000000000000000..db567ee444a4cc675d7c9c0e62bb72f456c344e9 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/vTKM_exclusive_vid_create.png differ diff --git a/sig/Hygon Arch/assets/TKM/vTKM_get_vid_key_usage.png b/sig/Hygon Arch/assets/TKM/vTKM_get_vid_key_usage.png new file mode 100644 index 0000000000000000000000000000000000000000..0a01e8c78b8f5097ef8bc7b4c78f67a4d86fb6af Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/vTKM_get_vid_key_usage.png differ diff --git a/sig/Hygon Arch/assets/TKM/vTKM_mem2.png b/sig/Hygon Arch/assets/TKM/vTKM_mem2.png new file mode 100644 index 0000000000000000000000000000000000000000..881ddc04636409f0a57e624533a4bd7f29402aa0 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/vTKM_mem2.png differ diff --git a/sig/Hygon Arch/assets/TKM/vTKM_mem2_cmdline.png b/sig/Hygon Arch/assets/TKM/vTKM_mem2_cmdline.png new file mode 100644 index 0000000000000000000000000000000000000000..0a931031266d6301a8e1a66134ab8437e722d4d5 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/vTKM_mem2_cmdline.png differ diff --git a/sig/Hygon Arch/assets/TKM/vTKM_vid_destroy.png b/sig/Hygon Arch/assets/TKM/vTKM_vid_destroy.png new file mode 100644 index 0000000000000000000000000000000000000000..1dd000cc31114a3d25d16e513fe9c7f887966980 Binary files /dev/null and b/sig/Hygon Arch/assets/TKM/vTKM_vid_destroy.png differ diff --git a/sig/Hygon Arch/assets/general_check_fw_version.png b/sig/Hygon Arch/assets/general_check_fw_version.png new file mode 100644 index 0000000000000000000000000000000000000000..7953419433e4936c6d55c3e5c8526fe5976d0df3 Binary files /dev/null and b/sig/Hygon Arch/assets/general_check_fw_version.png differ diff --git a/sig/Hygon Arch/assets/tkm-1.png b/sig/Hygon Arch/assets/tkm-1.png deleted file mode 100644 index 9e3552673faa1486e8e17b9213a8701f999fbb87..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-1.png and /dev/null differ diff --git a/sig/Hygon Arch/assets/tkm-14.png b/sig/Hygon Arch/assets/tkm-14.png deleted file mode 100644 index 572b40bfdf8aef31790df4ffda9b53cc1979a135..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-14.png and /dev/null differ diff --git a/sig/Hygon Arch/assets/tkm-16.png b/sig/Hygon Arch/assets/tkm-16.png deleted file mode 100644 index 207d5d826f6a001ae1bc09d2dd1852ec9359c781..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-16.png and /dev/null differ diff --git a/sig/Hygon Arch/assets/tkm-18.png b/sig/Hygon Arch/assets/tkm-18.png deleted file mode 100644 index 88566dbe6f434099cf9f717ab4e9822233fe377a..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-18.png and /dev/null differ diff --git a/sig/Hygon Arch/assets/tkm-39.png b/sig/Hygon Arch/assets/tkm-39.png deleted file mode 100644 index 6226b4b5c5c124276766717566a657adca459a03..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-39.png and /dev/null differ diff --git a/sig/Hygon Arch/assets/tkm-40.png b/sig/Hygon Arch/assets/tkm-40.png deleted file mode 100644 index fe6f8103a18104eca43397e004a28d31a039e732..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-40.png and /dev/null differ diff --git a/sig/Hygon Arch/assets/tkm-41.png b/sig/Hygon Arch/assets/tkm-41.png deleted file mode 100644 index 6db069ad31afb987d93793e254f9907e05711dc5..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-41.png and /dev/null differ diff --git a/sig/Hygon Arch/assets/tkm-42.png b/sig/Hygon Arch/assets/tkm-42.png deleted file mode 100644 index e36b6d7d78652641b3c272c497bb24687f85e3b0..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-42.png and /dev/null differ diff --git a/sig/Hygon Arch/assets/tkm-43.png b/sig/Hygon Arch/assets/tkm-43.png deleted file mode 100644 index 64fcd8b7df1f74bb7ef1fb1a928e629662199f67..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-43.png and /dev/null differ diff --git a/sig/Hygon Arch/assets/tkm-44.png b/sig/Hygon Arch/assets/tkm-44.png deleted file mode 100644 index 356540ee4eac10335866899822f84d1ec08dfb8e..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-44.png and /dev/null differ diff --git a/sig/Hygon Arch/assets/tkm-45.png b/sig/Hygon Arch/assets/tkm-45.png deleted file mode 100644 index 1558ce1d815cf2c1e42e479f308ea4a2943d480f..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-45.png and /dev/null differ diff --git a/sig/Hygon Arch/assets/tkm-46.png b/sig/Hygon Arch/assets/tkm-46.png deleted file mode 100644 index 9e97409520ca33178742cab898dae0e1207d23ff..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-46.png and /dev/null differ diff --git a/sig/Hygon Arch/assets/tkm-47.png b/sig/Hygon Arch/assets/tkm-47.png deleted file mode 100644 index 3c816bf157845dee7b167bab80ee507ab9715dd0..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-47.png and /dev/null differ diff --git a/sig/Hygon Arch/assets/tkm-54.png b/sig/Hygon Arch/assets/tkm-54.png deleted file mode 100644 index 7a209c0ded440a1ac903ee975db772129610ba91..0000000000000000000000000000000000000000 Binary files a/sig/Hygon Arch/assets/tkm-54.png and /dev/null differ diff --git "a/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/4-\345\257\206\351\222\245\347\256\241\347\220\206\347\231\275\347\232\256\344\271\246.md" "b/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/10-\345\216\206\345\217\262\346\226\207\346\241\243/1-\345\257\206\351\222\245\347\256\241\347\220\206\347\231\275\347\232\256\344\271\246.md" similarity index 98% rename from "sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/4-\345\257\206\351\222\245\347\256\241\347\220\206\347\231\275\347\232\256\344\271\246.md" rename to "sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/10-\345\216\206\345\217\262\346\226\207\346\241\243/1-\345\257\206\351\222\245\347\256\241\347\220\206\347\231\275\347\232\256\344\271\246.md" index 61c1e1e65fb6ed73859a02e9770d90a3d5bed169..0b7b6d5bbba405e9fecb91bb33cdb68cf81a3c8e 100644 --- "a/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/4-\345\257\206\351\222\245\347\256\241\347\220\206\347\231\275\347\232\256\344\271\246.md" +++ "b/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/10-\345\216\206\345\217\262\346\226\207\346\241\243/1-\345\257\206\351\222\245\347\256\241\347\220\206\347\231\275\347\232\256\344\271\246.md" @@ -15,7 +15,7 @@ TKM基于CPU内置安全处理器实现。如图一所示,CPU内置了一个 图一 CPU架构图 - ![](../../assets/cpu_arch-1.png) + ![](../../../assets/cpu_arch-1.png) 安全处理器具有以下特点: - 具有自己独立的资源,外部(包括C86核心)不可访问; @@ -36,7 +36,7 @@ TKM基于CPU内置安全处理器实现。如图一所示,CPU内置了一个 软件接口层,TKM提供私有的TKM高性能接口,同时提供了符合GM/T 0018标准的SDF接口。 图二 TKM架构图 - ![](../../assets/tkm_arch-1.png) + ![](../../../assets/tkm_arch-1.png) ## TKM主要功能 ### 一、 密钥管理功能 @@ -71,6 +71,6 @@ TKM基于CPU内置安全处理器实现。如图一所示,CPU内置了一个 TKM支持在各种不同的环境下使用,如图三所示,支持在主机、虚拟机、机密虚拟机、容器、机密容器上同时使用。 图三 TKM使用环境 - ![](../../assets/tkm_scene-1.png) + ![](../../../assets/tkm_scene-1.png) TKM的应用场景包括密码机服务器、工控系统、KMS以及各种通用系统中的密钥管理等,根据需要基于TKM接口也可以进一步封装符合相关标准的接口。TKM提供的GM/T 0018标准接口,即SDF接口,可广泛应用在专用的密码设备中,比如服务器密码机、签名验签服务器、VPN服务器等;另外,在需要密码服务的节点上使用支持TKM的海光服务器,改变原有通过网络访问池化密码资源的方式,通过本地密码资源直接访问,实现一种“分布式密码计算”方式,进而降低成本、降低网络带宽占用、优化性能。 diff --git "a/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/2-\345\257\206\351\222\245\347\256\241\347\220\206\345\212\237\350\203\275\346\265\213\350\257\225.md" "b/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/2-\345\257\206\351\222\245\347\256\241\347\220\206\345\212\237\350\203\275\346\265\213\350\257\225.md" index 35045d3995c7d3fda9e995bbd1028cbdec400cc0..2d5d850b9a58e1d4692e48aa1dfb8504f3f296dc 100644 --- "a/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/2-\345\257\206\351\222\245\347\256\241\347\220\206\345\212\237\350\203\275\346\265\213\350\257\225.md" +++ "b/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/2-\345\257\206\351\222\245\347\256\241\347\220\206\345\212\237\350\203\275\346\265\213\350\257\225.md" @@ -8,59 +8,50 @@ | 配置 | 要求 | 备注 | |--------------|-----------------------|-----| -| CPU | 2号及以上 | | -| BIOS | PI2.1.0.3(对应安全固件版本1667),支持TKM | TKM基础功能 | -| | PI2.1.0.3+DhyanaPatch_PI2.1.0.3_200233_001(对应安全固件版本1799),支持TKM | TKM 增加密钥迁移支持 | -| | PI2.1.0.4(对应安全固件版本1837),支持TKM | TKM增加密钥协商支持 | -| | PI2.1.0.5(待发布)(对应安全固件版本1877),支持TKM | TKM增加密钥备份与恢复支持 | -| hag | 1802或以上 | 推荐使用较新的PI对应的hag工具,基本可以兼容过去PI的应用 | +| CPU | Hygon C86-3G及以上 | | +| BIOS | 海光BIOS PI2.1.0.4,并且安全固件版本大于1881 | [安全固件动态升级方法](https://openanolis.cn/sig/Hygon-Arch/doc/922794991552872684) | +| hag | 1881或以上 | [hag工具下载链接](https://gitee.com/anolis/hygon-devkit/raw/master/bin/hag)| +| glibc | 2.17或以上 | | -### 1.1.环境安装 +## 2.版本基本说明 +### 2.1 安全固件不同版本的功能支持情况 +| **版本号** | **支持的功能** | +|------------|--------------------------------| +| 1881 | 基本功能 | +| 2070 | 支持虚拟化密钥隔离 | +| 2131 | 支持海光CSV虚拟机中使用TKM | +| 2210 | 性能优化 +### 2.2 安全固件版本的检查方式 -本次测试使用集成ISO镜像安装的方式,ISO镜像中集成TKM的驱动,安装的ISO镜像名称为centos-7.8.2003-x86_64-dvd-xxx-csd-20230110-135.iso。 +安全固件版本的检查方式,可以通过hag命令进行检查: -用户也可以选择使用软件包的方式。 - -**tkm驱动版本需要根据实际BIOS对应的PI版本选择,这里以使用“PI2013+DhyanaPatch_PI2.1.0.3_200233_001的BIOS补丁”对应的驱动tkm-2.0.0-20230228安装为例** - -**DEB包安装:** ``` -$ git clone https://gitee.com/anolis/hygon-devkit.git -$ cd hygon-devkit/tkm/pkg/tkm-2.0.0-20230228/ -$ sudo dpkg -i hygon-psp-2.0.0_amd64.deb -$ sudo dpkg -i tkm-nc-1.0.0_amd64.deb +$ sudo hag general check ``` +![fw_version](../../assets/general_check_fw_version.png) + +图中输出的firmware_version字段表示安全固件的版本。而hag工具的版本检查方式为: -**RPM包安装:** ``` -$ git clone https://gitee.com/anolis/hygon-devkit.git -$ cd hygon-devkit/tkm/pkg/tkm-2.0.0-20230228/ -$ sudo rpm -ivh hygon-psp-2.0.0-1.x86_64.rpm -$ sudo rpm -ivh tkm-nc-1.0.0-1.x86_64.rpm +$ sudo hag general version ``` -## 2.Hag工具基本说明 -### 2.1.Hag工具说明 - -Hag工具目前以两种方式提供(根据需要选择其一使用即可): - -(1)单独二进制文件hag; - -(2)用于直接将hag安装到系统目录的文件install_hag.run。 +输出的Version字段表示hag工具的版本 +### 2.3 通用安全证书导入说明 -若使用第一种方式二进制文件,将hag自行放入需要的目录使用即可; - -若使用第二种方式将hag安装到系统目录,hag将支持命令的自动补全功能。 - -这里测试环境为一台安装定制ISO镜像的CPU服务器,默认已按照第二种方式安装好hag工具,因此本文后续使用皆以第二种安装方式来使用。 +- 检查机器是否已导入支持使用TKM的通用证书,可以通过hag命令进行检查: +``` +$ sudo hag general check +``` +![fw_version](../../assets/TKM/hgsc_tkm.png) -### 2.2. Hag通用安全证书导入说明 +图中输出的TKM字段为enabled时表示已通过通用证书使能TKM。 -若通用安全证书已导入,跳过这步,否则请参考通用安全功能使能方法文档进行使能,TKM功能将在通用安全证书导入成功后才能使用。 +- 若TKM已使能,跳过这步,否则请参考文档[通用安全功能使能方法](https://openanolis.cn/sig/Hygon-Arch/doc/865622274698254162)使能TKM,TKM功能在通用安全证书导入成功后才能使用。 -导入成功后,以下操作无需重新导入证书:重启机器。 +- 通用证书导入成功后,除重刷BIOS操作外,无需再次导入证书。 -### 2.3. Hag TKM命令查看 +### 2.4 Hag TKM命令查看 执行如下命令获取TKM支持的命令: ``` @@ -70,11 +61,15 @@ $ sudo hag tkm help 图 1 获取Hag tkm支持的命令信息 - ![](../../assets/tkm-1.png) + ![](../../assets/TKM/tkm-1.png) +如需使用其中的单个命令,可以通过--help参数查看命令使用方法,如查看sm2_sign命令使用方法: +``` +$ sudo hag tkm sm2_sign --help +``` ## 3.TKM典型应用场景说明与验证 -**各场景说明默认使用系统目录安装的hag来进行演示,应用密钥应用场景说明中,由于应用密钥由固件内部分配,因此每次操作分配的句柄可能不同,实际操作时请以实际返回句柄为准。** +**各场景说明均使用hag工具来进行演示,应用密钥应用场景说明中,由于应用密钥由固件内部分配,因此每次操作分配的句柄可能不同,实际操作时请以实际返回句柄为准。** ### 3.1.初始化 @@ -90,7 +85,7 @@ $ sudo hag tkm rand_get -len 64 -out data64.plain ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-2.png) + ![](../../assets/TKM/tkm-2.png) ### 3.2.外部密钥派发到TKM设备场景 @@ -98,7 +93,7 @@ $ sudo hag tkm rand_get -len 64 -out data64.plain 用户在使用中有将自己密钥明文派发到TKM设备内部密钥槽位的需求,派发后密钥掉电不丢失,这里对该应用场景进行示例说明,基本过程如下图所示,首先通过TKM接口在TKM内部生成一对非对称密钥对作为父密钥对,接着用户准备好将要派发的密钥明文,调用TKM接口导出父密钥对公钥,用户使用该公钥对将要派发的密钥明文进行加密得到密钥密文,调用TKM导入接口导入密钥密文并指定使用父密钥对的私钥解密装载,装载成功后该密钥被装入TKM设备密钥槽位并返回对应密钥索引信息,用户可以通过该索引来完成需要的基于TKM设备的密码运算 - ![](../../assets/tkm-3.png) + ![](../../assets/TKM/tkm-3.png) **操作过程说明:** @@ -111,7 +106,7 @@ $ sudo hag tkm key_import -phandle 0xb0003e8 -pauth intl.auth -key kek_enc_key.b ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-4.png) + ![](../../assets/TKM/tkm-4.png) (2)派发完成,清理操作环境,销毁派发的密钥以及父密钥 ``` @@ -121,7 +116,7 @@ $ sudo hag tkm key_destroy -handle 0xb0003e8 -auth intl.auth ``` 命令执行的结果如下图: - ![](../../assets/tkm-5.png) + ![](../../assets/TKM/tkm-5.png) ### 3.3.TKM密钥迁移到另一台TKM设备场景 @@ -133,7 +128,7 @@ $ sudo hag tkm key_destroy -handle 0xb0003e8 -auth intl.auth 该场景使用了非对称密钥的公私钥特性来实现,需要导出密钥的机器这里称为S,需要导入装载密钥的机器这里称为D,用户通过在机器D产生一对sm2密钥对,导出其公钥在机器S调用TKM的ecc公钥加密密钥导出接口,即可将机器S的目标句柄对应的密钥加密导出,之后用户在机器D调用TKM导入装载接口导入密钥密文并指定sm2私钥解密,即可将机器S的密钥迁移到机器D,如下图所示为一个基本的过程。这里在密钥迁移成功后做了一个简单的测试来验证密钥被成功迁移,即指定机器S原密钥加密一段数据,使用机器D迁移后的密钥解密,通过对比明文与解密后的明文是否一致即可进一步验证密钥迁移的正确性。 - ![](../../assets/tkm-6.png) + ![](../../assets/TKM/tkm-6.png) **操作过程说明:** @@ -143,7 +138,7 @@ $ sudo hag tkm intl_key_gen -type sm4 -idx 666 -auth intl.auth -attr exportable ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-7.png) + ![](../../assets/TKM/tkm-7.png) (2)在机器D端生成一对sm2父密钥,记录密钥返回索引,并导出其公钥,将公钥传递到机器S; ``` @@ -152,7 +147,7 @@ $ sudo hag tkm pubkey_export -handle 0xb0003e8 -out sm2_pubkey.bin ``` 命令执行的结果如下图: - ![](../../assets/tkm-8.png) + ![](../../assets/TKM/tkm-8.png) (3)机器S使用从机器D收到的公钥以及待导出密钥对应索引值调用ecc加密导出接口获取密文密钥,并使用待导出密钥对一段数据明文进行加密,将数据明文以及加密后的数据密文传递到机器D; ``` @@ -162,7 +157,7 @@ $ sudo hag tkm sm4 -handle 0x200029a -auth intl.auth -iv iv.data -in data64.pla ``` 命令执行的结果如下图: - ![](../../assets/tkm-9.png) + ![](../../assets/TKM/tkm-9.png) (4)机器D调用密钥导入接口导入从机器S收到的密钥密文并指定其使用sm2父密钥私钥解密装载,记录装载成功后返回的装载密钥索引,密钥迁移成功。使用装载密钥索引解密从机器S收到的数据密文,得到解密明文;将解密明文与数据明文对比,若一致表示迁移正常,否则迁移密钥异常; ``` @@ -173,7 +168,7 @@ $ sudo cmp -b data64.plain dec_data.bin && echo $? ``` 命令执行的结果如下图: - ![](../../assets/tkm-10.png) + ![](../../assets/TKM/tkm-10.png) (5)机器S与机器D清理测试环境 @@ -184,7 +179,7 @@ $ sudo hag tkm key_destroy -handle 0x200029a -auth intl.auth ``` 命令执行的结果如下图: - ![](../../assets/tkm-11.png) + ![](../../assets/TKM/tkm-11.png) 机器D清理: ``` @@ -194,13 +189,13 @@ $ sudo hag tkm key_destroy -handle 0xb0003e8 -auth intl.auth ``` 命令执行的结果如下图: - ![](../../assets/tkm-12.png) + ![](../../assets/TKM/tkm-12.png) #### 3.3.2 迁移场景二:rsa公钥加密导出,私钥解密导入迁移 **场景说明:** -该场景与迁移场景一基本类似,不同之处一个为非对称密钥使用RSA来实现,另一个不同为由于当前RSA不支持内部密钥,因此需要使用应用密钥RSA来实现,需要先在TKM设备产生一个RSA应用密钥,之后过程与场景一基本相同(SM2也可以使用应用密钥来完成密钥迁移,过程与通过RSA过程基本一致,不再赘述)。 +该场景与迁移场景一基本类似,不同之处为非对称密钥使用应用密钥RSA来实现,需要先在TKM设备产生一个RSA应用密钥,之后过程与场景一基本相同(SM2也可以使用应用密钥来完成密钥迁移,过程与通过RSA过程基本一致,不再赘述)。 **操作过程说明:** @@ -210,18 +205,18 @@ $ sudo hag tkm intl_key_gen -type sm4 -idx 666 -auth intl.auth -attr exportable ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-13.png) + ![](../../assets/TKM/tkm-13.png) (2)在机器D端生成一对RSA父密钥,记录密钥返回句柄,并导出其公钥,将公钥传递到机器S; ``` $ sudo hag tkm intl_key_gen -type sm4 -idx 1000 -auth intl.auth -$ sudo hag tkm app_key_gen -type rsa1024 -phandle 0x20003e8 -pauth intl.auth -out rsa1024_enc_key.bin -$ sudo hag tkm key_import -phandle 0x20003e8 -pauth intl.auth -key rsa1024_enc_key.bin -auth apk.auth -$ sudo hag tkm pubkey_export -handle 0x8f000023 -out rsa_pubkey.bin +$ sudo hag tkm app_key_gen -type rsa2048 -phandle 0x20003e8 -pauth intl.auth -out rsa2048_enc_key.bin -pad +$ sudo hag tkm key_import -phandle 0x20003e8 -pauth intl.auth -key rsa2048_enc_key.bin -auth apk.auth -pad +$ sudo hag tkm pubkey_export -handle 0x90000001 -out rsa_pubkey.bin ``` 命令执行的结果如下图: - ![](../../assets/tkm-14.png) + ![](../../assets/TKM/tkm-14.png) (3)机器S使用从机器D收到的公钥以及待导出密钥对应索引值调用RSA加密导出接口获取密文密钥,并使用待导出密钥对一段数据明文进行加密,将数据明文以及加密后的数据密文传递到机器D; ``` @@ -231,18 +226,18 @@ $ sudo hag tkm sm4 -handle 0x200029a -auth intl.auth -iv iv.data -in data64.plai ``` 命令执行的结果如下图: -![](../../assets/tkm-15.png) +![](../../assets/TKM/tkm-15.png) (4)机器D调用密钥导入接口导入从机器S收到的密钥密文并指定其使用RSA父密钥私钥解密装载,记录装载成功后返回的装载密钥索引,密钥迁移成功。使用装载密钥索引解密从机器S收到的数据密文,得到解密明文;将解密明文与数据明文对比,若一致表示迁移正常,否则迁移密钥异常; ``` $ ls -l -$ sudo hag tkm key_import -phandle 0x8f000023 -pauth apk.auth -key ex_enckey.bin -idx 666 -auth intl.auth +$ sudo hag tkm key_import -phandle 0x90000001 -pauth apk.auth -key ex_enckey.bin -idx 666 -auth intl.auth $ sudo hag tkm sm4 -handle 0x200029a -auth intl.auth -iv iv.data -in enc_data.bin -out dec_data.bin -d -m ecb -p pkcs7 $ sudo cmp -b data64.plain dec_data.bin && echo $? ``` 命令执行的结果如下图: - ![](../../assets/tkm-16.png) + ![](../../assets/TKM/tkm-16.png) (5)机器S与机器D清理测试环境 @@ -253,18 +248,18 @@ $ sudo hag tkm key_destroy -handle 0x200029a -auth intl.auth ``` 命令执行的结果如下图: - ![](../../assets/tkm-17.png) + ![](../../assets/TKM/tkm-17.png) 机器D清理: ``` -$ sudo rm -rf dec_data.bin enc_data.bin ex_enckey.bin rsa1024_enc_key.bin rsa_pubkey.bin -$ sudo hag tkm key_destroy -handle 0x8f000023 -auth apk.auth +$ sudo rm -rf dec_data.bin enc_data.bin ex_enckey.bin rsa2048_enc_key.bin rsa_pubkey.bin +$ sudo hag tkm key_destroy -handle 0x90000001 -auth apk.auth $ sudo hag tkm key_destroy -handle 0x200029a -auth intl.auth $ sudo hag tkm key_destroy -handle 0x20003e8 -auth intl.auth ``` 命令执行的结果如下图: - ![](../../assets/tkm-18.png) + ![](../../assets/TKM/tkm-18.png) #### 3.3.3 迁移场景三:派发对称密钥加密导出、解密导入迁移 @@ -272,7 +267,7 @@ $ sudo hag tkm key_destroy -handle 0x20003e8 -auth intl.auth 该场景根据对称密钥算法特性,首先通过派发过程,保证两台机器中有相同的密钥,之后分别使用相同密钥对应的句柄分别对需要迁移的密钥进行加密导出与解密导入装载,最后通过对装载后的密钥进行基本的加解密测试来验证迁移密钥的正确性,基本过程如下图所示。 - ![](../../assets/tkm-19.png) + ![](../../assets/TKM/tkm-19.png) **操作过程说明:** @@ -282,7 +277,7 @@ $ sudo hag tkm intl_key_gen -type sm4 -idx 666 -auth intl.auth -attr exportable ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-20.png) + ![](../../assets/TKM/tkm-20.png) (2)分别在机器S与机器D端派发相同的密钥到设备内部; @@ -295,7 +290,7 @@ $ sudo hag tkm key_import -phandle 0xb0003e8 -pauth intl.auth -key kek_enc_key.b ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-21.png) + ![](../../assets/TKM/tkm-21.png) 机器D派发密钥: ``` @@ -306,7 +301,7 @@ $ sudo hag tkm key_import -phandle 0xb0003e8 -pauth intl.auth -key kek_enc_key.b ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-22.png) + ![](../../assets/TKM/tkm-22.png) (3)机器S指定使用派发密钥调用对称加密导出接口获得密文密钥,并使用待导出密钥对一段数据明文进行加密,将密文密钥、数据明文以及加密后的数据密文传递到机器D; ``` @@ -316,7 +311,7 @@ $ ls -l ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-23.png) + ![](../../assets/TKM/tkm-23.png) (4)机器D调用密钥导入接口导入从机器S收到的密钥密文并指定其使用派发密钥解密装载,记录装载成功后返回的装载密钥索引,密钥迁移成功。使用装载密钥索引解密从机器S收到的数据密文,得到解密明文;将解密明文与数据明文对比,若一致表示迁移正常,否则迁移密钥异常; ``` @@ -327,7 +322,7 @@ $ sudo cmp -b data64.plain dec_data.bin && echo $? ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-24.png) + ![](../../assets/TKM/tkm-24.png) (5)机器S与机器D清理测试环境。 @@ -340,7 +335,7 @@ $ sudo hag tkm key_destroy -handle 0xb0003e8 -auth intl.auth ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-25.png) + ![](../../assets/TKM/tkm-25.png) 机器D清理: ``` @@ -351,7 +346,7 @@ $ sudo hag tkm key_destroy -handle 0xb0003e8 -auth intl.auth ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-26.png) + ![](../../assets/TKM/tkm-26.png) ### 3.4.sm4应用密钥加解密场景 @@ -359,7 +354,7 @@ $ sudo hag tkm key_destroy -handle 0xb0003e8 -auth intl.auth sm4应用密钥加解密逻辑如下图所示,首先调用TKM接口生成一个内部对称密钥作为父密钥,然后调用TKM密钥生成加密导出接口生成并导出应用密钥,应用密钥指定使用父密钥加密,密钥类型根据需要设置,导出的密文应用密钥用户可以自行存储,在需要使用时,调用TKM导入接口导入装载密文应用密钥到TKM设备,导入成功后TKM设备返回应用密钥句柄,用户通过该句柄即可调用TKM加解密接口完成加解密数据操作。 -![](../../assets/tkm-27.png) +![](../../assets/TKM/tkm-27.png) **操作过程说明:** @@ -371,7 +366,7 @@ $ sudo hag tkm key_import -phandle 0x20003e8 -pauth intl.auth -key sm4_enc_key.b ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-28.png) + ![](../../assets/TKM/tkm-28.png) (2)传入sm4应用密钥句柄使用其对应密钥进行对称加解密 ``` @@ -381,7 +376,7 @@ $ sudo cmp -b data64.plain dec_plain.bin && echo $? ``` 命令执行的结果如下图: - ![](../../assets/tkm-29.png) + ![](../../assets/TKM/tkm-29.png) (3)清理测试环境,销毁密钥 ``` @@ -391,7 +386,7 @@ $ sudo hag tkm key_destroy -handle 0x20003e8 -auth intl.auth ``` 命令执行的结果如下图: - ![](../../assets/tkm-30.png) + ![](../../assets/TKM/tkm-30.png) ### 3.5.sm2应用密钥签名验签场景 @@ -399,7 +394,7 @@ $ sudo hag tkm key_destroy -handle 0x20003e8 -auth intl.auth sm2应用密钥签名验签逻辑如下图所示,首先调用TKM接口生成一个内部对称密钥作为父密钥,然后调用TKM密钥生成加密导出接口生成并导出应用密钥,应用密钥指定使用父密钥加密,密钥类型根据需要设置,导出的密文应用密钥用户可以自行存储,在需要使用时,调用TKM导入接口导入装载密文应用密钥到TKM设备,导入成功后TKM设备返回应用密钥句柄,用户通过该句柄即可调用TKM接口完成签名验签操作。 - ![](../../assets/tkm-31.png) + ![](../../assets/TKM/tkm-31.png) **操作过程说明:** @@ -411,7 +406,7 @@ $ sudo hag tkm key_import -phandle 0x20003e8 -pauth intl.auth -key sm2_enc_key.b ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-32.png) + ![](../../assets/TKM/tkm-32.png) (2)传入sm2应用密钥句柄使用其对应密钥进行签名验签 ``` @@ -421,7 +416,7 @@ $ sudo hag tkm sm2_verify -dgst data32.plain -pub sm2_pubkey.bin -sig sm2_sign.b ``` 命令执行的结果如下图: - ![](../../assets/tkm-33.png) + ![](../../assets/TKM/tkm-33.png) (3)清理测试环境,销毁密钥 ``` @@ -431,7 +426,7 @@ $ sudo hag tkm key_destroy -handle 0x20003e8 -auth intl.auth ``` 命令执行的结果如下图: - ![](../../assets/tkm-34.png) + ![](../../assets/TKM/tkm-34.png) ### 3.6.sm2应用密钥加密解密场景 @@ -439,7 +434,7 @@ $ sudo hag tkm key_destroy -handle 0x20003e8 -auth intl.auth sm2应用密钥加解密逻辑如下图所示,首先调用TKM接口生成一个内部对称密钥作为父密钥,然后调用TKM密钥生成加密导出接口生成并导出应用密钥,应用密钥指定使用父密钥加密,密钥类型根据需要设置,导出的密文应用密钥用户可以自行存储,在需要使用时,调用TKM导入接口导入装载密文应用密钥到TKM设备,导入成功后TKM设备返回应用密钥句柄,用户通过该句柄即可调用TKM接口完成加解密操作。 - ![](../../assets/tkm-35.png) + ![](../../assets/TKM/tkm-35.png) **操作过程说明:** @@ -451,7 +446,7 @@ $ sudo hag tkm key_import -phandle 0x20003e8 -pauth intl.auth -key sm2_enc_key.b ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-36.png) + ![](../../assets/TKM/tkm-36.png) (2)传入sm2应用密钥句柄使用其对应密钥进行加密解密 ``` @@ -462,7 +457,7 @@ $ sudo cmp -b data32.plain sm2_dec_data.bin && echo $? ``` 命令执行的结果如下图: - ![](../../assets/tkm-37.png) + ![](../../assets/TKM/tkm-37.png) (3)清理测试环境,销毁密钥 ``` @@ -472,7 +467,7 @@ $ sudo hag tkm key_destroy -handle 0x20003e8 -auth intl.auth ``` 命令执行的结果如下图: - ![](../../assets/tkm-38.png) + ![](../../assets/TKM/tkm-38.png) ### 3.7.rsa应用密钥签名验签场景 @@ -480,39 +475,39 @@ $ sudo hag tkm key_destroy -handle 0x20003e8 -auth intl.auth rsa应用密钥签名验签逻辑如下图所示,首先调用TKM接口生成一个内部对称密钥作为父密钥,然后调用TKM密钥生成加密导出接口生成并导出应用密钥,应用密钥指定使用父密钥加密,密钥类型根据需要设置,导出的密文应用密钥用户可以自行存储,在需要使用时,调用TKM导入接口导入装载密文应用密钥到TKM设备,导入成功后TKM设备返回应用密钥句柄,用户通过该句柄即可调用TKM接口完成签名验签操作。 - ![](../../assets/tkm-39.png) + ![](../../assets/TKM/tkm-39.png) **操作过程说明:** (1)基于内部密钥产生并装载应用密钥获得rsa应用密钥句柄 ``` $ sudo hag tkm intl_key_gen -type sm4 -idx 1000 -auth intl.auth -$ sudo hag tkm app_key_gen -type rsa1024 -phandle 0x20003e8 -pauth intl.auth -out rsa1024_enc_key.bin -$ sudo hag tkm key_import -phandle 0x20003e8 -pauth intl.auth -key rsa1024_enc_key.bin -auth apk.auth +$ sudo hag tkm app_key_gen -type rsa2048 -phandle 0x20003e8 -pauth intl.auth -out rsa2048_enc_key.bin -pad +$ sudo hag tkm key_import -phandle 0x20003e8 -pauth intl.auth -key rsa2048_enc_key.bin -auth apk.auth -pad ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-40.png) + ![](../../assets/TKM/tkm-40.png) (2)传入rsa应用密钥句柄使用其对应密钥进行签名验签 ``` -$ sudo hag tkm rsa_sign -handle 0x8f000002 -auth apk.auth -in data32.plain -out rsa_sign_out.bin -hash sha256 -$ sudo hag tkm pubkey_export -handle 0x8f000002 -out rsa_pubkey.bin +$ sudo hag tkm rsa_sign -handle 0x90000001 -auth apk.auth -in data32.plain -out rsa_sign_out.bin -hash sha256 +$ sudo hag tkm pubkey_export -handle 0x90000001 -out rsa_pubkey.bin $ sudo hag tkm rsa_verify -in data32.plain -pub rsa_pubkey.bin -sig rsa_sign_out.bin -hash sha256 ``` 命令执行的结果如下图: - ![](../../assets/tkm-41.png) + ![](../../assets/TKM/tkm-41.png) (3)清理测试环境,销毁密钥 ``` -$ sudo rm -rf rsa1024_enc_key.bin rsa_sign_out.bin rsa_pubkey.bin -$ sudo hag tkm key_destroy -handle 0x8f000002 -auth apk.auth +$ sudo rm -rf rsa2048_enc_key.bin rsa_sign_out.bin rsa_pubkey.bin +$ sudo hag tkm key_destroy -handle 0x90000001 -auth apk.auth $ sudo hag tkm key_destroy -handle 0x20003e8 -auth intl.auth ``` 命令执行的结果如下图: - ![](../../assets/tkm-42.png) + ![](../../assets/TKM/tkm-42.png) ### 3.8.rsa应用密钥加密解密场景 @@ -520,40 +515,40 @@ $ sudo hag tkm key_destroy -handle 0x20003e8 -auth intl.auth rsa应用密钥签名验签逻辑如下图所示,首先调用TKM接口生成一个内部对称密钥作为父密钥,然后调用TKM密钥生成加密导出接口生成并导出应用密钥,应用密钥指定使用父密钥加密,密钥类型根据需要设置,导出的密文应用密钥用户可以自行存储,在需要使用时,调用TKM导入接口导入装载密文应用密钥到TKM设备,导入成功后TKM设备返回应用密钥句柄,用户通过该句柄即可调用TKM接口完成加解密操作。 - ![](../../assets/tkm-43.png) + ![](../../assets/TKM/tkm-43.png) **操作过程说明:** (1)基于内部密钥产生并装载应用密钥获得rsa应用密钥句柄 ``` $ sudo hag tkm intl_key_gen -type sm4 -idx 1000 -auth intl.auth -$ sudo hag tkm app_key_gen -type rsa1024 -phandle 0x20003e8 -pauth intl.auth -out rsa1024_enc_key.bin -$ sudo hag tkm key_import -phandle 0x20003e8 -pauth intl.auth -key rsa1024_enc_key.bin -auth apk.auth +$ sudo hag tkm app_key_gen -type rsa2048 -phandle 0x20003e8 -pauth intl.auth -out rsa2048_enc_key.bin -pad +$ sudo hag tkm key_import -phandle 0x20003e8 -pauth intl.auth -key rsa2048_enc_key.bin -auth apk.auth -pad ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-44.png) + ![](../../assets/TKM/tkm-44.png) (2)传入rsa应用密钥句柄使用其对应密钥进行加密解密 ``` -$ sudo hag tkm pubkey_export -handle 0x8f000005 -out rsa_pubkey.bin +$ sudo hag tkm pubkey_export -handle 0x90000001 -out rsa_pubkey.bin $ sudo hag tkm rsa_enc -in data32.plain -pub rsa_pubkey.bin -out rsa_enc_data.bin -$ sudo hag tkm rsa_dec -handle 0x8f000005 -auth apk.auth -in rsa_enc_data.bin -out rsa_dec_data.bin +$ sudo hag tkm rsa_dec -handle 0x90000001 -auth apk.auth -in rsa_enc_data.bin -out rsa_dec_data.bin $ sudo cmp -b data32.plain rsa_dec_data.bin && echo $? ``` 命令执行的结果如下图: - ![](../../assets/tkm-45.png) + ![](../../assets/TKM/tkm-45.png) (3)清理测试环境,销毁密钥 ``` -$ sudo rm -rf rsa1024_enc_key.bin rsa_pubkey.bin rsa_dec_data.bin  rsa_enc_data.bin -$ sudo hag tkm key_destroy -handle 0x8f000005 -auth apk.auth +$ sudo rm -rf rsa2048_enc_key.bin rsa_pubkey.bin rsa_dec_data.bin  rsa_enc_data.bin +$ sudo hag tkm key_destroy -handle 0x90000001 -auth apk.auth $ sudo hag tkm key_destroy -handle 0x20003e8 -auth intl.auth ``` 命令执行的结果如下图: - ![](../../assets/tkm-46.png) + ![](../../assets/TKM/tkm-46.png) ### 3.9.密钥协商应用场景验证(hag与固件build_id为1828及以上版本支持) @@ -563,7 +558,7 @@ $ sudo hag tkm key_destroy -handle 0x20003e8 -auth intl.auth 这里在密钥协商成功后做了一个简单的测试来验证被协商的密钥时相同的,即指定机器S协商密钥加密一段数据,使用机器D协商的密钥解密,通过对比明文与解密后的明文是否一致即可进一步验证密钥协商的正确性。 - ![](../../assets/tkm-47.png) + ![](../../assets/TKM/tkm-47.png) **操作过程说明:** @@ -576,7 +571,7 @@ $ sudo hag tkm pubkey_export -handle 0xb0003e9 -out TmpPkey_S.bin ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-48.png) + ![](../../assets/TKM/tkm-48.png) (2)在机器D端生成主密钥与临时密钥,并导出其公钥; ``` @@ -587,7 +582,7 @@ $ sudo hag tkm pubkey_export -handle 0xb00044d -out TmpPkey_D.bin ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-49.png) + ![](../../assets/TKM/tkm-49.png) (3)机器S与D交换公钥以及uid后,调用密钥协商命令协商密钥;协商完成后检查s1与sa初步验证协商正确性;并通过协商密钥句柄对一个测试数据进行加密,并将加密明文与密文发送到机器D; ``` @@ -597,7 +592,7 @@ $ sudo hag tkm sm4 -handle 0x82000003 -auth apk.auth -iv iv.data -in data64.plai ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-50.png) + ![](../../assets/TKM/tkm-50.png) (4)机器D与S交换公钥以及uid后,调用密钥协商命令协商密钥;协商完成后检查s1与sa初步验证协商正确性;并通过协商密钥句柄对机器D提供的数据密文进行解密,解密后通过验证解密明文与加密明文是否相同从而进一步验证密钥协商的正确性; ``` @@ -608,7 +603,7 @@ $ sudo cmp -b data64.plain dec_plain.bin && echo $? ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-51.png) + ![](../../assets/TKM/tkm-51.png) (5)机器S与机器D清理测试环境; @@ -621,7 +616,7 @@ $ sudo hag tkm key_destroy -handle 0xb0003e9 -auth intl.auth ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-52.png) + ![](../../assets/TKM/tkm-52.png) 机器D清理: ``` @@ -632,7 +627,7 @@ $ sudo hag tkm key_destroy -handle 0xb00044d -auth intl.auth ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-53.png) + ![](../../assets/TKM/tkm-53.png) ### 3.10.内部密钥备份与恢复场景(hag与固件build_id为1877及以上版本支持) @@ -644,7 +639,7 @@ $ sudo hag tkm key_destroy -handle 0xb00044d -auth intl.auth 该场景通过使用CPU内唯一机密信息派生密钥,由该密钥对内部密钥进行加密及完整性保护,从而支持将设备内所有内部密钥备份,且仅支持在该设备内恢复,其他设备由于CPU内唯一机密信息不同,派生出来的密钥也将不同,因此将无法通过该密钥镜像进行恢复,如下图所示为一个基本的过程。这里在密钥恢复成功后做了一个简单的测试来验证密钥被成功恢复,即指定机器原密钥加密一段数据,使用机器恢复后的密钥解密,通过对比明文与解密后的明文是否一致即可进一步验证密钥备份恢复的正确性。 -  ![](../../assets/tkm-54.png) +  ![](../../assets/TKM/tkm-54.png) **操作过程说明:** @@ -655,7 +650,7 @@ $ sudo hag tkm sm4 -handle 0x200029a -auth intl.auth -iv iv.data -in data64.plai ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-55.png) + ![](../../assets/TKM/tkm-55.png) (2)调用密钥备份接口对上一步生成的sm4密钥进行备份,备份成功后,将上一步生成的sm4密钥销毁; ``` @@ -664,7 +659,7 @@ $ sudo hag tkm key_destroy -handle 0x200029a -auth intl.auth ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-56.png) + ![](../../assets/TKM/tkm-56.png) (3)调用密钥恢复接口对密钥进行恢复,密钥恢复成功后,使用被恢复的sm4密钥解密备份前的数据密文,得到解密明文;将解密明文与数据明文对比,若一致表示恢复正常,否则恢复密钥异常; ``` @@ -674,7 +669,7 @@ $ sudo cmp -b data64.plain dec_data.bin && echo $? ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-57.png) + ![](../../assets/TKM/tkm-57.png) (4)清理测试环境。 ``` @@ -683,7 +678,7 @@ $ sudo hag tkm key_destroy -handle 0x200029a -auth intl.auth ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-58.png) + ![](../../assets/TKM/tkm-58.png) #### 3.10.2 备份恢复场景二:同一代CPU备份与恢复 @@ -691,7 +686,7 @@ $ sudo hag tkm key_destroy -handle 0x200029a -auth intl.auth 该场景通过使用同一代CPU相同的密钥,由该密钥对内部密钥进行加密及完整性保护,从而支持将设备S内所有内部密钥备份,且在同一代的CPU的D设备内恢复,如下图所示为一个基本的过程。这里在密钥备份恢复成功后做了一个简单的测试来验证密钥被成功在另一台设备恢复,即指定机器S原密钥加密一段数据,使用机器D恢复后的密钥解密,通过对比明文与解密后的明文是否一致即可进一步验证密钥恢复的正确性。 - ![](../../assets/tkm-59.png)  + ![](../../assets/TKM/tkm-59.png)  **操作过程说明:** @@ -703,7 +698,7 @@ $ sudo hag tkm key_backup -auth sys.auth -scheme same_gen -outfile key_same_gen. ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-60.png) + ![](../../assets/TKM/tkm-60.png) (2)机器D使用从机器S获取的备份密钥文件调用恢复接口进行恢复,并使用恢复后的密钥解密从机器S收到的数据密文,得到解密明文;将解密明文与数据明文对比,若一致表示恢复正常,否则恢复密钥异常; ``` @@ -713,7 +708,7 @@ $ sudo cmp -b data64.plain dec_data.bin && echo $? ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-61.png) + ![](../../assets/TKM/tkm-61.png) (3)机器S与机器D清理测试环境。 @@ -724,7 +719,7 @@ $ sudo hag tkm key_destroy -handle 0x200029a -auth intl.auth ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-62.png) + ![](../../assets/TKM/tkm-62.png) 机器D清理: ``` @@ -733,7 +728,7 @@ $ sudo hag tkm key_destroy -handle 0x200029a -auth intl.auth ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-63.png) + ![](../../assets/TKM/tkm-63.png) #### 3.10.3 备份恢复场景三:设备证书方式备份与恢复 @@ -741,7 +736,7 @@ $ sudo hag tkm key_destroy -handle 0x200029a -auth intl.auth 该场景通过使用TKM设备证书,由恢复机器D将自己证书链提供给机器S,机器S首先对其进行证书链验证,验证通过后使用其TKM设备证书中的公钥在设备内通过密钥协商方式生成密钥,并将协商共享数据导出供后续机器D使用,之后使用该生成密钥对内部密钥进行加密及完整性保护,从而支持将设备S内所有内部密钥备份;在机器D恢复时,设备将会首先使用自己的设备私钥以及S传递的共享数据计算出协商密钥,之后该协商密钥对备份的密钥文件进行解密恢复,如下图所示为一个基本的过程。这里在密钥备份恢复成功后做了一个简单的测试来验证密钥被成功在另一台设备恢复,即指定机器S原密钥加密一段数据,使用机器D恢复后的密钥解密,通过对比明文与解密后的明文是否一致即可进一步验证密钥恢复的正确性。 - ![](../../assets/tkm-64.png) + ![](../../assets/TKM/tkm-64.png) **操作过程说明:** @@ -751,7 +746,7 @@ $ sudo hag tkm cert_chain_get -cert_type sign -outfile certchain.bin ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-65.png) + ![](../../assets/TKM/tkm-65.png) (2)在机器S中生成待备份密钥,这里以类型为sm4索引为666号密钥为例,然后使用该密钥对一段数据明文进行加密,加密成功后,调用备份接口对机器S密钥进行备份,并将加密数据密文、备份密钥文件、共享数据文件传递给机器D用于恢复验证; ``` @@ -761,7 +756,7 @@ $ sudo hag tkm key_backup -auth sys.auth -scheme dev_cert -outfile key_dev_cert. ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-66.png) + ![](../../assets/TKM/tkm-66.png) (3)机器D使用从机器S获取的备份密钥文件、共享数据文件调用恢复接口进行密钥恢复,并使用恢复后的密钥解密从机器S收到的数据密文,得到解密明文;将解密明文与数据明文对比,若一致表示恢复正常,否则恢复密钥异常; ``` @@ -771,7 +766,7 @@ $ sudo cmp -b data64.plain dec_data.bin && echo $? ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-67.png) + ![](../../assets/TKM/tkm-67.png) (4)机器S与机器D清理测试环境 @@ -782,7 +777,7 @@ $ sudo hag tkm key_destroy -handle 0x200029a -auth intl.auth ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-68.png) + ![](../../assets/TKM/tkm-68.png) 机器D清理: ``` @@ -791,7 +786,7 @@ $ sudo hag tkm key_destroy -handle 0x200029a -auth intl.auth ``` 命令正确执行的结果如下图: - ![](../../assets/tkm-69.png) + ![](../../assets/TKM/tkm-69.png) ### 3.11.环境清理 diff --git "a/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/3-HCT\350\231\232\346\213\237\345\214\226\346\214\207\345\257\274\346\226\207\346\241\243.md" "b/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/3-HCT\350\231\232\346\213\237\345\214\226\346\214\207\345\257\274\346\226\207\346\241\243.md" index 936dddba1a78fbe6621c2a09a7e1519f0d16ac36..0a03b014d1e29110e378ba542fd4266e695643cb 100644 --- "a/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/3-HCT\350\231\232\346\213\237\345\214\226\346\214\207\345\257\274\346\226\207\346\241\243.md" +++ "b/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/3-HCT\350\231\232\346\213\237\345\214\226\346\214\207\345\257\274\346\226\207\346\241\243.md" @@ -19,7 +19,7 @@ $ sudo /opt/hygon/hct/hct/script/hctconfig start -p 16 -q 128 ``` 此处-p 16是创建16个宿主机使用的mdev设备,-q 128是创建128个虚拟机使用的mdev,用户可根据需求自行修改。 -如需启动带vTKM功能的虚拟机,请先参照[《密钥管理功能测试》](./2-密钥管理功能测试.md)在宿主机中搭建开发环境。 +**如需启动带vTKM功能的虚拟机,请先参照[《海光SDF接口用户手册》](./5-海光SDF接口用户手册.md)6.2节确认安装支持vTKM的内核与QEMU版本。** ### 1.2 编译安装qemu @@ -37,7 +37,7 @@ Tips:当前支持的版本有:2.12.0, 4.1.0, 6.2.0, 7.2.0。支持hct虚拟 |6.2.0 | 1886abda05f878303b140a345d53ffd899675be6
b046474dbc2560434dc1d2f4485b8b474d7d23e0
77e0f539ef8daacd27ea0f77dfed4b3a5c35d610| |7.2.0 | 6e868fb05ab96a27d26aaa71ecbf99352f29a5e5
950ae0538455f3505e9935807f4c1d1511674eb4
21e118a70be9fac634f9910aa0029e4cdcdc94f1| -如需使用vTKM完整功能,请获取如下patch(当前仅支持6.2.0版本) +**如需使用vTKM完整功能,请获取如下patch(当前仅支持6.2.0版本)** | 版本 | commit-id | |-----------------|-----------------------| @@ -95,10 +95,10 @@ $ /opt/hygon/hct/hct/script/start_qemu.py -q ../output/qemu-output/bin/qemu-syst -q后的参数为qemu可执行程序,可根据安装位置自行指定,默认为系统目录下的qemu-system-x86_64;-n后的参数为启动虚拟机的数量;-i后的参数为装有操作系统的虚拟磁盘,需要指定路径。 ![](../../assets/HCT/HCT_VM11.png) -如需启动带vTKM功能的虚拟机,先使用hag工具创建vid。并在脚本后请加--vid {vid_num} 参数。 +**如需启动带vTKM功能的虚拟机,先使用hag工具创建vid。并在脚本后请加--vid {vid_num} 参数。** ``` $ cd /opt/hygon/bin -$ sudo ./hag tkm vtkm_create -mode shared +$ sudo ./hag tkm vtkm_create -mode shared //若需要使用密钥隔离vTKM,模式配置为exclusive $ /opt/hygon/hct/hct/script/start_qemu.py -q ../output/qemu-output/bin/qemu-system-x86_64 -n 1 -i hct.qcow2 --vid 1 ``` ![](../../assets/HCT/HCT_VM17.png) @@ -153,7 +153,7 @@ $ cat /sys/module/vfio/parameters/enable_unsafe_noiommu_mode ``` ![](../../assets/HCT/HCT_VM8.png) -如需验证vTKM功能,请先参照[《密钥管理功能测试》](./2-密钥管理功能测试.md) 1.1节,在虚拟机中安装对应的deb/rpm包。 +**如需验证vTKM功能,请先参照[《海光SDF接口用户手册》](./5-海光SDF接口用户手册.md) 2.2节,在虚拟机中安装对应的deb/rpm包。** ## 3. 功能测试 ### 3.1 HCT功能测试 @@ -175,36 +175,13 @@ $ sudo /opt/hygon/hct/bin/hct_speed -elapsed -engine hct -multi 1 -seconds 10 sm ### 3.2 vTKM功能测试 如无vTKM功能需求,可跳过。 -1\. 在主机中生成sm2签名密钥,这里以类型为sm2索引为666号密钥为例,然后使用该密钥对一个数据摘要进行签名(宿主机中进行); -``` -$ echo 87654321 | xxd -r -ps > intl.auth -$ sudo ./hag tkm rand_get -len 32 -out data32.plain -$ sudo ./hag tkm intl_key_gen -type sm2sign -idx 666 -auth intl.auth -$ sudo ./hag tkm sm2_sign -handle 0xa00029a -auth intl.auth -in data32.plain -out sm2_sign.bin -``` -![](../../assets/HCT/HCT_VM18.png) +#### 3.2.1 vTKM基本环境验证 +执行任意一个TKM命令,确认在虚拟机环境下已可以使用TKM,这里以hag tkm dev_info_get为例,执行成功可以说明vTKM基本环境已搭建完成。 -2\. 将主机中生成的data32.plain和sm2_sign.bin拷贝到虚拟机中(虚拟机中进行); -``` -$ scp {hostuser}@{hostip}:{file_path}/data32.plain ./ -$ scp {hostuser}@{hostip}:{file_path}/sm2_sign.bin ./ -``` -3\. 在虚拟机中通过与主机相同的密钥句柄导出其公钥(虚拟机中进行); -``` -$ sudo ./hag tkm pubkey_export -handle 0xa00029a -out sm2_pubkey.bin -``` -![](../../assets/HCT/HCT_VM19.png) +![虚拟机下TKM命令运行](../../assets/TKM/vTKM_dev_info.png) -4\. 使用公钥对主机的签名值进行验签(虚拟机中进行); -``` -$ sudo ./hag tkm sm2_verify -dgst data32.plain -pub sm2_pubkey.bin -sig sm2_sign.bin -``` -![](../../assets/HCT/HCT_VM20.png) - -5\. 清理主机环境(宿主机中进行)。 -``` -$ sudo ./hag tkm key_destroy -handle 0xa00029a -auth intl.auth -``` +#### 3.2.2 SDF基本环境验证 +请参照[《海光SDF接口用户手册》](./5-海光SDF接口用户手册.md) 第3节,在虚拟机中验证基本SDF接口,执行成功可以说明虚拟机下SDF环境已搭建完成。 ## 4. 备注 ### 4.1 注意事项 @@ -212,6 +189,8 @@ $ sudo ./hag tkm key_destroy -handle 0xa00029a -auth intl.auth ### 4.2 虚拟机启动参数 start_qemu.py启动虚拟机的参数为 ../output/qemu-output/bin/qemu-system-x86_64 --enable-kvm -cpu host -name hct_test_vm_0 -net user,hostfwd=tcp::2220-:22 -net nic -vnc :0 -hda /home/lixin/workspace/qemu_hct/sys_image/hct.qcow2 -m 12G -smp 36 -object memory-backend-ram,id=mem0,size=4G,policy=bind,host-nodes=2 -numa node,memdev=mem0,cpus=0-5,cpus=18-23,nodeid=0 -object memory-backend-ram,id=mem1,size=4G,policy=bind,host-nodes=4 -numa node,memdev=mem1,cpus=6-11,cpus=24-29,nodeid=1 -object memory-backend-ram,id=mem2,size=4G,policy=bind,host-nodes=6 -numa node,memdev=mem2,cpus=12-17,cpus=30-35,nodeid=2 -device hct,sysfsdev=/sys/bus/mdev/devices/e6cba2aa-7778-4f87-a962-7e3953ce2367 -device hct,sysfsdev=/sys/bus/mdev/devices/60b0cf7e-9a95-4dfb-956a-d2b5b23d0fcd -daemonize +**若使用带vTKM的虚拟机,则需要包含-device psp,vid=1参数,vid值根据实际vid号输入** + | 参数 | 解释 | |--------------------|-----------------------| |--enable-kvm |启用KVM加速,可以提高虚拟机的性能| @@ -226,7 +205,7 @@ start_qemu.py启动虚拟机的参数为 ../output/qemu-output/bin/qemu-system-x |-numa node,memdev=mem0,cpus=0-5,cpus=18-23,nodeid=0 |创建一个numa节点,关联内存,并指定与vcpu关联| |-device hct,sysfsdev=/sys/bus/mdev/devices/{uuid} |虚拟机中添加一个hct设备 | |-daemonize |后台运行虚拟机 | - +|-device psp,vid=1 |启动带vTKM的虚拟机,该虚拟机绑定vid为1对应的密钥空间 | ## 5. libvirt中使用虚拟机 使用前请自行安装4.5及以上版本的libvirt。可参考官方文档https://libvirt.org/docs.html diff --git "a/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/4-HCT\346\265\267\345\205\211\345\257\206\347\240\201\346\212\200\346\234\257\347\231\275\347\232\256\344\271\246.md" "b/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/4-HCT\346\265\267\345\205\211\345\257\206\347\240\201\346\212\200\346\234\257\347\231\275\347\232\256\344\271\246.md" new file mode 100644 index 0000000000000000000000000000000000000000..f206a523fb315d8bb9b4f0787d41572b2055c03d --- /dev/null +++ "b/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/4-HCT\346\265\267\345\205\211\345\257\206\347\240\201\346\212\200\346\234\257\347\231\275\347\232\256\344\271\246.md" @@ -0,0 +1,142 @@ +## 一、技术概述 +海光密码技术(HCT)包括密码运算加速引擎CAE (Crypto Accelerate Engine)和可信密钥管理模块TKM(Trusted Key Management Module)两部分,其中密码运算加密引擎是基于AVX指令集、国密指令集(CIS)和密码协处理器(CCP)开发的密码加速模块,兼容Openssl、Tongsuo、Kernel Crypto API接口。TKM可信密钥管理模块负责海光CPU内部的密钥管理并遵循 GM/T 0018 密码设备应用接口规范。 + +图1 海光密码技术HCT + + ![](../../assets/HCT/white_paper/hct_wp1.png) + +## 二、详细介绍 +### 2.1 海光CPU的芯片硬件基础架构 +C86计算核心提供密码指令集能力,PSP提供核心密钥管理功能,CCP提供密码运算功能。 + +图2 海光CPU的芯片硬件基础架构 + + ![](../../assets/HCT/white_paper/hct_wp2.png) + +#### 2.1.1 密码指令集(CIS) +海光CPU加入了一系列密码学运算加速指令,这些指令集被设计用于加速加密和解密操作,提高数据处理的安全性和效率,指令集具体如下: +- 支持AES、SHA指令集(海光2号/C86-3G/C86-4G); +- 支持随机数读取指令(RDRAND)和随机数种子读取指令(RDSEED); +- 支持国密(SM3、SM4)指令集,降低SM3/SM4软件实现复杂度(C86-4G)。 + +#### 2.1.2 平台安全处理器(PSP) +海光CPU内置了独立的平台安全处理器。如下图所示,该平台安全处理器具有以下特点: +- 具有自己独立的资源,外部(包括C86核心)不可访问; +- 具有很高的系统权限,它可以访问所有的系统资源,包括CPU控制,系统内存及外设等; +- 系统上电时先于C86核心首先启动,C86核心何时启动由其决定,受其控制; +- 安全处理器的初始化代码固化在芯片内部,不可更改,初始代码对后续代码进行合法性和完整性验证,确保安全可靠; +- C86核心通过固定的硬件接口与安全处理器通讯。 + +图3 平台安全处理器与C86核心 + + ![](../../assets/HCT/white_paper/hct_wp3.png) + +平台安全处理器的上述特点非常适合实现密钥管理等相关应用。 + +#### 2.1.3 密码协处理器(CCP) +海光CPU内部包含密码协处理器(CCP),它是独立的硬件模块,密码协处理器分为两类,其中一类是PSP-CCP,另一类是NTB-CCP。PSP-CCP供PSP安全处理器使用,提供CPU内密钥生成、安全启动、可信计算等,支持TKM等模块内部的密码运算;而NTB-CCP供C86计算核心使用,用来支持纯算力的密码学运算。芯片支持通过配置将PSP-CCP提供C86核心使用,完成NTB-CCP类似的功能。其具体功能如下: +- 支持SM2、SM3、SM4算法(海光2号/C86-3G/C86-4G); +- 支持ECC、SHA、AES算法(C86-4G); +- 内置真随机数发生器(TRNG); +- 使用平衡指令分支(SM2)、掩码(SM4)等技术,抵御时间、功耗等侧信道分析; +- 支持SM4加密算法 ECB/CBC/OFB/CTR/CFB模式。 + +图4 C86-4G密码协处理器CCP + + ![](../../assets/HCT/white_paper/hct_wp4.png) + +### 2.2 密码运算加速引擎CAE +#### 2.2.1 海光密码运算加速引擎CAE介绍 +密码运算加密引擎CAE利用密码协处理器和密码指令集,以OpenSSL、Tongsuo、Kernel Crypto API等标准接口为系统应用提供标准密码算法接口,极大提升接口密码算法性能。密码协处理器(CCP)作为独立计算资源,从硬件层面支持密码学运算和真随机数生成,不仅可以减轻中央处理器的计算负担,同时还能为密码运算提供硬件加速;密码指令集(CIS)也支持密码学运算加速。通过综合利用密码协处理器和密码指令集,结合软件优化,可以有效地提升TLS、IPSec等密码协议的性能。 + +#### 2.2.2 CAE提供的密码接口 +CAE提供了完备的国密sm2/sm3/sm4接口,并基于这些接口封装了标准的OPENSSL引擎,用户可以基于OPENSSL EVP接口,加载hct引擎来调用海光CPU内置的密码算力,以此来快速完成密码应用的开发和改造。hct 引擎典型的使用步骤如下: +``` +… +ENGINE_load_builtin_engines(); +e = ENGINE_by_id(“hct”); +EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); +EVP_CipherInit_ex(ctx, EVP_sm4_ecb(), e, key, NULL, enc); +… +``` +此外,CAE还提供了丰富的底层接口,支持批处理,用户可根据项目需求直接调用。 + +### 2.3 海光可信密钥管理模块TKM +#### 2.3.1 海光可信密钥管理模块TKM介绍 +CPU基于安全处理器PSP和密码协处理器CCP实现了“可信密钥管理模块”TKM,用户把密钥存储在TKM内部,外部不可见。用户使用时只需指定密钥在TKM内部的索引或句柄,通过调用TKM提供的业务接口高效的完成密码运算。TKM可以达到用户对密钥“可用不可见”的效果,实现对密钥的保护。 + +图5 海光可信密码模块TKM + + ![](../../assets/HCT/white_paper/hct_wp5.png) + + TKM的功能特性: +1. 模块内支持多种类型的密钥; +2. 对外提供业务接口和管理接口两大类接口,业务接口主要提供密码运算支持,管理接口提供对设备及密钥的管理; +3. 主要业务接口全部支持批处理,最大程度的提高系统性能; +4. 支持与系统可信状态进行绑定,只有当系统完整性度量符合预期时才能使用模块内密钥,进一步保证了密钥的安全; +5. 密钥管理功能 + - 密钥生成:支持密钥由内部随机生成,采用TRNG硬件真随机数源。 + - 密钥协商:支持密钥协商的方式生成共享密钥 + - 密钥派生:支持基于HMAC算法派生模式的密钥派生 + - 密钥导出:支持密钥以密文形式导出 + - 密钥更新:支持内部密钥的更新,包括对称非对称密钥 + - 密钥销毁:支持销毁除设备密钥外所有密钥 + - 密钥备份与恢复:支持以安全的方式备份所有内部密钥为密钥镜像,以及从密钥镜像恢复所有密钥。备份恢复支持三种方式: + - (1)仅支持同一个设备上备份恢复; + - (2)仅支持同一代CPU间备份恢复; + - (3)支持不同代CPU间备份恢复。 +6. 密码运算功能 + - 对称加解密:支持SM4/AES对称加解密,支持ECB、CBC、CFB、OFB、CTR模式 + - 非对称加解密:支持SM2/RSA算法加解密 + - 签名验签:支持SM2/RSA算法签名验签 + - 哈希计算:支持SM3算法的哈希计算 + - 消息鉴别码:支持基于SM3/SHA算法的HMAC产生与验证 + - CMAC运算:支持基于SM4/AES算法的CMAC运算 + - 数字信封:支持数字信封的方式对数据进行加解密 + - 随机数产生:支持基于硬件的真随机数产生 +7. 支持物理主机使用TKM的同时,通过TKM虚拟化技术虚拟出多个vTKM实例,支持虚拟机内使用vTKM,主要特性如下: + - 虚拟机内使用vTKM,vTKM提供与主机TKM相同的密钥管理与密码运算功能; + - vTKM实例之间相互隔离,每个vTKM实例代表一个独立的密钥空间。 + - 支持每个虚拟机独占一个vTKM实例,拥有自己独立的密钥资源,相互之间不可访问,也支持多个虚拟机共享同一个vTKM实例,共享同一个密钥空间; + +#### 2.3.2 TKM提供的密码接口 +海光密码模块TKM遵循 GM/T 0018 密码设备应用接口规范,也可为客户提供扩展接口定制。 + +## 三、海光密码技术优势 +### 3.1 高性能 +密码运算加密引擎包括密码指令集和密码协处理器,海光CPU的各项密码运算性能均远高于市面上的中高端密码卡,能够达到传统加密卡的数倍左右,在大批量数据处理场景下密码运算优势明显。 + +### 3.2 适用性强 +海光在信创安全领域具备丰富的技术应用经验,并且对国密等技术能力进行了统筹升级,其 CPU 可适配于信创全场景需求。同时,其C86指令集兼容X86的各种云平台管理工具和软件,方便用户进行系统的部署和管理。 + +### 3.3 安全稳定 +密钥管理是密码技术的关键环节,通过将密钥管理功能内置于CPU,减少了外部设备的依赖,使使用过程变得更安全、更稳定,能够有效抵御外部攻击和干扰,实现全生命周期密钥管理,做密码编程时不用担心密钥泄露在内存软件中,保证密钥的 “可用不可见”,为数据的加密和解密提供了安全的密钥保障。 + +### 3.4 兼容性好 +兼容X86指令集,无需进行大量修改适配工作,大大降低用户在密码应用方面的迁移成本和技术难度。此外,支持容器和虚拟机等部署场景,且兼容K8S、OpenStack等云平台管理工具,可实现快速灵活的动态扩容。 + +### 3.5 软件生态良好 +海光密码技术提供GM/T 0018标准接口,并通过HCT 引擎封装了密码协处理器的用户接口,可支持主流的密码套件,这使其能够与现有的密码软件生态系统进行良好的兼容,方便用户使用已有的密码软件和工具,在海光CPU平台上实现密码技术的应用,实现无缝迁移,进一步降低了用户的使用成本和技术门槛。 + +### 3.6 成本优势 +海光CPU的密码技术可以降低额外的采购成本,方案迁移的成本,开发维护的成本。 + +## 四、应用开发支撑 +1. HCT用户手册 +2. HCT虚拟化指导文档 +3. 海光SDF接口开发者文档 +4. 海光安全工具Hag使用说明文档 + +## 五、海光密码技术应用场景 +### 5.1 密码设备开发 +HCT的应用场景包括密码机服务器、工控系统以及各种通用系统中的密码管理等,基于HCT软件可以进一步封装符合多项标准的接口,可提供基于TKM实现的GM/T 0018标准接口,即SDF接口,可以替换现有的硬件密码卡,作为一些专用的密码设备来应用,比如密码机服务器、签名验签服务器、VPN服务器等。 + +### 5.2 分布式密码运算 +利用CPU自身具有TKM密钥管理的特性,取代原有通过网络访问密码卡资源池的方式,优化为通过分布式密码供给方式完成密码服务,进而降低成本、优化性能。 + +### 5.3 虚拟化密码能力 +基于虚拟机的vTKM能力,为上层密码应用提供底层密码能力支撑,实现密码应用在虚拟化环境下的密码能力合规使用,具备密码能力快速扩容、高兼容性、低成本的优势。 + +图6 海光芯片的虚拟化密码能力 + + ![](../../assets/HCT/white_paper/hct_wp6.png) \ No newline at end of file diff --git "a/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/5-\346\265\267\345\205\211SDF\346\216\245\345\217\243\347\224\250\346\210\267\346\211\213\345\206\214.md" "b/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/5-\346\265\267\345\205\211SDF\346\216\245\345\217\243\347\224\250\346\210\267\346\211\213\345\206\214.md" index 7f79b67a165ff9de1269a80af61a04836420f663..21620e5b4925a6e07054d47785ed838b90b6c5c7 100644 --- "a/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/5-\346\265\267\345\205\211SDF\346\216\245\345\217\243\347\224\250\346\210\267\346\211\213\345\206\214.md" +++ "b/sig/Hygon Arch/content/3-HCT\346\265\213\350\257\225\346\226\207\346\241\243/5-\346\265\267\345\205\211SDF\346\216\245\345\217\243\347\224\250\346\210\267\346\211\213\345\206\214.md" @@ -9,9 +9,9 @@ | CPU | Hygon C86-3G及以上 | | | BIOS | 海光BIOS PI2.1.0.4,并且安全固件版本大于1881 | 安全固件动态升级参考: | | hag | 1881或以上 | 下载地址: | -| SDF | sdf-2.2.0-20240530 | 下载地址:[https://gitee.com/anolis/hygon-devkit/tree/master/tkm/pkg](https://gitee.com/anolis/hygon-devkit/tree/master/tkm/pkg/sdf-2.2.0-20240530) | -| TKM | tkm-3.2.0-20240530 | 下载地址:https://gitee.com/anolis/hygon-devkit/tree/master/tkm/pkg/ | -| HCT | hct_2.0.0.20240430_release | 下载地址:[https://gitee.com/anolis/hygon-devkit/tree/master/hct/pkg](https://gitee.com/anolis/hygon-devkit/tree/master/hct/pkg/hct_2.0.0.20240430_release) | +| SDF | sdf-2.3.0-20250130 | 下载地址:[https://gitee.com/anolis/hygon-devkit/tree/master/tkm/pkg](https://gitee.com/anolis/hygon-devkit/tree/master/tkm/pkg/sdf-2.3.0-20250130) | +| TKM | tkm-3.3.0-20250130 | 下载地址:[https://gitee.com/anolis/hygon-devkit/tree/master/tkm/pkg](https://gitee.com/anolis/hygon-devkit/tree/master/tkm/pkg/tkm-3.3.0-20250130) | +| HCT | hct_2.1.0.20241030_release | 下载地址:[https://gitee.com/anolis/hygon-devkit/tree/master/hct/pkg](https://gitee.com/anolis/hygon-devkit/tree/master/hct/pkg/hct_2.1.0.20241030_release) | | glibc | 2.17或以上 | | | python | 系统中必须存在python2命令 | | @@ -33,6 +33,7 @@ | 3.0.1 | 基本版本,支持所有0018定义的标准接口。 | | 3.1.0 | 在固件也满足条件的情况下,支持HYSDF_BackupKey、HYSDF_RestoryKey、HYSDF_DeviceFactoryReset接口 | | 3.2.0 | 密钥隔离虚拟化支持 | +| 3.3.0 | 增加CSV虚拟机使用TKM支持 | ### 1.3 安全固件版本的检查方式 @@ -67,28 +68,28 @@ $ sudo hag general version | 组件名称 | | |----|----| -| TKM | 下载链接:https://gitee.com/anolis/hygon-devkit/tree/master/tkm/pkg/tkm-3.2.0-20240530 | -| HCT | 下载链接:https://gitee.com/anolis/hygon-devkit/tree/master/hct/pkg/hct_2.0.0.20240430_release | -| SDF | 下载链接:https://gitee.com/anolis/hygon-devkit/tree/master/tkm/pkg/sdf-2.2.0-20240530 | +| TKM | 下载链接:https://gitee.com/anolis/hygon-devkit/tree/master/tkm/pkg/tkm-3.3.0-20250130 | +| HCT | 下载链接:https://gitee.com/anolis/hygon-devkit/tree/master/hct/pkg/hct_2.1.0.20241030_release | +| SDF | 下载链接:https://gitee.com/anolis/hygon-devkit/tree/master/tkm/pkg/sdf-2.3.0-20250130 | 从上述链接中下载需要版本的rpm或者deb,本文接下来将以rpm包为例进行安装。 1. **安装tkm软件包:** ``` -$ sudo rpm -ivh hygon-psp-3.2.0-1.x86_64.rpm +$ sudo rpm -ivh hygon-psp-3.3.0-1.x86_64.rpm ``` 2. **安装hct软件包:** ``` -$ sudo rpm -ivh hct-2.0.0-2024-0430-release.x86_64.rpm --nodeps +$ sudo rpm -ivh hct-2.1.0-2024-1030-release.x86_64.rpm --nodeps ``` **注意**:安装hct软件包时必须附加--nodeps选项,deb包安装可忽略 3. **安装sdf软件包:** ``` -$ sudo rpm -ivh hygon-sdf-2.2.0-1.x86_64.rpm +$ sudo rpm -ivh hygon-sdf-2.3.0-1.x86_64.rpm ``` **注意**:必须在tkm和hct软件包安装完成后才能进行sdf软件包的安装 @@ -96,7 +97,7 @@ $ sudo rpm -ivh hygon-sdf-2.2.0-1.x86_64.rpm **编译安装HCT内核模块要求内核版本在4.10及以上。** -请将https://gitee.com/anolis/hygon-devkit/blob/master/hct/pkg/hct_2.0.0.20240430_release/Makefile (如果使用其他版本HCT,请找到对应版本目录)文件下载到任意空目录中,并在该目录下执行以下命令编译并安装HCT内核模块。 +请将https://gitee.com/anolis/hygon-devkit/blob/master/hct/pkg/hct_2.1.0.20241030_release/Makefile (如果使用其他版本HCT,请找到对应版本目录)文件下载到任意空目录中,并在该目录下执行以下命令编译并安装HCT内核模块。 ``` $ make @@ -276,7 +277,7 @@ $ sudo /opt/hygon/hct/hct/script/hctconfig start 使用下列命令启动一个名为docker_image的容器,并支持SDF接口的调用: ``` -$ sudo docker run -v /dev/:/dev/ -v /etc/tkm_rootkey_img:/etc/tkm_rootkey_img –v /etc/psp_config:/etc/psp_config -v /lib/modules/:/lib/modules/ --name=sdf_test --privileged=true --net=host –itd docker_image /sbin/init +$ sudo docker run -v /dev/:/dev/ -v /etc/tkm_rootkey_img:/etc/tkm_rootkey_img -v /etc/psp_config:/etc/psp_config -v /lib/modules/:/lib/modules/ --name=sdf_test --privileged=true --net=host -itd docker_image /sbin/init $ sudo docker exec -it sdf_test bash ``` @@ -299,6 +300,123 @@ $ touch /etc/tkm_rootkey_img /etc/psp_config 1. 参考第2节中的步骤,在容器内分别安装好hct、tkm、sdf三个组件的软件包,无需再次导入证书和安装内核模块。 2. 参考第3节中相同的测试方式,在容器内进行测试验证。 -## 6. SDF扩展接口 +## 6. 虚拟机环境下使用SDF接口 +### 6.1 vTKM使用简介 +#### 6.1.1 vTKM两种模式 +在基于物理主机支持TKM的基础上,也可以实现基于虚拟机的vTKM(Virtual TKM)支持,,虚拟机下使用SDF基于vTKM实现,如下图所示,当前vTKM可以支持两种模式: +1. 支持虚拟机隔离独占密钥资源的使用,称为密钥隔离vTKM; +2. 支持多个虚拟机共享同一份密钥资源的使用,或虚拟机与主机共享同一份密钥资源的使用,称为密钥共享vTKM。 + +![vTKM密钥空间](../../assets/TKM/vTKM-1.png) + +#### 6.1.2 vTKM不同模式支持虚拟机类型 +目前普通虚拟机与CSV虚拟机均支持vTKM,对密钥空间的支持情况如下: +| **虚拟机** | **支持的vTKM模式** | +|------------|--------------------------------| +| 普通虚拟机 | 密钥隔离vTKM、密钥共享vTKM | +| CSV虚拟机 | 密钥隔离vTKM | + +#### 6.1.3 vTKM使用基本流程 +1. 通过hag工具在TKM内部创建vTKM密钥实体,可以选择创建密钥隔离的vTKM实体,也可以创建密钥共享的vTKM实体,创建成功后返回对应的标识符,这里以vid表示; +2. 启动虚拟机,在启动时根据用户需求传入对应的vid,TKM将vid对应的vTKM实体与该虚拟机相绑定; +3. 虚拟机正常启动后,可以在其环境下使用其对应的vTKM实体密钥资源进行密钥管理与相应的业务运算功能; + +![vTKM使用基本流程](../../assets/TKM/vTKM-2.png) + +### 6.2 主机环境说明 +#### 6.2.1 内核依赖 +- 相关内核支持补丁已推入各个主流社区,由于各OS厂商发布ISO镜像计划与进度不同,暂无法明确推荐已支持的ISO镜像,后续会根据其发布情况不定时更新。 +- 当前可以到社区下载已合入vTKM支持补丁的内核自行编译进行验证,如龙蜥社区,推荐已支持vTKM的内核代码如下: [龙蜥](https://gitee.com/anolis/cloud-kernel/tree/devel-6.6/) 、[欧拉](https://gitee.com/openeuler/kernel/tree/OLK-6.6/) 、[统信](https://github.com/deepin-community/kernel) 、[OpenCloud](https://gitee.com/OpenCloudOS/OpenCloudOS-Kernel) ,麒麟V10 SP3 2403 x86_64 内核版本大于等于 kernel-4.19.90-89.17.v2401.ky10 + +#### 6.2.2 QEMU依赖 +与内核相同,暂无法明确已支持的ISO镜像,建议目前通过自行编译源码方式进行验证,推荐使用[《HCT虚拟化指导文档》](https://openanolis.cn/sig/Hygon-Arch/doc/1110520213566721211)的1.2小节说明安装qemu,使用6.2.0分支版本。 + +### 6.3 普通虚拟机vTKM环境搭建 +参考[《HCT虚拟化指导文档》](https://openanolis.cn/sig/Hygon-Arch/doc/1110520213566721211)进行环境的安装与验证 + +### 6.4 CSV虚拟机vTKM环境搭建 +#### 6.4.1 CSV基础环境 +- CSV下使用TKM依赖于CSV基础环境,CSV基础环境搭建步骤在该文档不再重复赘述,可以参考[《安装CSV软件》](https://openanolis.cn/sig/Hygon-Arch/doc/865622260278236994)文档进行搭建,其中内核与QEMU版本建议使用6.2小节推荐版本(既包含了CSV也包含了vTKM的支持); +- 在内核与QEMU环境版本均满足的场景下,CSV虚拟机使用TKM仅需在QEMU启动命令行增加vid与mem2相关配置。 + +#### 6.4.2 CSV下使用vTKM基本步骤 +1. 创建 vtkm,获得vid +``` +// 创建默认密钥空间vTKM,若需要自定义密钥空间大小,可通过-cfg参数在创建时配置,详细使用方法可通过sudo hag vtkm_create --help查看 +$ sudo hag tkm vtkm_create -mode exclusive +``` +![vTKM创建独占vid](../../assets/TKM/vTKM_exclusive_vid_create.png) + +2. 根据获得的vid,将vTKM需要使用的vid参数以及mem2参数增加到QEMU启动行中,启动CSV虚拟机 +``` +// -device psp,vid=1 -mem2 base=512G,size=32M为CSV下vTKM需要使用命令,其它部分为CSV基础环境命令,可根据实际情况自行调整 +sudo qemu-system-x86_64 -cpu host -enable-kvm -m 4G -smp 8 -nographic /home/root/GuestOS/increment_vkm_test_03.img -device e1000,mac=00:16:3e:00:01:02,netdev=net0 -netdev user,id=net0,hostfwd=tcp::2003-:22 -drive if=pflash,format=raw,unit=0,file=/home/root/GuestOS/OVMF_CODE.fd,readonly=on -object sev-guest,id=sev0,policy=0x1,cbitpos=47,reduced-phys-bits=5 -machine memory-encryption=sev0 -device psp,vid=1 -mem2 base=512G,size=32M +``` +![CSV带vTKM启动](../../assets/TKM/vTKM_CSV_launch.png) + +vTKM参数说明: +| **参数** | **说明** | +|----------|--------------------------------| +| -device psp,vid=1 | 指定CSV虚拟机使用的密钥空间 | +| -mem2 base=512G,size=32M | QEMU为CSV虚拟机提供的给vTKM使用的内存空间| + +其中base=512G,size=32M参数指定时,qemu进程将在指定的地址范围内映射 16个2MB大页面,并将其绑定到相应的 TKM 密钥空间。 + +3. 进入虚拟机OS之后,使用dmesg查看BIOS-e820的地址范围包含[512G,512G+32M)区间,说明BIOS已经将mem2选项设置的内存空间提供给内核 + +![mem2预留空间](../../assets/TKM/vTKM_mem2.png) + +4. 首次进入CSV虚拟机的OS时,需要修改GRUB选项,设置memmap=32M$512G,确保内核预留[512G,512G+32M)内存范围,这里512G与32M需要与上面配置的base,size相同;若已配置,则可以跳过该步骤。配置成功后的效果如下图所示: + +![mem2预留空间](../../assets/TKM/vTKM_mem2_cmdline.png) + +5. 执行任意一个TKM命令,确认在CSV环境下已可以使用TKM,这里以hag tkm dev_info_get为例: + +![CSV虚拟机下TKM命令运行](../../assets/TKM/vTKM_dev_info.png) + + +### 6.5 SDF接口使用验证 +vTKM环境验证完成后,参考本文档第3节进行SDF基本接口的验证,验证通过则说明已可基于对应虚拟机使用SDF接口。 + +### 6.6 vTKM实例销毁 +当虚拟机使用vTKM实例完毕后,可以通过hag工具将其销毁,这里假设实例对应的vid为1,销毁方式如下: +``` +$ sudo ./hag tkm vtkm_destroy -vid 1 +``` +![vid销毁](../../assets/TKM/vTKM_vid_destroy.png) + +### 6.7 TKM密钥信息查看命令说明 +#### 6.7.1 查看当前环境密钥使用情况 +hag根据实际环境获得对应的密钥空间情况,**虚拟机主机下均可使用** +``` +$ sudo hag tkm get_key_usage +``` +![密钥空间使用情况查询](../../assets/TKM/tkm_get_key_usage.png) + +如上图为主机下通过该命令查询的密钥使用情况,可以看出主机使用的密钥空间下支持的密钥类型、每种类型最大支持的密钥数量以及当前已使用的密钥数量。 + +#### 6.7.2 主机查看指定vid对应密钥空间密钥使用情况 +**仅主机下可以使用** +``` +$ sudo hag tkm vtkm_key_usage_by_vid -vid 1 +``` +![指定vid密钥空间使用情况查询](../../assets/TKM/vTKM_get_vid_key_usage.png) + +如上图为主机下通过该命令查询vid1对应密钥空间的密钥使用情况,可以看出该密钥空间下支持的密钥类型、每种类型最大支持的密钥数量以及当前已使用的密钥数量。 + +#### 6.7.3 主机查看所有vid对应密钥空间密钥使用情况 +**仅主机下可以使用** +``` +$ sudo hag tkm vtkm_all_key_usage +``` +![所有密钥空间使用情况查询](../../assets/TKM/vTKM_all_key_usage.png) + +如上图为主机下通过该命令查询所有密钥空间的密钥使用情况,可以看出每个密钥空间下支持的密钥类型、每种类型最大支持的密钥数量以及当前已使用的密钥数量。 + +## 7. SDF扩展接口 关于扩展的自定义SDF接口说明详情,请联系海光技术支持人员获取《海光SDF扩展接口说明》。 + +## 8. SDF性能测试工具 + +关于海光SDF性能测试工具,请联系海光技术支持人员获取。 \ No newline at end of file