Kann man RSA ohne Bruteforce knacken?

...komplette Frage anzeigen

4 Antworten

Wäre der PublicKey aus dem PrivateKey errechenbar oder umgekehrt, dann wäre das Verfahren vollständig gebrochen und nicht mehr einsatzfähig. Im Endeffekt würde es bedeuten, du hättest eine schnelles Faktorisierungsverfahren gefunden.

Ist der Schlüssel kurz genug, dann kannst Du Bruteforcen bzw. überschaubar schnell faktorisieren, weil die Komplexität zu niedrig ist.

Achja, wenn Du Dir im Bereich Verschlüsselung etwas zusammenbastelst, wisse besser exakt, was Du tust, oder Du wirst vermutlich eine Schwachstelle im Gesamtverfahren fabrizieren. Das ist im Übrigen auch das Größte Risiko bei RSA: Eine fehlerhafte Implementierung, die die Komplexität herabsetzt und somit das Verfahren kompromittiert.

Erstmal danke für Deine Antwort :)

Wie gesagt ich wollte erstmal PHP lernen und auf Verschlüsselung bisschen mehr eingehen ... Ich war mir nur nicht sicher, weil ich es wie bereits erwähnt irgendwo mal gelesen habe (dachte ich jedenfalls), dass man mit PublicKeys den PrivateKey sehr schwer aber möglich berechnen kann(nicht nur theoretisch). Und das mit "zusammenbasteln" wie genau darf ich das verstehen :D

Ich habe im Prinzip immer 1 Chat der aus 2 Dateien besteht.

user1 zu user2

user2 zu user1

und wenn ich von user1 zu user2 etwas sende wird in beide files mit Hilfe des PublicKeys die Nachricht geschrieben, sodass nur der User mit dem PrivateKey diese wieder entschlüsseln kann. Und den PrivateKey(in der KeyFile) habe ich hald zusätzlich noch mit AES gesichert, dass auch ich als Admin das Passwort des Benutzers benötige.

Wäre denn das zu viel oder wäre es sicher?

Ich bin noch in der Lernphase und nehme sehr gerne Tipps von besseren an :D

0
@xIXxDanixXIx

Okay, schon klar.

Die Gefahr bei Verschlüsselung ist einfach, daß eine kleine Unbedachtheit zu schwere Fehlern führen kann, bzw. zum Versagen der Sicherheit. Rein mathematisch ist RSA nicht sonderlich schwer. Die Implementierung auch nicht, es sei denn, Du machst dabei etwas falsch (schlechter PRNG etc.). Deswegen sollte man das fertig nutzen.

Wenn Du Verfahren kombinierst, dann kann das auch ganz schnell völlig unerwartete Fehlerquellen produzieren, sodaß die vermeintlich sicherere Kombination schlechter als jedes der beiden Einzelverfahren ist. Darauf bezog ich mich mit dem 'basteln'.

So, also Pub/Priv-Verfahren: Der Sender nutzt immer den PublicKey des Empfängers zum Verschlüsseln, sodaß nur dieser mit seinem PrivateKey entschlüsseln kann. Ich verstehe nicht, wieso Du zwei Dateien verwendest.

Den privaten Schlüssel mit symmetrischer Verschlüsselung zu sichern ist sinnvoll, allerdings sollte der Schlüssel hierfür stark sein. Wenn Du ein Passwort nutzt, dann solltest Du vermutlich eine Key-Derivation durchführen, da Passworte sehr niedrige Entropie aufweisen und nicht als Schlüssel taugen.

Während der Übungsphase etc. ist der Ansatz den Du nutzt (Einfaches Hashing - gesalzen?) auch erst einmal okay.

Worüber Du Dir Gedanken machen mußt:

Wo kommt das Passwort her? Also wie übermittelt (z.B.) der Nutzer das Passwort? Es nutzt Dir nichts, wenn Du Dir Mühe gibst, aber das Passwort anderenorts abgegriffen werden kann. Das wäre auch wieder ein Aspekt zum Thema: Sicherheit des Gesamtverfahrens verstehen und beachten.

Hoffe ich konnte ein wenig helfen.

0
@KarlRanseierIII

Also das mit den 2 Files ist eigentlich deswegen, da es 1. besser zum einlesen ist mit file_get_contents und 2. da man seinen eigenen Chat leeren können sollte. Und ja ich weiß... ich könnte es eigentlich auch über eine Datenbank machen... aber das hat irgendwie nicht funktioniert...

Ich starte den Server (derzeit eben nur fürs Testen) mom. über einen USB Stick, also dass ich mobil überall bisschen besser dran rumbasteln kann und access hat auch nicht direkt geklappt und ich weiß nicht wie ich auf einem USB eine SQL Datenbank installieren kann also sozusagen zb mySQL portable mache.

Das reine Passwort speichere ich in einer PHP Session zwischen um damit eben zb die Chats zu entschlüsseln. Also ich versuche es soweit wie möglich Serverseitig zu machen.

Dann hast du noch geschrieben, dass der AES Schlüssel stark sein sollte, also ich grunde verwende ich einen md5 hash als Schlüssel hierfür. zB so: $key = md5("slkdfjlskdfo87sdofjlsdkf_".$password); So wäre das Passwort 1. gehashed und 2. wird es in den meisten online "decrypter" nicht direkt gefunden.

Ich bin natürlich wieder gerne offen für Verbesserungen, falls es dafür bessere Methoden gibt.

Und ich finde es übrigends toll, dass sich jemand auch für die Anfänger so stark einsetzt und sich die Zeit dafür nimmt :D

LG Dani

0
@xIXxDanixXIx

Also ganz allgemein möchte ich noch sagen:

Public/Private Verfahren für die vertrauliche Kommunikation sollten eigentlich Ende-zu-Ende verschlüsselt werden. Das Klartext-Passowrt, als auch die Klartextnachrichten haben auf dem Server eigentlich nichts verloren. Sonst müßte der Server aus Sich der Benutzer zu jedem Zeitpunkt vollständig vertrauenswürdig sein.

Zu md5:

Das md5-Hash gilt kryptographisch nicht mehr als sonderlich stark. Außerdem solltest Du unbedingt salzen, wenn Du viele Passworte schützen möchtest.

Ohnehin noch besser wäre eine KeyDerivation. PBKDF2 wäre hier eine Variante (ein mögliches Verfahren). Die Grundidee ist, wenn ich ein Hash von einem Hash von einem Hash bilde, dann wird es selbst bei möglicher Reversibilität deutlich unattraktiver es durchzuführen. Stupides Beispiel:

Ich kann 100 000 mal in einer Sekunde hashen. Ein Angreifer schafft es ein Hash rückzurechnen, benötigt dafür aber eine Stunde. Also dauert es ingesamt immernoch so lange, daß es sehr unattraktiv wird, es zu machen. (Man nennt solche Verfahren auch Key-Stretching)

Aber wie gesagt, solange das alles nur zur Übung/Spielerei ist und um dazuzulernen ist es natürlich nicht so wichtig gleich auf die perfekte Lösung hinzuarbeiten. Du kannst Dich ja Schritt für Schritt annähern.

0
@KarlRanseierIII

Okey also das mit "salzen" habe ich dann ja eh gemacht wenn ich das richtig verstanden habe :D nur, dass ich den Salt nicht speichere sondern einen globalen nehme ...

Dann wegen md5 ... also wie gesagt ich verwende md5 nirgends als direkte Speicherung sondern nur als Subhash sozusagen ... also  zb: sha512 von (salt + md5 von (plain + user... + othersalt) ) so meinte ich das

dann wegen dem Übertragen ... da hast du recht daran hab ich gar nicht gedacht, da php ja am server ausgeführt wird... nur leider kenne ich mich in JS noch nicht so gut aus (ich denke damit würds dann ja direkt beim client verschlüsselt werden oder?)

dannn xD KeyDerivation hab ich ansich ja auch gemacht mit den subhashes nur hald nicht so viele iterationen :)

und nochmal vielen Dank, dass du dir mit mir so viel Mühe gibst ;D das gut rüber zu bringen.

lg Dani

0

Es ist in der Vergangenheit schon häufiger vorgekommen, dass sich private Schlüssel aus den Öffentlichen mit vertretbarem Zeitaufwand ableiten ließen. Aber das war immer ein Bug in der Software, die die Schlüssel generiert hat, und kein Problem von RSA an sich.

Gerade erst vor wenigen Wochen (oder gar Tagen?) habe ich irgendwas über so einen Angriff gelesen. Wenn mich nicht alles täuscht, ging es dabei um GPG, kann mich aber auch irren. (Habe gerade das Gefühl mich zu irren!)

Es war auf jeden Fall eine große Software für PKI-Verschlüsselung. (diesmal war es glaube ich nicht OpenSSL, wie sonst immer ... hahaha)

Leider fällt mir überhaupt nicht mehr ein, worum es in dem Artikel genau ging, aber Fakt ist, dass es in der Vergangenheit schon öfter Angriffe auf schlechte Schlüssel gab, bei denen dann am Ende der private aus dem öffentlichen heraus purzelte.

Aaaaaach ... Mistikack ... mir will es einfach nicht einfallen wo ich das gelesen habe. Ist aber keine drei Monate her! Vermutlich sogar nur anderthalb Monate ... ><

Aber um nochmal auf deine Frage zurück zu kommen: Wenn du nur den öffentlichen Schlüssel veröffentlichst, sollte alles OK sein. Dafür ist er ja schließlich auch da. Seitenkanalangriffe und Bugs zähle ich jetzt aber mal nicht mit.

Nachtrag: Mir fällt gerade ein, dass sich da jemand so einen Cloudcomputing-Dienst (glaube bei Amazon) gemietet, und dann mit ordentlich Rechenpower innerhalb von einem halben Tag den privaten aus dem öffentlichen Schlüssel von irgendeinem Github-Repo extrahieren konnte. Das klappte aber auch nicht immer, sondern nur im einstelligen Prozentbereich der getesteten Schlüssel.

Meine Erinnerungen sind aber sehr vage und deshalb sind alle Angaben ohne Gewähr! :)

ich würde mir an seiner Stelle lieber gedanken um md5 machen und auf aes256 setzen :D

0
@LeonardM

Also wenn das jetzt an mich gemeint ist und nicht an die Antwort...

Das stimmt ich habe extra auf SHA512 umgestellt, da ich da keinerlei Infos über Kollissionen wie bei MD5 gefunden habe, dennoch habe ich dann einfach als AES128 Schlüssel einen md5 hash verwendet da dieser einfach komplexer aufgebaut ist, als ein normales Wort. Unter anderem habe ich dann noch irgendwelche Zeichen hinzugefügt, dass die online-"decrypter" auch nix finden zb so:

md5("ttclksjdof8979df".$password);

Ich habe mir einfach gedacht, dass solche Wörter vermutlich etwas schwieriger zu knacken sind :) ist vielleicht nicht sehr schön ... aber es erfüllt meiner Meinung seinen Zweck

Falls das größter Müll ist ... bin ich für Verbesserungen oder Vorschläge gerne offen :D

0

Du meinst aber nicht die fahrlässige Verbindung zwischen SSH und diversen VCS, die auch z.B. GitHub Ärger bescherte?

0

Ein absoluter Anfänger der den RSA-Algo programmiert - das halte ich für recht unrealistisch. Zumal dass das in PHP sein soll was immer nur auf dem Server läuft. Aber okay, ich seh ja auch nicht was du gemacht hast.

RSA ist AKTUELL nicht in annehmbarer Zeit knackbar, vorausgesetzt der Schlüssel ist lang genug (die Primzahlen hoch genug). Sollte morgen jemand einen voll funktionsfähigen Quantencomputer haben, dann würde das ganze System nicht mehr funktionieren und man könnte es ohne Probleme knacken - aber genannter Quantencomputer würde noch viel mehr Probleme lösen.

Sry, falls du das irgendwie vllt falsch verstandne hast :o ich habe den RSA nicht programmiert, sondern ich programmiere MIT dem RSA Verschlüsselungssystem... Oder wolltest du damit etwas anderes sagen :D

Und um es nochmal zu wiederholen... ich bin dabei das ganze zu lernen, also kann es natürlich auch sein, dass ich etwas unnötig verschlüssle etc. um einfach zu verstehen, wie der gesamte Aufbau solcher Methoden abläuft.

Trotzdem danke für deine Antwort :D

0
@xIXxDanixXIx

Sobal deine Website HTTPS nutzt hast du sowieso RSA im Hintergrund xD Da programmierst du normalerweise nicht extra was mit - das ist das Schöne. Man muss sich nicht selbst drum kümmern dan HTTPS.

0
@triopasi

Das ist mir schon klar :D aber mir geht es dabei nicht darum dass es sicher ist, wenn es einfach geht, sondern, dass ich mit dem einzelnen Elementen der Kryptotechnik besser vertraut werde ^^

0
@xIXxDanixXIx

Dann solltest du aber zu allererst ordentlich programmieren lernen, und zwar nicht PHP - das eignet sich nicht wirklich dazu. Zudem hat das viel mit Mathe zu tun - auch damit solltest du dich dann beschäftigen. Am Anfang sollte dir das Thema erst mal egal sein - bis du die Grundlagen überhaupt hast.

0

Das Verfahren gewinnt durch seine großen Zahlen. Bei kleineren Schlüsseln wäre das möglich, bei den heute genutzten Schlüssellängen reicht keine Rechnerkapazität aus.

Zufallsfunde sind natürlich möglich.

Was möchtest Du wissen?