Yocto meta-toradex-security layer 創(chuàng)建加密數(shù)據(jù)分區(qū)應(yīng)用說明

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?By Toradex胡珊逢

簡(jiǎn)介

上一篇文章中我們已經(jīng)介紹如何使用?meta-toradex-securitylayer 創(chuàng)建一個(gè)單獨(dú)的分區(qū)。接下來我們將說明,如何在該分區(qū)上使用加密功能,讀寫性能測(cè)試,如果你還感興趣,最后部分內(nèi)容將闡述分區(qū)加密背后的原理。技術(shù)實(shí)現(xiàn)細(xì)節(jié)隱藏在 meta-toradex-security 的 recipes 里面,用戶能夠僅使用幾行簡(jiǎn)單的配置即可開啟分區(qū)加密。

Yocot Project 配置

和之前的文章一樣,首先需要搭建 Yocto Project 編譯環(huán)境。這里我們將以 Verdin iMX8MP 為例進(jìn)行介紹。在 local.conf 的結(jié)尾添加下面兩行配置即可。

INHERIT += "tdx-tezi-data-partition tdx-encrypted"

TDX_ENC_STORAGE_LOCATION = "/dev/mmcblk2p3"

tdx-encrypted被添加后,所編譯的鏡像中就能夠使用分區(qū)加密。'TDX_ENC_STORAGE_LOCATION' 用于配置需要加密的分區(qū)。在 Verdin iMX8MP 上 eMMC 會(huì)被掛載到 /dev/mmcblk2 下面,mmcblk2p3 是需要新創(chuàng)建的第三個(gè)分區(qū)。'TDX_ENC_STORAGE_LOCATION' 也可以設(shè)置為 /dev/sda1 或者 /dev/mmcblk0p1,分別對(duì)應(yīng)外部的 U 盤、SD 卡等。

為了提供加密的安全性和效率,meta-toradex-security 可以利用加密運(yùn)算單元,例如 iMX8M Plus SoC 上的 CAAM(Cryptographic Accelerator and Assurance Module)模塊。當(dāng)然也支持外部的 TPM,例如在 Verdin AM62 上由于沒有 SoC 內(nèi)置的加密運(yùn)算單元,meta-toradex-security 則能夠使用底板上的 TPM,如 Mallow 底板。對(duì)于使用 TPM 的模塊,local.conf 中還需要添加 TDX_ENC_KEY_BACKEND = "tpm"。

然后使用 bitbake 命令編譯鏡像即可。

bitbake tdx-reference-minimal-image

當(dāng)安裝完系統(tǒng)并重啟后,可以看到 /dev/mapper/encdata,這就是 /dev/mmcblk2p3 分區(qū) DATA 對(duì)應(yīng)的加密設(shè)備,它被掛載到 /run/encdata 目錄下。在 local.conf 文件中 TDX_ENC_STORAGE_MOUNTPOINT 參數(shù)可以用來更改掛載路徑。

~# mount -l

/dev/mapper/encdata on /run/encdata type ext4 (rw,relatime)


Linux 的文件系統(tǒng) RFS 使用非加密分區(qū),我們將分別往加密的 /run/encdata 和非加密的 /home/root 目錄下寫入和讀取 1GB 的文件,對(duì)比加密操作對(duì)讀寫文件的影響。

#write

fio --name=test --filename=testfile.tmp --size=1G --bs=256k --iodepth=64 \

? --readwrite=write --direct=1 --ioengine=libaio --gtod_reduce=1?

#read?

fio --name=test --filename=testfile.tmp --size=1G --bs=256k --iodepth=64 \

--readwrite=read --direct=1 --ioengine=libaio --gtod_reduce=1

測(cè)試結(jié)果如下:

/run/encdata/home/root

寫入 1GB 文件32.8MB/s61.9MB/s

讀取 1GB 文件32.6MB/s314MB/s

實(shí)現(xiàn)原理

如前面介紹,借助 meta-toradex-security 開啟和使用加密分區(qū)是非常簡(jiǎn)單的,對(duì)于應(yīng)用程序來講,底層的加密是透明的。如果你還對(duì)實(shí)現(xiàn)原理感興趣,請(qǐng)繼續(xù)閱讀下面的內(nèi)容。


i.MX8 SoC 上有一個(gè) CAAM 模塊可以用于密鑰生成、加密和解密運(yùn)算。通常用戶不會(huì)直接調(diào)用 CAAM API 進(jìn)行相關(guān)操作。為了更好地保護(hù)密鑰,我們使用 Linux 的一個(gè)內(nèi)核功能Trusted Keys。Trusted Keys 能夠在內(nèi)核空間中生成和維護(hù)一個(gè)密鑰,而在用戶空間中則是該密鑰的加密文件(encrypted blobs),用戶空間中無法直接訪問到密鑰。密鑰的加密和解密是在 CAAM 上完成,而 CAAM 就是 Trusted Keys 的 Trust Source。對(duì)于沒有 CAAM 作為 Trust Source 的平臺(tái),例如 Verdin AM62,我們還可以使用外部的 TPM,甚至是 TEE (Trusted Execution Environment)。這些在 meta-toradex-security 中均得到支持。

另外一個(gè)內(nèi)核功能dm-crypt實(shí)現(xiàn)了透明的分區(qū)加密。dm-crypt 會(huì)使用一個(gè)密鑰用于加密需要寫入到 /run/encdata 目錄下文件。該密鑰可以存儲(chǔ)在文件系統(tǒng)分區(qū) RFS 的一個(gè)目錄下,默認(rèn)配為?/var/local/private/.keys/tdx-enc-key.blob。如果 RFS 是只讀文件系統(tǒng),tdx-enc-key.blob 也可以直接存放在 eMMC 上。但?tdx-enc-key.blob?并是直接用于加密和解密的密鑰。如前面提到的,密鑰的維護(hù)是由 Trusted Keys 實(shí)現(xiàn)。

在 CAAM 中首先生成一個(gè)密鑰 encryption key,該密鑰不會(huì)離開 CAAM。該密鑰通過同樣位于 CAAM 的 Test key 或者 OTPMK Key 加密后,交給位于 kernel space 的 Trust Keys 維護(hù)。Trust Keys 為 dm-crypt 映射一個(gè)密鑰,并存放在?/var/local/private/.keys/tdx-enc-key.blob。當(dāng)位于 user space 的應(yīng)用程序需要讀寫?/run/encdata?的文件時(shí),dm-crypt 將?tdx-enc-key.blob?提交給 Trusted Keys。Trusted Keys 在 kernel space 中找到對(duì)應(yīng)的密鑰,然后將該密鑰交給 CAAM。在 CAAM 中可以使用 Test key 或者 OTPMK Key 解密出 encryption key。并在 CAAM 中使用 encryption key 完成加密或者解密數(shù)據(jù)。這個(gè)過程中 Test key/OTPMK Key 和 encryption key 始終不會(huì)離開 CAAM,并且加密和解密操作也均在 CAAM 中進(jìn)行。由于?/var/local/private/.keys/tdx-enc-key.blob?并不是直接用于加密和解密的密鑰。因此,即使該密鑰泄漏,也不會(huì)導(dǎo)致原來位于?/run/encdata?的數(shù)據(jù)被破解。

對(duì)于使用 CAAM 的模塊,例如 Verdin iMX8MM、Verdin iMX8MP、Apalis iMX8QM 等,如果沒有開啟 Secure Boot 功能,如前面提到,CAAM 會(huì)使用預(yù)制的 Test key 來加密密鑰,這是不安全的,也不推薦在生產(chǎn)環(huán)境中使用。開啟 Secure Boot 功能后,CAAM 則使用 OTPMK Key 來加密密鑰。這是一個(gè) 256bit 隨機(jī)生產(chǎn)的密鑰,在 fuse 設(shè)備的時(shí)候燒錄到 CAAM 中。因此該密鑰必須妥善保管。

總結(jié)

借助 meta-toradex-security,用戶能夠輕松而安全地使用加密分區(qū),保護(hù)數(shù)據(jù)和應(yīng)用。更多來自 meta-toradex-security 實(shí)用功能,我們將在后續(xù)文章介紹,敬請(qǐng)關(guān)注。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 Google Play應(yīng)用市場(chǎng)對(duì)于應(yīng)用的targetSdkVersion有了更為嚴(yán)格的要求。從 2018 年...
    申國駿閱讀 65,965評(píng)論 15 98
  • """1.個(gè)性化消息: 將用戶的姓名存到一個(gè)變量中,并向該用戶顯示一條消息。顯示的消息應(yīng)非常簡(jiǎn)單,如“Hello ...
    她即我命閱讀 5,290評(píng)論 0 6
  • 我們都是軟弱的人,所以才會(huì)說謊。我們都是膽小的人,所以才要武裝。我們都是一群笨蛋,所以才會(huì)互相傷害。
    所羅門的偽證_dc0a閱讀 3,697評(píng)論 1 3
  • 為了讓我有一個(gè)更快速、更精彩、更輝煌的成長,我將開始這段刻骨銘心的自我蛻變之旅!從今天開始,我將每天堅(jiān)持閱...
    李薇帆閱讀 2,248評(píng)論 1 4
  • 似乎最近一直都在路上,每次出來走的時(shí)候感受都會(huì)很不一樣。 1、感恩一直遇到好心人,很幸運(yùn)。在路上總是...
    時(shí)間里的花Lily閱讀 1,752評(píng)論 1 3

友情鏈接更多精彩內(nèi)容