Tsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/security/secrets/cocomodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/zh_TW/security/secrets/cocomodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/it_IT/security/secrets/cocomodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ja_JP/security/secrets/cocomodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ko_KR/security/secrets/cocomodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/pt_BR/security/secrets/cocomodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/sp_SP/security/secrets/cocomodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhV/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/security/secrets/coco.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h(Documentation/security/secrets/coco.rst h]h)}(h'Documentation/security/secrets/coco.rsth]h'Documentation/security/secrets/coco.rst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhKubj)}(h.赵硕 Shuo Zhao h]h)}(h-赵硕 Shuo Zhao h](h赵硕 Shuo Zhao <}(hj4hhhNhNubh reference)}(hzhaoshuo@cqsoftware.com.cnh]hzhaoshuo@cqsoftware.com.cn}(hj>hhhNhNubah}(h]h ]h"]h$]h&]refuri!mailto:zhaoshuo@cqsoftware.com.cnuh1j<hj4ubh>}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj0ubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(h机密计算密钥h]h机密计算密钥}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1johjlhhhhhK ubh)}(h本文档介绍了在EFI驱动程序和efi_secret内核模块中,机密计算密钥从固件 到操作系统的注入处理流程。h]h本文档介绍了在EFI驱动程序和efi_secret内核模块中,机密计算密钥从固件 到操作系统的注入处理流程。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjlhhubjk)}(hhh](jp)}(h简介h]h简介}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjhhhhhKubh)}(hX+机密计算硬件(如AMD SEV,Secure Encrypted Virtualization)允许虚拟机 所有者将密钥注入虚拟机(VM)内存,且主机/虚拟机监控程序无法读取这些密 钥。在SEV中,密钥注入需在虚拟机启动流程的早期阶段(客户机开始运行前) 执行。h]hX+机密计算硬件(如AMD SEV,Secure Encrypted Virtualization)允许虚拟机 所有者将密钥注入虚拟机(VM)内存,且主机/虚拟机监控程序无法读取这些密 钥。在SEV中,密钥注入需在虚拟机启动流程的早期阶段(客户机开始运行前) 执行。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hrefi_secret内核模块允许用户空间应用程序通过securityfs(安全文件系统)访 问这些密钥。h]hrefi_secret内核模块允许用户空间应用程序通过securityfs(安全文件系统)访 问这些密钥。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id2ah ]h"]简介ah$]h&]uh1jjhjlhhhhhKubjk)}(hhh](jp)}(h密钥数据流h]h密钥数据流}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjhhhhhKubh)}(hX客户机固件可能会为密钥注入预留一块指定的内存区域,并将该区域的位置(基准 客户机物理地址GPA和长度)在EFI配置表中,通过 ``LINUX_EFI_COCO_SECRET_AREA_GUID`` 条目(对应的GUID值为 ``adf956ad-e98c-484c-ae11-b51c7d336447`` )的形式发布。 固件应将此内存区域标记为 ``EFI_RESERVED_TYPE`` ,因此内核不应将其用于自身用途。h](h客户机固件可能会为密钥注入预留一块指定的内存区域,并将该区域的位置(基准 客户机物理地址GPA和长度)在EFI配置表中,通过 }(hjhhhNhNubhliteral)}(h#``LINUX_EFI_COCO_SECRET_AREA_GUID``h]hLINUX_EFI_COCO_SECRET_AREA_GUID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 条目(对应的GUID值为 }(hjhhhNhNubj)}(h(``adf956ad-e98c-484c-ae11-b51c7d336447``h]h$adf956ad-e98c-484c-ae11-b51c7d336447}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh< )的形式发布。 固件应将此内存区域标记为 }(hjhhhNhNubj)}(h``EFI_RESERVED_TYPE``h]hEFI_RESERVED_TYPE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh1 ,因此内核不应将其用于自身用途。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hX虚拟机启动过程中,虚拟机管理器可向该区域注入密钥。在AMD SEV和SEV-ES中,此 操作通过 ``KVM_SEV_LAUNCH_SECRET`` 命令执行(参见 [sev_CN]_ )。注入的“客户机 所有者密钥数据”应采用带GUID的密钥值表结构,其二进制格式在 ``drivers/virt/ coco/efi_secret/efi_secret.c`` 文件的EFI密钥区域结构部分中有详细描述。h](hu虚拟机启动过程中,虚拟机管理器可向该区域注入密钥。在AMD SEV和SEV-ES中,此 操作通过 }(hjhhhNhNubj)}(h``KVM_SEV_LAUNCH_SECRET``h]hKVM_SEV_LAUNCH_SECRET}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh 命令执行(参见 }(hjhhhNhNubh)}(hsev_CNh]hinline)}(hj5h]h[sev_CN]}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj3ubah}(h]id4ah ]h"]h$]h&] refdomaincitationreftyperef reftargetj5refwarnsupport_smartquotesuh1hhhhK$hjhhubhs )。注入的“客户机 所有者密钥数据”应采用带GUID的密钥值表结构,其二进制格式在 }(hjhhhNhNubj)}(h.``drivers/virt/ coco/efi_secret/efi_secret.c``h]h*drivers/virt/ coco/efi_secret/efi_secret.c}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: 文件的EFI密钥区域结构部分中有详细描述。}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK$hjhhubh)}(hX,内核启动时,内核的EFI驱动程序将保存密钥区域位置(来自EFI配置表)到 ``efi.coco_secret`` 字段。随后,它会检查密钥区域是否已填充:映射该区域并检查其内容是否以 ``EFI_SECRET_TABLE_HEADER_GUID`` (对应的GUID为 ``1e74f542-71dd-4d66-963e-ef4287ff173b`` ) 开头。如果密钥区域已填充,EFI驱动程序将自动加载efi_secret内核模块,并通过securityfs将密钥 暴露给用户空间应用程序。efi_secret文件系统接口的详细信息请参考 [secrets-coco-abi_CN]_ 。h](ha内核启动时,内核的EFI驱动程序将保存密钥区域位置(来自EFI配置表)到 }(hjphhhNhNubj)}(h``efi.coco_secret``h]hefi.coco_secret}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubhh 字段。随后,它会检查密钥区域是否已填充:映射该区域并检查其内容是否以 }(hjphhhNhNubj)}(h ``EFI_SECRET_TABLE_HEADER_GUID``h]hEFI_SECRET_TABLE_HEADER_GUID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh (对应的GUID为 }(hjphhhNhNubj)}(h(``1e74f542-71dd-4d66-963e-ef4287ff173b``h]h$1e74f542-71dd-4d66-963e-ef4287ff173b}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh ) 开头。如果密钥区域已填充,EFI驱动程序将自动加载efi_secret内核模块,并通过securityfs将密钥 暴露给用户空间应用程序。efi_secret文件系统接口的详细信息请参考 }(hjphhhNhNubh)}(hsecrets-coco-abi_CNh]j8)}(hjh]h[secrets-coco-abi_CN]}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjubah}(h]id5ah ]h"]h$]h&] refdomainjNreftypejP reftargetjrefwarnsupport_smartquotesuh1hhhhK)hjphhubh 。}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK)hjhhubeh}(h]id3ah ]h"]密钥数据流ah$]h&]uh1jjhjlhhhhhKubjk)}(hhh](jp)}(h应用使用示例h]h应用使用示例}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1johjhhhhhK1ubh)}(hX假设客户机需要对加密文件进行计算处理。客户机所有者通过密钥注入机制提供解密密钥 (即密钥)。客户机应用程序从efi_secret文件系统读取该密钥,然后将文件解密到内存中, 接着对内容进行需要的计算。h]hX假设客户机需要对加密文件进行计算处理。客户机所有者通过密钥注入机制提供解密密钥 (即密钥)。客户机应用程序从efi_secret文件系统读取该密钥,然后将文件解密到内存中, 接着对内容进行需要的计算。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjhhubh)}(hX+在此示例中,主机无法从磁盘镜像中读取文件,因为文件是加密的;主机无法读取解密密钥, 因为它是通过密钥注入机制(即安全通道)传递的;主机也无法读取内存中的解密内容,因为 这是一个机密型(内存加密)客户机。h]hX+在此示例中,主机无法从磁盘镜像中读取文件,因为文件是加密的;主机无法读取解密密钥, 因为它是通过密钥注入机制(即安全通道)传递的;主机也无法读取内存中的解密内容,因为 这是一个机密型(内存加密)客户机。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjhhubh)}(h以下是一个简单的示例,展示了在客户机中使用efi_secret模块的过程,在启动时注入了 一个包含4个密钥的EFI密钥区域::h]h以下是一个简单的示例,展示了在客户机中使用efi_secret模块的过程,在启动时注入了 一个包含4个密钥的EFI密钥区域:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjhhubh literal_block)}(hX# ls -la /sys/kernel/security/secrets/coco total 0 drwxr-xr-x 2 root root 0 Jun 28 11:54 . drwxr-xr-x 3 root root 0 Jun 28 11:54 .. -r--r----- 1 root root 0 Jun 28 11:54 736870e5-84f0-4973-92ec-06879ce3da0b -r--r----- 1 root root 0 Jun 28 11:54 83c83f7f-1356-4975-8b7e-d3a0b54312c6 -r--r----- 1 root root 0 Jun 28 11:54 9553f55d-3da2-43ee-ab5d-ff17f78864d2 -r--r----- 1 root root 0 Jun 28 11:54 e6f5a162-d67f-4750-a67c-5d065f2a9910 # hd /sys/kernel/security/secrets/coco/e6f5a162-d67f-4750-a67c-5d065f2a9910 00000000 74 68 65 73 65 2d 61 72 65 2d 74 68 65 2d 6b 61 |these-are-the-ka| 00000010 74 61 2d 73 65 63 72 65 74 73 00 01 02 03 04 05 |ta-secrets......| 00000020 06 07 |..| 00000022 # rm /sys/kernel/security/secrets/coco/e6f5a162-d67f-4750-a67c-5d065f2a9910 # ls -la /sys/kernel/security/secrets/coco total 0 drwxr-xr-x 2 root root 0 Jun 28 11:55 . drwxr-xr-x 3 root root 0 Jun 28 11:54 .. -r--r----- 1 root root 0 Jun 28 11:54 736870e5-84f0-4973-92ec-06879ce3da0b -r--r----- 1 root root 0 Jun 28 11:54 83c83f7f-1356-4975-8b7e-d3a0b54312c6 -r--r----- 1 root root 0 Jun 28 11:54 9553f55d-3da2-43ee-ab5d-ff17f78864d2h]hX# ls -la /sys/kernel/security/secrets/coco total 0 drwxr-xr-x 2 root root 0 Jun 28 11:54 . drwxr-xr-x 3 root root 0 Jun 28 11:54 .. -r--r----- 1 root root 0 Jun 28 11:54 736870e5-84f0-4973-92ec-06879ce3da0b -r--r----- 1 root root 0 Jun 28 11:54 83c83f7f-1356-4975-8b7e-d3a0b54312c6 -r--r----- 1 root root 0 Jun 28 11:54 9553f55d-3da2-43ee-ab5d-ff17f78864d2 -r--r----- 1 root root 0 Jun 28 11:54 e6f5a162-d67f-4750-a67c-5d065f2a9910 # hd /sys/kernel/security/secrets/coco/e6f5a162-d67f-4750-a67c-5d065f2a9910 00000000 74 68 65 73 65 2d 61 72 65 2d 74 68 65 2d 6b 61 |these-are-the-ka| 00000010 74 61 2d 73 65 63 72 65 74 73 00 01 02 03 04 05 |ta-secrets......| 00000020 06 07 |..| 00000022 # rm /sys/kernel/security/secrets/coco/e6f5a162-d67f-4750-a67c-5d065f2a9910 # ls -la /sys/kernel/security/secrets/coco total 0 drwxr-xr-x 2 root root 0 Jun 28 11:55 . drwxr-xr-x 3 root root 0 Jun 28 11:54 .. -r--r----- 1 root root 0 Jun 28 11:54 736870e5-84f0-4973-92ec-06879ce3da0b -r--r----- 1 root root 0 Jun 28 11:54 83c83f7f-1356-4975-8b7e-d3a0b54312c6 -r--r----- 1 root root 0 Jun 28 11:54 9553f55d-3da2-43ee-ab5d-ff17f78864d2}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK>hjhhubeh}(h]id6ah ]h"]应用使用示例ah$]h&]uh1jjhjlhhhhhK1ubjk)}(hhh](jp)}(h 参考文献h]h 参考文献}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1johj0hhhhhKYubh)}(hZ请参见 [sev-api-spec_CN]_ 以获取有关SEV ``LAUNCH_SECRET`` 操作的更多信息。h](h 请参见 }(hjAhhhNhNubh)}(hsev-api-spec_CNh]j8)}(hjKh]h[sev-api-spec_CN]}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjIubah}(h]id8ah ]h"]h$]h&] refdomainjNreftypejP reftargetjKrefwarnsupport_smartquotesuh1hhhhK[hjAhhubh 以获取有关SEV }(hjAhhhNhNubj)}(h``LAUNCH_SECRET``h]h LAUNCH_SECRET}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh 操作的更多信息。}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK[hj0hhubhjN)}(h4Documentation/virt/kvm/x86/amd-memory-encryption.rsth](hlabel)}(hsev_CNh]hsev_CN}(hjhhhNhNubah}(h]h ]h"]h$]h&]support_smartquotesuh1jhjubh)}(hjh]h4Documentation/virt/kvm/x86/amd-memory-encryption.rst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hjubeh}(h]sev-cnah ]h"]sev_cnah$]h&]jHadocname(translations/zh_CN/security/secrets/cocouh1jNhhhK]hj0hhresolvedKubj)}(h1Documentation/ABI/testing/securityfs-secrets-cocoh](j)}(hsecrets-coco-abi_CNh]hsecrets-coco-abi_CN}(hjhhhNhNubah}(h]h ]h"]h$]h&]juh1jhjubh)}(hjh]h1Documentation/ABI/testing/securityfs-secrets-coco}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hjubeh}(h]secrets-coco-abi-cnah ]h"]secrets-coco-abi_cnah$]h&]jajjuh1jNhhhK^hj0hhjKubj)}(hMhttps://www.amd.com/system/files/TechDocs/55766_SEV-KM_API_Specification.pdf h](j)}(hsev-api-spec_CNh]hsev-api-spec_CN}(hjhhhNhNubah}(h]h ]h"]h$]h&]juh1jhjubh)}(hLhttps://www.amd.com/system/files/TechDocs/55766_SEV-KM_API_Specification.pdfh]j=)}(hjh]hLhttps://www.amd.com/system/files/TechDocs/55766_SEV-KM_API_Specification.pdf}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1j<hjubah}(h]h ]h"]h$]h&]uh1hhhhK_hjubeh}(h]sev-api-spec-cnah ]h"]sev-api-spec_cnah$]h&]j\ajjuh1jNhhhK_hj0hhjKubeh}(h]id7ah ]h"] 参考文献ah$]h&]uh1jjhjlhhhhhKYubeh}(h]id1ah ]h"]机密计算密钥ah$]h&]uh1jjhhhhhhhK ubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(joN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj<error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}(sev_cn]hcitation_reference)}(h [sev_CN]_h]hsev_CN}hjsbah}(h]jHah ]h"]h$]h&]refidjuh1j~hjjKubasecrets-coco-abi_cn]j)}(h[secrets-coco-abi_CN]_h]hsecrets-coco-abi_CN}hjsbah}(h]jah ]h"]h$]h&]jjuh1j~hjpjKubasev-api-spec_cn]j)}(h[sev-api-spec_CN]_h]hsev-api-spec_CN}hjsbah}(h]j\ah ]h"]h$]h&]jjuh1j~hjAjKubaurefids}nameids}(jjjjjjj-j*jj jjjjjju nametypes}(jjjj-jjjjuh}(jjljjjjjHjjjj*jj j0j\jjjjjjju footnote_refs} citation_refs}(j|]jaj]jaj]jau autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations](jjjeautofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jJKsRparse_messages]transform_messages] transformerN include_log]:Documentation/translations/zh_CN/security/secrets/coco.rst(NNNNta decorationNhhub.