2013-10-03 7 views
5

Я делаю программу на Python, которая будет включать хеширование пароля. Если предположить, что я использую это, чтобы получить пароль:Надежная перезапись переменных Python в ОЗУ?

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

А потом хэш его, есть ли способ безопасно удалить все следы unhashed пароль из памяти?

+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

Почему вы, возможно, захотите это сделать? Чтобы иметь возможность читать (на самом деле очень тяжело) вашу память, хакер должен был получить root-доступ в любом случае. Пожалуйста, сосредоточьте свою энергию на более разумных/общих [атакующих векторах] (https://www.owasp.org), чем на создание этого ложного чувства безопасности. – RickyA

+0

@RickyA Вы не представляете, что пытается сделать tkbx, на самом деле это хороший вопрос. – Joe

ответ

3

Как уже говорилось, в python нет надежного способа сделать это, даже если у вас была пользовательская реализация (хотя это может быть способ).

Теперь я не знаю, что должно делать ваше приложение, но то, что я могу вам сказать, без сомнения состоит в том, что ваши данные более безопасны в ОЗУ, чем в вашей базе данных, даже после хэша.

Способ работы с памятью настолько сложный. Каждый процесс имеет свое собственное пространство виртуальной памяти, которое не должно быть смежным. Полные блоки памяти заменяются на диск и помещаются обратно в другой блок памяти. Вся память - это всего лишь набор байтов, и почти невозможно сказать разницу между массивом целых чисел, строкой, кошкой или простыми случайными данными.

Некоторые блоки данных частично перераспределены, создавая большое количество частичных данных. Представьте себе, что это такое, 1, 2, 8 или даже 16Gb случайных данных, и потенциальному хакеру придется найти пароль во всех этих 0 и 1.

Если кто-то захотел взломать ваш пароль во время выполнения процесса, ему нужно было бы иметь доступ к машине как root; он не может этого сделать, просто взглянув на своп после этого по причинам, которые я изложил ранее.

Но если у кого-то есть такой доступ, существует так много других способов получить пароль. Например, просто отлаживайте программу или, лучше, просто измените источник и сделайте это, чтобы распечатать пароль :)

Большинство хакеров не беспокоится о том, чтобы пройти через такую ​​проблему. Взлом в основном составляет около social engineering, что в основном заставляет пользователя охотно отдать хакеру свой пароль. Phishing - один из таких методов.

+0

Вы должны проголосовать, чтобы закрыть этот вопрос, поскольку это дубликат, а не ответ на него. Если у вас есть новый ответ, вы можете поместить его в исходный вопрос. – Joe

+0

Этот парень имеет смысл! – RickyA

+1

«потенциальный хакер должен будет найти пароль во всех этих 0 и 1». Во-первых, идея о том, что хакеры * не могут когда-либо делать это, - это большое заявление. Есть множество практических эксплойтов, которые полагаются на поиск определенных вещей в памяти или свопе, где вы не думаете, что с этого нужно начать многое. Во-вторых, то, что вы на самом деле делаете, это сканирование файла подкачки для всего, что похоже на текст. Вы находите намного больше, чем просто пароль, а затем используйте это как список догадок. То есть, вы можете найти иглу в стоге сена, пытаясь сшить каждый бит сена по очереди, пока не сработаете. –