2017-04-14 1 views
1

복구 열심히하기 (어떤 종류의 데이터 와이퍼)하기 위해 파일을 열고 그 자리에있는 물리적 위치의 모든 바이트를 대체 할 수있는 응용 프로그램을 개발하고 싶습니다. 그렇다면 QFile 인 파일을 nMb로 열고 해당 데이터를 통해 더미 데이터의 Mb를 쓰면 동일한 실제 위치 (Windows 및 Linux)에서 덮어 쓰게됩니다.같은 물리적 주소에 QFile을 쓰려면 어떻게해야합니까?

답변

1

"보통"파일 시스템의 경우 HDD 드라이브에 파일의 시작 부분을 찾고 올바른 바이트 양을 쓰기 만하면됩니다. 그들은 같은 장소에 놓이게됩니다. 당신은 데이터가 실제로 같은 위치에 기록되지 않습니다 write aplification, 처리해야하기 때문에

그러나, 운영 체제가 그것이 생각하더라도, SSD에 그이 방법을 수행하는 것은 매우 어렵다. 대신 SSD의 경우 TRIM 명령을 사용해야하며 블록을 비워두면 SSD 컨트롤러가 나중에 다시 사용할 수 있도록 0으로 다시 씁니다. ext4 또는 ntfs과 같은 최신 파일 시스템에서는 이미 삭제 된 파일에 대해 수행됩니다.

HDD에서 재개하면 방법이 적절하고 적용 가능합니다. SSD의 경우 데이터의 복사본을 몇 개 만들 것이므로 파일을 삭제하고 FS 드라이버가 TRIM을 나를 위해 SSD 컨트롤러에 보내길 희망하여 파일을 삭제하는 것이 좋습니다.

1

XY 문제의 냄새가 있습니다. 실제로 원하는 것은 데이터에 액세스 할 수 없게 만드는 것입니다. 파일 자체의 데이터 덮어 쓰기는 가능한 접근 방법 중 하나 일뿐입니다.

또 다른 방법은 문제를 줄이는 것입니다. 단순히 파일을 덮어 쓰는 대신 일반 텍스트로 저장하지 말고 예를 들어 암호화합니다. AES를 사용합니다. 키에 액세스 할 수 없으면 데이터에 액세스 할 수 없게됩니다. 키 크기는 작습니다 - 16 - 32 바이트 크기입니다.

그런 작은 키를 잃어 버리는 것이 훨씬 쉽습니다.

내가 잘 발견 한 접근법은 파일 시스템이 전용 블록을 사용하기에 충분한 길이의 여러 키 파일에 키의 바이트를 분배하는 것입니다. 128kb로 충분할 것 같습니다. 나는. 16 바이트 길이의 키를 저장하기 위해 각각 128KB의 16 개 키 파일을 사용하십시오. 키 파일을 메모리 맵핑하여 파일 시스템이 다른 데이터와 병합하지 않고 전용 블록을 할당 할 수 있도록하십시오. 처음 사용할 때 임의의 데이터로 키 파일을 채 웁니다.

저장하는 각 키에 대해 키의 1 바이트를 각 파일의 동일한 오프셋에 두어 키 파일에 걸쳐 키를 배포하십시오. 나는. key[key_no][key_offset] <-> key_file[key_offset][key_no]. 보호 된 파일을 잃으려면 키를 임의의 데이터로 덮어 씁니다. 보호 된 각 파일에는 하나의 키가 있으며 키를 공유하지 않습니다.

공격자는 동일한 시점에 여러 키 파일의 이전 내용을 복구해야합니다. 몇 개의 키 파일을 복구하더라도 각각의 키 파일은 키의 1/16 만 제공하고 256의 힘에 의한 총력을 감소시킵니다.

관련 문제