Domanda:
Scrivere il mio algoritmo di crittografia
Confuto
2015-11-22 21:16:00 UTC
view on stackexchange narkive permalink

Attualmente sto studiando informatica al college (college del Regno Unito, alias non università) e i corsi mi stanno annoiando a morte. Sto programmando da un po 'di tempo principalmente in linguaggi OO come C # e Java, ma spesso mi annoio e mi arrendo rapidamente perché la maggior parte sono cose noiose dell'interfaccia utente che odio fare, i progetti che mi vengono in mente raramente hanno molto da fare con la progettazione del codice e la creazione di algoritmi. Voglio iniziare a scrivere i miei algoritmi e iniziare ad allontanarmi dal lato della facilità d'uso e iniziare ad imparare cose che mi interessano, vale a dire crittografia e compressione. Voglio scrivere il mio algoritmo di crittografia, per crittografare i byte di un file o di una stringa. Ho alcune domande:

  • Da dove comincerei, quali libri / materiali sono consigliati per iniziare con la crittografia?
  • Ho bisogno di una conoscenza approfondita della crittografia per iniziare un algoritmo di base?
  • C # andrà bene per mettere in pratica un algoritmo di crittografia?

Qualsiasi aiuto sarebbe sinceramente apprezzato. Voglio iniziare a scrivere codice, quindi quando si tratta di fare domanda per uni, ho qualcosa da mostrare per tutte le mie affermazioni in grassetto sulla mia domanda!

"Ho bisogno di una conoscenza approfondita della crittografia per iniziare a utilizzare un algoritmo di base"? SÌ. Sia la progettazione che l'implementazione di algoritmi crittografici è estremamente difficile, eseguita solo da professionisti in team. Gioca tutto quello che vuoi, impara, divertiti ... ma non _pensare_ nemmeno a utilizzare il tuo algoritmo di crittografia per la crittografia del mondo reale.
questa domanda è troppo ampia per essere risolta. Progettare un algoritmo di crittografia può essere qualsiasi cosa, dalle cose che un allievo di una scuola elementare potrebbe fare (cesare-chiffre per esempio) a complessi problemi matematici che portano i matematici cresciuti alla disperazione.
@S.L.Barth Grazie per il commento. Capisco, forse è meglio se trovo qualcos'altro su cui lavorare allora. Non oserei affatto usare qualcosa che disegno nel mondo reale ahah!
"C # andrà bene per mettere in pratica un algoritmo di crittografia?" L'algoritmo di crittografia SOme dovrebbe funzionare indipendentemente da qualsiasi linguaggio. Se usi qualcosa che non può essere fatto ad es. C, il tuo algoritmo può essere buttato via.
`quando si tratta di candidarmi all'università, ho qualcosa da mostrare` Non farlo. Ci sono (troppi) modi per ritorcersi contro un algoritmo di crittografia
C # andrà bene perché lo stai facendo solo per esercitarti comunque e le prestazioni non sono quindi una priorità (di nuovo, non dovresti mai usare la crittografia homebrew in produzione e le prestazioni di merda sono in realtà un vantaggio in quanto saranno un deterrente dal farlo ).
se stai cercando una serie di sfide di programmazione relative alle criptovalute, ti consiglio di cercare su http://cryptopals.com/
@deviantfan Non vedo il problema con questo: la crittografia homebrew è sicuramente un no-no in produzione, ma mostrarla come un progetto per hobby dovrebbe andare bene e almeno dimostrare la conoscenza della programmazione anche se la crittografia stessa è cattiva.
Perché vuoi scrivere un nuovo algoritmo? Quelli esistenti sono insufficienti? Quale problema particolare negli algoritmi esistenti ti aspetti di risolvere? O vuoi solo farlo come esercizio di apprendimento?
@RоryMcCune Non posso ringraziarti abbastanza per quel riferimento. Sono un matematico e la maggior parte della mia esperienza di programmazione deriva dalla risoluzione di enigmi. Questi insiemi di problemi sembrano essere un modo divertente per esplorare il lato dell'implementazione degli algoritmi crittografici!
@JamesRyan Questo è vero, ma sto insegnando a me stesso come hobby e costringermi a iniziare un progetto a volte può essere difficile, figuriamoci fare qualcosa che odio. Sono consapevole che un giorno se riuscirò a fare di questa carriera dovrò fare cose noiose, ma non ancora: D
@Superbest Sì, questo è solo un esercizio di apprendimento, non mi aspetto di creare nulla per essere utilizzato da altri. Non mi aspetto di risolvere alcun problema per essere onesto, solo per acquisire un po 'di conoscenza su come funzionano le cose e mettermi in gioco.
-1
@S.L.Barth È necessaria una conoscenza approfondita per costruire un algoritmo di crittografia * forte *, ma non per uno * di base *, che è ciò che vuole l'OP. Temo che il tuo commento lo abbia indotto in errore a rinunciare allo sforzo in base alla sua risposta ad esso! Penso che l'OP possa facilmente scrivere un algoritmo di crittografia di base e apprendere alcuni concetti utili dall'esercizio.
["Ho creato la mia crittografia"] (https://twitter.com/old_sound/status/602996592531091456)
Quando ho letto il titolo, non ho potuto fare a meno di pronunciare "uh-oh" ...
Ragazzi, come è stato studiato bene? Se cerchi qualcosa che ha a che fare con la crittografia su Google, è un documento pubblicato da matematici simili a dio o "NON FARE QUESTO DA SOLI" Sono sorpreso che Google non dica semplicemente "no" se cerchi questo.
Sono venuto qui solo per i commenti.
Puoi anche divertirti un po 'se riesci a riunire un gruppo di programmatori inesperti e sfidarli a creare un algoritmo di crittografia che nessuno degli altri può rompere (il che non significa che sia indistruttibile, ovviamente) e poi a rompere l'un l'altro' algoritmi.
Nove risposte:
fr00tyl00p
2015-11-22 22:59:12 UTC
view on stackexchange narkive permalink

Ovviamente puoi iniziare in piccolo e implementare i tuoi algoritmi. Ma non dare per scontato che forniscano alcuna sicurezza oltre all'offuscamento .

La cosa difficile quando si tratta di crittografia è trovare le ragioni per cui qualcosa è effettivamente sicuro. Non sarai in grado di decidere che entro mesi e se ti sembra di esserlo a quel punto, molto probabilmente ti sbagli.

È molto più facile trovare le ragioni per cui le cose sono insicure piuttosto che le ragioni per le quali sono sicuri, quindi se vuoi iniziare da qualche parte, sviluppa i tuoi algoritmi finché non pensi che siano sicuri e poi prova a scoprire perché non lo sono e trova il modo per attaccarli.

La maggior parte degli errori viene commessa quando implementare algoritmi. Quindi, se vuoi ottenere un lavoro ben retribuito, potresti imparare come implementare correttamente quella roba.

Ti consiglio di iniziare a implementare qualcosa come AES e di continuare con diverse modalità operative come CBC o CCM e scoprirlo perché la casualità è importante. Continua con SHA-2 e HMAC e procedi alla crittografia asimmetrica. Controlla sempre cosa hanno fatto gli altri e perché lo hanno fatto e dai uno sguardo speciale agli attacchi del canale laterale e come vengono eseguiti. Se sei a quel punto, troverai la strada da percorrere.

Il riferimento con cui iniziare sarebbe "HAC", che è disponibile gratuitamente online: http://cacr.uwaterloo.ca/hac/

[Modifica] Un suggerimento di JRsz che non deve essere sepolto nei commenti. Un buon libro per principianti: http://crypto-textbook.com/

L'HAC è un ottimo testo di riferimento per coloro che implementano seriamente la nuova crittografia matematica, ma è probabilmente troppo denso per un principiante.
+1 per `Ovviamente puoi iniziare in piccolo e implementare i tuoi algoritmi. Ma non dare per scontato che forniscano alcuna sicurezza oltre all'offuscamento. Molte persone continuano a dire "non farlo!", Ma questo offre una buona opportunità per saperne di più. Questo piccolo disclaimer è eccellente.
Sono più che consapevole che tutto ciò che faccio non sarà utilizzabile nel mondo reale, questo è semplicemente per darmi qualcosa su cui imparare e verso cui lavorare.
Non che io sia in disaccordo con il tuo messaggio generale, ma ... * "La cosa difficile quando si tratta di crittografia è trovare ragioni per cui qualcosa sia effettivamente sicuro. Non sarai in grado di deciderlo entro mesi e se ti senti come se lo fossi a quel punto, molto probabilmente ti sbagli. "* Quindi la gente sa * perché * un algoritmo come RSA è sicuro? Per quanto ne so, è perché nessuno è riuscito a trovare un modo per romperlo. Allora perché uno studente dovrebbe credere che il suo algoritmo sia peggiore?
@Mehrdad Penso che sia semplicemente perché il suo algoritmo non esiste da 35 anni ed è ancora ininterrotto.
@mbrt: Secondo la tua logica è impossibile inventare un algoritmo di crittografia sicuro.
@Mehrdad Il motivo per cui RSA è sicuro è che il problema RSA è difficile. Hai ragione. È difficile perché nessuno ha trovato il modo di romperlo. Uno studente dovrebbe credere che il proprio algoritmo sia debole perché è un atteggiamento difensivo. IMHO è più ragionevole che presumere che il loro algoritmo sia sicuro a meno che qualcuno non lo interrompa, perché quelli che ci provano potrebbero essere molto meno di quelli che hanno già provato a violare l'RSA.
@fr00tyl00p: Ancora una volta, non sono in disaccordo con il tuo messaggio o conclusione generale. Quello con cui non sono d'accordo è la tua premessa che i crittografi "trovano le ragioni per cui [il loro algoritmo] è effettivamente sicuro". Per quanto ne so, in realtà non lo fanno: il motivo viene dopo che l'algoritmo è già stato inventato, dal fatto che non è rotto. Fino ad allora, tutto si basa sul fatto che hanno solo la sensazione viscerale che i loro algoritmi dovrebbero essere sicuri e non hanno alcuna prova del contrario. La tua risposta fa sembrare che i crittografi dimostrino l'incrollabilità o qualcosa del genere.
@Confuto Potrebbe anche essere utilizzabile nel mondo reale nel seguente senso: nessun robot sarebbe in grado di bersagliarti senza supervisione se esegui una crittografia standard + una crittografia non standard (ovvero la tua crittografia verrà interrotta solo se ci sono persone vere dal vivo dopo di te; questo non è sempre vero quando si utilizza solo materiale di libreria che tende a diventare obsoleto come DES). Questo potrebbe o non potrebbe essere importante.
@fr00tyl00p: Per metterlo in prospettiva, ho davvero delle difficoltà a credere che ECC sia effettivamente sicuro. Non sembra che dovrebbe essere, e sembra qualcosa che potrei inventare in un fine settimana dal momento che non ho bisogno di alcuna prova di durezza o altro, solo una sensazione viscerale. L'unica cosa che mi mancherebbe è una buona reputazione per convincere le persone a prendere sul serio un algoritmo simile, ma cos'altro mi mancherebbe? Potrei solo affermare che è difficile e aspettare che qualcuno mi dimostri che ho torto. Allora perché le persone considerano l'ECC più sicuro di un algoritmo casuale che potrei inventare?
l'hac è molto complicato per i principianti. Consiglio questo libro per un buon inizio: http://crypto-textbook.com/
Mi piace che questo incoraggi l'utente a provarlo con * aspettative gestite *. Sarebbe un buon esercizio (e direi necessario) se i colleghi tentassero di violare la crittografia.
Selezionato come risposta, grazie. Sopraffatto dalle fantastiche risposte da qui, grazie mille a tutti!
@Mehrdad - i crittografi hanno motivo di credere che RSA sia sicuro oltre al semplice "non è ancora rotto". Studiando la matematica sottostante possono dimostrare che rompere l'RSA è molto difficile. Ci sono ipotesi coinvolte (come che la scomposizione in fattori primi è lenta), ma queste ipotesi possono essere enunciate e quantificate e sono molto più forti del semplice "nessuno ha ancora trovato un hack". Un buon libro introduttivo alla crittografia matematica dovrebbe spiegarlo in dettaglio o provare a cercare ad es. "perché RSA è sicuro".
@Rich Non ci sono prove matematiche o computazionali per la sicurezza RSA. L'ipotesi è che la fattorizzazione richieda tempo esponenziale. Ma questa è solo un'ipotesi, non una prova. Ancora una volta, questo significa in pratica che RSA "non è ancora rotto" e niente di più.
@mbrt: No, il punto era che la forza di RSA si basa sul fatto che la fattorizzazione non sia stata ancora interrotta, che è un'affermazione molto più forte di "X non ancora interrotta" per qualsiasi nuovo cifrario X, perché la fattorizzazione è molto meglio compresa di X. Come ho detto in il mio commento, ci sono dei presupposti coinvolti, ma questi presupposti possono essere enunciati e quantificati e sono molto più forti del semplice "nessuno ha ancora rotto il numero 7 di mbrt".
@Rich: * "Possono provare che infrangere RSA è molto difficile." * ... puoi collegarmi a detta prova? Tutto ciò su cui si basa è che la fattorizzazione è difficile; non ci sono prove dietro questo. Non sono sicuro che tu stia seguendo le notizie, ma c'è stato uno sviluppo molto recente su un algoritmo tempo quasi-polinomiale per l'isomorfismo del grafo, e dopo averne sentito parlare alcune persone stanno iniziando a chiedersi se la fattorizzazione possa essere risolta in quasi-polinomio- anche il tempo. Inoltre, puoi dire lo stesso per ECC? La gente pensa che l'ECC sia difficile perché nessuno è stato in grado di romperlo. C'è una prova? No.
@Mehrdad: sì, wikipedia ha le citazioni: "Miller ha dimostrato che - assumendo l'ipotesi di Riemann estesa - trovare d da n ed e è difficile quanto factoring" tramite https://en.wikipedia.org/wiki/RSA_(cryptosystem)# Integer_factorization_and_RSA_problem. Come ho affermato prima, i crittografi hanno affermato le loro ipotesi: cioè ipotesi di Riemann estesa e scomposizione in fattori primi difficili, e quindi hanno dimostrato la sicurezza di RSA sotto queste ipotesi. Il punto è che queste ipotesi sono molto meglio comprese e hanno maggiori probabilità di essere vere rispetto a qualsiasi vecchia affermazione "ma X non è ancora rotta".
@Rich: E che dire dell'ECC? Inoltre, se dichiari le tue supposizioni, ciò non rende il tuo algoritmo più sicuro. Posso inventare un algoritmo e anche affermare le mie ipotesi. Significa che ora è sicuro? Mi sento come se ti stessi perdendo il punto ...
@Mehrdad: Penso che tu mi stia fraintendendo. Non ho detto che ci sia una prova che RSA sia "sicuro". Ho detto che c'è una prova che RSA è sicuro, dati alcuni presupposti ben compresi. Sto cercando di rispondere alla tua domanda iniziale "perché uno studente dovrebbe credere che il suo algoritmo sia peggiore [di RSA]" - è perché le ipotesi utilizzate in queste dimostrazioni sono molto forti e molto più forti di una semplice affermazione vaga di " nessuno ha ancora rotto la crittografia dello studente X ".
"se dichiari le tue ipotesi che non rendono il tuo algoritmo più sicuro" - lo fa, se le tue ipotesi sono forti e * provi * un collegamento tra le tue ipotesi e la sicurezza del tuo algoritmo
@Rich: (1) L'assunto che il factoring sia difficile è solo "forte" perché nessuno è stato in grado di infrangerlo. Perché questo implica un nuovo presupposto su cui nessuno ha lavorato è debole? (2) Qual è il presupposto che smentisce la forza di ECC? Continui a evitare di rispondere a questo.
Cerchiamo di [continuare questa discussione in chat] (http://chat.stackexchange.com/rooms/32069/discussion-between-rich-and-mehrdad).
La creazione del proprio algoritmo di crittografia senza una conoscenza sufficiente di matematica / cs / crittografia non è chiamata * crittografia * ma * en-crap-tion *. Meglio che cercare di imparare implementando un algoritmo, dovresti imparare più matematica (argomenti di matematica profondi e difficili) e CS, e reimplementare algoritmi già esistenti e studiarne i punti deboli.
StackzOfZtuff
2015-11-22 22:56:30 UTC
view on stackexchange narkive permalink

Coursera

Ecco i miei 2 centesimi:

Partecipa al corso online di Coursera Cryptography:

La lezione dura sei settimane. Ogni settimana ci sono diversi video di lezioni, un quiz valutato e un compito di programmazione opzionale. (E questi incarichi implicano l'implementazione di parti crittografiche.)

Alla fine delle sei settimane c'è un test.

Se vuoi essere sfidato, questo è il modo giusto per partire. è un sacco di lavoro. Ti suggerisco di pianificare più di 10 ore a settimana. Altro se vuoi fare anche l'assegnazione di programmazione.

( Modifica: ecco un sommario per un'esecuzione precedente di questa classe. )

Chiarimento: gli incarichi di programmazione servono solo a generare una comprensione più profonda dell'argomento. Esse NON sono esplicitamente qualcosa che dovresti quindi rilasciare in natura.
Al contrario: il messaggio "Non implementarlo mai da solo!" viene ripetuto ancora e ancora. (E senza rivelare troppo: ogni volta che "Implementalo tu stesso!" è su uno dei test a scelta multipla, allora è sbagliato.)

Mi sono dimenticato di Coursera, grazie! Sono iscritto a Lynda.com ma non avevano molto su crittografia.
+1 sulla classe. È abbastanza impegnativo. Notare che le assegnazioni di programmazione sono in C.
In realtà qualsiasi lingua andrà bene. Vengono inviati solo i risultati. Non l'implementazione. Sui forum ci sono implementazioni in diverse lingue. Gli esempi sono però in Python2.
Adam Shostack
2015-11-22 23:17:53 UTC
view on stackexchange narkive permalink

Inizia rompendo, non costruendo il tuo. C'è un numero preoccupantemente elevato di post di stackexchange di persone che hanno scritto i propri algoritmi. Dai un'occhiata in giro e scopri cosa c'è che non va in loro. (Non guardare le risposte pubblicate.) [Le buone ricerche includono "È sicuro" e "Cosa c'è di sbagliato in questo algoritmo".]

Solo quando hai riscontrato problemi nel lavoro di altre persone dovresti passare al tentativo di implementare algoritmi di altre persone. (Il commento di @ stackzofztuff su Coursera non è male - se ricordo bene, Dan Boneh inizia in questo modo, con più struttura che frugare qui.)

* Dai un'occhiata in giro * Puoi spiegare come trovare questi post? Dobbiamo filtrare le domande per tag, siti web, ecc.?
@A.L, penso che la ricerca per più tag sarebbe più efficace. Qualcosa come [crittografia + algoritmo] (http://security.stackexchange.com/questions/tagged/cryptography+algorithm) o [crittografia + algoritmo] (http://security.stackexchange.com/questions/tagged/encryption+algorithm ). Dovrai scavare un po ', ma a colpo d'occhio vedo alcune domande. Sebbene siano in gran parte sepolti sotto cose più piccole come algoritmi di miscelazione o piccoli offuscamenti aggiunti all'algoritmo esistente. Molte cose che non migliorano la sicurezza né la indeboliscono. Non sono d'accordo con Adam Shostack sul fatto che questo sia efficace.
Ho cercato "È sicuro" e penso che le prime 5 domande siano un buon punto di partenza; Ho modificato la mia risposta per essere più nitida.
dr_
2015-11-23 15:56:01 UTC
view on stackexchange narkive permalink

La Crittografia applicata di Bruce Schneier è una lettura obbligata se vuoi iniziare a studiare questo campo. Sono sorpreso che nessuno l'abbia suggerito prima.

E sì, devi sapere molto sulla crittografia anche prima di provare a lanciare i tuoi algoritmi per divertimento. Non pensare nemmeno di usarli per problemi del mondo reale, però: ci sono già molte cattive criptovalute in giro.

Per quanto riguarda la programmazione, evita i linguaggi proprietari come la peste. Suggerirei C o anche C ++.

Perché dici * "Riguardo alla programmazione, evita i linguaggi proprietari come la peste" *? La mia esperienza è che il codice può essere convertito in C / C ++ abbastanza facilmente (spesso quasi identico, riga per riga) se scrivi codice ottimizzato in C # (non molte persone lo fanno, però ...). Inoltre, il compilatore C # è ora open source (rilasciato sotto Apache 2.0).
Anche C # è sempre stato documentato pubblicamente come standard, tramite ECMA se ricordo bene (e questo è lo standard a cui ci si aspetta che il compilatore di Microsoft aderisca).
+1 per il libro di Bruce Schneier.
@Toothbrush Allora perché non usare direttamente C che è aperto, maturo e diffuso.
@dr01 Certo, se stai scrivendo un algoritmo di crittografia serio, dovresti assolutamente scriverlo in C in modo che possa essere rivisto formalmente. Tuttavia, se stai semplicemente compilando un codice per capire cosa fa la crittografia, perché non utilizzare il linguaggio con cui ti trovi più a tuo agio? Se le uniche persone che lo vedranno sono lui e il suo gatto, che differenza fa se è scritto in AutoLisp! Forse Applescript tornerà e diventerà il nuovo standard di crittografia ...;)
@dr01 Quando si impara qualcosa di più generale di una lingua specifica, è utile se la lingua usata non ti dà la pistola carica, caricarla e fissarla con del nastro adesivo sulla vita puntando verso il tuo piede. Il linguaggio che ha un "comportamento indefinito" come concetto centrale non è adatto per l'apprendimento degli algoritmi. Mentre C ha molte cose da fare e ha il suo posto, richiede competenze specifiche che sono totalmente estranee agli algoritmi di apprendimento.
E ricorda sempre la regola di Schneier ... Chiunque può creare un algoritmo di crittografia davvero sorprendente che non può infrangere. cioè ... la revisione tra pari è necessaria per dimostrare che funziona effettivamente.
Scott C Wilson
2015-11-22 21:36:27 UTC
view on stackexchange narkive permalink

Un buon inizio sarebbe implementare gli algoritmi esistenti e imparare come funzionano in profondità. Ad esempio, l'algoritmo one-time pad è facile da apprendere e implementare e studiarne i punti di forza e di debolezza ti consentirà di iniziare. Ti farà anche sentire a tuo agio con il tipo di giochetti che è importante nella crittografia. La ricerca di "one-time pad" ti consentirà di iniziare.

Ma nota che ontimepad è uno "strano" (algoritmo e possibile utilizzo), non aiuterà molto a capire AES ecc., Che è molto più usato nella pratica e ha molti concetti che si trovano anche in altri algoritmi (ecc. ecc.)
il punto che sarebbe rilevante per OP riguardo agli algoritmi di crittografia di solito non è la logica implementata, ma la matematica dietro di essa. AES è un buon esempio per questo. Nel codice si possono vedere solo alcuni semplici spostamenti di bit e istruzioni matematiche di basso livello. L'algoritmo stesso è progettato in modo da rendere i dati crittografati un aspetto puramente casuale, il che richiede alcune abilità da raggiungere dal progettista, per non dire altro.
Un time pad è comunque un caso interessante: è un algoritmo abbastanza semplice e in condizioni ottimali - indistruttibile. I suoi punti deboli derivano dalla scalabilità e dallo scambio di chiavi, che non sono banali per le applicazioni del "mondo reale". Ma non so che aiuti davvero a capire le altre opzioni crittografiche, che sono molto più complicate a causa della necessità di gestire la fiducia, lo scambio di chiavi, ecc.
Michael B
2015-11-24 03:47:41 UTC
view on stackexchange narkive permalink

Solo per accumulare le ottime risposte che sono qui, con qualcosa di diverso.

Se presumi che il tuo algoritmo v1 sarà insicuro e terribile, e il tuo v100 sarà solo leggermente migliore, ma ugualmente insicuro. (come la tua v1000)

Con questo presupposto in mente, puoi imparare molto risolvendo i problemi che la crittografia ha dovuto risolvere per diventare la scienza che è oggi. cioè reinventare la ruota.

Personalmente trovo che reinventare la ruota sia un ottimo modo per imparare un compito complesso. Ti dà qualcosa da risolvere. Se questo è il tuo problema, ci sono meno cose più difficili da risolvere della crittografia.

In questo modo, puoi andare all'università e dire, beh, ho progettato il mio algoritmo di crittografia come veicolo per imparare a risolvere problemi difficili. Alla v50 l'algoritmo fa schifo, ma queste sono le lezioni che ho imparato, le soluzioni che ho trovato, ed è così che vengono risolte nel mondo reale.

C'è una grande differenza tra il dire che ho scritto un protocollo di crittografia "buono" e il dire che ho scritto un protocollo che è quasi certamente molto debole ma lo scopo non era creare un protocollo sicuro. Personalmente avrei un grande rispetto per qualcuno che ha detto quest'ultimo. (Probabilmente farei un cenno al primo e gli mostrerei rapidamente la porta)

Questo. OP sta cercando una sfida interessante: un'opportunità per imparare, non per diventare l'inventore della Next Big Thing.
JRsz
2015-11-23 02:42:30 UTC
view on stackexchange narkive permalink

Puoi implementare algoritmi di crittografia già esistenti, ma progettare il tuo algoritmo di crittografia è una delle questioni più complesse che potresti affrontare. Per un'introduzione generale, consiglio vivamente questo canale: https://www.youtube. com / channel / UC1usFRN4LCMcfIV7UjHNuQg / videos o il libro "Understanding Cryptography" di Christoph Paar e Jan Pelzl ( http://crypto-textbook.com/). Presumo tu stia mirando a algoritmi simmetrici e ti consiglio di iniziare a leggere un sacco di teoria su di loro, cosa è sicuro, cosa non è sicuro (storico) ed esplicitamente in che modo gli attuali algoritmi allo stato dell'arte si sono fatti strada per quello che sono (come è stato sviluppato AES, scelto, ecc.).

Incontrerai molti problemi matematici quando gestirai diversi modelli di attaccante, anche nella parte simmetrica. La crittografia asimmetrica è basata virilmente su problemi matematici e ci sono alcuni attacchi molto complicati che sono molto potenti contro la crittografia asimmetrica.

La conclusione è non sviluppare i tuoi algoritmi, a meno che tu non abbia molti anni di esperienza e lo sia molto familiare con l'argomento (tutte le sue parti). L'implementazione di alcuni di essi è comunque una buona idea, ma se stai cercando un qualche tipo di progetto perché non scrivi un programma che utilizza algoritmi già esistenti e decifra alcuni dati per te. Avrai abbastanza problemi per affrontarlo, perché un algoritmo sicuro non è affatto una garanzia per la crittografia sicura. Diverse modalità operative saranno importanti su questo argomento e anche su altre questioni.

Count Iblis
2015-11-23 12:25:57 UTC
view on stackexchange narkive permalink

Potresti seguire il suggerimento di Scott Wilson sul pad One-Time, ma con dati casuali reali. Puoi ad es. considera il rumore della webcam del computer. Lascia che la webcam scatti alcune foto di una scena statica, converta le immagini in immagini a virgola mobile a 32 bit, normalizza le immagini alla stessa luminosità, calcola la media e quindi sottrae una delle immagini dalla media. Se si mappano i valori dei pixel negativi su 0 e i valori dei pixel positivi su 1, si hanno quasi bit perfettamente casuali, che non sono correlati quando i pixel non sono troppo vicini. Applicando l'algoritmo di von Neumann a coppie di bit presi da pixel distanti:

(0,1) ---> 0

(1,0) ---> 1

(0,0) e (1,1) vengono scartati

produrrà bit casuali perfetti con 0 e 1 che hanno esattamente il 50% di probabilità.

Non sono sicuro che questo risponda alla domanda
Una facile fonte di casualità da un computer. Grazie!
Hanky Panky
2015-11-23 13:15:40 UTC
view on stackexchange narkive permalink

Vai avanti, scrivi un algoritmo ma alla fine assegna un compito a uno dei tuoi amici / compagni che si occupano regolarmente di crittografia; dì loro di violare la crittografia se possono.

Noterai che saranno in grado di romperla in pochi minuti e rimarrai sbalordito a pensare a quante scappatoie c'erano che hanno dato il gioco passa a persone con vasta conoscenza della crittografia (per esprimere le tue parole)

Questo è esattamente quello che è successo a me quando stavo imparando a programmare molto tempo fa e volevo sfidare alcuni ragazzi che erano intelligenti in queste cose e io ho fallito miseramente. Tanto che potrebbero persino decifrare il messaggio stampato su carta usando solo la loro mente e le loro capacità.

Puoi certamente scriverne uno e perfezionarlo nel tempo, ma non può essere sicuro in qualsiasi momento presto contro il persone con quella conoscenza.

Questo sarà un buon punto di partenza (o forse anche un punto di sosta) nella tua ricerca per scrivere il tuo algoritmo :)



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...