PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie sicher ist "Web Cipher"



Smilor
20.07.2002, 12:18
Hi!
Es geht um das hier: http://www.angelfire.com/yt/jmyers/get/dev/web_cipher/cipher.shtml

Dort kann man eine html Seite mit Javascript verschlüsseln, welche nach Eingabe des richtigen Passwortes entschlüsselt angezeigt wird.
Mich würde dabei interessieren, wie sicher das Verfahren ist. Von Schlüssellänge steht da nix.
Kann es sein, dass das nur eine XOR Verschlüsselung ist?
Gibt es eigentlich Blowfish-JavaScript Implementierungen?

cipher.js


/*
* Written by Joseph K. Myers on 2001/05/18
* e_mayilme@hotmail.com; http://www.angelfire.com/yt/jmyers/
*/
var cipher_block_size=64, encoding_buffer=1024;
function b0f(c) {
return c < 16 ? '0' + c.toString(16) : c.toString(16);
}
function bff(c) {
return parseInt(c, 16);
}
function salt(s) {
var n = 0;
for (var i=0; i<s.length; i++) n += i&s.charCodeAt(i);
return b0f(n%256);
}
function encrypt(s,k) {
if (s.length > cipher_block_size) {
var m=parseInt(s.length/cipher_block_size), t=Math.round(m/2)*cipher_block_size;
return encrypt(s.substr(0, t), k) + encrypt(s.substr(t), k);
}
var r=parseInt(Math.random()*256), o=b0f(r), i;
for (i=0; i<s.length; i++) {
o += b0f(s.charCodeAt(i)^r^k.charCodeAt(i%k.length));
}
return o;
}
function decrypt(s,k) {
var dbs = (cipher_block_size+1)*2;
if (s.length > dbs) {
var m=parseInt(s.length/dbs), t=Math.round(m/2)*dbs;
return decrypt(s.substr(0, t), k) + decrypt(s.substr(t), k);
}
var n=bff(s.substr(0,2)), o='';
for (var i=2; i<s.length; i+=2) {
o += String.fromCharCode(bff(s.substr(i,2))^n^k.charCod eAt((i-2)/2%k.length));
}
return o;
}
function encipher(f) {
var s=f.stream.value, k=salt(f.key.value), r=k, b=encoding_buffer,
p=0, n=Math.floor(s.length/b)+1;
while (n > p++) {
self.status = 'Encrypting block ' + p + '/' + n;
r += encrypt(s.substr((p-1)*b, b), f.key.value);
}
f.stream.value = r;
self.status = 'Done';
}
function decipher(f) {
var s=f.stream.value.substr(2), k=salt(f.key.value), r='',
b=2*(encoding_buffer+encoding_buffer/cipher_block_size), p=0, n=Math.floor(s.length/b)+1;
if (k != f.stream.value.substr(0, 2)) {
if (!confirm('The key is probably incorrect.\nContinue decryption?'))
return;
}
while (p++ < n) {
self.status = 'Decrypting block ' + p + '/' + n;
r += decrypt(s.substr((p-1)*b, b), f.key.value);
}
f.stream.value = r;
return self.status = 'Done';
}

GooRoo
24.07.2002, 16:41
Hmm...eine Blowfish Implementierung in JS gibt es meines Wissens nach nicht - viel kann ich dir dazu allerdings nicht sagen, aber hier (http://projannet.port5.com/) gibt es ein nettes Projekt, dass sich mit JS-Verschlüsselung von Webdokumenten auseinander setzt.

Romanes Eunt Domus
GooRoo

Smilor
24.07.2002, 17:08
Mag sein, aber ich habe eine AES Implementierung gefunden. Aber leider ist die so langsam, dass man damit nicht arbeiten kann (ca. 10 sec. für eine normale HTML Seite).

GooRoo
24.07.2002, 21:12
Oh fein...gibts nen Link dazu?!

Smilor
25.07.2002, 14:58
Klar, hier:
http://www-cse.ucsd.edu/~fritz/rijndael.html
Wenn du die Geschwindigkeit testen möchtest, hier noch ein e HTML Seite dazu.

GooRoo
25.07.2002, 17:09
Cool! Danke!! Hmmm...hier zeigt sich mal wieder:

In der Theorie ist das alles ziemlich clever, aber für die Praxis leider nicht zu gebrauchen...oder...man hat Wunder was für ein Trümmer von Vektorrechner Cluster zuhause rumstehen um seine Webseiten zu verschlüsseln ;-)

In Echtzeit leider kaum möglich...Schade!