Domanda Algoritmo

Stato
Discussione chiusa ad ulteriori risposte.

HackEarth

Utente Silver
29 Novembre 2015
211
24
13
89
Ultima modifica:
Buon giorno a tutti,
Mi sono imbattuto in un problemino al quanto interessante. Come creare un algoritmo di crifratura?
Bene partendo dal presupposto che so che esistono 2 tipi di cifrature quelle a blocchi e quelle simmetriche e nient'altro purtroppo se non qualche cenno storico XD
Voi mi sapreste dire in grandi linee o più nello specifico come creare un algoritmo partendo da 0? (anche con esempi di algoritmi già esistenti solo per capirci un po meglio).
@murdercode @SpeedJack @St3ve
 
Buon giorno a tutti,
Mi sono imbattuto in un problemino al quanto interessante. Come creare un algoritmo di crifratura?
Bene partendo dal presupposto che so che esistono 2 tipi di cifrature quelle a blocchi e quelle simmetriche e nient'altro purtroppo se non qualche cenno storico XD
Voi mi sapreste dire in grandi linee o più nello specifico come creare un algoritmo partendo da 0? (anche con esempi di algoritmi già esistenti solo per capirci un po meglio).
@murdercode @SpeedJack @St3ve
In realtà gli algoritmi più utilizzati attualmente sono di tipo asimmetrico, ovvero la chiave di cifratura è distinta da quella di decifratura, ed è molto difficile ricavare quest'ultima dall'altra. I cifrari a blocchi d'altronde possono essere sia simmetrici che asimmetrici.
Tornando alla tua domanda principale, creare un algoritmo abbastanza decente (escludendo alcuni algoritmi tanto semplici quanto inutili) è MOLTO DIFFICILE e, senza conoscenze universitarie di algebra ed aritmetica, IMPOSSIBILE (tra gli algoritmi più interessanti attualmente c'è ne uno che utilizza le curve ellittiche, ovvero equazioni di terzo grado immerse in campi finiti con particolari proprietà).
Ti consiglio invece di studiarti un po' di algebra universitaria (fino alla teoria dei campi finiti), per poi dedicarti allo studio di algoritmi già esistenti, in particolare: scambio di chiavi Diffie-Hellman, RSA, ElGamal, DES, AES (Rijndael), Rabin, Massey-Omura
 
  • Mi piace
Reazioni: .D3vil. e Deehokan
@Barbossa Grazie mille infatti avevo visto dei calcoli che a me non sembravano familiari poichè non li ho ancora studiati.
Ma una curiosità la chiave di decifratura non sarebbe il procedimento inverso a quella di cifratura?
 
Come hai detto anche tu, i cifrari si possono dividere in simmetrici e asimmetrici. Quelli asimmetrici (RSA, ElGamal) generalmente sfruttano dei problemi NP dove anche il running time nell'average case risulta intrattabile, mentre quelli simmetrici (AES, DES e in generale tutti quelli usciti prima del 1970) si basano principalmente su operazioni molto semplici (permutazioni, shift, xor e simili) combinate in modo da resistere agli attacchi conosciuti.

Praticamente in quelli asimmetrici cerchiamo un problema dove esiste un verificatore efficiente, ma per trovarlo anche solo nel caso medio è richiesto molto tempo. Ad esempio fattorizzare i numeri grandi è un problema intrattabile anche nel caso medio (a patto di prendere le dovute precauzioni), però scegliere un numero primo anche molto grande è semplice. RSA sostanzialmente si basa su questo: scegli due primi molto grandi (facile), li moltiplichi tra loro e poi sfrutti il fatto che l'attaccante non è capace di trovare questi due numeri a partire dal loro prodotto per nascondere un messaggio.

Con i cifrari simmetrici invece il ragionamento è: ci serve qualcosa di invertibile, che resista all'analisi delle frequenza, alla crittoanalisi lineare e differenziale e ai vari attacchi choosen plaintext / know ciphertext. Se non hai sufficienti competenze matematiche per capire cosa fanno i cifrari asimmetrici, dai un'occhiata a quelli simmetrici (eg. AES) e vedrai che sono tutte operazioni apparentemente banali. La cosa difficile è capire e dimostrare che certe operazioni rendono il cifrario sicuro.
Se vuoi farti qualche idea su come funzionino (capendoli in dettaglio), dai un'occhiata ai cifrari storici e guarda in che modo sono stati attaccati.

Ma una curiosità la chiave di decifratura non sarebbe il procedimento inverso a quella di cifratura?
Nei cifrari simmetrici sì, in quelli asimmetrici no. È proprio questa la differenza tra queste due categorie.
 
Giorno, se dovessi utilizzare un algoritmo per cifratura di file (ad es .txt) e lo volessi implementare in un form per poi costruire un software con Visual Studio, che linguaggio sarebbe più appropriato? E che algoritmo consigliereste? Grazie in anticipo!
 
Giorno, se dovessi utilizzare un algoritmo per cifratura di file (ad es .txt) e lo volessi implementare in un form per poi costruire un software con Visual Studio, che linguaggio sarebbe più appropriato? E che algoritmo consigliereste? Grazie in anticipo!
La regola d'oro in crittografia è: non inventarti niente, se vuoi qualcosa di sicuro usa quello che gli esperti del settore ti mettono a disposizione. Solitamente per questo genere di cose si usa OpenSSL o GMP, ma visto che hai parlato di form e Visual Studio immagino che tu stia usando il .NET Framework, quindi dai un'occhiata qui.

Il formato del file non ha grande importanza. Gli algoritmi asimmetrici generalmente sono più lenti degli algoritmi simmetrici di un fattore di 10^3 (sono almeno 1000 volte più lenti), quindi solitamente si usa la crittografia asimmetrica per criptare la chiave usata nella crittografia simmetrica. Nel tuo caso ti consiglio di usare AES, visto che è l'algoritmo standard.

Il mio discorso cambierebbe se il tuo progetto fosse puramente didattico. In questo caso potresti provare a implementare tu stesso l'algoritmo, ma non ti aspettare di essere al sicuro. La maggior parte dei problemi di sicurezza sono dovuti ad un'implementazione degli algoritmi non sufficientemente accurata.
 
La regola d'oro in crittografia è: non inventarti niente, se vuoi qualcosa di sicuro usa quello che gli esperti del settore ti mettono a disposizione. Solitamente per questo genere di cose si usa OpenSSL o GMP, ma visto che hai parlato di form e Visual Studio immagino che tu stia usando il .NET Framework, quindi dai un'occhiata qui.

Il formato del file non ha grande importanza. Gli algoritmi asimmetrici generalmente sono più lenti degli algoritmi simmetrici di un fattore di 10^3 (sono almeno 1000 volte più lenti), quindi solitamente si usa la crittografia asimmetrica per criptare la chiave usata nella crittografia simmetrica. Nel tuo caso ti consiglio di usare AES, visto che è l'algoritmo standard.

Il mio discorso cambierebbe se il tuo progetto fosse puramente didattico. In questo caso potresti provare a implementare tu stesso l'algoritmo, ma non ti aspettare di essere al sicuro. La maggior parte dei problemi di sicurezza sono dovuti ad un'implementazione degli algoritmi non sufficientemente accurata.
Mille Grazie St3ve... Lo scopo del progetto sarebbe avere un software portatile in .exe che cripta i file all'interno di Usb, Hdd ecc. collegati tramite porte USB. Grazie ancora!
 
Mille Grazie St3ve... Lo scopo del progetto sarebbe avere un software portatile in .exe che cripta i file all'interno di Usb, Hdd ecc. collegati tramite porte USB. Grazie ancora!
Esiste anche questo: https://www.gpg4usb.org/

Personalmente ho mai provato la versione for usb, ma GPG vero è a mani basse uno dei programmi migliori quando si parla di crittografia. Immagino che la versione che ti ho linkato sia semplicemente la versione normale resa portable.
Suppongo che il progetto che hai in mente sia più user friendly di GPG, che va usato da linea di comando e ti permette di specificare veramente molte cose, ma valeva la pena menzionarlo.
 
Esiste anche questo: https://www.gpg4usb.org/

Personalmente ho mai provato la versione for usb, ma GPG vero è a mani basse uno dei programmi migliori quando si parla di crittografia. Immagino che la versione che ti ho linkato sia semplicemente la versione normale resa portable.
Suppongo che il progetto che hai in mente sia più user friendly di GPG, che va usato da linea di comando e ti permette di specificare veramente molte cose, ma valeva la pena menzionarlo.
Very Good! Grazie! Vedo di andare a studiare!:myeah::lock:
 
@St3eve grazie mille per le tue risposte...
Un tuo parere personale, se dovresti decidere da crittografia simmetrica a quella asimmetrica qualche sceglieresti?
Se è più sicura la crittografia asimmetrica ne vale la pena di studiare per creare un algoritmo tutto nuovo?
Se dovessi studiare e sviluppare un nuovo algoritmi di criptazione come stabilisci se è sicuro oppure no?

Inviato dal mio SM-G800F utilizzando Tapatalk
 
@St3eve grazie mille per le tue risposte...
Un tuo parere personale, se dovresti decidere da crittografia simmetrica a quella asimmetrica qualche sceglieresti?
Se è più sicura la crittografia asimmetrica ne vale la pena di studiare per creare un algoritmo tutto nuovo?
Se dovessi studiare e sviluppare un nuovo algoritmi di criptazione come stabilisci se è sicuro oppure no?

Inviato dal mio SM-G800F utilizzando Tapatalk

Prima di incominciare a scrivere un algoritmo tutto tuo ti consiglierei di studiare crittografia e di implementare algoritmi già esistenti. Lo standard per la simmetrica è AES, successore del DES. Per quanto riguarda la asimmetrica RSA è quello più utilizzato e facile da capire. Un algoritmo è davvero sicuro se non è attaccabile da attacchi già noti come il bruteforce, attacchi statistici o attacchi sull'implementazione.
La scelta della crittografia asimmetrica o simmetrica dipende dal tipo di dato che si vuole criptare, dalla sua grandezza e dal contesto in cui ci si trova.
 
XorNameName
Grazie mille per la tua risposta. Allora andrò a prendermi qualche libro sulla crittografia.
Comunque userei questo linguaggio per proteggere dati sensibili e di conseguenza da come li cripto devo anche decriptarli.

Inviato dal mio SM-G800F utilizzando Tapatalk
 
Un tuo parere personale, se dovresti decidere da crittografia simmetrica a quella asimmetrica qualche sceglieresti?
È una scelta dipendente da quello che devi fare, sono due categorie di algoritmi che risolvono dei problemi diversi. Se voglio criptare un file di 1GB non è conveniente usare la crittografia asimmetrica, così come se voglio stabilire una connessione privata con te non posso servirmi soltanto della crittografia simmetrica (come farei a passarti la chiave?). Sono due categorie abbastanza complementari, se voglio spedirti un file prima uso la crittografia asimmetrica per passarti la chiave da usare per la crittografia simmetrica (hybrid cryptosystem).
 
Grazie mille delle vostre risposte... mi sa che a luce di tutto mi devo affidare agli algoritmi già esistenti no?!
 
@St3eve grazie mille per le tue risposte...
Un tuo parere personale, se dovresti decidere da crittografia simmetrica a quella asimmetrica qualche sceglieresti?
Se è più sicura la crittografia asimmetrica ne vale la pena di studiare per creare un algoritmo tutto nuovo?
Se dovessi studiare e sviluppare un nuovo algoritmi di criptazione come stabilisci se è sicuro oppure no?

Inviato dal mio SM-G800F utilizzando Tapatalk

Personalmente potrei dirti, un'algoritmo si definisce attualmente sicuro quando per calcolarne l'inverso diventa un consto insostenibile per le tecnologie attuali. (questo almeno vale per gli algoritmi a criptazione a chiave pubblica, come rsa)
 
Stato
Discussione chiusa ad ulteriori risposte.