암호 분석 관점에서 dm-crypt 일반 모드에서 암호를 사용하여 다른 볼륨에 동일한 키를 재사용할 때 보안 결함이 있습니까 aes-xts-plain64
?
# Example: Encrypt two volumes with the same key
cryptsetup --type plain --cipher=aes-xts-plain64 --key-size=256 --key-file mykey open /dev/sda myvol1
cryptsetup --type plain --cipher=aes-xts-plain64 --key-size=256 --key-file mykey open /dev/sdb myvol2
동일한 키로 암호화된 볼륨이 100개 미만인 등 실제 사례만 고려합니다.
답변1
좋아요, 이것은 Security Stack Exchange가 아니며 저는 암호화 전문가도 아니지만 액면 그대로 다음과 같습니다.
암호화되지 않은 앨리스:
00000000 48 65 6c 6c 6f 20 6d 79 20 6e 61 6d 65 20 69 73 |Hello my name is|
00000010 20 41 6c 69 63 65 0a 00 00 00 00 00 00 00 00 00 | Alice..........|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
바비 암호화되지 않음:
00000000 48 65 6c 6c 6f 20 6d 79 20 6e 61 6d 65 20 69 73 |Hello my name is|
00000010 20 42 6f 62 62 79 0a 00 00 00 00 00 00 00 00 00 | Bobby..........|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
둘 다 동일한(마스터) 키 aes-xts-plain64를 사용하여 암호화됩니다.
Alice000 8f 04 35 fc 9f cb 5d c8 af da ae 78 cd e5 64 3d |..5...]....x..d=|
Bobby000 8f 04 35 fc 9f cb 5d c8 af da ae 78 cd e5 64 3d |..5...]....x..d=|
Alice010 4f d3 99 77 7b c1 2c 8d ff 9b 4d 55 da a3 9b e2 |O..w{.,...MU....|
Bobby010 12 d6 ad 17 74 50 4d 08 8c 38 22 40 98 a7 14 99 |....tPM..8"@....|
Alice020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
Bobby020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
따라서 표면적으로 문제는 동일한 오프셋과 일반 텍스트(각 16바이트 블록에 대해)가 동일한 암호문을 생성한다는 것입니다. 평문이 다르면 암호문도 달라집니다. 어떤 경우에는 이것이 여유 공간을 표시하는 것보다 더 의미가 있을 수 있습니다.
또 다른 문제는 암호문을 한 드라이브에서 다른 드라이브로 복사한 다음 이를 의미 있는 데이터로 해독할 수 있지만 잘못된 드라이브에 있다는 것입니다. 일반적으로 암호문을 엉망으로 만들면 암호문을 해독할 때 얻을 수 있는 것은 무작위 쓰레기뿐이지만, 마스터 키를 재사용하면 더욱 효과적인 암호문을 얻을 수 있습니다.
따라서 완전히 인위적인 예를 들어 보겠습니다. 키를 모르지만 해당 시스템에 저장된 파일에 액세스할 수 있는 사용자가 있고 한 드라이브에서 다른 드라이브로 암호문을 복사할 수 있는 사용자가 있는 경우 이는 일반적으로 불가능합니다. 그러나 우리는 그렇다고 가정합니다. 쓰레기로 가득 찬 큰 파일을 작성하고 파일이 할당된 디스크의 위치를 찾은 다음 다른 드라이브에서 데이터를 복사할 수 있습니다. 그런 다음 파일을 다시 읽을 때 다른 드라이브의 일반 텍스트 데이터를 볼 수 있습니다.
대체로 각 디스크에 고유한 키를 사용하는 것이 너무 쉽기 때문에 불필요한 번거로움이 있을 뿐입니다. 공유 마스터 키에서 키를 파생시키기 위해 해시 함수나 다른 수단을 사용하는 경우에도 마찬가지입니다. 이에 대한 이유는 없지만. 여러 키 파일을 사용하거나 옵션을 사용하여 --keyfile-offset
단일 --keyfile-size
파일에서 여러 키를 읽을 수 있습니다.
LUKS는 다양한 함정을 피할 수 있도록 도와줍니다. 의도적으로 헤더를 복제하지 않는 한, 동일한 비밀번호를 사용하더라도 각 컨테이너에 대해 항상 다른 임의 마스터 키를 사용합니다.
선택한 비밀번호에 대해 한 가지 더 참고하세요 aes-xts-plain64
. 이것을 예전에는 이라고 불렀습니다 aes-xts-plain
. 2TiB보다 큰 장치가 나올 때까지는 모든 것이 괜찮습니다... 이를 통해 aes-xts-plain
암호문은 2TiB마다 반복됩니다. 이는 기본적으로 동일한 마스터 키를 재사용하는 것과 동일한 문제입니다.
이 문제는 이후 해결되었지만 aes-xts-plain64
일부 블로그/wiki에서는 여전히 오래된 컨테이너를 유지하고 새 하드 드라이브와 함께 확장할 것을 권장하므로 오늘날까지도 일부 사람들은 잘못된 컨테이너를 사용하게 됩니다...