Есть ли причина использовать SecureZeroMemory () вместо memset () или ZeroMemory (), когда безопасность не является проблемой? - PullRequest
9 голосов
/ 06 января 2010

В этой статье MSND говорится, что SecureZeroMemory() подходит для случаев, когда конфиденциальные данные, хранящиеся в памяти некоторое время, должны быть обязательно перезаписаны как можно скорее, когда в них больше нет необходимости. Ответы на этот ТАК вопрос объясняют, почему это может иметь значение.

Есть ли смысл использовать SecureZeroMemory() для инициализации только каждого блока памяти? Например, в одном проекте я вижу код, подобный следующему:

ICONINFO ii; 
::SecureZeroMemory(&ii, sizeof(ICONINFO)); 
if (::GetIconInfo(hIcon, &ii)) 
{
    //do stuff, then 
    //release bitmaps 
    if(ii.hbmMask) 
        ::DeleteObject(ii.hbmMask); 
    if(ii.hbmColor) 
        ::DeleteObject(ii.hbmColor); 
} 

зачем использовать SecureZeroMemory() здесь вместо ZeroMemory(), memset() или инициализации значения? Я имею в виду, если компилятор решает, что инициализация не нужна и хочет оптимизировать ее - зачем мне применять ее? Есть ли причина использовать SecureZeroMemory() здесь?

Ответы [ 2 ]

11 голосов
/ 06 января 2010

Нет смысла использовать SecureZeroMemory для инициализации информационной структуры значков. Он может перезаписывать только те байты стекового кадра, которые должны были быть безопасно удалены в другом месте. Эта лошадь уже сбежала из сарая. Инициализировать его вообще не имеет смысла, возвращаемое значение GetIconInfo () говорит вам, что оно инициализировано.

SecureZeroMemory () имеет смысл только после того, как память была заполнена защищенными данными.

11 голосов
/ 06 января 2010

SecureZeroMemory никогда не оптимизируется компилятором. Это важно, если вам нужно беспокоиться о чистоте вашей памяти, например, если она содержит очень конфиденциальную информацию пользователя, например, банковское программное обеспечение, пароли и т. д. Очевидно, что если вам не нужно беспокоиться о таких вещах, вы можете использовать любой другой способ очистки буферов памяти или вообще не выполнять очистку, если в этом нет необходимости.

...