bcpowmod() für javascript ?

  • gibts hier mathe-genies ?


    Ich hab in php den "Anfang" einer Verschlüsselung (eigl erstmal "Key-exchange") geschrieben.
    Da gabs in php erstmal das Problem mit großen Integern.
    Konnte ich dann aber durch bcpowmod() lösen.


    Jetzt muss ich aber genau die gleiche Behandlung in Javascript nutzen können.
    bcpowmod() gibts da aber nicht. Und Math.pow hat auch wieder Probleme mit großen Integern -.-, garnicht zu reden von modulus (%).


    Gibts hier evtl ein Genie welches Functions für pow und mod schreiben kann, ohne vordefinierte functions zu verwenden?

  • Also powmod ist (denke ich) geklärt: mir hat ein Freund geholfen:


    PHP
    private static function powmod($quotient,$x,$remainder){
            $temp = $quotient * fmod($quotient,$remainder);
            for($i=1;$i<$x-1;$i++){
                $temp = $quotient * fmod($temp,$remainder);
            }
            return fmod($temp,$remainder);
        }


    Jetzt bin ich soweit, dass:
    - client per JS gemeinsame [public base] und [public modulus] erstellt
    - client seinen [private key] erstellt und [public key] errechnet
    - client seinen [public key], [public base] und [public modulus] zu server sendet
    - server daten empfängt
    - server seinen [private key] erstellt und anhand der [public base] und [public modulus] seinen [public key] erstellt
    - server dem client mit seinem [public key] antwortet
    - beide ihren [secret key] errechnen


    jetzt sitze ich gerade an der Verschlüsselung. Wollte es mit AES verschlüsseln, aber irgentwie bekomme ich PHP und JS nicht "zusammen".
    PHP: Mcrypt (http://www.php.net/manual/de/mcrypt.examples.php)
    JS: Crypto-JS (http://code.google.com/p/crypto-js/)


    Wenn ich aber in JS mit AES verschlüssele, dann kann PHP es nicht entschlüsseln. Ich muss wohl beide auf die "gleichen Werte" setzen, weiß aber nicht wie.
    Weiß da jemand bescheid?

  • Da das Thema momentan "aktuell geworden ist" ....


    Ich weiß wohl immer noch nicht genug, aber war erstaunt über was ich gerade gelesen hab.
    Auf das Thema "PFS (Perfect Forward Secrecy)" hat mich gerade The Scout gebracht.
    Was steckt dahinter: http://de.wikipedia.org/wiki/D…n-Schl%C3%BCsselaustausch
    (und http://www.heise.de/security/a…ward-Secrecy-1923800.html)


    Und ich dachte WTF! Ich bin davon ausgegangen, dass bei SSL(also den ganzen Zertifikats-Kram) diese Methode genutzt wird!
    Nu hatte ich mich mal hingesetzt und das hier (oben) besprochene Script geschrieben, aber dann liegen lassen, weil ich dachte "das machste eh nich besser".
    Jetzt lese ich, dass die "Alice und Bob"-Geschichte so gut wie nicht genutzt wird. Stattdessen werden "geheime"-Schlüssel übers Netz geschickt!


    Das bringt mich wieder dazu die Sache aufzurollen.
    Die momentan wichtigste Aufgabe: mit dieser Methode Schlüssel generieren (oder besser gesagt mit Werten rechnen), die groß genug sind:

    Zitat von wiki


    In der tatsächlichen Anwendung werden Zahlen mit mehreren hundert Stellen benutzt.

  • Nee, das ist leider immer noch nicht selbsverständlich :(
    Was ich besonders "spaßig" finde: Es wird auch immer noch im großen Maßstab die unsichere Schlüsselübermittlungsmethode RC4 genutzt. Diese gilt eigentlich als on-the-fly knackbar und es ist eigentlich offiziell empfohlen, die unterstützung ab Anfang 2014 zu unterbinden.


    Wenn man aber nun lustigerweise RC4 in den Browsern abschaltet (Bsp: FF
    - "about:config" in die URL Leiste eingeben, ohne Gänsefüßchen
    - nach "RC4" suchen
    - alles doppelklicken, damit es bool(false) wird), dann kann man zB keine Videos auf Youtube mehr gucken :)


    Andere Seiten benutzen sichere Varianten wie Diffie-Hellmann as Fallback NACH RC4.


    Andere nutzen gar nicht erst PFS...


    Und was die "mehreren hundert Stellen" angeht: Es sollten MINDESTENS 1024Bit = 128 Stellen sein. Es wird aber zT sogar nur 512Bit genutzt -_-

  • Mir viel gestern noch was auf: diesen Ablauf/Keyexchange/ect kann man nicht mit PHP/JS lösen.
    Denn per ManInTheMiddle kann ja theoretisch das JS verändert werden,
    und damit ist der PrivateKey nicht mehr sicher, weil der ja in ner var steckt -.-

  • Hae?
    Man in the middle lesen doch nur den Traffic mit, der Private Key wird aber beim Dieffie-... nie losgeschickt?!


    also die Drei Zahlen am Anfang koennten manipuliert werden, das ist aber bei nativem SSL Diffie Hellmann genau so, wenn denn bereits ein man in the middle in der Leitung ist.


    Also muesstest du quasi eine Pruefsumme vereinbaren, welche jeweils lokal im JS und PHP verankert ist, und dann gucken, ob mit der Pruefregel vereinbare Zahlen eingegegangen sind.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!