2009-05-04 13 views
9

Voglio testare un algoritmo di crittografia per forza. Non deve essere forte, deve solo resistere al cracking accidentale e dire, un hacker determinato con 10 ore da perdere. (Ho scritto the crypto algorithm. Sì, so che questa è generalmente una cattiva idea, ma penso di avere una buona ragione.)Come si verifica la qualità di un algoritmo di crittografia?

Che tipo di test dovrei fare? Finora ho provato questo:

  • Genera A. casuale
  • vibrazione di un po 'casuale di A per fare B.
  • Verificare che il numero di 1s a cifrare (a) XOR crittografare (b) si adatta a una distribuzione di poisson (tranne che lo XOR non emette mai 0).

Eventuali altri test suggeriti?

Circa la crittografia

E 'un Fiestel Cipher standard di progettato per essere eseguito in 3ns ed essere del tutto combinatori, non registri. (Questo è un ordine di grandezza più veloce di DES/AES/ecc.) Faccio più giri che posso in 3ns, che è solo circa 6.

Prima di tutto permuto l'ordine dei bit di input.

Quindi per ogni bit sulla metà sinistra dell'ingresso I XOR con esso l'uscita di una funzione F. F ha ingresso 3 bit e uscita 1-bit. I 3 bit di ingresso su F sono selezionati dalla metà destra dell'ingresso. L'output di F è una permutazione di {00001111} quindi F è bilanciato. I 3 bit di ingresso su F sono selezionati dai bit sulla metà destra in modo tale che ciascun bit sulla metà destra sia utilizzato lo stesso numero di volte (o il più vicino possibile a quello). Ogni "F" è generata casualmente e indipendentemente una volta.

Avanti Poi scambio le metà sinistra e destra del risultato e lo rifaccio. Ancora una volta, nuova "F" per ogni bit con un nuovo input.

Tutto ciò che è un round. Lo faccio 6 volte, ogni round con funzioni F casuali generate in modo indipendente. 6 round richiedono circa 3ns. Ho provato a cambiare anche il numero di giri e il numero di ingressi.

+7

Si potrebbe pubblicarlo come l'algoritmo di un nuovo prodotto di consumo rivoluzionario, volto a eliminare il furto di identità. Qualcuno potrebbe provare a romperlo per te;) –

+0

Puoi pubblicare l'intero algoritmo? Mi piacerebbe dare un'occhiata a questo. –

+0

Dall'altra domanda, sembra che tu non stia realmente seguendo un codice, di per sé. In questo caso, testalo statisticamente, come se fosse una funzione di hash. –

risposta

11

Sospetto che la solita risposta sarebbe "Se hai bisogno di fare questa domanda il meglio che puoi sperare è la crittografia a livello di bambino-sorella".


Ma se è necessario, si potrebbe iniziare applicando i consueti test randnomness all'uscita (How to test random numbers?) in byte, parole-parole lunghe, ecc

Se non è possibile passare che si sapere che è debole senza ulteriori interventi. Si noti che il passaggio di questo non fa non garantire che sia forte.

8

Se devi chiedere - questa è una buona indicazione che non dovresti scrivere la tua.

Se vuoi solo scriverne uno come esercizio di apprendimento, allora il test di tortura della crittografia che Kirtan ha suggerito è probabilmente buono. Tuttavia, se si prevede di utilizzare realmente questa crittografia per alcuni scopi in cui la sicurezza è veramente necessaria, tale strumento non sostituirà gli anni di analisi degli esperti che gli algoritmi pubblicati hanno attraversato.

Anche se il vostro algoritmo genera output che appare casuale, questo non significa che sia necessariamente sicuro.

6

Posso quasi garantire che non hai una buona ragione. Se lo fai, però, invialo per la revisione da parte dei tuoi pari e NIST quando AES viene in giro per la sostituzione. L'esame continuo da parte di persone che sanno veramente quello che stanno facendo è l'unico modo per saperlo.

11

pubblicarlo su internet e vedere se qualcuno può rompere (Che NIST/NSA ha fatto con AES, SHA-3, ecc ..).

vorrei guardare tutti gli attacchi più comuni.

Determina quanto è grande lo spazio delle chiavi che qualcuno deve usare la forza bruta per trovare il testo in chiaro, è più piccolo di tutte le chiavi possibili? Le due chiavi producono lo stesso testo cifrato?

Potete scegliere un testo in chiaro che rivelerà la chiave nel testo cifrato?

4

valutazione statistica di un algoritmo di crittografia è necessaria ma non sufficiente per assicurarsi che sia sicuro. Molti algoritmi hanno conosciuto punti deboli o potenziali punti deboli che non hanno nulla a che fare con l'entropia e le proprietà statistiche della crittografia. Guarda RSA (dipende dal fatto che il factoring è difficile), MD5 (collision attacks) e altri algoritmi. Questi hanno avuto anni uomo di rigorosi sondaggi per debolezze.

18

Scaricare le istruzioni dal web per creare un dispositivo nucleare sporco di bassa qualità, comprimerlo con una mappa stradale di Washington, D.C., quindi crittografarlo e inviarlo a [email protected]

La forza del vostro algoritmo di crittografia sarà inversamente proporzionale al tempo necessario gli uomini vestiti di nero di presentarsi alla vostra porta.

tenere a mente questo è probabile che sia un esperimento unico, almeno per quelli paio di anni si spende in Gitmo :-)

+1

Lui ... quello era buono. – Hemant

+1

Sei sicuro di Gitmo? Loro "sperano" di chiuderlo a breve. –

+0

@Hemant: secondo che – pop850

1

Seguendo il consiglio di non scrivere il proprio. Questo non significa che devi inserire un'enorme libreria ssl complessa. Guarda qualcosa come TEA (ed è derivato) possono essere codificati in una singola funzione in una dozzina di linee.