Linux에서의 디스크 암호화

Linux에서의 디스크 암호화

감사로 인해 데이터베이스(elasticsearch)의 데이터를 암호화해야 합니다. 저는 암호화에 관해서는 전혀 모르는 사람입니다. 인터넷 검색을 한 후에 디스크 수준에서 암호화가 있다는 것을 깨달았습니다(마스터 비밀번호를 입력해야 하거나 TPM 모듈을 사용하여 OS 로드) 그런 다음 전체 디스크가 해독됩니다. 두 번째 유형의 암호화는 파일 시스템 수준에 존재합니다. 이는 데이터가 파일 또는 파티션별로 즉석에서 암호화/암호 해독되는 경우입니다.

LUKS와 함께 dm_crypt를 사용하는 것도 권장되지만 어딘가에서는 LUKS가 배후에서 dm_crypt를 사용하고 전체 디스크를 암호화하는 데만 사용된다고 기록합니다(즉, OS가 시작되면 모든 데이터가 해독됩니다) Daowu는 LUKS가 블록 장치 수준이라고 기록합니다 암호화 및 dm_crypt는 파일을 동적으로 암호화/해독합니다.

두 메커니즘이 모두 필요하거나 최소한 FS 수준 암호화가 필요합니다. 시작 후 블록 수준 암호화에 LUKS를 사용하고 동적 파일 암호화에 dm_crypt를 사용할 수 있습니까?

답변1

(운영 체제를 로드하거나 TPM 모듈을 사용할 때 마스터 비밀번호가 필요합니다.) 그런 다음 전체 디스크가 해독됩니다.

실제로는 그렇게 작동하지 않습니다.

전체 디스크(또는 파일 시스템) 암호화는 실제로 전체 디스크를 한 번에 해독하지 않습니다. 대형 HDD에서는 이 작업에 몇 시간이 걸릴 수 있습니다. 대신 암호화된 디스크 장치(예: /dev/sda2)에 대한 비밀번호를 입력하면 커널이 두 번째 장치(예: )를 설정합니다 /dev/mapper/crypt_sda2. 첫 번째 장치의 콘텐츠에 두 번째 장치를 통해 액세스할 수 있습니다.마치커널이 입력/출력 작업을 가로채고 모든 읽기를 해독하고 모든 동적 쓰기를 암호화하기 때문에 암호가 해독됩니다.

누군가 암호화된 디스크가 설치된 시스템에 침입하면 해커는 암호화되지 않은 일반 디스크처럼 디스크에 액세스할 수 있습니다. 그러나 시스템이 실행되는 동안 누군가가 시스템에서 디스크를 꺼내서 읽으려고 하면 읽을 수 있는 것은 부트로더, 커널, initramfs 및 파티션의 LUKS 헤더이며 sda2기본적으로 파티션 내의 다른 모든 항목과 구별할 수 없습니다. 무작위 데이터. 누군가 컴퓨터가 꺼져 있는 동안 컴퓨터를 훔쳐서 부팅하려고 하면 Please enter the passphrase for /dev/sda2:다른 것을 보게 될 것입니다.

dm_crypt커널의 디스크 암호화 인프라이고 LUKS는 파티션이나 기타 디스크 볼륨을 암호화하기 위한 헤더 형식입니다. 서로 잘 작동합니다. 그러나 LUKS 헤더가 있으면 컴퓨터를 확인하는 사람이 항상 "여기에 암호화된 볼륨이 있습니다."라는 내용을 볼 수 있습니다. 이것이 바람직하지 않은 경우 dm_cryptTrueCrypt/VeraCrypt 호환 모드를 사용할 수 있습니다. 이를 통해 두 개의 별도 비밀번호를 사용하여 액세스할 수 있는 "거부 가능한" 암호화 파티션을 가질 수 있습니다. 하나의 비밀번호는 한 세트의 콘텐츠를 공개하고(무해한 미끼로 설정할 수 있음) 다른 것이 있다는 것을 나타내지 않습니다... 하지만 다른 비밀번호를 사용하면 동일한 볼륨을 다양한 방식으로 잠금 해제하고 실제 콘텐츠를 공개할 수 있습니다. . 물론, 디코이 모드에서 "빈" 공간을 100% 가득 채우면 "실제" 데이터를 덮어쓰게 됩니다.

답변2

블록 장치가 오프라인일 때 전체 내용은 무작위 데이터 묶음처럼 보입니다.

디스크의 데이터는 항상 임의의 데이터 묶음처럼 보입니다. 일반 텍스트 데이터가 디스크에 기록되는 경우는 없습니다(전체 디스크 암호화를 사용하는 경우). 섹터 N을 읽으면 암호화된 데이터가 해당 섹터에서 읽혀지고 RAM으로 해독됩니다. 귀하의 응용 프로그램은 이를 RAM에서 사용합니다. 애플리케이션이 이후에 섹터 N에 쓰는 경우 RAM의 일반 텍스트 데이터는 디스크에 쓰는 작업의 일부로 암호화됩니다.

관련 정보