Защита файла с помощью асимметричной криптографии - PullRequest
1 голос
/ 16 декабря 2011

Я знаю, как работает асимметричная криптография.Я знаю, что есть два ключа (один закрытый и один открытый).

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

Теперь я использую Node.js, и мне нужно сделать что-то вроде этого ...

Мне нужно приложение, которое КАЖДЫЙ час читает базу данных, извлекает данные исохраняет его в файл, который мне нужно отправить на другой сервер.
Моя проблема в том, что я НЕ ХОЧУ, чтобы этот файл был виден другим, я делаю передачу с использованием SSH, поэтому проблем не возникает, НО я должен зашифровать этофайл, потому что я не являюсь администратором этого сервера, так что, возможно, кто-то может прочитать его.К сожалению, администратор одинаков для обоих серверов.Поэтому моя идея состоит в том, чтобы зашифровать файл с помощью открытого ключа, и тогда только тот, кто имеет закрытый ключ (я), сможет расшифровать его.

Я думаю, что бессмысленно использовать что-то вроде:

var key = 'blablabla'

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

Теперь, кто-то может сказать мне, если мне нужен подписант / верификатор для выполнения этой работы, или, может быть, у меня естьсгенерировать два ключа (открытый / закрытый) с помощью openssl и передать эти ключи шифру / расшифровщику?

Я смотрю на криптомодули, но примеров нет ...

1 Ответ

4 голосов
/ 16 декабря 2011

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

Вы можете использовать ключи OpenPGP или сертификаты X.509 для выполнения работы.

В случае OpenPGP стандарт предлагает шифрование и дешифрование в качестве атомарных процедур (на уровне пользователя).В случае сертификатов X.509 вам нужно использовать PKCS # 7 / CMS.

Библиотека OpenSSL предлагает операции с PKCS # 7 / CMS, однако, когда я смотрю на API nodeJS для OpenSSL, этот API очень ограничен ине раскрывает эти функции.Возможно, вы можете написать свой собственный модуль nodeJS, который будет взаимодействовать с OpenSSL и предоставлять недостающие функции.

Другой альтернативой является использование ключей OpenPGP и модуля node-gpg .Этот модуль использует gnupg для выполнения реальной работы, поэтому gnupg должен быть установлен.

К сожалению, я не вижу других подходящих библиотек в списке сторонних модулей, представленных в вики nodeJS.

...