Quale approccio utilizzare per implementare la crittografia in un'app desktop Windows?

0

Dovrò fare un po 'di crittografia dei dati dell'utente nella mia applicazione desktop Windows, scritta in C / C++ usando WinAPI (senza .NET o WinRT.) Vale a dire, farò quanto segue:

  • Crittografia simmetrica: AES
  • Crittografia della chiave pubblica (asimmetrica): preferibilmente utilizzando Elliptic curve cryptography .

I miei unici requisiti sarebbero:

  • Il codice deve essere eseguito su Windows XP SP3 e versioni successive.
  • Sii sufficientemente robusto.

Quindi mi stavo chiedendo, quale sarebbe stato più adatto per l'uso su Windows?

  1. Per utilizzare Windows integrato API di crittografia o

  2. Per utilizzare una libreria crittografica basata su C o C ++. Se sì, quale? Puoi spiegare? (L'app sarà sviluppata in Visual Studio 2008 come progetto C ++ / MFC.)

Il mio pensiero sui vantaggi di ciascuno era questo:

  1. Con Windows integrato in API crittografiche, è una codifica più veloce poiché la maggior parte del codice di crittografia viene fornito nelle API. Inoltre, le librerie di Windows possono implementare l'accelerazione della CPU (ad esempio, alcune CPU Intel dispongono di operandi AES integrati).

  2. Ma, con la libreria C / C ++, non ci sono dipendenze da DLL di Windows che potrebbero non essere presenti sul vecchio sistema operativo, o contengono bug più vecchi che Microsoft non ha corretto.

posta c00000fd 21.01.2017 - 03:56
fonte

2 risposte

1

Raccomando vivamente l'uso di librerie specifiche della piattaforma laddove possibile. Il motivo principale è che riceveranno automaticamente gli aggiornamenti, mentre se impacchettate una libreria di terze parti, allora avete la responsabilità di monitorare gli aggiornamenti di quella libreria, produrre versioni aggiornate del vostro software con l'aggiornamento alla lib di terze parti, e chiedi agli utenti di installare l'aggiornamento. Con le librerie frequentemente aggiornate (come OpenSSL), questo è un notevole onere di manutenzione da prendere su di te. Nei miei anni come consulente di infosec, ho visto molte molte librerie OpenSSL obsolete in bundle con le applicazioni, la maggior parte con poche dozzine di CVE.

Naturalmente, se devi supportare un sistema operativo che non riceve più gli aggiornamenti di sicurezza dal suo sviluppatore (a causa dell'età di 16 anni), beh, sei fottuto in entrambi i modi. Mi piacerebbe ancora utilizzare le librerie fornite dalla piattaforma (Cryptography API o "CAPI", in questo caso), sia per le prestazioni sia perché preoccuparsi della sicurezza di chiunque utilizzi un SO non supportato è una commissione da pazzi ( ma i tuoi utenti sui sistemi operativi attuali apprezzeranno la possibilità di rimanere al sicuro).

Uno svantaggio dell'utilizzo delle API della piattaforma se si desidera supportare XP è che XP ha solo il CAPI legacy, non il CNG (Crypto API Next Generation) offerto da Vista +. CNG supporta entrambi i nuovi algoritmi (so che offre algoritmi EC, meno sicuro su CAPI) e ha un'API più bella / più flessibile.

Il CNG è anche molto più facile da "collegare" al codice di terze parti, il che è utile se si ha un client che, ad esempio, desidera utilizzare un'implementazione specifica di determinati algoritmi (o memorizzazione delle chiavi, o qualsiasi altra cosa) invece dell'implementazione fornita da MS. Questa è un'altra ragione per usare le librerie di piattaforme, naturalmente; se qualcuno ha cambiato il loro fornitore CNG predefinito, probabilmente vorranno rispettarlo!

Ti suggerisco di considerare molto con attenzione se è effettivamente necessario supportare un OS così obsoleto quando scrivi un codice attento alla sicurezza.

    
risposta data 09.05.2017 - 22:06
fonte
0

La scelta dell'algoritmo di crittografia dipende dal flusso di dati dell'utente (i dati sono residenti sullo stesso sistema o vengono trasferiti al cloud). Il recupero dei dati può anche svolgere un ruolo importante nel decidere l'algoritmo di crittografia. Poiché la sicurezza del tuo algoritmo è legata alla sicurezza della tua chiave, assicurati di decidere la corretta crittografia in base alle tue esigenze.

Ma la scelta della libreria nel tuo caso dovrebbe dipendere principalmente dal supporto della documentazione e dal supporto continuo allo sviluppo per le biblioteche. Dal momento che XP è principalmente OS fuori produzione, preferirei non concentrarmi su di esso. Se la tua applicazione è legata alla sola soluzione di Windows, puoi usare le librerie di microsoft.

    
risposta data 08.02.2017 - 15:47
fonte

Leggi altre domande sui tag