비트 부패는 LUKS 컨테이너와 내부 파일 시스템에 어떤 영향을 미치나요?
비트 부패를 처리하는 데 적합한 파일 시스템이 있다고 가정해 보겠습니다. 이제 LUKS 컨테이너에 넣어주세요. 비트 부패로 인해 컨테이너가 손상되면 해독된 파일 시스템이 손상된 원시 바이트/블록을 많이 겪게 될 것이라고 가정합니다.
LUKS는 이를 어떻게 방지합니까?
답변1
LUKS 헤더의 Bitrot(키 및 기타 키 자료):*퍼프*다 쓴.
(LUKS2 헤더에는 약간의 중복성과 체크섬이 있지만 많은 부분을 포함하지 않으므로 아마도 아직 없어진 것 같습니다.)
암호화된 데이터의 Bitrot: 암호화 모드에 따라 다르지만 일반적으로 단일 비트 전환으로 인해 16개의 잘못된 바이트가 생성됩니다.
암호화 설정:
# truncate -s 32M bitrottest.img
# cryptsetup luksFormat bitrottest.img
# cryptsetup luksOpen bitrottest.img bitrottest
모두 0으로 만드세요:
# 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
1개의 플립 비트, 16개의 이상한 바이트.
보호하다? 전혀. 이를 위해서는 완전성을 추가해야 합니다(단지 버그 보고의 경우 중복성은 여전히 별도의 문제입니다).
손상된 데이터를 의도적으로 스토리지에 기록해서는 안 됩니다.
스토리지는 잘못된 데이터를 반환하는 대신 읽기 오류를 보고해야 합니다. 이 경우 데이터는 여전히 사라졌지만 적어도 사라지지는 않았습니다.조용한비트 회전.
답변2
LUKS 자체는 비트 부패를 방지하지 않습니다. 블록 장치 수준에서 비트 부패를 방지하려면 다음이 필요합니다.DM 무결성. LUKS 2는 Integrity와 결합하여 다음을 얻을 수 있습니다.인증된 암호화( cryptsetup luksFormat
사용됨 --integrity
) 이를 사용하면 시스템이 데이터가 변경되었음을 감지할 수 있지만 이는 실제로 비트 부패를 방지하는 데 도움이 되지 않습니다. 섹터를 읽으려고 하면 어떻게 해야 할지 모르면 섹터에서 IO 오류가 발생합니다. 그것을 고치려고. (AEAD의 목적은 누군가 암호화된 데이터를 변경한 경우를 감지하는 것입니다.)
실제로 데이터를 복구하려면 RAID 1이 필요하고 자가 치유가 가능하도록 RAID 다리 아래에 별도의 무결성 장치가 필요합니다(이것은 자동으로 작동하며 RAID는 한쪽 다리에서 IO 오류를 가져오고 다른 쪽 다리에서 데이터를 읽어 수리합니다(시도해 보세요). ) 첫 번째). 새로운시스템 250부팅 중 /etc/integritytab
(루트가 아닌 파일 시스템의 경우) 무결성 장치 조립에 대한 지원이 추가되었으므로 시도해 볼 수 있습니다. 그러나 암호화된 데이터에서 오류를 수정해야 하기 때문에 @frostschutz가 그의 대답에서 보여주는 것처럼 작동하려면 이 모든 작업을 LUKS 수준 "아래"에서 수행해야 합니다.