Pagina 1 di 1

problema con la libreria waptcrypto

Pubblicato: 14 aprile 2022 - 18:42
di croquebert
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

Re: Problema con la libreria Waptcrypto

Pubblicato: 14 aprile 2022 - 19:14
di croquebert
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

Re: Problema con la libreria Waptcrypto

Pubblicato: 15 aprile 2022 - 15:02
di dcardon
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

Re: Problema con la libreria Waptcrypto

Pubblicato: 15 aprile 2022 - 15:24
di croquebert
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

Re: Problema con la libreria Waptcrypto

Pubblicato: 15 aprile 2022 - 15:27
di croquebert
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 :-)

Re: Problema con la libreria Waptcrypto

Pubblicato: 15 aprile 2022 - 17:24
di htouvet
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.

Re: Problema con la libreria Waptcrypto

Pubblicato: 15 aprile 2022 - 17:44
di croquebert
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.