problema con la libreria waptcrypto

Domande sul packaging WAPT / Richieste e assistenza sui pacchetti Wapt.
Regole del forum
Regole del forum della community
* Supporto in inglese su www.reddit.com/r/wapt
* Supporto della community in francese disponibile su questo forum
* Si prega di anteporre [RISOLTO] al titolo dell'argomento se è stato risolto.
* Si prega di non modificare un argomento contrassegnato con [RISOLTO]. Aprire un nuovo argomento facendo riferimento a quello precedente.
* Specificare la versione di WAPT installata, la versione completa e il numero di build (2.2.1.11957 / 2.2.2.12337 / ecc.) nonché l'edizione Enterprise/Discovery.
* Le versioni 1.8.2 e precedenti non sono più supportate. Le uniche domande accettate relative alla versione 1.8.2 riguardano l'aggiornamento a una versione supportata (2.1, 2.2, ecc.).
* Specificare il sistema operativo del server (Linux/Windows) e la versione (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Specificare il sistema operativo della macchina di amministrazione/creazione dei pacchetti e della macchina con l'agente problematico, se applicabile (Windows 7/10/11/Debian 11/ecc.).
* Evitare di porre più domande quando si apre una discussione, altrimenti potrebbe essere ignorata. Se ci sono più discussioni, aprirle separatamente, preferibilmente una dopo l'altra e non tutte contemporaneamente (ovvero, non intasare il forum).
* Includere frammenti di codice, screenshot e altre immagini direttamente nel post. I link a Pastebin, Bitly e altri siti di terze parti verranno sistematicamente rimossi.
* Come in qualsiasi forum della community, il supporto è fornito volontariamente dai membri. Se si necessita di supporto commerciale, è possibile contattare il reparto vendite di Tranquil IT al numero 02.40.97.57.55
Bloccato
croquebert
Messaggi: 33
Registrazione: 30 marzo 2022 - 17:41

14 aprile 2022 - 18:42

Buongiorno,

Contesto:
Versione WAPT: 2.1 Enterprise
Sistema operativo del server: Debian 11
Console di amministrazione del sistema operativo: Win10pro
Stazione di sviluppo del pacchetto OS: Win10pro


Per crittografare i segreti nei pacchetti WAPT, utilizzo la libreria waptcrypto come nell'esempio nella tua documentazione.

In determinate condizioni, ciò solleva un'eccezione.

Ciò sembra essere dovuto alla presenza del carattere barra, ma solo in determinate condizioni posizionali o di altro tipo (un test con una stringa molto semplice contenente una singola barra funziona).

Ecco il codice utilizzato e l'output di errore a seconda del caso: stringhe funzionanti e stringhe non funzionanti.

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

Codice utilizzato:

Codice: Seleziona tutto

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))


Output quando viene passata una stringa funzionale con un carattere barra:

Codice: Seleziona tutto

*** 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 :
   

Output quando viene passata una stringa funzionale con un carattere barra:

Codice: Seleziona tutto

*** 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 :


Output quando viene passata una stringa funzionale con un carattere barra:

Codice: Seleziona tutto

*** 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
**************************************************************


Sinceramente.

Cristoforo
croquebert
Messaggi: 33
Registrazione: 30 marzo 2022 - 17:41

14 aprile 2022 - 19:14

Ciao di nuovo,

dopo una breve ricerca, sembra esserci una limitazione sulla lunghezza della stringa da crittografare in rsa.py. Dopo alcuni test, ho riscontrato un limite di 215 caratteri.

Avete quindi una soluzione per crittografare stringhe più lunghe (senza doverle dividere e ricomporre)?

Cordiali saluti,

Christophe
Avatar utente
dcardon
Esperto WAPT
Messaggi: 1908
Registrazione: 18 giugno 2014 - 09:58
Ubicazione: Saint Sébastien sur Loire
Contatto:

15 aprile 2022 - 15:02

Ciao Christophe,

grazie per il feedback. Ho inoltrato il messaggio a Hubert, che ha sviluppato buona parte della libreria waptcrypto, per sapere cosa ne pensa.

Cordiali saluti,

Denis
Denis Cardon - Tranquil IT
Condividi le tue esperienze su WAPT! Inviaci gli URL dei tuoi blog e articoli nella "La tua opinione del forum e li pubblicheremo sul di WAPT
croquebert
Messaggi: 33
Registrazione: 30 marzo 2022 - 17:41

15 aprile 2022 - 15:24

dcardon ha scritto: 15 ​​aprile 2022 - 15:02 Ciao Christophe,

grazie per il feedback. Ho inoltrato il messaggio a Hubert, che ha sviluppato buona parte della libreria waptcrypto, per sapere cosa ne pensa.

Cordiali saluti,

Denis
Ciao Denis,

Ottimo, grazie per il feedback.
Per me è difficile capire da dove provenga tutto questo senza il codice sorgente di waptcrypto (passaggio di argomenti alle funzioni in rsa.py, un bug o una limitazione in rsa.py), a meno che non testi rsa.py direttamente...
Per ora, taglierò le mie catene di crittografia e le ricomporrò.
Mentre aspettiamo il ritorno di Hubert sull'argomento.

Sinceramente.

Cristoforo
croquebert
Messaggi: 33
Registrazione: 30 marzo 2022 - 17:41

15 aprile 2022 - 15:27

croquebert ha scritto: 15 ​​aprile 2022 - 15:24
dcardon ha scritto: 15 ​​aprile 2022 - 15:02 Ciao Christophe,

grazie per il feedback. Ho inoltrato il messaggio a Hubert, che ha sviluppato buona parte della libreria waptcrypto, per sapere cosa ne pensa.

Cordiali saluti,

Denis
Ciao Denis,

Ottimo, grazie per il feedback.
Per me è difficile capire da dove provenga tutto questo senza il codice sorgente di waptcrypto (passaggio di argomenti alle funzioni in rsa.py, un bug o una limitazione in rsa.py), a meno che non testi rsa.py direttamente...
Per ora, taglierò le mie catene di crittografia e le ricomporrò.
Mentre aspettiamo il ritorno di Hubert sull'argomento.

Sinceramente.

Cristoforo
Errore mio, il codice sorgente di Waptcrypto è accessibile, ma lascerò comunque che Hubert lo esamini :-)
Avatar utente
htouvet
Esperto WAPT
Messaggi: 436
Registrazione: 16 marzo 2015 - 10:48
Contatto:

15 aprile 2022 - 17:24

Buonasera,
sì, assolutamente, la dimensione è limitata.
Per crittografare dati più grandi, esiste il metodo SSLCertificate.encrypt_fernet(data),
che crittografa una chiave simmetrica casuale utilizzando RSA, che viene poi utilizzata per crittografare i dati utilizzando AES-CBC.

E la sua controparte, SSLPrivateKey.decrypt_fernet.
Tranquillo IT
croquebert
Messaggi: 33
Registrazione: 30 marzo 2022 - 17:41

15 aprile 2022 - 17:44

htouvet ha scritto: 15 ​​aprile 2022 - 17:24 Buonasera,
Sì, assolutamente, la dimensione è limitata.
Per crittografare dati più lunghi, esiste il metodo SSLCertificate.encrypt_fernet(data)
, che crittografa una chiave casuale simmetrica usando RSA, che viene poi utilizzata per crittografare i dati usando AES-CBC.

E la sua controparte, SSLPrivateKey.decrypt_fernet.
Ciao Hubert,

Grazie per il feedback.

In effetti, avrei potuto sospettarlo andando a vedere: https://wapt.tranquil.it/wapt/nightly/a ... rypto.html

"Crittografare un (piccolo) messaggio verrà decrittografato con la chiave pubblica"

Dove viene specificata la dimensione massima per encrypt in modo che il passaggio a encrypt_fernet avvenga in base a tale dimensione?

È possibile rilevare il metodo utilizzato per crittografare la stringa per applicare il metodo di decrittazione corretto?

Sinceramente.
Bloccato