Filesystems

LUKS 加密中的 Bit Rot

  • December 27, 2021

位腐爛如何影響 LUKS 容器和內部的文件系統?

假設您有一個非常適合處理位腐爛的文件系統。現在把它放在一個 LUKS 容器中。如果位腐爛損壞了容器,我假設解密的文件系統將遭受大量損壞的原始字節/塊。

LUKS 如何防止這種情況發生?

LUKS 標頭中的 Bitrot(關鍵和其他關鍵材料):它消失了。

(LUKS2 標頭有一些冗餘和校驗和,但它並沒有涵蓋太多,所以很可能……它仍然消失了)。

加密數據中的Bitrot:取決於加密方式,但一般情況下,單個位翻轉會導致16個錯誤字節。

設置加密:

# truncate -s 32M bitrottest.img
# cryptsetup luksFormat bitrottest.img
# cryptsetup luksOpen bitrottest.img bitrottest

將其全部歸零:

# shred -n 0 -z /dev/mapper/bitrottest 
# hexdump -C /dev/mapper/bitrottest 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
01000000

稍微翻轉一下:

# losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE           DIO LOG-SEC
/dev/loop0         0      0         1  0 bitrottest.img        0    4096
# dd bs=1 count=1 skip=30M if=/dev/loop0 | hexdump -C
00000000  a2                                                |.|
00000001
# printf "\xa3" | dd bs=1 count=1 seek=30M of=/dev/loop0
# dd bs=1 count=1 skip=30M if=/dev/loop0 | hexdump -C
00000000  a3                                                |.|
00000001

結果:

# hexdump -C /dev/mapper/bitrottest 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00e00000  eb d1 bd b0 2a f5 77 73  35 df 82 40 1e a7 27 11  |....*.ws5..@..'.|
00e00010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
01000000

一個翻轉的位,16 個古怪的字節。

保護?沒有任何。為此,您必須添加完整性(只是為了報告錯誤,冗餘仍然是一個單獨的問題)。

您不應該故意將損壞的數據寫入您的儲存。

儲存應該報告讀取錯誤而不是返回虛假數據。在這種情況下,您的數據仍然消失了,但至少,它不是無聲的bitrot。

引用自:https://unix.stackexchange.com/questions/684104