Problema con la biblioteca waptcrypto

Preguntas sobre paquetes WAPT / Solicitudes y ayuda sobre paquetes WAPT.
Reglas del foro
Reglas del foro de la comunidad
* Soporte en inglés en www.reddit.com/r/wapt
* El soporte de la comunidad en francés está disponible en este foro
* Por favor, anteponga [RESUELTO] al título del tema si está resuelto.
* Por favor, no edite un tema que esté etiquetado como [RESUELTO]. Abra un nuevo tema haciendo referencia al anterior.
* Especifique la versión de WAPT instalada, la versión completa y el número de compilación (2.2.1.11957 / 2.2.2.12337 / etc.), así como la edición Enterprise/Discovery.
* Las versiones 1.8.2 y anteriores ya no son compatibles. Las únicas preguntas aceptadas sobre la versión 1.8.2 están relacionadas con la actualización a una versión compatible (2.1, 2.2, etc.).
* Especifique el sistema operativo del servidor (Linux/Windows) y la versión (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Especifique el sistema operativo de la máquina de administración/creación de paquetes y de la máquina con el agente problemático, si corresponde (Windows 7/10/11/Debian 11/etc.).
* Evite hacer varias preguntas al abrir un tema, ya que podría ser ignorado. Si hay varios temas, ábralos por separado, preferiblemente uno tras otro y no todos a la vez (es decir, no sature el foro con spam).
* Incluya fragmentos de código, capturas de pantalla y otras imágenes directamente en la publicación. Los enlaces a Pastebin, Bitly y otros sitios de terceros serán eliminados sistemáticamente.
* Como en cualquier foro comunitario, el soporte es proporcionado voluntariamente por los miembros. Si necesita soporte comercial, puede comunicarse con el departamento de ventas de Tranquil IT al 02.40.97.57.55.
Bloqueado
croquebert
Mensajes: 33
Inscripciones: 30 de marzo de 2022 - 17:41

14 de abril de 2022 - 18:42

Buen día,

Contexto:
Versión WAPT: 2.1 Enterprise
Sistema operativo del servidor: Debian 11
Consola de administración del sistema operativo: Win10pro
Estación de desarrollo de paquetes de SO: Win10pro


Para cifrar secretos en paquetes WAPT, uso la biblioteca waptcrypto como en el ejemplo de su documentación.

En determinadas circunstancias esto supone una excepción.

Esto parece deberse a la presencia del carácter de barra, pero solo bajo ciertas condiciones posicionales o de otro tipo (una prueba con una cadena muy simple que contenga una sola barra funciona).

Aquí está el código utilizado y la salida de error según el caso: cadenas que funcionan y cadenas que fallan.

**************************************************************

Código utilizado:

Código: Seleccionar todo

for value in data['result']:
        if value['host_certificate'] and value['computer_name']:
            host_cert = SSLCertificate(crt_string = value['host_certificate'])
            if pc_cfgs_jsoned_by_pc.get(value['computer_name'].lower(), 0):
                encrypttxt = pc_cfgs_jsoned_by_pc[value['computer_name'].lower()]
                #encrypttxt = 'chaine avec un / au milieu'
                print('texte à chiffrer:')
                print(encrypttxt)
                print('type du texte à chiffrer : {}'.format(type(encrypttxt)))
                encryptlist[value['computer_name']] = base64.b64encode(host_cert.encrypt(encrypttxt.encode('utf-8'))).decode('utf-8')
                #print(value['computer_name'] + ':' + value['uuid'] + ':' + encryptlist[value['computer_name']])
    print('en sortie')
    print(encryptlist)
    open('encrypt-txt.json','w').write(json.dumps(encryptlist))


Salida cuando se pasa una cadena funcional con un carácter de barra:

Código: Seleccionar todo

*** Remote Interpreter Reinitialized ***
Ligne de Commande : update-package-sources "C:\Users\moi\waptdev\monpaquetquichiffre-wapt\WAPT\.."
Using config file: C:\Users\moi\AppData\Local\waptconsole\waptconsole.ini
texte à chiffrer:
chaine avec un / au milieu
type du texte à chiffrer : <class 'str'>
en sortie
{'PCP102': 'uZaw3MxTlBZBNXNXnTqWC+YdY/uSAXr2IVJuewkHvXqye1k6sx+yl/nri+dux1aRtdA3JLsMmzggR47PGVtjPZS9Fka3+S0at1OnRwcH45EYEyd3AB5A9rvg2ANvEb//szHxQScu0nfbkA9zJFXvM8y1bUGkpUIZY03I7/uMuU+blFKNaTK3TVzNW9mHEIEkZiroG/VyRckhgd6Rb6eubNtuDdFwrtwhZ7qMQwxPopu5T0+jdIKP8FWtnJGIzQKBCsbepwOPuFkqx1xFl/7kMjq2Q2y9Hy3gIMTBFjqjt+buQJfU2wms/+J8oQCUhuazoGkmtUSBm6RWgc/uQgd4YA=='}
Packages updated :
   

Salida cuando se pasa una cadena funcional con un carácter de barra:

Código: Seleccionar todo

*** Remote Interpreter Reinitialized ***
Ligne de Commande : update-package-sources "C:\Users\moi\waptdev\monpaquetquichiffre-wapt\WAPT\.."
Using config file: C:\Users\moi\AppData\Local\waptconsole\waptconsole.ini
texte à chiffrer:
{"PrivateKey": "abcd", "Address": "10.0.0.1/32", "DNS": ["192.168.0.1", "mondomaine.fr"], "PublicKey": "abcd", "PresharedKey": "abcd", "EndPoint": "mamachine.mondomaine.fr:12345"}
type du texte à chiffrer : <class 'str'>
en sortie
{'PCP102': 'XFUQR+g5GoKG8f5h45SGYmhdRov/TTGGwga1T0k7jAl0jY4+NgCJepD5e+PrYBHD1xJMssv8Tn0u6P18U/RDsftcT9eJJGWedO9GVTfuXqvH4+pR9ApyPkEJe/U/G1wk4eNiPSHSknUAYF2WYUfWmFFnHl05Dk0MB5xmTiynS4CtrBuearAvf8+frvr2ah+jdqrkGgA+skBmvmeVfozW/lyZ5CMbW16ON9DKFjqlG/edDPYiGdsVuuGHohjO4drwdZp46/wOtTdifQBn0+gNSq6JA8AKVhEpqkk5OkopuUXDUHrzLVjtETH4Nno+mbDdbGzdBlQnIGy+zmzPjNNISg=='}
Packages updated :


Salida cuando se pasa una cadena funcional con un carácter de barra:

Código: Seleccionar todo

*** Remote Interpreter Reinitialized ***
Ligne de Commande : update-package-sources "C:\Users\moi\waptdev\monpaquetquichiffre-wapt\WAPT\.."
Using config file: C:\Users\moi\AppData\Local\waptconsole\waptconsole.ini
texte à chiffrer:
{"PrivateKey": "abcde/abcdefghijklmnopqrstuvwxyzabc/abcdef", "Address": "10.0.0.1/32", "DNS": ["192.168.0.1", "mondomaine.fr"], "PublicKey": "abcd", "PresharedKey": "abcd", "EndPoint": "mamachine.mondomaine.fr:12345"}
type du texte à chiffrer : <class 'str'>
2022-04-14 18:20:46,161 CRITICAL Fatal error in update_package function: ValueError: Encryption/decryption failed.:
Traceback (most recent call last):
  File "C:\Program Files (x86)\wapt\waptpackage.py", line 2973, in call_setup_hook
    hookdata = hook_func()
  File "C:\Users\roquebert\waptdev\set-wgconf_0-wapt\setup.py", line 139, in update_package
    encryptlist[value['computer_name']] = base64.b64encode(host_cert.encrypt(encrypttxt.encode('utf-8'))).decode('utf-8')
  File "C:\Program Files (x86)\wapt\waptcrypto.py", line 2284, in encrypt
    return self.rsa.encrypt(content, apadding)
  File "C:\Program Files (x86)\wapt\Scripts\lib\site-packages\cryptography\hazmat\backends\openssl\rsa.py", line 484, in encrypt
    return _enc_dec_rsa(self._backend, self, plaintext, padding)
  File "C:\Program Files (x86)\wapt\Scripts\lib\site-packages\cryptography\hazmat\backends\openssl\rsa.py", line 75, in _enc_dec_rsa
    return _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding)
  File "C:\Program Files (x86)\wapt\Scripts\lib\site-packages\cryptography\hazmat\backends\openssl\rsa.py", line 133, in _enc_dec_rsa_pkey_ctx
    raise ValueError("Encryption/decryption failed.")
ValueError: Encryption/decryption failed.

FATAL ERROR : ValueError: Encryption/decryption failed.
Exit code:  3
**************************************************************


Atentamente.

Cristóbal
croquebert
Mensajes: 33
Inscripciones: 30 de marzo de 2022 - 17:41

14 de abril de 2022 - 19:14

Hola de nuevo,

tras una breve investigación, parece que existe una limitación en la longitud de la cadena a cifrar en rsa.py. Después de algunas pruebas, el límite que encontré es de 215 caracteres.

¿Tienen alguna solución para cifrar cadenas más largas (sin tener que dividir y volver a unir la cadena)?

Atentamente,

Christophe
Avatar de usuario
dcardón
Experto en WAPT
Mensajes: 1908
Inscripción: 18 de junio de 2014 - 09:58
Ubicación: Saint Sébastien sur Loire
Contacto :

15 de abril de 2022 - 15:02

Hola Christophe,

gracias por tus comentarios. Le he reenviado el mensaje a Hubert, quien desarrolló gran parte de la biblioteca waptcrypto, para ver qué opina.

Un cordial saludo,

Denis.
Denis Cardon - Tranquil IT
¡Comparte tus experiencias en WAPT! Envíanos las URL de tus blogs y artículos en la "Tu opinión del foro y los publicaremos en el de WAPT
croquebert
Mensajes: 33
Inscripciones: 30 de marzo de 2022 - 17:41

15 de abril de 2022 - 15:24

dcardon escribió: 15 ​​de abril de 2022 - 15:02 Hola Christophe,

gracias por tus comentarios. Le reenvié el mensaje a Hubert, quien desarrolló gran parte de la biblioteca waptcrypto, para ver qué opina.

Saludos,

Denis
Hola Denis,

Genial, gracias por tus comentarios.
Me resulta difícil ver de dónde viene esto sin el código fuente de waptcrypto (pasar argumentos a funciones en rsa.py, un error o limitación en rsa.py), a menos que pruebe rsa.py directamente...
Por ahora, voy a cortar mis cadenas de cifrado y volver a ensamblarlas.
Mientras esperamos el regreso de Hubert sobre el tema.

Atentamente.

Cristóbal
croquebert
Mensajes: 33
Inscripciones: 30 de marzo de 2022 - 17:41

15 de abril de 2022 - 15:27

croquebert escribió: 15 ​​de abril de 2022 - 15:24
dcardon escribió: 15 ​​de abril de 2022 - 15:02 Hola Christophe,

gracias por tus comentarios. Le reenvié el mensaje a Hubert, quien desarrolló gran parte de la biblioteca waptcrypto, para ver qué opina.

Saludos,

Denis
Hola Denis,

Genial, gracias por tus comentarios.
Me resulta difícil ver de dónde viene esto sin el código fuente de waptcrypto (pasar argumentos a funciones en rsa.py, un error o limitación en rsa.py), a menos que pruebe rsa.py directamente...
Por ahora, voy a cortar mis cadenas de cifrado y volver a ensamblarlas.
Mientras esperamos el regreso de Hubert sobre el tema.

Atentamente.

Cristóbal
Fue mi error, el código fuente de Waptcrypto es accesible, pero aun así dejaré que Hubert lo revise :-)
Avatar de usuario
htouvet
Experto en WAPT
Mensajes: 436
Inscripción: 16 de marzo de 2015 - 10:48
Contacto :

15 de abril de 2022 - 17:24

Buenas noches.
Sí, por supuesto, el tamaño es limitado.
Para cifrar datos más largos, existe el método SSLCertificate.encrypt_fernet(data),
que cifra una clave simétrica aleatoria mediante RSA, la cual se utiliza posteriormente para cifrar los datos mediante AES-CBC.

Y su contraparte, SSLPrivateKey.decrypt_fernet.
TI tranquila
croquebert
Mensajes: 33
Inscripciones: 30 de marzo de 2022 - 17:41

15 de abril de 2022 - 17:44

htouvet escribió: 15 ​​de abril de 2022 - 17:24 Buenas noches,
Sí, absolutamente, el tamaño es limitado.
Para cifrar datos más largos, existe el método SSLCertificate.encrypt_fernet(data)
, que cifra una clave aleatoria simétrica usando RSA, que luego se usa para cifrar los datos usando AES-CBC.

Y su contraparte, SSLPrivateKey.decrypt_fernet.
Hola Hubert,

Gracias por tus comentarios.

De hecho, podría haberlo sospechado al ir a mirar: https://wapt.tranquil.it/wapt/nightly/a ... rypto.html

"Al cifrar un mensaje (pequeño), se descifrará con la clave pública"

¿Dónde se especifica el tamaño máximo para encriptar de modo que el cambio a encrypt_fernet se base en ese tamaño?

¿Es posible detectar el método utilizado para cifrar la cadena para poder aplicar el método de descifrado correcto?

Atentamente.
Bloqueado