Подтвердить что ты не робот

Безопасное хранение строк в памяти из приложений node.js

В этом вопросе Mubashar просит безопасно хранить конфиденциальную информацию в памяти с помощью С# и указывается на класс SecureString из .NET. Есть ли существующий сопоставимый инструмент, который будет делать это в node.js? В противном случае, как это сделать, используя доступные ресурсы node?

4b9b3361

Ответ 1

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

function outer (key, salt) {
  return function generator (password) {
    var hash = gen_hash(key, salt, password);
    password = undefined;
    return function (challenge) {
      var response = test_challenge(challenge, hash, key, salt);
      return repsonse;
    }
  }
}

используйте это как:

var challenger = outer('my-key','salt')('password')

тогда, когда вы хотите восстановить зашифрованный пароль, вам придется передать вызов

var password = challenger('my-unlock-code');

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

Ответ 2

Единственный способ - использовать типизированный массив, например, Uint8Array (класс Buffer - только тонкая оболочка), и заполнить его null или любым другим значением после использования.

Но есть несколько вещей, которые следует учитывать:

Когда вы получаете, например, учетные данные, вы, скорее всего, получаете их как JSON. В этом случае любые усилия будут напрасны, если вы не перехватываете, поэтому тело запроса не хранится внутри строки, как это делает любая веб-структура.

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

Но даже тогда вы не можете быть уверены, что утечек нет. Например, я сомневаюсь, что node.js streams уберут за собой. И даже если вы переопределите их вручную, возможны утечки из копирования или системных API. Даже менеджеры паролей имеют проблемы с утечкой пароля.

Подводя итог: даже если вы все учитываете, скорее всего, будут утечки, которые вы не можете предотвратить.