logo资料库

嵌入式系统实现安全启动.docx

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
益迫切。确保安全的启动过程是保护任何嵌入式系统的首要步骤,也是在应用中 预防恶意软体壁垒的必要部份。让我们看看其优缺点,并以电子产业中常见的处 据硬体进行认证,才能使其用于启动的过程。硬体必须以此方式提前作好准备: 到日常生活的每一步,对于物联网类型的嵌入式系统划定安全优先顺序的需求日 随着物联网(IoT)装置的广泛普及——从智慧城市到无线珠宝,物联网几乎渗透 理器之一——i.MX6 为例加以说明。 什么是安全启动? 「安全启动」(secureboot)是指作业系统(OS)在启动镜像与程式码之前必须先根 它只认证使用受信任的安全凭证所产生的程式码。总之,它确保开机启动和OS 安全启动适用于任何单一用途的装置,例如广泛使用i.MX6 处理器(如整合E-Ink 显示控制器的i.MX6Solo 和DuaLite)的电子书阅读器(e-reader),它们主要用于 阅读电子书,而不是一般的运算。在这种案例中,在开机启动时锁定Linux 环境 软体是预期的制造商版本,而不至于被恶意软体或恶意的第三方篡改过。 是很有帮助的。
据产品布局或安全要求的理想功能。基本上,适于使用安全启动的理想时机在于, 当你不希望另一方在你的装置中载入作业系统或其它启动载入程式之际。 启动,因为任何恶意开机程式码或作业系统软体,都可能把你的装置变成僵尸网 诸如Android 手机等其它情形可能就有所取舍了,例如,使用安全启动可能会限 制终端用户执行客制ROM。能够做到这点也许是一项特色功能,或者可能是根 对于执行Linux 的IP 相机等更高整合度的系统来说,更多人会建议你使用安全 i.MX6 上的安全启动过程 一旦在i.MX6 上建立了开机启动镜像,为了利用安全启动,必须针对为此目的产 生的SSL 凭证产生一组安全金钥。 这些金钥用于产生一组安全指令,然后利用供应商(如飞思卡尔,如今的恩智浦) 路的一部份。或者可能是从摄影机拍到的画面被公开上传到网际网路,或什至被 修改成不包含视讯主人想要的影片片段等资讯。 提供的工具编译后追加到启动镜像中。处理器随即取得第一阶段的启动载入程式, 并采用你的凭证来认证以安全启动编译工具产生的凭证资料。 在写入启动媒介时,如果启动镜像中的金钥资料符合储存在处理器安全记忆体中 的金钥资料,将会开始执行安全指令,然后检查镜像的密码杂凑值,确保其与安 全指示值相符。如果彼此符合,处理器将会开始载入并执行你的启动镜像。 一旦这个过程通过CPU 的内部启动载入程式,你仍然可以从启动载入程式的程 式码调用安全开机库。这可让你载入作业系统镜像,并以CPU 启动载入程式认 证软体启动载入程式的相同方式加以认证。 在这个过程结束时,作业系统将在通过验证的安全环境中完成启动。你知道这很 合理,因为每一阶段都对于处理器中储存的金钥杂凑值进行认证测试。 一次性可编程设计 从安全角度看这个过程,从SSL 凭证所产生的根金钥(rootkey)经过杂散后,再 以一次性可编程(OTP)设计烧入CPU 中。一旦这个金钥烧入处理器后就不能修改 了——理由之一是安全。 启动镜像也在此金钥基础上签名,而在此签名过程所产生的资料将与镜像结合。 处理器利用其金钥检查你的镜像金钥,如果彼此相符,则会以刚好符合处理器的
金钥检查你的镜像。如果仍然相符,就能执行镜像。这一步骤会将你带到更上层 链,从CPU 启动载入程式到正常启动载入程式,再到作业系统。 当然,这可能是i.MX6 特有的情况,实际上还有各种不同类型的安全启动,例如 采用UEFI 安全启动的X86,但为了便于理解,本文重点还是放在i.MX6 上。 i.MX6 硬体套件包括许多有益于安全启动的特殊安全机制。用于安全启动的关键 部份是烧入金钥时所使用的一次性熔丝(one-timefuse)。一旦熔断后就无法再接 系统安全性的另一个功能是CPU 内部启动载入程式,这是一段同样经过安全测 此外,i.MX6 具有一个硬体密码演算法加速器。诸如AES 杂凑、TripleDES 杂凑、 SHA1 和SHA256 等演算法,都能经由i.MX6 处理器进行加速,从而大幅提高安 起来,因此一旦烧入你的金钥后,其杂凑值就具有永久性了。多个金钥也可以整 试的静态程式码。这是一直到作业系统的整条链得以保持安全的重要基础。 合于一个金钥杂凑值,因此如果受到威胁时就可以废除一个金钥。 利用硬体 全处理的速度。 缺点 最明显的缺点是必须负责自己的安全性。如果你的金钥泄露给外界,就会有人利 用储存在处理器中的金钥为程式码签名,因此你必须确保处理过程和硬体的安全。 另外,只为安全启动目的而配置的处理器,只有在镜像得到正确签名后才能启动。 一旦处理器被设置为安全执行,那就必须载入安全的程式码。它只允许你从储存 因此,在将杂凑值烧入处理器的过程中,如果发生任何差错都会导致处理器无法 执行程式码,因为烧入的杂凑值并不相符——因而成为一个无用的处理器。 (如SD 卡或NAND 快闪记忆体)中安全地载入,或以其它方式将软体载入处理器 (USB 镜像载入)中。 因此,硬体和处理器的准备工作一定要保证安全。此外,还必须确保你的启动载 入程式也为此作好充份准备。 如前所述,你的启动载入程式必须调用处理器上的安全启动库,以便认证启动链 的下一阶段。如果未能正确地编码启动载入程式以便正确使用安全库,那么你可 能无法完全确保作业系统的安全性。 不要掉入虚假的安全感陷阱
功载入后,将会危害到整个系统。 如此就可以将作业系统的根档案系统和其它重要档案载入记忆体中的某个固定 需要弄清楚的是,i.MX6 的安全启动并不会锁定整个系统,而只是锁定作业系统 软体。因此有人可能编写一些在作业系统上执行的Linux 恶意软体,如果它们成 i.MX6 安全启动认证 如果要求更完整的安全性,还可以认证档案系统中的其他部份和程式码。i.MX6 i.MX6 安全启动的重要诀窍 1.确保启动过程是安全的 一旦你决定需要走安全启动路径,那就必须确保相关 2.确保强劲的加密方法 确保所使用的加密方法足够强劲。使用者很可能建立力 度较弱的金钥,而i.MX6 上的安全启动也支援一些较老旧或如今被视为妥协折衷 3.检查你的程式码 为了实现安全启动,意味着任何事情,包括启动载入程式中 的其余程式码、作业系统和其它软体都必须在安全启动的原则下正确编写,而不 的组合。因此,确保你的演算法是最新的,能够满足目标要求。 的安全启动过程原则是特定记忆体块具有特定的密码杂凑值和有关的签名资讯。 位置,同时载入正确的安全指令集。这样允许你在必要时认证系统的其它部份。 过程也能并驾齐驱。在生产环境中泄露了金钥将功败垂成。 能出现安全漏洞。 另外,启动过程的每一阶段在执行前必须检查下一步。如果没有做到这点,或者 部份做到,那么能够称为过程安全的范围就会小很多。 4.认证每个地方 为了实现真正的安全,尽可能地认证你想载入的所有程式码, 并确保遵循针对库建立的操作方法。 你必须确保整个过程的安全,即如何产生和储存你的金钥。安全启动只能检查签 名,而任何签名的镜像都会被处理器认为是安全的。 因此,确保你所写入的每一个程式码独立部份,都能被调用于处理器的安全启动 库中,以便继续认证你的镜像,因为大多数i.MX6 电路板都有多个阶段的启动过 程,CPU 内部启动载入程式先是载入SPL,然后SPL 接着载入完整的启动载入 程式,以便载入作业系统。每一步都必须经过前一步骤的认证,以便确认是安全 的。
全的程式码也可能跳到记忆体的任何位置继续执行,因为处理器的工作原理就是 5.确认过程经过有效认证 确保程式码能真正执行安全启动至关重要。即使是安 i.MX6 最常使用的启动载入程式是U-Boot,它真正支援在i.MX6 上执行安全启动。 这样的。为了保持安全,实际确保程式码将会认证下一步程式码至关重要。 它需要进行配置,不过比较简单些。当有大量的工作已经先行处理好了,你应该 就会较少出错。从头开始编写安全性并不是个好办法,最好是采取一种已知的理 想建置方式,并使其符合你的设计需求。
分享到:
收藏