2010-02-27 7 views
3

AES 암호화를 사용하여 데이터를 파일에 저장하는 listview 컨트롤로 작업하고 있습니다. listview의 모든 항목의 데이터를 std :: string의 std :: list 클래스에 보관해야합니다. 데이터를 std :: list에 암호화 된 상태로 유지하고 필요한 경우 로컬 변수에 해독해야합니까? 또는 파일로 암호화 된 상태로 유지하는 것으로 충분합니까?암호화 된 데이터를 메모리에 유지하기

답변

6

이 질문에 답하려면 공격자가 누구인지 (즉, 누가 데이터를 숨기려고합니까?) 고려해야합니다.

Threat Model (기본적으로 : 당신이 걱정하는 사람, 보호하고자하는 대상, 수행 할 수있는 공격의 유형 및 위험)은이 목적으로 유용합니다.

이 작업을 완료하면 메모리에만 해독 된 상태에서도 데이터가 디스크에 기록되지 않도록 보호 할 가치가 있는지 확인할 수 있습니다.

나는이 대답이 유용하지 않을 수도 있음을 알고 있지만, 공격자가 정확하게 방어하기 전에 (즉, 완전히 쓸모없는 방어를 구현하는 등).

0

동일한 항목을 두 번 이상 암호 해독 하시겠습니까? 메모리 내 공격에 관심이 없다면 성능이 고려해야 할 다른 문제 일 수 있습니다.

시간이 있다면 솔루션을 코딩하여 우연히 발생할 수 있습니다. 따라서 암호화 된 캐시를 선택하면 나중에 성능이 문제가되면 해독 된 메모리 내 솔루션으로 변경하는 것이 너무 어렵지 않습니다.

+0

예, 필요한 경우 동일한 항목을 해독 할 것입니다. 하지만 지금은 컨테이너에 암호화 된 상태로 아이템을 정렬하는 방법에 대해 우려하고 있습니다. – cpx

+0

@ Dave17 : 쉽게 정렬 할 수 있도록 일부 메타 데이터를 저장할 수 있습니다 (즉, SortIndex는 실제로 암호화 할 필요가 없습니다). 그러나이 정보가 침입자에게 누출 될지 여부는 고려해 볼만합니다. 늘 그렇듯이 구현이 많을수록 공격 영역이 넓어지면서 위험이 커지고 오류가 발생하기 쉽습니다. –

+0

그러나 왜 이미 목록보기에서 데이터를 보려면 암호화해야합니까? 그 기억 영역을 잠그는 것이 낫지 않을까요? – cpx

0

방어하려는 공격이 어떤 것인지 명확하지 않습니다. 공격자가 시스템에 로컬로 액세스 할 수 있으면 OllyDBG와 같은 디버거를 프로세스에 연결하여 메모리를 관찰 할 수 있습니다. 공격은 AES에 대한 호출에서 중단 점을 설정 한 다음 전달 된 데이터를 관찰하고 리턴하는 것입니다. 매우 간단합니다.

0

나는 기본적인 위협 모델로 시작해야한다는 silky의 대답에 동의합니다. 단지 메모리에있는 민감한 정보를 다룰 때 정보를 써 넣지 않아도 정보가 디스크에 저장 될 수 있다는 모든 권리가 있습니다.

예를 들어, 메모리의 데이터를 스왑 공간에 쓰거나 코어 파일에서 다른 곳으로 보낼 수 있습니다 (예 : 전자 메일 첨부 파일 또는 다른 위치로 복사). 당신은 메모리에서 데이터를 암호화하지 않고 처리 할 수 ​​있습니다. 그걸로 데이터를 해독하는 데 열쇠를 다루는 문제가 바뀔 수 있기 때문입니다 ...

관련 문제