Page 1 sur 1

Problème bibliothèque waptcrypto

Publié : 14 avr. 2022 - 18:42
par croquebert
Bonjour,

Contexte:
WAPT version : 2.1 Entreprise
OS serveur : Debian 11
OS console d'administration : Win10pro
OS poste dev de paquets : Win10pro


Afin de chiffrer des secrets dans les paquets WAPT, j'utilise la bibliothèque waptcrypto comme dans l'exemple de votre documentation.

Sous certaine conditions, celle-ci lève une exception.

Cela semble être du à la présence du caractère slash mais seulement sous certaines conditions de position ou autres (un test avec une chaîne très simple contenant un seul slash fonctionne).

Voici le le code utilisé et la sortie d'erreur selon les cas: chaines fonctionnelles et chaines en échec.

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

Code utilisé:

Code : Tout sélectionner

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


Sortie lorsqu'une chaine fonctionnelle avec caractère slash est passée:

Code : Tout sélectionner

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

Sortie lorsqu'une chaine fonctionnelle avec caractère slash est passée:

Code : Tout sélectionner

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


Sortie lorsqu'une chaine fonctionnelle avec caractère slash est passée:

Code : Tout sélectionner

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


Cordialement.

Christophe

Re: Problème bibliothèque waptcrypto

Publié : 14 avr. 2022 - 19:14
par croquebert
Re-bonjour,

Après quelques rapides recherches il semble que ce soit plutôt une limitation sur la longueur de la chaine de caractère à chiffrer coté rsa.py. Après quelques tests la limite que j'ai rencontrée est à 215 caractères.

Du coup, avez-vous une solution pour chiffrer des chaines plus conséquentes (sans être obligé de faire un découpage et un ré-assemblage de la chaîne longue)?

Cordialement.

Christophe

Re: Problème bibliothèque waptcrypto

Publié : 15 avr. 2022 - 15:02
par dcardon
Bonjour Christophe,

merci pour le retour. J'ai forwardé le message à Hubert qui a développé une bonne partie de la librairie waptcrypto pour voir ce qu'il en pense.

Cordialement,

Denis

Re: Problème bibliothèque waptcrypto

Publié : 15 avr. 2022 - 15:24
par croquebert
dcardon a écrit : 15 avr. 2022 - 15:02 Bonjour Christophe,

merci pour le retour. J'ai forwardé le message à Hubert qui a développé une bonne partie de la librairie waptcrypto pour voir ce qu'il en pense.

Cordialement,

Denis
Bonjour Denis,

Super, merci pour le retour.
Difficile pour moi de voir d'où ça provient sans les sources waptcrypto (passage d'arguments à des fonctions de rsa.py , bug ou limitation rsa.py), sauf à tester directement rsa.py ...
Pour l'instant, je vais découper mes chaines à chiffrer et les ré-assembler.
En attendant le retour d'Hubert sur le sujet.

Cordialement.

Christophe

Re: Problème bibliothèque waptcrypto

Publié : 15 avr. 2022 - 15:27
par croquebert
croquebert a écrit : 15 avr. 2022 - 15:24
dcardon a écrit : 15 avr. 2022 - 15:02 Bonjour Christophe,

merci pour le retour. J'ai forwardé le message à Hubert qui a développé une bonne partie de la librairie waptcrypto pour voir ce qu'il en pense.

Cordialement,

Denis
Bonjour Denis,

Super, merci pour le retour.
Difficile pour moi de voir d'où ça provient sans les sources waptcrypto (passage d'arguments à des fonctions de rsa.py , bug ou limitation rsa.py), sauf à tester directement rsa.py ...
Pour l'instant, je vais découper mes chaines à chiffrer et les ré-assembler.
En attendant le retour d'Hubert sur le sujet.

Cordialement.

Christophe
Autant pour moi, les sources de waptcrypto sont accessibles, je vais quand même laisser Hubert se pencher sur le sujet :-)

Re: Problème bibliothèque waptcrypto

Publié : 15 avr. 2022 - 17:24
par htouvet
Bonsoir,
Oui tout à fait, la taille est limitée.
Pour chiffrer des données plus longues, il y a la méthode SSLCertificate.encrypt_fernet(data)
qui chiffre en RSA une clé aléatoire symétrique, qui sert à chiffrer ensuite les données en AES-CBC

Et le pendant SSLPrivateKey.decrypt_fernet

Re: Problème bibliothèque waptcrypto

Publié : 15 avr. 2022 - 17:44
par croquebert
htouvet a écrit : 15 avr. 2022 - 17:24 Bonsoir,
Oui tout à fait, la taille est limitée.
Pour chiffrer des données plus longues, il y a la méthode SSLCertificate.encrypt_fernet(data)
qui chiffre en RSA une clé aléatoire symétrique, qui sert à chiffrer ensuite les données en AES-CBC

Et le pendant SSLPrivateKey.decrypt_fernet
Bonjour Hubert,

Merci pour ce retour.

En effet j'aurais pu m'en douter en allant voir : https://wapt.tranquil.it/wapt/nightly/a ... rypto.html

"Encrypt a (small) message will can be decrypted with the public key"

Où est indiquée la taille MAX pour encrypt afin de basculer sur encrypt_fernet en fonction celle-ci ?

Peut-on détecter la méthode utilisée pour le chiffrement de la chaîne afin d'appliquer la bonne méthode de déchiffrement ?

Cordialement.