Verschlüsselungsspezis

#7510358
Lesenswert?

Wenn die Sequenz fix ist, ahme sie nach.

Wenn sie nicht fix ist und der Programmierer nicht vollkommen behindert war, reicht ein Sample nicht aus, und selbst 1 Million Samples reichen ziemlich sicher nicht zum Erraten eines Challenge-Response-Verfahrens und seiner Parameter aus.

Was sind das denn für hochgeheime Geräte? Vielleicht gibt es in den unendlichen Weiten der allwissenden Müllhalde schon Infos dazu?!

OP #7510364
Lesenswert?

Ich habe leider z.Zt. nur den Mitschnitt einer einzelnen Sitzung und war eigentlich auf der Suche nach den niedrig hängenden Früchten: es gibt ja Leute, die durch bloßes Hingucken sehen, dass hier offensichtlich was addiert, verodert, invertiert wurde. Dass ein einzelnes Sample für komplexere Berechnungen nicht reicht ist mir schon klar. Aber die erwarte ich eigentlich gar nicht ...

OP #7510384
Lesenswert?

Bisher bin ich davon ausgegangen, das da kein Schlüssel wie beim challenge-response verfahren involviert ist. Eher dachte ich, dass das eine für uCs schnelle und ressourcensparende Berechnung ist. Bei ähnlich gelagerten Problemen war das nur eine Addition der challengebytes mit ignoriertem Übertrag, manchmal nach vorherigem Invertieren oder nur byteweises Verodern.

Also eher Authentifizierung durch Obskurität ...

Beitrag #7510392 wurde von einem Moderator gelöscht.
OP #7510477
Lesenswert?

Rüdiger,

besten Dank für die Links. Speziell im letzten Link wurde ja genau das bestätigt, was auch meine bisherige Erfahrung war: Shiften, rotieren etc. sind bei derartigen Problemen absolut üblich und mit Phantasie, Intuition und Erfahrung kommt man da auch zu Ergebnissen.

Die Kollegen hier, die sofort auf dem "... geht nicht ..." Trip waren, haben garantiert hier keine hands-on Erfahrung. Dass es Möglichkeiten zur Authentifizierung gibt, an denen man sich die Zähne ausbeisst weiß ich selber. Aber in den wenigsten Fällen geht es um Fort Knox oder den Großrechner vom CIA. Jede Authentifizierung muss in einem vernünftigen Verhältnis zur vorhandenen Rechenkapazität und Speicherplatz stehen und wartbar sein. Entwickler sind auch nur Menschen und wie gut Abschreckung durch die niedrige Frustrationstoleranz von Angreifern funktioniert, sehen wir in diesem thread ...

#7510489
Lesenswert?

Jöt Z. schrieb:

Die Kollegen hier, die sofort auf dem "... geht nicht ..." Trip waren, haben garantiert hier keine hands-on Erfahrung.

Du hast offensichtlich keine Ahnung von der Thematik.

Beispiel wie man so einen Challenge-Response mit minimalem Aufwand bauen könnte wäre TEA oder XTEA. Die brauchen jeweils unter 10 Zeilen Code für die Implementierung und keine zusätzlichen Daten-Tabellen. Die Schlüssellänge ist 128 Bits. Also Challenge damit verschlüsseln, vom Ergebnis 3 Bytes auswählen, fertig. Der 128 Bit Schlüssel bestimmt das Ergebnis. Viel Spaß beim Erraten des Schlüssels anhand eines Beispiels.

#7510678
Lesenswert?

Moin,

Dieter S. schrieb:

Die Kollegen hier, die sofort auf dem "... geht nicht ..." Trip waren, haben garantiert hier keine hands-on Erfahrung.

Du hast offensichtlich keine Ahnung von der Thematik.

+1

Mal ein simples Beispiel, warum dein Unterfangen anhand der Datenbasis etwas - hm - ambitioniert ist:

request (x) : 2 response (y) : 4

Da fallen mir aus dem Stand diverse Funktionen/Algorithmen ein, z.B: y=x+2 y=x*2 y=x^2 y=2^x y=(3^x) mod 5 ... So, und welcher ist jetzt "der Richtige"?

Gruss WK

Beitrag #7510691 wurde von einem Moderator gelöscht.
#7511247
Lesenswert?

Hallo, 7byte challange ist meistens DES Verschluesselung. Wird noch sehr selten genutzt.

Hier ein Codebeispiel, sei es für challange und response Im Prinzip aus einer entropy, im konkreten Fall mehrere Durchläufe von den unteren Bits des Timers bei WDT Timeout, also Laufzeitaenderungen beim WDT sowie Temeperaturwerte (8bit überlauf des Timers) welcher Temperaturabhängig ist.

Response verwendet den 56bit encryption key und wendet ihn auf ein 64bit UID an , hier triple des. Der checksum entscheidet welcher mittlere Key bei triple DES verwendet wird, es stehen 10 zur Auswahl. Das Resultat wird auf 7byte reduziert und dies ist der Key für den 112bit des_hash, welcher aud dem 8byte PID generiert wird. Aus diesem Hash werden 3bytes ausgesucht, zwei Flags invertieren oder ändern MSB/LSB und dann wird noch ein xor mit einem 16bit Wert gemacht. Diese generierte Zahl wird zurüchgeschickt und im Empfänger wird sei es das Timing sowie das Resultat verifiziert und der Result des Ergebnis mit der xor Funktion gecheckt.

Es gibt aber zig Variationen, wie auch einfache lookuptable mit 32 byte und es wird einfach die Summe eines irgendein 8bit checksum bei jedem Zeichen susammengezahlt und dies mit der summe der einzelnen Lookups multipliziert und zusammengezahlt. Bit6 heisst, Wert +64 und bit 7 heisst "resultat ist 0-value" . Bei bit 5 wird der Tabellenindex von hinten gelesen. Resultat wird dann mit je nach checksum 6 unterschiedlichen Fixwerten verodert. Dies z.B. bei einem 6pin PIC mit einem sehr kleinen Speicher und eeprom welches auch Features flags sowie Serialnummer beinhaltet und pin/puk/... .

1
char*
2
challenge() {  // return 7byte 
3
  byte i=0,j,k; word t;
4
  j=4; memcpy(tmp+i,&entropy,j);  i+=j;
5
  eeread(EE_CNT,&t,2); t++; eewrite(EE_CNT,&t,2);
6
  j=2; memcpy(tmp+i,&t,j);  i+=j;
7
  eeread(EE_LFR,&t,2); t=lfr(t); eewrite(EE_CNT,&t,2);
8
  j=2; memcpy(tmp+i,&t,j);  i+=j;
9
  des_enc(tmp,tmp,DES_KEY);
10
  for(k=i=7,j=tmp[i];i--;k^=j)  // some randomizing
11
    j+=tmp[j],tmp[j]^=k;
12
    tmp[7]=0;
13
  return tmp;
14
}
15

16
byte
17
xor(void*out, void*in, byte size) { // return 0 if all resulting bits are zero
18
  byte i;
19
  for(i=0;size--;i|=out[size]) out[size]^=in[size];
20
  return i;
21
}
22

23
void
24
tdes(void*out, void*in, void*key1, void*key2, void*key3) {
25
  des_enc(out,in,key1);
26
  des_dec(out,out,key2);
27
  des_enc(out,out,key3);
28
}
29

30
void
31
response(char*dat) {  // from 7byte key challange it return 3byte response
32
  byte t,k,i,j; dword r=0,ret=0;
33
  des_key(key,dat);
34
  for(k=8,i=0,j=7;k--; j^=i) i+=key[k]; k>>=3; if(k>=10) k-=10; k<<=3; // checksum return value from 0-9  multiplied by 8 for indexing
35
  memcpy_P(tmp+16,P_UID,8);
36
  memcpy_P(tmp+8,P_KEYS+k,8);
37
  tdes(tmp,tmp+16,key,tmp+8,key);
38
  xor(tmp,tmp+16,8);
39
  for(k=i=7,j=tmp[i];i--;k^=j)      // some randomizing
40
    j+=tmp[i],tmp[i]^=k;
41
  for(j=i=0;i<7;i++)            // shift
42
    j=!!tmp[i]&0x80, tmp[i]<<=1, tmp[i]+=j;
43
  des_key(key,tmp);
44
  memcpy_P(tmp+8,P_PID,8);
45
  des_enc(tmp+16,tmp+8,key); xor(tmp+16,tmp+8,8);
46
  *tmp++;
47
  des_key(key,tmp);
48
  des_enc(tmp+24,tmp+8,key); xor(tmp+24,tmp+8,8);
49
  t=tmp[13]; i=t>>2; for(j=24;j--;r+=bit(tmp,128+i++)) r<<=1; 
50
  if(t&0x40) r^=0xfff; if(r&0x80) 
51
  for(j=24;j--;r>>=1) t=!!r&1,res<<=1,res+=t; else res=r;
52
  memcpy(&r,tmp+11,2); res^=r; r=0;
53
#ifdef EE_FLAGS 
54
  eeread(EE_FLAGS,&r+2,1); r&=0x550000; res^=r;
55
#endif
56
  return res;
57
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren