2013-09-23 4 views
-1

잠시 동안 한 번만 패드를 구현하고 싶다고 가정 해 보겠습니다. 보안 난수 생성기가 있고 난수가있는 일회성 패드를 만들었다 고 가정합니다. 이 파일을 USB 스틱이나 파일 시스템의 일부 공간에 저장하려고합니다.데이터를 완전히 지우려면 어떻게해야합니까?

이제는 메시지를 가져 와서 저장된 1 회성 패드를 사용하여 메시지를 암호화하거나 암호 해독 할 수있는 스크립트 또는 프로그램이 있습니다. 이 작업을 수행 한 후에 프로그래밍 방식으로 한 번만 패드를 파괴하려고합니다.

무엇을 하시겠습니까? 데이터를 디스크에 그대로두면 파일을 단순히 삭제해도 충분하지 않다는 것을 알고 있습니다. 한 시간 패드를 0 또는 다른 날짜로 덮어 쓰면 충분합니다. 윌은 진정한 회복을 불가능하게 만듭니다.

또한 패드를 RAM으로 읽어 들여 모듈 식 산술을 수행해야합니다. RAM이 더 이상 복구 할 수 없도록하는 가장 좋은 방법은 무엇입니까?

한 번 패드를 소프트웨어로 구현할 수 있습니까? 한 번 패드를 구현하는 방법을 생각할 때 다른 요소는 무엇입니까?

+0

가장 큰 문제는 제로 충전되지 않습니다. 오히려 충돌, 연결 손실 등의 이벤트에서도 양측이 자신의 키를 동기화하도록 보장합니다. –

+0

일반적으로 질문을 세분화 할 수 있도록 downvote를 설명하는 것이 가장 좋습니다. –

답변

3

저는 전문가가 아닙니다. 여기 내 생각이 있습니다.

두 당사자 간의 일회성 패드에는 두 당사자가 동일한 패드를 사용해야합니다. 당사자간에 교환 된 각 메시지에 대해 각 당사자는 패드에서 하나의 "페이지"를 제거합니다. 소프트웨어의 경우 "페이지"는 암호화 키입니다. 오류가 발생할 수 때문에 당신은 그것이 작동되도록하려면 몇 가지가 필요합니다

  1. 당신은 당사자가에있는 "페이지"가 ​​동기화 할 수있는 방법이 필요합니다. 일반적으로 메시지를 교환하는 동안 두 당사자는 어떤 페이지 (현재 페이지), 을 알고 있지만 동기화되지 않은 경우 페이지는 사용할 페이지를 결정해야합니다.

  2. 패드가 없어지면, 당사자들은 다음 패드를 사용할 때가되었는지 결정해야합니다. 페이지 번호와 마찬가지로, 그들은 "새로운 패드 사용"신호를 보내는 방법이 필요합니다.

  3. 당사자들이 동일한 패드를 사용하고 있는지 확인하는 방법이 필요할 수 있습니다. 패드에서 페이지를 굽지 않고이 작업을 수행하는 것이 좋습니다. 이 맞지만, 이 필요하지 않을 수도 있습니다.

  4. 패드 (또는 패드의 페이지)를 삭제하는 것은 까다 롭습니다. 고전적인 "드라이브를 지우는 방법으로 nsa cant recover it"항목을 읽어야합니다. 디스크의 같은 섹터에 다른 쓰레기를 반복적으로 쓰는 작업이 필요하다고 생각합니다.

  5. 동일한 "페이지"를 두 번 사용하지 마십시오. 요청에 대한 페이지가 요청에 대한 응답 페이지와 다릅니다.

+0

실제로 저는 요점 4가 내가 가장 관심이있는 부분이라고 생각합니다. 본질적으로 나는 패드를 삭제하는 가장 최신의 안전한 방법에 대한 정보를 찾아야합니다. – KennyBartMan

+1

다중 패스 삭제 권장 사항은 매우 오래된 연구를 기반으로합니다. 디스크 드라이브는 현재 훨씬 밀도가 높아 전자 현미경은 더 이상 겹쳐 쓰여진 데이터를 복구 할만큼 민감하지 않습니다.주제에 대한 높은 수준의 보도는 https://www.anti-forensics.com/disk-wiping-one-pass-is-enough/ 을 참조하십시오. 사람들이 기분을 좋게하기 위해 다중 패스 삭제를 사용한다고 말하는 것이 유용 할 수 있습니다. – Aurand

0

RAM

시간의 작은 기간 후 삭제됩니다 PC를 끄면 물리적 방법

. RAM은 몇 초/분 동안 cold boot attack으로 의심 될 수 있지만 데이터는 실제로 사라집니다.

프로그램에 입각 한 방식으로

/*C code*/ 

//Ask OS for some ram, the size of our data. 
char * SensitiveData = malloc(myDataSize); 

//Copy data from hard drive to the ram memory we 
//...just allocated. Implement this function your own way. 
load_key_from_hardrive(SensitiveData); 

/*Use key here*/ 

//Now let's overwrite the key: 
for (i=0;i<myDataSize;i++) 
{ 
    SensitiveData[i]='\0'; //Fill it with zeros. 
} 

free (SensitiveData); //Give the memory back to the OS. 

하드 드라이브

물리적 방법

하는 USB 스틱에 키를 저장 한 후 물리적으로 파괴 지 열쇠의 제거를 재촉한다.

프로그램에 입각 한 방식으로

는 많은 방법이있다. 리눅스 용입니다 : 새로운 파티션을 만들고 거기에 열쇠를 넣으십시오. 파티션 번호를 기록해 두십시오.이 예제에서는 sda2입니다.

#Linux bash code 
dd if=/dev/zero of=/dev/sda2 bs=1M 

당신이 부인권을 위해 임의의 데이터를 작성 선호하는 경우, 사용 :

키를 제거하려면, 파티션을 작성 제로

#Linux bash code 
dd if=/dev/urandom of=/dev/sda3 bs=1M 

다른 메모를

제로 한 번 램을 채우는 것으로 충분하다. 한 번 현대 하드 드라이브를 채우는 것은 충분하지만 아마도 일부는 한 번 이상합니다.

일부 운영 체제는 RAM에서 디스크 I/O를 캐시하므로 안전을 위해 하드 드라이브를 닦은 후에 RAM> 물리적 방법에 의존해야합니다. 나는 너무 편집증적일지도 모른다. IO 캐시에 대한 깊은 지식이 없으므로 다른 누군가가이 섹션을 더 잘 편집 할 것입니다.

RAM 메모리의 다른 조각이 키를 추론하는 데 사용할 수있는 경우, 램에 비슷한 방식으로도 그 채우기 제로해야합니다>는 프로그램에 입각 한 방식으로

관련 문제