Avatar billede horus Nybegynder
24. januar 2001 - 21:05 Der er 13 kommentarer og
1 løsning

Applets - sikkerhed, decompilering m.m.

Hejsa,

Jeg er ikke særlig fortrolig med Java Applets, men har lige et par spørgsmål.

Jeg ved at man kan decompilere Java Applets og se sourcekoden bag, hvilket jo gør det umuligt at \"sikre\" sin kode mod tyveri og \"spionage\" :-)

MEN jeg har bemærket at flere netbanker benytter JAVA Applets.... Er det så sikkert ? Jeg mener vil man ikke kunne ændre disse applets og på den måde få uautoriseret adgang til systemet - IKKE fordi jeg er ude på noget snavs her, men bankerne og andre må vel foretage verificering af brugernavne og password serverside og ikke igennem appleten eller hvad ???

Giver det mening eller lyder jeg totalt hjernelam hér ??? :-)

Horus


Avatar billede stigc Nybegynder
24. januar 2001 - 21:12 #1
koden verificers selvfølgelig ikke på clienten!
APPletene er vel bare med til at give en bedre grænseflade til brugeren. Desuden må der bruge en sikker forbindelsen mellem appleten og serveren så data ikke kan blive fanget undervejs....


En god metode til at sikre et kodeord er at bruge md5 metoden. En funktion som kan ligge i javascript på klienten, osm laver en teskt om til en 32 byte kode!

Avatar billede horus Nybegynder
24. januar 2001 - 21:21 #2
Ved du hvor jeg kan finde ud af mere om md5 metoden ???

Hvordan vil du så tro at de verificerer kodeord o.a.

Horus
Avatar billede stigc Nybegynder
24. januar 2001 - 21:43 #3
Kodeordet sendes krypteret til klienten, hvor den afkrypteres og sammeligenes med deres database!

MD5 er ikke en egenlig kryptering. Det er noget man kalder \"hashing\". En hash funktion tager en input tekst og laver det om til en kode. Md5 laver et 32 bytes streng, udfra en hvilken som helst tekst (stor som lille).

Denne kode kan sagtens sendes over en ikke krypteret linie, da den er nærmest umulig at vende om. Altså man kan ikke finde det brugeren har indtastet, ved at kigge på den 32 bytes lange streng.

Jeg finder lige javascript MD5 til dig:

Avatar billede stigc Nybegynder
24. januar 2001 - 21:44 #4
Avatar billede stigc Nybegynder
24. januar 2001 - 21:45 #5
<script >

  /* to convert strings to a list of ascii values */
var sAscii = \" !\\\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\"
var sAscii = sAscii + \"[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\";

/* convert integer to hex string */
var sHex = \"0123456789ABCDEF\";
function hex(i) {
  h = \"\";
  for(j = 0; j <= 3; j++) {
    h += sHex.charAt((i >> (j * 8 + 4)) & 0x0F) +
        sHex.charAt((i >> (j * 8)) & 0x0F);
  }
  return h;
}

/* add, handling overflows correctly */
function add(x, y) {
  return ((x&0x7FFFFFFF) + (y&0x7FFFFFFF)) ^ (x&0x80000000) ^
(y&0x80000000);
}

/* MD5 rounds functions */
function R1(A, B, C, D, X, S, T) {
  q = add(add(A, (B & C) | (~B & D)), add(X, T));
  return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

function R2(A, B, C, D, X, S, T) {
  q = add(add(A, (B & D) | (C & ~D)), add(X, T));
  return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

function R3(A, B, C, D, X, S, T) {
  q = add(add(A, B ^ C ^ D), add(X, T));
  return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

function R4(A, B, C, D, X, S, T) {
  q = add(add(A, C ^ (B | ~D)), add(X, T));
  return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

/* main entry point */
function calcMD5(sInp) {

  /* Calculate length in machine words, including padding */
  wLen = (((sInp.length + 8) >> 6) + 1) << 4;
  var X = new Array(wLen);

  /* Convert string to array of words */
  j = 4;
  for (i = 0; (i * 4) < sInp.length; i++) {
    X[i] = 0;
    for (j = 0; (j < 4) && ((j + i * 4) < sInp.length); j++) {
      X[i] += (sAscii.indexOf(sInp.charAt((i * 4) + j)) + 32) << (j * 8);
    }
  }

  /* Append padding bits and length */
  if (j == 4) {
    X[i++] = 0x80;
  }
  else {
    X[i - 1] += 0x80 << (j * 8);
  }
  for(; i < wLen; i++) { X[i] = 0; }
  X[wLen - 2] = sInp.length * 8;

  /* hard-coded initial values */
  a = 0x67452301;
  b = 0xefcdab89;
  c = 0x98badcfe;
  d = 0x10325476;

  /* Process each 16-word block in turn */
  for (i = 0; i < wLen; i += 16) {
    aO = a;
    bO = b;
    cO = c;
    dO = d;

    a = R1(a, b, c, d, X[i+ 0], 7 , 0xd76aa478);
    d = R1(d, a, b, c, X[i+ 1], 12, 0xe8c7b756);
    c = R1(c, d, a, b, X[i+ 2], 17, 0x242070db);
    b = R1(b, c, d, a, X[i+ 3], 22, 0xc1bdceee);
    a = R1(a, b, c, d, X[i+ 4], 7 , 0xf57c0faf);
    d = R1(d, a, b, c, X[i+ 5], 12, 0x4787c62a);
    c = R1(c, d, a, b, X[i+ 6], 17, 0xa8304613);
    b = R1(b, c, d, a, X[i+ 7], 22, 0xfd469501);
    a = R1(a, b, c, d, X[i+ 8], 7 , 0x698098d8);
    d = R1(d, a, b, c, X[i+ 9], 12, 0x8b44f7af);
    c = R1(c, d, a, b, X[i+10], 17, 0xffff5bb1);
    b = R1(b, c, d, a, X[i+11], 22, 0x895cd7be);
    a = R1(a, b, c, d, X[i+12], 7 , 0x6b901122);
    d = R1(d, a, b, c, X[i+13], 12, 0xfd987193);
    c = R1(c, d, a, b, X[i+14], 17, 0xa679438e);
    b = R1(b, c, d, a, X[i+15], 22, 0x49b40821);

    a = R2(a, b, c, d, X[i+ 1], 5 , 0xf61e2562);
    d = R2(d, a, b, c, X[i+ 6], 9 , 0xc040b340);
    c = R2(c, d, a, b, X[i+11], 14, 0x265e5a51);
    b = R2(b, c, d, a, X[i+ 0], 20, 0xe9b6c7aa);
    a = R2(a, b, c, d, X[i+ 5], 5 , 0xd62f105d);
    d = R2(d, a, b, c, X[i+10], 9 ,  0x2441453);
    c = R2(c, d, a, b, X[i+15], 14, 0xd8a1e681);
    b = R2(b, c, d, a, X[i+ 4], 20, 0xe7d3fbc8);
    a = R2(a, b, c, d, X[i+ 9], 5 , 0x21e1cde6);
    d = R2(d, a, b, c, X[i+14], 9 , 0xc33707d6);
    c = R2(c, d, a, b, X[i+ 3], 14, 0xf4d50d87);
    b = R2(b, c, d, a, X[i+ 8], 20, 0x455a14ed);
    a = R2(a, b, c, d, X[i+13], 5 , 0xa9e3e905);
    d = R2(d, a, b, c, X[i+ 2], 9 , 0xfcefa3f8);
    c = R2(c, d, a, b, X[i+ 7], 14, 0x676f02d9);
    b = R2(b, c, d, a, X[i+12], 20, 0x8d2a4c8a);

    a = R3(a, b, c, d, X[i+ 5], 4 , 0xfffa3942);
    d = R3(d, a, b, c, X[i+ 8], 11, 0x8771f681);
    c = R3(c, d, a, b, X[i+11], 16, 0x6d9d6122);
    b = R3(b, c, d, a, X[i+14], 23, 0xfde5380c);
    a = R3(a, b, c, d, X[i+ 1], 4 , 0xa4beea44);
    d = R3(d, a, b, c, X[i+ 4], 11, 0x4bdecfa9);
    c = R3(c, d, a, b, X[i+ 7], 16, 0xf6bb4b60);
    b = R3(b, c, d, a, X[i+10], 23, 0xbebfbc70);
    a = R3(a, b, c, d, X[i+13], 4 , 0x289b7ec6);
    d = R3(d, a, b, c, X[i+ 0], 11, 0xeaa127fa);
    c = R3(c, d, a, b, X[i+ 3], 16, 0xd4ef3085);
    b = R3(b, c, d, a, X[i+ 6], 23,  0x4881d05);
    a = R3(a, b, c, d, X[i+ 9], 4 , 0xd9d4d039);
    d = R3(d, a, b, c, X[i+12], 11, 0xe6db99e5);
    c = R3(c, d, a, b, X[i+15], 16, 0x1fa27cf8);
    b = R3(b, c, d, a, X[i+ 2], 23, 0xc4ac5665);

    a = R4(a, b, c, d, X[i+ 0], 6 , 0xf4292244);
    d = R4(d, a, b, c, X[i+ 7], 10, 0x432aff97);
    c = R4(c, d, a, b, X[i+14], 15, 0xab9423a7);
    b = R4(b, c, d, a, X[i+ 5], 21, 0xfc93a039);
    a = R4(a, b, c, d, X[i+12], 6 , 0x655b59c3);
    d = R4(d, a, b, c, X[i+ 3], 10, 0x8f0ccc92);
    c = R4(c, d, a, b, X[i+10], 15, 0xffeff47d);
    b = R4(b, c, d, a, X[i+ 1], 21, 0x85845dd1);
    a = R4(a, b, c, d, X[i+ 8], 6 , 0x6fa87e4f);
    d = R4(d, a, b, c, X[i+15], 10, 0xfe2ce6e0);
    c = R4(c, d, a, b, X[i+ 6], 15, 0xa3014314);
    b = R4(b, c, d, a, X[i+13], 21, 0x4e0811a1);
    a = R4(a, b, c, d, X[i+ 4], 6 , 0xf7537e82);
    d = R4(d, a, b, c, X[i+11], 10, 0xbd3af235);
    c = R4(c, d, a, b, X[i+ 2], 15, 0x2ad7d2bb);
    b = R4(b, c, d, a, X[i+ 9], 21, 0xeb86d391);

    a = add(a, aO);
    b = add(b, bO);
    c = add(c, cO);
    d = add(d, dO);
  }
  var k = hex(a) + hex(b) + hex(c) + hex(d);
  return k.toLowerCase();
}

</script>
Avatar billede horus Nybegynder
24. januar 2001 - 21:49 #6
Med klienten mener du banken eller hvad ? Mener du så at appletten krypterer brugerens kodeord med f.eks. MD5 og så sender det til banken som er i stand til at dekryptere MD5 32 byte strengen til det reele password ???

Sorry hvis jeg lyder imbicil :-) Hvis jeg finder hoved og hale på dette her, skal du nok få dine point :-)

Horus

P.S.

Tak for linket - vil læse det igennem ved lejlighed... men det ser spændende ud...
Avatar billede stigc Nybegynder
24. januar 2001 - 22:04 #7
klienten er brugerens computer. Serveren er bankens computer!

Ja appleten kunne godt lave md5 kodningen, for derefter at sende det til banken. Dermed har brugers kodeord kun været på burgerens computer, og kan derfor ikke fanges og misbruges af andre...

Avatar billede horus Nybegynder
24. januar 2001 - 23:56 #8
OK - Lidt klogere er jeg da blevet :-)

Som det sidste - du kan vil ikke vise mig hen til et eksempel på en applet både server og klient del der tjekker f.eks. et password ? Så er pointene dine...

Horus
Avatar billede stigc Nybegynder
24. januar 2001 - 23:57 #9
Det er lidt svært:

Serveren kan være mange ting:

cgi, asp, php, jsp..... osv.
Avatar billede horus Nybegynder
25. januar 2001 - 00:06 #10
OK det kan jeg godt se.... men bare et eksempel på klient delen - og gerne server delen - det er ligemeget om det er asp, jsp eller whatever :-)

Avatar billede billeschou Nybegynder
25. januar 2001 - 12:35 #11
<snip>
var sAscii = \" !\\\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\"
</snip>

Øøøøh... er der ikke noget galt med antallet af \" i den linie?
Avatar billede theill Nybegynder
25. januar 2001 - 17:31 #12
Nej, billeschou. Det andet \" er selve tegnet \". Man angiver \"specielle\" (escape) tegn ved at skrive en backslash (\\) foran tegnet selv.
Avatar billede billeschou Nybegynder
26. januar 2001 - 08:44 #13
det er jo også rigtigt... *slår lige mig selv i panden*
Avatar billede horus Nybegynder
26. januar 2001 - 23:20 #14
stigc eller andre,

Jeg ville egentlig frygteligt gerne se et eller andet eksempel på en applet hvorigennem man sender password eller lign.

Du skal nok få dine point stig, men som sagt, så vil et eks. være rart...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester