商用密码技术最佳实践白皮书 2023_第1页
商用密码技术最佳实践白皮书 2023_第2页
商用密码技术最佳实践白皮书 2023_第3页
商用密码技术最佳实践白皮书 2023_第4页
商用密码技术最佳实践白皮书 2023_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

最佳实践白皮书密码是保障网络空间安全的根本性核心技术,国产密码在各层次的充分融合应用成为基础软硬件体系化安全的核心支撑。随着近年来国际贸易冲突和技术封锁愈演愈烈,同时伴随着国内《密码法》、《网络安全法》、《数据安全法》等法律法规的颁布与实施,持续拉动着密码应用的新需求,也为商密在基础软硬件本文档旨在为龙蜥社区用户在商密开发、优化及融合应用上提供全面的解决方案目录02国密简介与现状03openAnolis全栈国密概述05国密可信计算内核国密算法文件加密(fscrypt)磁盘加密(LUKS)内核完整性度量架构(IMA)内核模块签名08Tongsuo(铜锁)密码库TLS1.3使用商密套件委托凭证证书压缩(RFC8879)TLCP安全传输协议同态算法Python国密签名实践Web服务国密双证书支持11国密硬件加速与优化认识龙蜥龙蜥社区(OpenAnolis)成立于2020年9月,由阿里云、ARM、统信软件、龙芯、飞腾、中科方德、Intel等24家国内外头部企业共同成立龙蜥社区理事会,到目前有超过300家合作伙伴参与共建,是国内领目前,龙蜥操作系统下载量已超240万,整体装机量达300多万,100余款企业产品完成与龙蜥操作系统的适配。同时,统信软件,中科方德、中国移动云、麒麟软件、中标软件、凝思软件、浪潮信息、新支点、超过30万。龙蜥社区及龙蜥操作系统也获得了一定的行业认可,工信部电子标准院首批开源项目成熟度评估,成为唯一获得“卓越级”认证的开源项目、龙蜥社区荣登2022科创中国“开源创新榜”、荣获“中国开源云联盟年度优秀开源项目奖”、“OSCAR开源尖峰案例奖”等25项行业奖项。龙蜥社区已成立50+个SIG工作组,围绕芯片、内核、编译器、安全、虚拟化及云原生等操作系统核心领域进行技术创新,已发布龙蜥AnolisOS7、Anolis等多个社区版本,为应对即将停服的Centos,官网已上线「CentOS停服专区」为用户提供迁移方案及长期稳定支持,致力于成为CentOS的更佳替代。“为更好地运营和治理社区,龙蜥社区定期召开月度运营委员会会议、技术委员会会议,理事大会。关于理事大会:龙蜥社区第二届理事大会圆满召开!理事换届选举、4位特约顾问加入。关于运营委员会会议:龙蜥社区第15次运营委员会会议顺利召开。欢迎更多企业加入共建,龙腾计划可参看:“龙腾计划”启动!邀请500家企业加入,与龙蜥社区一起龙蜥开放的生态为了鼓励合作伙伴在社区探索出更多的商业合作方式,真正牵引企业在龙蜥社区的合作落地,社区推出「龙腾计划」的升级版--「生态发展计划」,更聚焦在产品和商业合作本身。龙蜥操作系统(AnolisOS)搭载了ANCK版本的内核,性能和稳定性经过历年“双11”历练,能为云上典型用户场景带来40%的综合性能提升,故障率降低50%,兼容CentOS生态,提供平滑的CentOS迁移方案,并提供全栈国密能力。最新的长期支持版本AnolisOS8.6已发布,更多龙蜥自研,支持X86_64、RISC-V、Arm64、LoongArch架构,完善适配Intel、飞腾、海光、兆芯、鲲鹏、龙芯等2021年12月31日,龙蜥开源社区(OpenAnolis)上线「CentOS停服专区」,为受CentOS停服影响的用户提供迁移方案及长期稳定支持。此次停服,龙蜥操作系统(AnolisOS)产品优势包括:打造系统化解决方案AOMS、提供多款配套工具、承诺10年技术支持、兼容CentOS生态、具备差异化核心技术优势、历经丰富场景验证、沉淀用户迁移案例实践。反馈与共创对于文档中您认为不足之处,欢迎到我们的官方仓库WhitebookShangMi新开issue,我们会第一时另外,若您想更新文档,也同样欢迎在WhitebookShangMi提PR。国密简介与现状人类社会出现后就出现了信息交流,也就有了保护信息不被第三方获知的需求。密码由来已久,其发展经历了古典密码、机械密码、现代密码三个阶段。在这一过程中,密码技术在保密与破译、窃密与反窃密的激烈博弈中不断演变,理论发展最终使得密码学成为科学,当前,广泛多样性的应用需求和日趋激烈的攻防对抗,正在推动密码技术快速发展。随着全球数字经济发展,网络空间必将成为战略威慑和控制的新领域、维护经济社会稳定的新阵地以及未来各国军事角逐的新战场,网络安全被纳入国家安全重要战略地位。密码作为保障网络安全的核心技术,是构建网络信任的基础支撑。我们利用密码的安全认证、加密保护、信任传递等特性,来消除或控制潜在的安全危机。商用密码正是诞生于这样的背景之下的现代密码,商用密码是对不涉及国家秘密内容的信息进行加密保护或者安全认证,所使用的密码技术和密码产品。口语中一般也称呼商用密码为国密。商用密码算法标准由国家密码管理局制定,与此同时国密密码管理局也制定了大量的产品、接口规范以及应用场景,用于保障金融,医疗等领域的信息传输安全。着不可替代的重要作用。密码算法是非常基础和重要的密码技术。国家密码管理局高度重视密码算法管理工②④密码算法是保障信息安全的核心技术,尤其是最关键的银行业核心领域长期以来都是沿用3DES、随着近年来外部的国际贸易冲突和技术封锁,内部互联网的快速发展,IOT领域的崛起国家商用密码算法与标准体系2010年底,国家密码管理局公布了我国自主研制的“椭圆曲线公钥密码算法”(SM2算法)。为保障重要经济系统密码应用安全,国家密码管理局于2011年发布了《关于做好公钥密码算法升级工作的通知》,明确要求“自2011年3月1日起,在建和拟建公钥密码基础设施电子认证系统和密钥管理系统应使用国密算法。自2011年7月1日起,投入运行并使用公钥密码的信息系统,应使用SM2算法。"自2012年以来,国家密码管理局以《中华人民共和国密码行业标准》的方式,陆续公布了SM2/SM3/SM4等密码算法标准及其应用规范。其中"SM"代表“商密”,即用于商用的、不涉及国家秘密的我国高度重视商用密码国际标准化工作,大力推进以我国自主设计研制的SM系列密码算法为代表的中国2011年9月,我国设计的祖冲之(ZUC)算法纳入国际第三代合作伙伴2015年5月起,我国陆续向ISO提出了将SM2、SM3、SM4和SM9算法纳入国际标准的提案。我国商用密码国际标准体系已初步成型,为密码在全球范围的发展与应用提供了中国方案,贡献了中国在转化运用国际标准方面,商用密码行业标码模块安全检测要求》,分别参考国际标准IS019790和ISO24759编制,为规范商用密码产品管理、提SM2基于椭圆曲线密码(ECC)的公钥密码算法标准,提供数字签名,密钥交换,公钥加密,可用该算法是基于椭圆曲线上离散对数计算问题,由于基于椭圆曲线上离散对数问题的困难性要高于一般乘SM2算法密钥长度为256比特,具有密钥长度短、安全性高等特点。SM2算法中的公钥加密算法可SM3是消息摘要算法,哈希结果为固定的256bits,可用于替换MD5/SHA1/SHA256等国际算法。该算法采用M-D结构,输入消息经过填充、扩展、迭代压缩后,生成长度为256比特的杂凑值。SM3算法的实现过程主要包括填充分组和迭代压缩等步骤。SM3算法在结构上和SHA-256相似,消息分组大小、迭代轮数、输出长度均与SHA-256相同。但相比于SHA-256,SM3算法增加了多种新的设计技术,从而在安全性和效率上具有优势。在保障安全性的前提下,SM3算法的综合性能指标与SHA-256在同等条SM4算法是我国颁布的商用密码标准算法中的分组密码算法。为配合无线局域网标准的推广应用,SM4算法于2006年公开发布,并于2012年3月发布密码行业标准,2016年8月转化为国家标准。SM4算法是一个迭代的分组密码算法,数据分组长度为128比特,密钥长度为128比特,加密算法与密钥扩展算法都采用32轮非线性迭代结构(非平衡Feistel结构),明文分组经过迭代加密函数变换后的输出,又成为下一轮迭代加密函数的输入,如此迭代32轮,最终得到密文分组。每一轮迭代的函数相同,输入主要用于数字签名、数据加密、密钥协商以及身份认证等。SM9标识密码算法的密钥长度是256比特,应用与管理不需要数字证书、证书库或密钥库。签名者持有一个标识和相应的私钥,该私钥由密钥生成中心通过主私钥和签名者的标识结合产生,签名者用自身的私钥对数据产生数字签名,验证者用签名者的标识生成其公钥,验证签名的可靠性,即验证发送数据的完整性、来源的真实性和数据发送者身份。祖冲之序列密码算法是中国自主研究的流密码算法,是运用于移动通信4G网络中的国际标准密码算法,该算法包括祖冲之算法(ZUC)、加密算法(128-EEA3)和完整性算法(128-EIA3)三个部分。法律法规2019年10月26日,十三届全国人大常委会第十四次会议通过《中华人民共和国密码法》,于2020年1月1日起正式施行。出台密码法是几代密码人的梦想,是密码事业发展的现实需要,是密码工作历史上具有里程碑意义的重大事件。密码法的颁布和实施,是构建国家安全法律制度体系的重要举措,是维护国家网络空间主权安全的重要举措,是推动密码事业高质量发展的重要举措,是密码守好党和国家“命门”、“命脉”的重要法律保障。随着《密码法》的颁布实施,我国商用密码在新的历史起点上,必将迎来更加广阔的发展空间。《国家商用密码管理条例》于1999年10月由国务院颁布,共七章27条,是为了加强商用密码管理,保护信息安全,保护公民和组织的合法权益,维护国家的安全和利益,所制定的条例。《信息安全技术-网络安全等级保护基本要求》(GB/T22239-2019)是2019年12月1日实施的一项中国国家标准,归口于全国信息安全标准化技术委员会。该要求规定了网络安全等级保护的第一级到第四级等级保护对象的安全通用要求和安全扩展要求。安全要求细分为技术要求和管理要求。其中技术要求部分为“安全物理环境”、“安全通信网络”、“安全区域边界”、“安全计算环境”、“安全管理中心”;管理要求部分为“安全管理制度”、“安全管理机构"、“安全管理人员"、“安全建设管理”、“安全运维管理”,两者合计共分为10大类。安全技术要求的分类体现了“从外部到内部”的纵深防御思想,对等级保护对象的安全防护应考虑从通信网络、区域边界和计算环境从外到内的整体防护,同时考虑其所处的物理环境的安全防护,对级别较高的还需要考虑对分布在整个系统中的安全功能或安全组件的集中技术管理手段。安全管理要求的分类体现了“从要素到活动”的综合管理思想,安全管理需要的“机构"、“制度”和“人员”三要素缺一不可,同时应对系统的建设整改过程和运行维护过程中重要活动实施控制和管理,对级别较高的需要构建完备的安全管理体系。该标准适用于指导分等级的非涉密对象的安全建设和监督管理。 商密软件栈SIG从商密算法标准公布到现在已有十多年时间,与AES,SHA等主流国际算法相比,目前商密在基础软件中的支持和优化仍然不完善,甚至有较大的差距,商密算法的软硬件生态也处于碎片化状态,密码算法作为网络和数据安全的基石,应该且有必要在基础软件中具备开箱即用的能力;另一方面,密码算法是保障信息和数据安全的核心技术,随着近年来外部的国际贸易冲突和技术封锁的加深,内部互联网的快速发展,我们不能单一依赖国外的的技术标准和产品,增强我国行业信息系统的安全可信显得尤为必要和迫切。商用密码算法给我们提供了一个新的选择,使得我们可以完全使用商密技术来构建网络和数据安全环境。建立以国密算法为主的操作系统基础软件,与社区深度合作,在固件,bootloader,内核,算法基础库以及语言运行时中支持国密算法,依托AnolisOS发行版作为载体,构建起全栈国密生态及解决方案,致力于为行业提供基于国密的信息安全标准。依托基础软件上游社区,为已有的轮子支持商密算法,尽可能不重新造轮子。全栈商密生态架构商密软件栈SIG依托基础软件上游社区,秉承为已有轮子支持商密的原则,在全栈范围内的多个基础组件中实现了商密算法以及性能优化,包括Linux内核,OpenSSL,libgcrypt,gnulib,nettle等在内的基础组件,支持了商密算法以及大量的性能优化,并且得到上游社区的支持进入主线,基本补齐了商密算法在基础软件中的一些短板,在兼容现有API的情况下,提供给普通开发者平滑的使用体验。此外,Anolis社区相关团队积极投入,支持在TLSv1.3协议中使用商密算法套件,目前这个技术已经被国际标准承认,并且以RFC8998标准发布,这意味着我们可以选择在TLSv1.3协议中使用完整的商密套件,这极大的扩充了商密的应用范围,为了应用这些技术标准,同时为商密标准量身打造了Tongsuo密码算法库,在兼容OpenSSL的基础上支持了商密的标准,为用户提供一个基于商密的应用开发及运行环境。商密基础设施架构人人OpenSSL/Tongsuo,lib应用生态算法基础库硬件固件商密SIG现状龙蜥社区在众多的常用基础软件中实现了商密的支持,极大的丰富了商密的软件生态,并且把这些技术全部回馈到了上游社区,以下是相关的基础软件对于商密算法的支持情况以及社区回馈统计(截止2022年12月):5-15-22YY●性能提升数据是相比于纯软件实现的数据●性能提升数据是相比于纯软件实现的数据●arm架构的测试环境是·☑表示由OpenAnolis开发并已●"WIP"表示由OpenAnolis开发中的、或是开源软件正在进行review的特性是由OpenAnolis开发的·×表示开源软件尚未支持优化项目libgcryptlY☑YYYY☑Y☑YY☑☑Y☑☑Y应用场景在以下的场景中,通过在各基础软件中支持的商密实现,可以平滑的从国际主流算法切换到商密算法上来,在提供高安全性的同时,也有效避免了国外技术封锁带来的风险。·IMA,modsign支持使用SM2/SM3算法组合的签名验签,涉及Linux内核,sign-file工具和以下是我们在OpenAnolis上的全栈国密SIG,非常欢迎有兴趣的开发能参与到社区中来,为中国的基SIG地址:/sig/crypto龙蜥社区一直致力于在操作系统中集成国密的全部能力,以开箱即用作为目标,让用户可以如丝般顺滑的从国际算法切换到国密算法的生态上,为此,龙蜥社区在诸多的基础软件众所周知,OpenSSL是操作系统中最基础的密码学工具库,几乎被默认集成到所有基于Linux和BSD的发行版中,为操作系统提供最基本的基于密码学的信息安全能力。OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库,SSL/TLS协议库以及应用程序。作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL/TLS协议,并提供了丰富的应用程序供测试或其它目的使用。挑战OpenSSL3.0是OpenSSL社区的最新版本,于2020年4月发布,到目前为止已经发布了几个稳定版本,得益于社区开发者的持续贡献,这个版本已经支持了完整的国密能力,包括SM2、SM3、SM4算法以及使用这些算法的密钥和证书体系,甚至是SM3、SM4算法的优化也有了部分架构的支持。相较于基础软件较长的升级迭代周期来说,OpenSSL3.0仍然是一个很新的版本,一个主要原因是OpenSSL3.0发布时间还较短,其次OpenSSL3.0在软件架构上做了较大的变动,部分原来被广泛使用的函数被标记为了过时函数,对于算法的使用方式也有了新的规则,各发行版出于稳定性和兼容性的考虑,目前系统默认内置的依然是1.1.1版本。用户若是想体验OpenSSL3.0的功能需要使用第三方仓库或者是下载源码AnolisOS23系列的发行版已率先集成OpenSSL3.0作为默认的密码学库,并提供与社区版本一致的体验,用户可以参考OpenSSL社区手册使用完整的国密能力。Anolis8.8内置国密但目前主流的AnolisOS8.x系列,默认预装的还是OpenSSL1.1.1,一直以来,OpenSSL1.1.1都是国密的一个遗憾,也是一个痛点,这个版本的SM2签名验签能力是有缺陷的,也不支持国密标准的可辨别标识,但这个版本又是主流的发行版所使用的版本,甚至在某些发行版中,比如CentOS中,SM3和SM4算法都是被删掉的。鉴于以上原因,在AnolisOS8.8中,在保证兼容性和稳定性的前提下,龙蜥社区在系统默认集成的OpenSSL1.1.1版本上支持了完整的SM2签名和验签能力,并做了开源,发行版本rpm也默认开启了SM3和SM4算法,带给用户开箱即用的国密使用体验。代码仓库:/AnolisOSRPM:/src-anolis-o用户手册根据规范GM/T0003.2-2012和GM/T0003.5-2012的定义,SM2算法签名时需要一个计算了Za的哈希值,这个Za是通过固定的椭圆曲线参数、公钥数据以及一个用户输入的可辨别ID生成的。因此,就必须在用户界面添加一个指定用户ID的参数才能支持完整的SM2签名和验签能力,在龙蜥社区的OpenSSL库中,通过特殊参数向OpenSSL内部传递该参数。因此,龙蜥社区为签名工具扩展了sigopt参数,为验签工具添加了vfyopt参数来支撑用户界面的工具,SM2的可辨别标识通过distid子参数指定,比如可以使用-sigopt"distid:1234567812345678"在签名时指定SM2的可辨别标识值,终端用户可以通过命令行工具openssl来调用SM2的完整能力。1234567812345678是规范推荐使用的用户ID,用户可根据需要自行指定。·生成一个自签名的SM2根证书-sigopt"distid:1234567812345678"\-configgenkey.conf-keyca.·从私钥生成SM2算法的证书请求并验证-sigopt"distid:1234567812345678"-configgenkey.conf--configgenkey.conf-noout-text-insm2.·使用SM2算法签名证书请求并验证-sigopt"distid:1234567812345-vfyopt"distid:1234-extfilegenkey.conf-extensionsv3_ca\x509_extensions=v3_cax509_extensions=v3_caauthorityKeyIdentifier=keyid:alwaysubjectKeyIdentifierauthorityKeyIdentifier=keyid:alway为了支持SM2的签名验签能力,龙蜥社区为OpenSSL内部的验签添加了三个新的API:intASN1_item_verify_ctx(constASN1_ITEM*it,X509_ALGOR*a,intASN1_item_verify_ctx(constASN1_ITEM*it,X509_ALGOR*a,ASN1_BIT_STRING*signature,intX509_verify_ctx(X509*a,EVP_PKEY*r,EVP_MD_CTX*ctx);intX509_REQ_verify_ctx(X509_REQ*a,EVP_PKEY*r,EVP_MD_CTX*ctx);开发者通过他们可以调用完整的国密签名验签能力。这几个API扩展了原来不带ctx后缀的API能力,通过ctx可以预先指定额外的参数,这里主要是指SM2算法的用户可辨别标识,具体用法可参考apps目录里工具的调用方法或者sign系列的类似函数。X509_sign参考:/docs/man1.1.1/man3/TPM、TCM与国密算法可信平台模块始于2000年可信计算平台联盟(TrustedComputingPlatformAlliance)制定的TPM1.0规范.2003年,TCG(trustedcomputinggroup)成立,修改完成了TPM1.1规范,2004年发布了TPM1.2,2014年发布了TPM2.0规范。鉴于可信计算技术对国家信息安全体系的重要性,经国家密码管理局批准,中国于2006年成立了可信计算密码专项组,并于2008年12月更名为中国可信计算工作组(ChinaTCMUnion),简称TCMU.2007年12月,国家密码管理局颁布了《可信计算密码支撑平台功能与接口规范》,将国内使用的可信基础模块定义为TCM(trustcryptographymodule).相较于TPM,TCM采用了我国《商用密码管理条例》中规定的SM2、SM3等国密算法,同时引入了对称密钥算法,简化了TPM中复杂的密钥管理.TCM的证书认证机制采用签名密钥以及加密密钥的双证书机制,将对称密钥与非对称密钥结合保护系统安全,在密钥管理体系和基础密码服务体系等方面进行了改进,提升了系统的安全性.TPM和TCM的构成和功能类似,提供可信计算平台的信任根(RTS,RTR),是由CPU、存储器、1/0、密码协处理器、随机数产生器和嵌入式操作系统等部件组成的独立SoC芯片,具备可信度量的存储、可信度量的报告、密钥产生、加密和签名、数据安全存储等功能.11889,吸纳了TCM中相关的安全改进,并首次成体系支持中国密码算法体系,包括SM2/SM3/SM4密码算法。这是中国密码算法技术和标准的又一次重要突破,也是中国信息安全标准在国际标准化工作中的重要进展。ISO/IEC11889支持中国商用密码算法体系(SM2/SM3/SM4),使得在数据安全保护上更加牢不可破。TPM(TrustedPlatformModule)2.0是遵循ISO/IEC11889系列标准的可信根、由国际可信计算组织TCG(TrustedComputingGroup)维护。如下图所示,密码学系统是TPM2.0核心、其所有安全功能均以密码学系统为基础。密码系统学目前TPM2.0支持SM2、SM3、SM4特性,具体包括基于SM3的Hash算法、支持SM3bank的PCRextend;支持SM4加解密;支持SM2加解密、SM2签名验签、SM2+SM3证书签名验签。龙蜥OS为客户提供了两种使用TPM国密算法引擎的途径:TSS(TrustedSoftwareStack)提供的API访问TPM国密算法、TPMtools中的密码指令使用TPM提供的国密算法。以下示例为使用tpmtools创建基于SM2+SM3-256的认证密钥:UEFI可信启动(TrustedBoot)可信启动(TrustedBoot)是以可信根为核心、检测系统启动过程中所加载和使用的组件、确保预期的组件在预期的节点加载运行。服务器硬件启动过程内核与引导程序可信检测日志记录程序或文件加载顺序系统与应用程序可信检测日志记录动态程序或文件加载顺序系统引导程序启动与内核加载系统启动动阶段记录程序载阶段硬件可信检测日志●使用国密可信启动的条件如下:·硬件要具备的特性:·服务器计算机固件(UEFI)支持基于国密的可信度量特性·服务器集成了TPM2.0芯片(该芯片许支持SM3、PCRSM3Bank等特性)·OS要具备的特性:说明:当以上组件可从InspurKOS获取,InspurKOS基于龙蜥OS的商业发行版1)BIOS国密可信度量Enable方法:需要将SM3_256PCRBank改为EnableOMeasureStorageDevicMeasureNetworkDevicEnablesorDisablesDevice.TCGEFIprotocola2)OS国密可信度量组件部署方法:rpm-ivhiTrustMidware-3.0.1-2023)部署上述组件后、默认支持kernel、initramfs、grubcmdline的国密可信度量4)如需添加对特定系统程序或配置文件的度量需要进一步配置策略5)如需添加启动控制策略(在可信度量的基础上、基于国密进一步进行可信验证、需要配置可信启动控制策略。6)度量结果查看:直接在/sys/kernel/security/tpmo/binary_bios_measurements查看(以下是输出的部分片断)00Od818d47f8b7...[S-CRTMVersion]8c9eef8824efb...[IPL]grub_cmdsetgfx_payload=keep86a1007c86dc8...[IPL]grub_cmdinsmo8eb204c91fc3d...[IPL]grub_cmdlinux(h93e9ff31a4687...[IPL]grub_linuxefiKer8603cfbaa8375...[IPL]grub_cmdinitrd(hd0,gpt2)/initramfs-4.18.0.img9foba7132ccea...[IPL]grub_linuxefi其次使用iTrustMidware提供的策略管理工具也可以查看到详细的度量日志。远程证明是可信计算中实现节点可信认证的关键设施,是实现可信节点之间可信互联的依据。KOS(Anolis衍生发行版)在RSA+SHA256+AES和ECDSA+SHA256+AES的基础上拓展支持了基于TPM2.0国密的远程证明特性。1)在KOS部署可信代理端之后、配置后可在可信管理端识别到响应的节点、之后通过可信管理端可以部署2)部署可信证书后、节点即可以用远程证明的方式向可信管理端发送报告进行可信证明。系统安全始于系统初始状态。在系统安全设计中,固件或作为系统安全根,或作为安全链路中的重要初始环节,负责初始安全配置并将安全状态延伸至运行态操作系统。一旦启动固件发生恶意软件侵入,如BootKit,将会动摇整个系统安全。为保证启动固件安全,UEFI标准中定义了安全启动标准-UEFISecureBoot。其核心设计思想是部署合理理的PKI证书作为安全策略,在启动中对所有需要执行的第三方固件模块进行密码学校验。AfterLife其实现细节如下:1.使用公共CA服务提供签名证书,对UEFI可执行模块(包括设备驱动,操作系统启动项,第三方工具等)进行数字签名。签名前需保证可执行模块符合安全标准。2.制定系统启动UEFI安全启动策略并部署。包括可执行白名单、黑名单、验证证书强制失效时间,签名时间戳证书列表等。3.系统启动中,强制使用UEFI安全启动策略对签名进行校验,通过则允许执行第三方固件模块,否则拒绝。4.UEFI启动安全策略支持更新,且更新过程必须安全。在系统生命周期中,随着系统演进,环境变化,证书失效等需求变化,启动安全策略需要及时更新。更新需求可以来自平台的所有者,如执行新的硬件启动设备;也可能来自操作系统,如为了阻止某些带有安全缺陷的bootloader。新的安全策略同样带有签名,只有通过签名验证,且符合时效性,才能被目标系统接受。更新策略必须灵活,允许全部刷新,部分添加。UEFI安全启动从设计上补齐了系统启动的安全短板,能够解决固件启动中扩展执行第三方模块、OS启动项时的安全隐患;同时支持灵活的安全策略配置;能够从源头构建完整的安全链路。自UEFI2.3.1正式引入功能以来,UEFI安全启动已然成为各类系统的标准安全配置,广云服务器,网络存储和路由等各种应用场景。尽管UEFI安全启动具备很1.UEFI安全启动设计标准限定了密码学算法的选用,如Hash算法仅支持SHA-2256,384,512等,数字签迭代;固件安全漏洞响应时,无法及时生成更新的黑名单策4.未能强化国密验证策略,例如白名单中所有证书处于相同等级,未支持国密证书强制验证或优先验证。当Shim一般自身携带有操作系统的专属证书。实际运行中,shim会注册MOKsecureboot协议,用来替代·grub2:Linux启动中,使用grub.shim自带的国密证书的ShimOS运行态验签后加载根据上面的介绍,要部署完整的国密UEFI安全启动,需要固件,操作系统,CA,三方硬件厂商和工·UEFI固件:符合edk2固件开发规范,遵循芯片和平台安全开发手册,完成从上电(G3->S0,S5->S0,1)基于国密的固件安全更新,恢复机制2)基于国密的UEFI安全启动验证3)基于国密的UEFI安全启动策略更新提供两组国密公共服务,1)CA证书签发,注销,CRL管理;2)国密签名。国密CA服务不属于本白皮P中DBX6UEFI执行模块单个国密签名SignedDataAuthenticatedAttributeUEFIUEFI安全策略更新签名注:国密SM2签名规范没有强制要求Hash算法,但实际应用中推荐使用SM3Hash算法。国密SignedDataSetofCertificates杂组件众多,随着部分用户态加解密机制下沉到内核,内核对加解密的需求还是非常丰富的,其次由于算法自身的无依赖,跨语言和跨平台的特点,内核有自身的一套完整的CryptoAPI架构,并实现了非常丰富的算法,为内核中诸多的安全子内核CryptoAPI提供单块密码和消息摘要的实现。此外,内核加密API提供了许多可与单块密码和消息摘要结合使用的“模板”。模板包括各类分组链接模式、单块密码和消息摘要可以直接由调用者使用,也可以与模板一起调用以形成多块的在具体的架构上,常用的算法是可以使用SIMD指令来优化,这一般会结合具体模式模板和单块密码,作为一个独立的算法注册到内核的Crypto子系统中,比如结合模式的SM4-CTR算法,在x86和arm64架构上,都是作为一个独立算法做过优化的,在其它架构平台上,可以选择使用sm4和ctr模板结合动态生成的ctr(sm4)算法。本小节内容会详细介绍内核中国密算法的支持情况以及结合内核国密的诸多应用场内核国密算法内核国密算法Linux内核上游社区从5.10版本开始已经陆续支持了国密算法,到目前为止,x86和arm64架构上的内核作为操作系统最重要的组件,对于国密的支持已经比较完善,就国密算法SM3、SM4的优化来说,也仅仅略差于老牌的国际主流算法,在最近发布的Linux6.2中,龙蜥社区对arm64架构的国密支持了众多的模式优化;成为6.2版本Top20的活跃开发者:/Articles/923410龙蜥社区ANCK5.10内核已经全部支持了上游的这些国密和算法优化,通过AnolisOS提供给用户。以下几张表格总结了目前内核已经实现的国密相关算法的一些具体情况,包括算法优先级(优先级越大性能越高,同一个算法内核会优先选择优先级高的实现),依赖指令(具体架构上依赖的CPUSIMD指令),内部驱动(可以认为是更详细的算法名称,可以通过这个名称引用该实现)。类型字段是算法的类型,目前跟国密相关的几个类型如下:·cipher:对称算法,只实现了单个分组的加解密国密的软件实现是最早被引入内核的国密算法实现,软件实现不依赖任何特殊指令,适用于任何架构,但效率较低,在不支持优化的平台上可以选择使用软件实现的国密方SM2是非对称算法,目前在内核中主要用于验签和完整性检查,由于算法自身输入数据量小且调用频度算法类型内部驱动优先级模块名在x86架构上,主要是使用AVX/AVX2指令集对国密算法做的优化。算法类型内部驱动优先级模块名依赖指令性能数据x86上的性能数据来自Inteli5-6200U2.30GHz环境,横坐标是输入的数据块大小(单位是字节),性能数据的单位是Mbyte/s。下表是SM3算法的性能数据,对比了纯软件实现和AVX优化的差异:下表是SM4算法的性能数据,分别是纯软件 enc|339.85 559.58 552.45490.36481.49331.07 armv8开始支持了SM3/SM4算法的CryptoExtensions扩展。算法类型内部驱动优先级模块名arm上的性能数据来自T-HeadYitian-7102.75GHz环境,横坐标是输入的数据块大小(单位是字节),性能数据的单位是Mbyte/s。下表是SM3算法的性能数据,对比了纯软件实现,NEON优化实现和CryptoExtension优化实现的差异:227.48333.48502.62下表是SM4算法的性能数据,分别是纯软件实现,NEON优化实现和CryptoExtension优化实现的性能:79.9876.8277.5777.8077.8328.3679.59367.30358.09366.51351.51354.98324.23324.18288.19292.22108.81 681.26428.80468.99 93.6488.0291.52203.30 200.62 94.7688.7792.7788.42 209.02206.652747.43 2667.93 2258.32 1714.60215.52 214.21211.78 2981.902982.01 2413.73963.60 3007.793010.09 89.4889.18 209.12206.74 3856.08 3841.68 3409.622612.62CBCCBCCFBCBCCFBdecencdec下表是基于SM4算法的带认证哈希的CryptoExtension优化的性能数据:674.55981.42SM4带认证的AEAD模式CCM/GCM在CryptoExtension优化后的性能数据:I国密硬件加速与优化章节会重点介绍armv8下使用CryptoExtension指令优化的细节信息。通常我们会以文件作为数据载体,使用磁盘,USB闪存,SD卡等存储介质进行数据存储,即便数据已经离线存储,仍然不能保证该存储介质不会丢失,如果丢失那么对于我们来说有可能是灾难性的事件。因此对这些离线存储的重要数据文件进行加密是非常有必要的,本节将介绍如何使用国密算法加密文件系统中的文件。内核中的fscrypt是一个库,文件系统可以使用它以支持文件和目录的透明加密。与dm-crypt不同,fscrypt在文件系统级别而不是块设备级别运行。这允许它使用不同的密钥加密不同的文件,并在同一文件系统上拥有未加密的文件。这对于多用户系统非常有用,在该系统中,每个用户的静态数据都需要与其他用户进行加密隔离。除了文件名,fscrypt不加密文件系统的元数据。与作为栈式文件系统的eCryptfs不同,fscrypt是直接集成到支持的文件系统中,目前支持fscrypt的文件系统是ext4、F2FS和UBIFS。fscrypt允许读取和写入加密文件,而无需在页面缓存中同时缓存解密和加密eCryptfs还将加密文件名限制为143字节,从而导致应用程序兼容性问题;fscrypt允许完整的255个字节(NAME_MAX)长度的文件名。最后,与eCryptfs不同,fscryptAPI可以由非特权用户使用,而无需依赖其它任何组件。fscrypt不支持就地加密文件。相反,它支持将空目录标记为已加密。然后,在用户空间提供密钥后,在该目录树中创建的所有常规文件、目录和符号链接都将被透明地加密。fscrypt允许为文件内容指定一种加密模式,为文件名指定一种加密模式。不同的目录树允许使用不同的加密方式。目前支持以下几种加密方式对:·AES-256-XTS算法用于加密内容,AES-256-CTS-CBC算法用于加密文件名·AES-128-CBC算法用于加密内容,AES-128-CTS-CBC算法用于加密文件名·Adiantum算法同时用于加密文件内容和文件名·AES-256-XTS算法用于加密内容,AES-256-HCTR2算法用于加密文件名(仅限v2策略)·SM4-XTS算法用于加密内容,SM4-CTS-CBC算法用于加密文件名(仅限v2策略)AES-128-CBC仅为具有不支持XTS模式的加速器的低功耗嵌入式设备使用。要使用AES-128-CBC,必须启用CONFIG_CRYPTO_ESSIV和CONFIG_CRYAdiantum是一种基于流密码的模式,即使在没有专用加密指令的CPU上也很快。与XTS不同,它也是真正的宽块模式。它还可以消除派生每个文件加密密钥的需要。要使用Adiantum,必须启用CONFIG_CRYPTO_ADIANTUM。此外,应启用ChaCha和NHPoly1305的快速实现,例如ARMTO_CHA-AES-256-HCTR2是另一种真正的宽块加密模式,旨在用于具有专用加密指令的CPU。AES-256-HCTR2具有明文中的位翻转会更改整个密文的属性。由于初始化向量在目录中重复使用,因此此属性使其成为文件名加密的理想选择。要使用AES-256-HCTR2,必须启用CONFIG_CRYPTO_HCTR2。此外,应启用XCTR和最后是SM4算法,目前仅在fscryptv2策略中启用。准备工作fscrypt依赖内核配置CONFIG_FS_ENCRYPTION=y,这里操作系统选择使用ANCK5.10内核的AnolisoS,其次,需要支持fscrypt特性的文件系统,这里以ext4为例,当然,F2FS或者UBIFS也可以。用户空间是通过fscryptAPI跟内核完成交互的,对于用户来说,一般是通过fscryptctl或者fscrypt工具来下达加密策略。本节内容以fscryptctl(/google/fscryptct/)工具为例来演示,目前这是一个第三方工具,需要手工安装,按如下常规流程安装:gitclonegitclone/google其次,选择一块未用到的磁盘格式化为支持其次,选择一块未用到的磁盘格式化为支持fscrypt的文件系统ext4,并挂载。透明加密文件透明加密文件fscrypt所用的加解密钥是关联在超级块上的,运行时是跟挂载点相关联的,添加删除密钥都是针对挂载点的操作,以下对密钥操作的命令都会带上挂载点。按如下命令所示设置加密策略:>echo'1234567812345678'>/tmp/23086a13ed81fd75ca5fe9b8f2>fscryptctlkey_status23086a13>fscryptctlset_policy>fscryptctlset_policy--contents=SM4--filenames=SM4-CTS23086a13ed81fd75ca5fe9b8f2ff25c7/mnt/endir>fscryptctlget_policy/mnt/endirEncryptionpolicyfor/Masterkeyidentifier:23086a13ed81fd75ca5fe9b8f此时,endir已经是支持透明加解密的一个目录,可以像正常目录一样创建删除文件,在该目录下进行一些常规的文件操作,可以看到与普通目录没有区别:锁定加密目录之所以能像普通目录一样操作,是因为密钥已经被添加到了文件系统中。接下来删除密钥后,就能看到目录被锁定,里面的所有路径和内容都是加密状态:23086a13ed81fd75ca5fe9b8f2ff23086a13ed81fd75ca5fe9b8f2ff23086a13ed81fd75ca5fe9b8f2ff/mnt/endirmkdir:cannotcreatedirectory‘/mn再次解锁加密目录要解锁目录也很简单,重新添加密钥即可,文件系统会搜索到正确的密钥并解锁相应目录:23086a13ed81fd75ca5fe9b8fscryptctl是一个相对原生的工具,更接近内核,可以看到,该工具命令比较复杂,使用中需要记住很长一串密钥ID,用户体验并不好。实际环境中,一般会使用fscrypt工具来完成加密策略操作,该工具由Google开发,用Go语言写成,通过在用户层面维护了一些元数据来简化用户操作,命令更易于理解,也更接近用户。类似于文件加密,磁盘加密很重要的一点也是为了解决因存储介质丢失而导致的敏感数据泄露问题。磁盘加密是以磁盘为加密对象来保护重要数据,磁盘之上的文件甚至文件系统对磁盘加密来说是透明的。device-mapper构架中用于块设备加密的一个模块。dm-crypt通过dm框架虚拟一个块设备,并在BIO转发的时候将数据加密后存储来实现块设备的加密,而这些对于应用层是透明的。●支持多种加密格式目前dm-crypt支持如下几种加密模式:1.LUKS(LinuxUnifiedKeySetup):这是dm-crypt最常用的一种模式,本节也是以LUKS为主展开。2.Plain:Plain模式使用单个无salt的哈希值逐个扇区进行加密。3.loop-AES:loop-AES是一款比较陈旧的Linux磁盘加密工具。dm-crypt提供了对它的支持。TrueCrypt的缩写。在该模式下,可以打开TrueCrypt和VeraCrypt的加密盘,并对盘中的文件进行读写。●无需额外安装软件由于dm-crypt早已被整合到LinuxKernel中。因此,无需额外安装它。至于它的命令行前端(cryptset-up),大部分主流的发行版都会内置cryptsetup的软件包。LVM(LogicalVolumeManager)是Linux内核提供的另一个很有用的工具。比如用它来创建分区,将来可以随时调整分区大小;比如现有的硬盘空间用完了,可以另外加一块硬盘并且新加硬盘可以用来扩展现有分区。LVM和dm-crypt都是基于Linux内核的devicemapper机制。因此两者可以很好地整合。cryptsetup是与dm-crypt交互的命令行工具,用于创建、访问和管理加密设备,主流的发行版已经内置了该工具。从原理上来说,cryptsetup其实是一种设备的映射关系,我们用它来把一个设备映射成另外一个设备,然后对这个新的设备进行操作,并进行加密,这样就不会使我们的原设备直接被使用,从而达到一种安全的效果。LUKS(LinuxUnifiedKeySetup)是Linux硬盘加密的标准。通过提供标准的磁盘格式,它不仅可以促进发行版之间的兼容性,还可以提供对多个用户密码的安全管理。与现有解决方案相比,LUKS将所有必要的设置信息存储在分区信息首部中,使用户能够无缝传输或迁移其数据。A选择一个不用的磁盘或者磁盘分区,该操作会清空设备上的所有数据,请谨慎操作。这里选择使用vda4作为实验分区,使用LUKS格式格式化要加密的磁盘分区,加密算法是SM4XTS:>cryptsetup--ciphersm4device:/dev/vd>mkfs.ext4/dev/mapper/diskluks>lsblk-fNAMEFSTYPE-vda2ext4-vda3ext41.0SM4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论