funzioni encrypt_nvarchar() e decrypt_nvarchar()

Le funzioni " encrypt_nvarchar() e " decrypt_nvarchar() criptano i dati nvarchar e li decriptano utilizzando una chiave fornita.

Per maggiori dettagli sul processo di crittografia, vedere le funzioni encrypt e decrypt(). L'implementazione di Netezza Performance Server utilizza la crittografia simmetrica, nota anche come crittografia a chiave privata o segreta, poiché la stessa chiave segreta viene utilizzata per crittografare e decrittografare i dati. Ciò significa che questa chiave segreta deve essere resa disponibile su qualsiasi server che decifri i dati precedentemente crittografati. È possibile scegliere l'algoritmo di crittografia simmetrica utilizzato dalle funzioni per crittografare e decrittografare i dati: Advanced Encryption Standard (AES) o RC4.

Le funzioni " encrypt_nvarchar() e " decrypt_nvarchar() eseguono la crittografia e la decrittografia a livello di campo, non la crittografia e la decrittografia del database.

Importante: se si utilizza la funzione 'encrypt() per elaborare i valori nvarchar, è necessario modificare le applicazioni e i processi di query per utilizzare le funzioni 'encrypt_nvarchar() e 'decrypt_nvarchar(). La funzione 'encrypt() rimane per compatibilità con le versioni e i risultati precedenti, ma le tabelle e le viste che memorizzano i valori della funzione 'encrypt('NVARCHAR') potrebbero incontrare problemi durante i caricamenti e le operazioni di GENERAZIONE DI STATISTICHE.

Sintassi

La funzione " encrypt_nvarchar() ha la seguente sintassi:
varchar = encrypt_nvarchar(nvarchar text, nvarchar key [, int algorithm 
          [, varchar IV]]);
La funzione " decrypt_nvarchar() ha la seguente sintassi:
nvarchar = decrypt_nvarchar(varchar text, nvarchar key [, int algorithm
          [, varchar IV]]);

Il valore " text specifica il valore da criptare o decriptare.

Il valore " key specifica la chiave da utilizzare per criptare o decriptare il valore. Fare attenzione a proteggere la chiave, altrimenti la sicurezza è compromessa. Quando si progetta il sistema di sicurezza, tenere presente l'architettura del sistema Netezza Performance Server:
  • Le funzioni SQL vengono registrate nel file 'pg.log sull'host Netezza Performance Server, quindi l'esecuzione di una funzione 'encrypt_nvarchar(secret_column, 'my_secret_key') rivela la chiave a chiunque possa leggere il file 'pg.log.
  • Le conversazioni JDBC sono facilmente catturabili con qualsiasi strumento di diagnostica o di hacking. Se si trasmette la chiave come parte dell'SQL, la chiave può essere compromessa durante questo processo. Per informazioni sulla memorizzazione della chiave segreta in una tabella, vedere le funzioni encrypt() e decrypt().
Il valore " algorithm può essere RC4 o una delle versioni di AES, come indicato nell'elenco seguente:
0
RC4. Questo è il valore predefinito.
1
AES 128.
ERROR! SEGMENT DATA CORRUPTED, SEGDATA=2
AES 192.
3
AES 256.

L'RC4, sebbene sia l'algoritmo di crittografia più diffuso (utilizzato, ad esempio, da SSL e WEP), non è crittograficamente sicuro ed è vulnerabile agli attacchi.

L'Advanced Encryption Standard (AES) è lo standard di crittografia adottato dal governo degli Stati Uniti e richiesto per tutte le informazioni classificate. Le tre versioni di AES si differenziano solo per la struttura e la forza delle chiavi. Sebbene tutte e tre le lunghezze di chiave siano sufficienti per proteggere le informazioni classificate fino al livello SECRET, le informazioni TOP SECRET richiedono l'uso di chiavi di lunghezza 192 o 256.

Il valore " IV specifica il vettore di inizializzazione (IV) utilizzato per criptare o decriptare il valore. È possibile specificare l'IV solo quando si utilizzano gli algoritmi AES. (L'algoritmo RC4 non utilizza il valore IV) Se non si specifica il valore 'IV, le funzioni 'encrypt_nvarchar() e 'decrypt_nvarchar() utilizzano il valore costante 'IV.

La crittografia con la modalità output feedback (OFB) richiede che l'IV e la chiave siano di 128 bit. Come prassi ottimale, specificare valori a 128 bit per la chiave e l'IV (se utilizzato) in modo che il sistema utilizzi i valori immessi. Se un valore è inferiore o superiore a 128 bit, il sistema utilizza un meccanismo di espansione o derivazione per regolare il valore come segue:

  • Per chiavi o IV inferiori a 128 bit, il sistema duplica il valore finché la chiave o l'IV non raggiunge la lunghezza corretta.
  • Per chiavi o IV di dimensioni superiori a 128 bit, il sistema crea un valore a 128 bit utilizzando un OR logico (XOR) dei primi 128 bit del valore con i restanti bit del valore.

Se si incorpora o si chiama una funzione 'encrypt_nvarchar() all'interno di una funzione 'encrypt_nvarchar(), il risultato non è una stringa in chiaro, come mostrato nell'esempio seguente:Dati campione nvarchar

Risultati

La funzione restituisce un valore crittografato o decrittografato. SQL Extensions Toolkit utilizza la modalità OFB di AES per la crittografia e la decrittografia, che trasforma un cifrario a blocchi in un cifrario a flusso sincrono. Essendo un cifrario a flusso, l'OFB non richiede padding e la lunghezza del testo cifrato in uscita è uguale a quella del testo in chiaro in ingresso.

Esempio

Segue un esempio della funzione " encrypt_nvarchar():

Esempio di dati nvarchar nella chiamata di funzione encrypt_nvarchar()

Segue un esempio della funzione " decrypt_nvarchar():

Esempio di dati nvarchar nella chiamata decrypt_nvarchar()