Управление памятью в C при использовании gcry_malloc_secure
Я использую libgcrypt 1.5.0 под GNU/Linux для разработки небольшого программного обеспечения для шифрования файлов aes256-cbc.
У меня есть сомнения относительно безопасной памяти и данных, выгруженных на диск.
Допустим, у меня есть этот код:
char *crypto_key;
crypto_key = gcry_malloc_secure(256);
Полезно ли и нужно ли делать также эти две вещи?
1) не допускать разбиения этой памяти на: mlock(crypto_key, size)
2) Чтобы предотвратить запись информации в дамп ядра с помощью:
struct rlimit limit;
limit.rlim_cur = 0;
limit.rlim_max = 0;
if (setrlimit(RLIMIT_CORE, &limit) != 0) {
/* Handle error */
}
1 ответ
Без предотвращения записи областей памяти в файл подкачки (или дамп кода) конфиденциальные данные (ключи) могут быть оставлены записанными на диск и найдены кем-то, кто не намеревается видеть / иметь данные. Необходимость / полезность зависит от приложения. В противном случае секретные ключи или незашифрованные данные могут долгое время лежать на жестком диске ноутбука, где кто-то может затем получить ключи / данные, похитив ноутбук. Для частного использования на физически защищенном компьютере это может не потребоваться (но все же это хорошая практика, потому что лучше готовиться ко всему).
Вам не нужно самостоятельно блокировать память (выделенный ключ crypto_key), libgcrypt сделает это за вас (при условии, что вы правильно инициализировали библиотеку). Следует также очистить / перезаписать память после освобождения.
Предотвращение дампа памяти может быть излишним, поскольку исходный незашифрованный файл, вероятно, все еще доступен на компьютере вместе с ключами. Зависит от уровня безопасности, которого вы пытаетесь достичь. Если у вас нет файла дампа, вы также не забудете его удалить.
Обычно пользователь / администратор машины должен настроить машину так, чтобы она не делала дампов памяти, программы не предназначены для изменения настроек (и, вероятно, не могут даже сделать это без повышенных прав).