Как сохранить iv, используемый для создания шифра, в createcipheriv nodejs, для будущего дешифрования? - PullRequest
0 голосов
/ 18 декабря 2018

Я новичок в криптографии и использую nodejs для обслуживания приложения.

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

Я использую crypto.createCipheriv(algo, key, iv) для шифрования.Алгоритм: «AES-256-CTR».Ключ создается с паролем:

const key=crypto.createHash('sha256').update(String(password)).digest('base64').substr(0,32)

IV генерируется с:

const iv = crypto.randomBytes(16)

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

Когда я пишу iv (используя fs.writefile и iv)const) в файл и попробуйте прочитать его, когда я пытаюсь расшифровать, я вижу ошибку:

Ошибка: неверная длина ключа

, даже когда я генерирую и используюiv на сервере он шифрует / дешифрует без каких-либо проблем.

Итак, мой вопрос: как мне сохранить IV, который я использовал, чтобы позже расшифровать файлы?Как использовать его позже при попытке расшифровать?

Есть ли лучший способ / практика для шифрования файлов конфигурации и их расшифровки?Я хочу предоставить своему приложению зашифрованные / хешированные персональные данные, такие как данные конфигурации, имя пользователя / пароль и т. Д.

Мой путь хорош или я не в том направлении?Я буду признателен, если какой-нибудь опытный пользователь шифрования сможет мне помочь ...

Спасибо

1 Ответ

0 голосов
/ 18 декабря 2018

Итак, мой вопрос: Как сохранить IV, который я использовал, чтобы позже расшифровать файлы?Как использовать его позже при попытке расшифровать?

Вы можете сохранить IV как часть, предварительно добавленную к зашифрованному тексту.При расшифровке вы должны прочитать iv, а затем расшифровать остальные

примеры:

base64(iv)+'.'+base64(encrypted_data)
base64(iv + encrypted_data)
...

Есть ли лучший способ / практика для шифрования файлов конфигурации и их расшифровки?

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

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

Я хочу обслуживать мое приложение зашифрованными / хешированными личными данными, такими как данные конфигурации,

Чтобы передать данные в приложение, просто используйте SSL.Не усложняйте это собственным собственным шифрованием.Тем не менее, вы можете зашифровать данные в состоянии покоя (хранящиеся в файлах или в базе данных), вот где шифрование должно иметь место.

пользователь / пароль и т. Д.

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

...