NodeJS Крипто модуль с использованием алгоритма шифрования SEED - PullRequest
0 голосов
/ 04 февраля 2020

Мне нужно использовать алгоритм шифрования "SEED", который, кажется, был поддержан модулем Crypto в прошлом. Когда я пытаюсь выяснить, какие шифры в настоящее время поддерживаются с помощью crypto.getCiphers(), я получил такой результат:

  'aes-128-cbc',
  'aes-128-cfb',
  'aes-128-ctr',
  'aes-128-ecb',
  'aes-128-gcm',
  'aes-128-ofb',
  'aes-192-cbc',
  'aes-192-ctr',
  'aes-192-ecb',
  'aes-192-gcm',
  'aes-192-ofb',
  'aes-256-cbc',
  'aes-256-cfb',
  'aes-256-ctr',
  'aes-256-ecb',
  'aes-256-gcm',
  'aes-256-ofb',
  'des-cbc',
  'des-ecb',
  'des-ede',
  'des-ede-cbc',
  'des-ede3-cbc',
  'rc2-cbc',
  'rc4'

Я пытался использовать множество версий Node, и результаты всегда одинаковы. Кроме того, я пытался использовать openssl из своего приложения, но шифр SEED больше не доступен. Как я могу добавить поддержку этого алгоритма шифрования в моем приложении? Протестировано с Node 12, 11, 10, 9, 8. Версия OpenSSL: LibreSSL 2.6.5

TIA!

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

SEED - это просто 16-круговая сеть Фейстеля с 128-битными блоками и 128-битным ключом, это определенно не то, что я бы использовал в производстве.

Для чего стоит SEED все еще присутствует в узел 13 .

на macOS 10.15.3 работает node.js v13.7.0, я выполнил этот код:

  1 var crypto = require('crypto')
  2 const util = require('util');
  3 util.inspect.defaultOptions.maxArrayLength = null;
  4 
  5
  6 console.log(crypto.getCiphers())

, который действительно перечисляет SEED в качестве поддерживаемого шифра:

[
  'aes-128-cbc',
  'aes-128-ccm',
  'aes-128-cfb',
  'aes-128-cfb1',
  'aes-128-cfb8',
  'aes-128-ctr',
  'aes-128-ecb',
  'aes-128-gcm',
  'aes-128-ocb',
  'aes-128-ofb',
  'aes-128-xts',
  'aes-192-cbc',
  'aes-192-ccm',
  'aes-192-cfb',
  'aes-192-cfb1',
  'aes-192-cfb8',
  'aes-192-ctr',
  'aes-192-ecb',
  'aes-192-gcm',
  'aes-192-ocb',
  'aes-192-ofb',
  'aes-256-cbc',
  'aes-256-ccm',
  'aes-256-cfb',
  'aes-256-cfb1',
  'aes-256-cfb8',
  'aes-256-ctr',
  'aes-256-ecb',
  'aes-256-gcm',
  'aes-256-ocb',
  'aes-256-ofb',
  'aes-256-xts',
  'aes128',
  'aes128-wrap',
  'aes192',
  'aes192-wrap',
  'aes256',
  'aes256-wrap',
  'aria-128-cbc',
  'aria-128-ccm',
  'aria-128-cfb',
  'aria-128-cfb1',
  'aria-128-cfb8',
  'aria-128-ctr',
  'aria-128-ecb',
  'aria-128-gcm',
  'aria-128-ofb',
  'aria-192-cbc',
  'aria-192-ccm',
  'aria-192-cfb',
  'aria-192-cfb1',
  'aria-192-cfb8',
  'aria-192-ctr',
  'aria-192-ecb',
  'aria-192-gcm',
  'aria-192-ofb',
  'aria-256-cbc',
  'aria-256-ccm',
  'aria-256-cfb',
  'aria-256-cfb1',
  'aria-256-cfb8',
  'aria-256-ctr',
  'aria-256-ecb',
  'aria-256-gcm',
  'aria-256-ofb',
  'aria128',
  'aria192',
  'aria256',
  'bf',
  'bf-cbc',
  'bf-cfb',
  'bf-ecb',
  'bf-ofb',
  'blowfish',
  'camellia-128-cbc',
  'camellia-128-cfb',
  'camellia-128-cfb1',
  'camellia-128-cfb8',
  'camellia-128-ctr',
  'camellia-128-ecb',
  'camellia-128-ofb',
  'camellia-192-cbc',
  'camellia-192-cfb',
  'camellia-192-cfb1',
  'camellia-192-cfb8',
  'camellia-192-ctr',
  'camellia-192-ecb',
  'camellia-192-ofb',
  'camellia-256-cbc',
  'camellia-256-cfb',
  'camellia-256-cfb1',
  'camellia-256-cfb8',
  'camellia-256-ctr',
  'camellia-256-ecb',
  'camellia-256-ofb',
  'camellia128',
  'camellia192',
  'camellia256',
  'cast',
  'cast-cbc',
  'cast5-cbc',
  'cast5-cfb',
  'cast5-ecb',
  'cast5-ofb',
  'chacha20',
  'chacha20-poly1305',
  'des',
  'des-cbc',
  'des-cfb',
  'des-cfb1',
  'des-cfb8',
  'des-ecb',
  'des-ede',
  'des-ede-cbc',
  'des-ede-cfb',
  'des-ede-ecb',
  'des-ede-ofb',
  'des-ede3',
  'des-ede3-cbc',
  'des-ede3-cfb',
  'des-ede3-cfb1',
  'des-ede3-cfb8',
  'des-ede3-ecb',
  'des-ede3-ofb',
  'des-ofb',
  'des3',
  'des3-wrap',
  'desx',
  'desx-cbc',
  'id-aes128-CCM',
  'id-aes128-GCM',
  'id-aes128-wrap',
  'id-aes128-wrap-pad',
  'id-aes192-CCM',
  'id-aes192-GCM',
  'id-aes192-wrap',
  'id-aes192-wrap-pad',
  'id-aes256-CCM',
  'id-aes256-GCM',
  'id-aes256-wrap',
  'id-aes256-wrap-pad',
  'id-smime-alg-CMS3DESwrap',
  'idea',
  'idea-cbc',
  'idea-cfb',
  'idea-ecb',
  'idea-ofb',
  'rc2',
  'rc2-128',
  'rc2-40',
  'rc2-40-cbc',
  'rc2-64',
  'rc2-64-cbc',
  'rc2-cbc',
  'rc2-cfb',
  'rc2-ecb',
  'rc2-ofb',
  'rc4',
  'rc4-40',
  'rc4-hmac-md5',
  'seed',
  'seed-cbc',
  'seed-cfb',
  'seed-ecb',
  'seed-ofb',
  'sm4',
  'sm4-cbc',
  'sm4-cfb',
  'sm4-ctr',
  'sm4-ecb',
  'sm4-ofb'
]
0 голосов
/ 05 февраля 2020

Проблема не в версии NodeJS, а в библиотеке LibreSSL, которая, возможно, не включает ее, потому что это шифр, определяемый страной c.

Это документация :

Шифры Symmetri c, включая AES, Blowfi sh, CAST, Chacha20, IDEA, DES, RC2 и RC4

, а SEED отсутствует в EVP_EncryptInit документация либо.

Если я, однако, смотрю на OpenSSL v1.1.1 c, который присутствует в моей системе, шифр SEED по-прежнему указан на странице openssl help. Поэтому вам нужно использовать другую библиотеку шифрования c в качестве бэкэнда.


Обратите внимание, что страница целей LibreSSL содержит:

Удаление устаревших или поврежденных функций и поддержка операционной системы

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

...