2013-10-03 1 views
5

암호를 해싱하는 것과 관련된 프로그램을 만들고 있습니다. 내가 암호를 얻기 위해 이것을 사용 가정하면 :RAM에 Python 변수를 안전하게 덮어 씁니까?

import getpass 
password = getpass.getpass("Password: ") 

을 그리고 그것을 해시 안전하게 RAM에서 해시되지 암호의 모든 흔적을 제거 할 수있는 방법은 무엇입니까?

+0

나는이 게시물에 당신을 도울 수 있다고 생각 : [http://stackoverflow.com/questions/1316767/how-can-i-explicitly-free-memory-in-python][1] [1] : http://stackoverflow.com/questions/1316767/how-can-i-explicitly-free-memory-in-python –

+3

왜 그렇게하고 싶습니까? 해커가 어쨌든 루트 액세스 권한을 얻었어야 메모리를 읽을 수 있습니다. 이 잘못된 보안 감각을 만드는 것보다 더 합리적인/일반적인 [공격 벡터] (https://www.owasp.org)에 집중하십시오. – RickyA

+0

@RickyA tkbx가 무엇을하려고하는지 전혀 알지 못합니다. 실제로 좋은 질문입니다. – Joe

답변

3

앞에서 설명한 것처럼 사용자 정의 구현이 있더라도 파이썬에서는이를 수행 할 수있는 확실한 방법이 없습니다.

이제 응용 프로그램이 무엇을해야할지 모르겠지만 의심없이 말할 수있는 것은 데이터가 해시 후에도 데이터베이스에있는 것보다 RAM에 더 안전하다는 것입니다.

메모리가 작동하는 방식은 너무 복잡합니다. 모든 프로세스에는 인접하지 않아도되는 자체 가상 메모리 공간이 있습니다. 전체 메모리 블록이 디스크로 교체되어 다른 메모리 블록에 다시 저장됩니다. 전체 메모리는 단지 바이트 세트이며, 정수 배열, 문자열, 고양이 또는 간단한 무작위 데이터의 차이를 구분하는 것은 거의 불가능합니다.

일부 데이터 블록은 부분적으로 재 할당되어 많은 양의 부분 데이터를 생성합니다. 이것이 1, 2, 8 또는 심지어 16Gb의 무작위 데이터가 원하는 것을 상상해보십시오. 잠재적 인 해커는 0과 1 모두에서 암호를 찾아야합니다.

누군가 프로세스를 실행하는 동안 암호를 해킹하고 싶다면 root 권한으로 시스템에 실시간으로 액세스해야합니다. 그는 앞서 언급 한 이유로 스왑을 살펴봄으로써 그것을 할 수 없습니다.

그러나 어떤 사람에게는 이런 종류의 액세스 권한이있는 경우 다른 많은 방법으로 비밀번호를 가져올 수 있습니다. 예를 들어 단순히 프로그램을 디버그하거나 더 나은 방법으로 소스를 변경하고 암호를 인쇄하도록하십시오.

대부분의 해커는 이러한 번거 로움을 겪지 않을 것입니다. 해킹은 기본적으로 약 social engineering인데, 이는 기본적으로 사용자가 해커에게 기꺼이 암호를 제공하도록합니다. Phishing이 그러한 방법 중 하나입니다.

+0

이 질문은 답변이 아니라 복제본이므로 닫아야합니다. 새로운 대답이 있으면 원래의 질문에 답을 쓸 수 있습니다. – Joe

+0

이 사람은 의미가 있습니다! – RickyA

+1

"잠재적 인 해커가이 0과 1 모두에서 비밀번호를 찾아야합니다." 첫째, 해커 *가이 일을 할 수 없다는 아이디어는 커다란 진술입니다. 메모리에있는 특정 물건을 찾는 데 의존하는 실용적인 악용 사례가 많습니다. 시작하는 곳이별로 없다고 생각할 수도 있습니다. 둘째, 스왑 파일을 검사하여 텍스트와 비슷한 내용을 검색하는 것입니다. 당신은 단순한 암호 이상을 발견하고 추측의 목록으로 사용합니다. 즉, 건초 더미에서 바늘을 찾을 수 있습니다. 건초 더미 하나 하나가 작동 할 때까지 차례로 바느질을 시도합니다. –

관련 문제