scoprire la chiave di cifratura

Postate qui per tutte le discussioni legate alla sicurezza di Linux/Slackware

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Specificare se discussione/suggerimento o richiesta d'aiuto.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

scoprire la chiave di cifratura

Messaggio da ZeroUno »

Salve.

Se ho un testo cifrato in des e lo stesso testo non cifrato, posso scoprire la chiave di cifratura?


Grazie,
Matteo
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

ocman
Linux 2.x
Linux 2.x
Messaggi: 239
Iscritto il: gio 31 lug 2008, 18:18
Slackware: ArchLinux
Desktop: xfce
Distribuzione: OpenIndiana

Re: scoprire la chiave di cifratura

Messaggio da ocman »

si è possibile con complessità lineare. se non puoi accedere al link e proprio ti serve ti posso pass. il pdf
http://www.springerlink.com/content/f4dqc393dl778ydn/

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: scoprire la chiave di cifratura

Messaggio da ZeroUno »

Quindi è comunque un brute force mi sembra di aver capito; si può diminuire il numero di combinazioni conoscendo uno o più testi in chiaro e l'equivalente cifrato, ma comunque serve un brute force.
Ho capito bene?
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

ocman
Linux 2.x
Linux 2.x
Messaggi: 239
Iscritto il: gio 31 lug 2008, 18:18
Slackware: ArchLinux
Desktop: xfce
Distribuzione: OpenIndiana

Re: scoprire la chiave di cifratura

Messaggio da ocman »

bruteforce=applicare l'algoritmo tot volte con tot chiavi diverse per ottenere il plaintext. il tuo scopo è diverso
complessità lineare = sui computer di oggi è quasi immediata.
c'è da considerare che la funzione des oggi non è quasi mai applicata singolarmente ma per esempio per strighe maggiori di 64bit si usa spesso il CBC.
se ci pensi comunque la corrispondenza è univoca. esisterà solo una chiave che dato un testo cifrato mi porta al testo in chiaro con l'algoritmo di decifratura.
il problema nel tuo caso è: data una stringa 1 a 64 bit ( testo in chiaro ) e una stringa 2 ( 64bit cifrata ) quale stringa da 56 bit ( la chiave ) applicata al DES porta da 1 a 2 ?
il limite minimo di combinazioni è la lunghezza della chiave. 2^56. studiando la funzione DES però è possibile scendere di molto.

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: scoprire la chiave di cifratura

Messaggio da ZeroUno »

Non ho capito una cosa.
ok, non ho bisogno di bruteforce perchè conosco sia testo in chiaro che relativo criptato.
I dettagli di quale variante di algoritmo des (né della lunghezza della chiave) utilizzi non lo so.

Quello che non ho capito, in pratica, se e dove posso trovare un programma che lo fa?
Il tutto non vorrei che rimanga pura teoria.

Ah, ho un altro dettaglio.
Per la precisione non ho il testo in chiaro e l'equivalente criptato, ma ho il programma che lo cripta e me lo restituisce in base64. Purtroppo il programma è un po' lento ad elaborare (è in java) e vuole il testo come parametro su commandline e non da file.
Questo significa che posso produrre testo criptato arbitrario.

Codice: Seleziona tutto

$ java DesEncrypt "ciao a tutti" 
Orginal  string: ciao a tutti
Crypted string:xxxxxxxxxxxxxx==
Io voglio scoprire la chiave
Ultima modifica di ZeroUno il lun 7 mar 2011, 17:07, modificato 1 volta in totale.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: scoprire la chiave di cifratura

Messaggio da targzeta »

Ma dai sorgenti del programma Java non riesci a capire che chiave usa? Inoltre è un po' bizzarro voler sapere la chiave quando sai già il testo in chiaro :).

Detto questo, ho trovato questo link in cui viene spiegato come utilizzare e configurare Crack. Forse può esserti utile, e forse no :). Dacci un'occhiata.

Emanuele

P.S. Ma se tu gli passi il testo cifrato, lui ti tira fuori il testo in chiaro?
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: scoprire la chiave di cifratura

Messaggio da ZeroUno »

spina ha scritto:Ma dai sorgenti del programma Java non riesci a capire che chiave usa? Inoltre è un po' bizzarro voler sapere la chiave quando sai già il testo in chiaro :).
Se avevo i sorgenti non stavo quì a scrivere.
Io ho questo criptatore al quale gli passo un testo e lui me lo cripta; per questo dico che ho testo in chiaro e testo criptato, per la precisione testo in chiaro arbitrario. Ma ho anche del testo cifrato di cui voglio scoprire il testo in chiaro, e per fare questo ho bisogno della chiave.

john, crack, e tutti gli altri, sono programmi che data una password cifrata tentano di scoprire l'equivalente in chiaro. Mi sembra di capire che vadano più o meno in brute force (tra l'altro le password shadow non sono criptate con algoritmi reversibili)

Io invece non voglio andare di brute force. Una volta scoperta la chiave posso decriptare al volo qualsiasi testo. Possedendo sia del testo in chiaro sia del testo criptato, in teoria la chiave dovrebbe essere svelabile. Come non ne ho idea.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

ocman
Linux 2.x
Linux 2.x
Messaggi: 239
Iscritto il: gio 31 lug 2008, 18:18
Slackware: ArchLinux
Desktop: xfce
Distribuzione: OpenIndiana

Re: scoprire la chiave di cifratura

Messaggio da ocman »

ciao
1.
spina ha detto bene. se è veramente un oggetto standalone java che si appoggia al massimo sulla jdk per qualche libreria allora puoi sempre ottenere il sorgente.
http://java.sun.com/developer/Books/jav ... npack.html
molto probabilmente al suo interno non farà altro che passare la chiave e il parametro in input alle funzioni descritte qui sotto
http://download.oracle.com/javase/6/doc ... tml#Cipher

2.
se vuoi analizzare il comportamento di quell'utlity dall'esterno in un testing di tipo blackbox per costruire un algoritmo che analizzi un certo numero di coppie di testi in chiaro, testi cifrati per ottenerne la relativa chiave simmetrica devi creare una tabella con:
-un numero elevato di testi in chiaro in codifica base64
-tutti i relativi testi cifrati in codifica base64
Dopo aver fatto questo puoi lanciare in parallelo su più righe un algoritmo di cifratura DES che dovrà corrispondere in modo esatto a quello del tuo tool.
Potesti lanciare questo http://www.tonycrypt.com/Crittografia/d3des.zip. Dovrai mettere quella funzione in WHILE e passare in input tutte le chiavi possibili di 56bit che genererai casualmente. Al primo match su qualsiasi riga della tabella avrai trovato la chiave di cifratura.

variabili che rendono il punto numero 1 più agibile: non sai esattamente se quel tuo tool usa CBC, un DES puro, o uno fra i tanti altri metodi di applicare DES a stringhe più lunghe di 64bit; non sai se per creare la chiave viene messo un vettore di inizializzazione generato dal tool stesso in modo random o che è uguale tutte le volte.

3.
vuoi il programma già fatto customizzato per quel DesEncrypt?
http://www.google.com

4.
Des per la parte di decifratura utilizza lo stesso algoritmo di cifratura con piccolissime modifiche ma la chiave deve essere passata in input alla funzione in modo diverso (invertita). quindi no, dando in input il testo cifrato ottieni una cifratura in output che è diversa dal testo originale.

5.
in ogni caso quando avrai trovato la chiave di quel tuo tool dovrai costruire a mano un tool per la decifratura che funzionerà solo per QUEL tool.

6.
come dice spina se quel tool lo usi solo tu avrai per le mani testi cifrati che tu hai generato. altrimenti se è qualcosa di dominio pubblico era meglio dirlo prima magari google ci aiutava.

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: scoprire la chiave di cifratura

Messaggio da 414N »

ocman ha scritto:ciao
1.
spina ha detto bene. se è veramente un oggetto standalone java che si appoggia al massimo sulla jdk per qualche libreria allora puoi sempre ottenere il sorgente.
http://java.sun.com/developer/Books/jav ... npack.html
molto probabilmente al suo interno non farà altro che passare la chiave e il parametro in input alle funzioni descritte qui sotto
http://download.oracle.com/javase/6/doc ... tml#Cipher
Non è così facile, dato che il jar conterrà (molto probabilmente) file .class di bytecode.

ocman
Linux 2.x
Linux 2.x
Messaggi: 239
Iscritto il: gio 31 lug 2008, 18:18
Slackware: ArchLinux
Desktop: xfce
Distribuzione: OpenIndiana

Re: scoprire la chiave di cifratura

Messaggio da ocman »

senz'altro, ma non andrei a discutere oltre su qusto primo punto per due motivi:
- se non ha un minimo di esperienza nella crittografia il secondo punto gli sarà sicuramente più difficile da implementare che andare a 'scavare' nel sorgente java.
- noi 3 di questo tool per ora sappiamo solo i nome, non sappiamo chi e per quale scopo si stato creato e se non esista già una corrispondente parte di decifratura.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: scoprire la chiave di cifratura

Messaggio da targzeta »

In effetti qui c'è un problema che forse 01 non ha considerato. E' vero che può criptare quello che gli pare, però se il programma non ha un gemello per il decriptaggio come facciamo ad essere sicuri che usa sempre la stessa chiave? Non potrebbe ogni volta generare una chiave random?

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
m0rdr3d
Linux 2.x
Linux 2.x
Messaggi: 404
Iscritto il: dom 24 dic 2006, 13:40
Slackware: Slackware64-current
Kernel: 3.4.*
Desktop: KDE 4.8.2

Re: scoprire la chiave di cifratura

Messaggio da m0rdr3d »

Generalmente da un .class si riesce a decompilare il bytecode senza sforzo (i.e. con gli strumenti ufficiali della jdk) con risultati piuttosto interessanti.
Secondo me vale la pena provare.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: scoprire la chiave di cifratura

Messaggio da targzeta »

ZeroUno, mi faresti la codifica della stringa "Emanuele"? Proprio come ci hai fatto vedere con "ciao a tutti".

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: scoprire la chiave di cifratura

Messaggio da ZeroUno »

Emanuele -> "xxxxxxxxxxxxxxxxxxx=="

Dopo vi dò gli aggiornamenti sui progressi fatti.


Ciao
01
Ultima modifica di ZeroUno il lun 7 mar 2011, 17:07, modificato 1 volta in totale.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5441
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: scoprire la chiave di cifratura

Messaggio da ZeroUno »

Ho disassemblato il .class ed è venuto fuori questo

Codice: Seleziona tutto

class Encrypt
{
  Cipher ecipher;
  byte[] salt = { 1, 2, 3, 4, 5, 6, 7, 8 }; // 8 numeri 
  int iterationCount = 10; // un numero 
  public Encrypt() {
    try {
      String temp = "una_stringa";
      KeySpec keySpec = new PBEKeySpec(temp.toCharArray(), this.salt, this.iterationCount);
      SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
      this.ecipher = Cipher.getInstance(key.getAlgorithm());
      AlgorithmParameterSpec paramSpec = new PBEParameterSpec(this.salt, this.iterationCount);
      this.ecipher.init(1, key, paramSpec);
    } catch (Exception e) { }
  }
  public String encrypt(String aString) {
    try {
      byte[] utf8 = aString.getBytes("UTF8");
      byte[] enc = this.ecipher.doFinal(utf8);
      return new BASE64Encoder().encode(enc);
    } catch (Exception e) { }
    return null;
  }
}
ok, ho anche la classe per decriptare ma volevo rimediare la chiave e l'algoritmo da passare a openssl.

con questi parametri (che non sono gli originali), Emanuele viene criptato "8Mw36Qwue5+PB3HyoBzFNw=="

Per ora mi voglio fermare ad usare openssl per ottenere la stessa criptazione di questo algoritmo.

Con un po' di debug:


Orginal string: pippo
Cipher.getIV() in base64 : aM+DbnjAprE=
Cipher.getIV() in string : <una stringa non stampabile>
Cipher.getIV() original (byte[]) : 104 -49 -125 110 120 -64 -90 -79
Cipher.getBlockSize() : 8
Cipher.getAlgorithm(): PBEWithMD5AndDES
Crypted string: vC96tnI05Vw=


Sto cercando quali parametri di openssl usare, ma per chiave, posso usare l'output di getIV() ?
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Rispondi