2017-04-06 72 views
0

我遇到了一個奇怪的問題。 我用字母'A'填充了一個文本文件,並將其長度設置爲4096個字節。 然後,使用OpenSSL加密它在Linux:在CBC模式下使用openssl和dmsetup進行AES加密的垃圾文件

KEY="2D242B65C517B72F8D1DAA8278CA5A2ED5D8A95BCF82BFD3778212218726335F" 
openssl enc -nosalt -iv 0 -K $KEY -aes-256-cbc -in $PLAINIMAGENAME -out $CRYPTIMAGENAME 

(無鹽,無IV)

然後,試圖建立與DM-隱窩一個設備映射器回送設備:

 
losetup /dev/loop0 $CRYPTIMAGENAME 
sudo dmsetup create cryptotest --table "0 4096 crypt aes-cbc-null $KEY 0 /dev/loop0 0" 

當我嘗試從/ dev/mapper/cryptotest讀取時,得到我的A,但每512字節(塊大小?)有16個字節的垃圾。這怎麼可能?

當我使用ECB模式(每塊都以相同的方式加密)時,一切正常。順便說一下,我不想使用LUKS進行環回加密,我需要一個無標題的AES流,它可以由openssl或aespipe創建。

+1

這是填充:https://en.wikipedia.org/wiki/Padding_(cryptography) –

+0

注意,AES的塊大小是16個字節。 – zaph

+0

我相信dm-crypt使用不帶填充的CBC模式。這是因爲磁盤扇區是固定大小,並且總是塊大小的倍數。 ECB和CBC模式都可以解密塊,我感到很奇怪。 – jww

回答

2

我找到了解決該問題:

的設備映射器需要開始一個新的CBC每個扇區(512個字節== 32個AES塊),以便能夠有隨機存取的扇區,而不必在此之前解密所有內容。因此,我必須連接長度爲512的aes-128-cbc加密流。 當然,零的IV不是很好。我現在使用aes-128-cbc-essiv:sha256。 ESSIV由加密密鑰和扇區號的散列(sha256)計算,所以沒有扇區具有相同的加密數據。

進一步的信息可以在這裏找到:http://www.penzin.net/dmcrypt/

+1

對於加密磁盤扇區,請查看[磁盤加密理論](https://en.wikipedia.org/wiki/Disk_encryption_theory#XEX-based_tweaked-codebook_mode_with_ciphertext_stealing_.28XTS.29)。 – zaph

相關問題