임의의 콘텐츠가 포함된 대용량 파일 만들기: 복사하여 바로가기를 사용하시겠습니까?

임의의 콘텐츠가 포함된 대용량 파일 만들기: 복사하여 바로가기를 사용하시겠습니까?

cryptsetup을 사용하여 파일에 저장된 대용량 암호화 드라이브를 만들고 싶다고 가정해 보겠습니다. 첫 번째 단계는 임의의 파일을 만드는 것입니다. 크기는 3T여야 한다고 가정해 보겠습니다.

dd if=/dev/urandom of=$FILE bs=1G count=3000

위 과정은 시간이 오래 걸릴 수 있습니다. 다음 바로 가기가 적합한지 궁금합니다(보안 관점에서 목표는 $FILE에 저장된 암호화된 드라이브를 만드는 것임을 기억하세요).

  1. dd if=/dev/urandom of=$FILE bs=1G count=1000
  2. 위 파일의 사본 3개를 복사하세요. 각 파일의 크기는 1T이고 동일한 무작위 내용을 가지고 있습니다.
  3. 3개의 파일을 병합하여 대상 크기가 3T인 임의의 파일 1개 생성

데이터가 약간 "덜" 무작위적이기 때문에 이 프로세스는 엄격하지 않다고 생각합니다. 그러나 실용적인 관점에서 볼 때 이것이 실현 가능한 솔루션입니까(거의 3배 더 빠를 것입니다)? 이것이 0을 사용하여 3T 파일을 만드는 것보다 낫 습니까 /dev/zero?

답변1

/dev/urandom이렇게 많은 양의 데이터를 처리하기에는 너무 느립니다.

의사 무작위성이 충분히 좋은 경우:

shred -v -n 1 /kill/me

암호화된 난수가 충분한 경우:

cryptsetup open --type=plain /kill/me cryptkillme
shred -v -n 1 /dev/mapper/cryptkillme
cryptsetup close cryptkillme

암호화도 느리지만 여전히 /dev/urandom.

shred임의의 데이터는 모든 디스크에 대해 충분히 빠르게 생성되어야 합니다.

또한 이 크기의 경우 파일이 아닌 일반 블록 장치를 사용해야 합니다. 대용량 파일을 호스팅하는 파일 시스템이 손상되면 이 크기의 파일이 심각하게 조각화되는 경우가 많기 때문에 조각화 문제로 인해 해결할 수 없는 난제에 직면하게 됩니다.

파일 사용을 고집하는 경우 처음부터 임의의 데이터로 채우지 않는 것을 고려할 수 있습니다. 대신 희소 파일을 사용하고 사용하지 않는 영역의 저장 공간을 절약하기 위해 파일을 다듬거나 펀치할 수 있습니다.

암호화되지 않은 오래된 데이터를 덮어쓰는 것이 목표라면 컨테이너 파일 자체뿐만 아니라 파일 시스템의 사용 가능한 모든 공간도 덮어써야 합니다. 원하는 암호화되지 않은 데이터와 동일한 위치에 할당되어 있는지 알 수 없기 때문입니다. 제거하십시오.

답변2

질문의 마지막 부분에 답하려면 0을 사용하는 것보다 동일한 무작위 데이터를 세 번 사용하는 방법이 더 낫습니다.

거의 똑같지는 않습니다. 세 개의 동일한 무작위 부분으로 인해 장치의 모든 블록은 세 개의 동일한 블록의 일부입니다. 따라서 공격자는 장치에서 변경된 블록을 매핑할 수 있으며, 이는 공격자가 장치를 제로화하여 얻을 수 있는 정보와 동일합니다. 이는 장치가 너무 꽉 차서 각 트리플렛에 세 개의 서로 다른 청크가 있는 경우에만 실패합니다.

관련 정보