ist "daves protokoll" nicht gut, wenn nur die datenbank und nicht der code durchgesickert ist?
<p>ich habe gelesen <a href="https://security.stackexchange.com/questions/25585/is-my-developers-home-brew-password-security-right-or-wrong-and-why">"ist die sicherheit des selbstgebrauten passworts meines entwicklers richtig oder falsch und warum?"</a> , aber ich habe immer noch eine frage im kopf:</p><p>selbst wenn jemand wie dave einen schlechten, selbst gebrauten sicherheitsalgorithmus verwendet, kann ein angreifer das echte kennwort nicht erhalten, wenn der angreifer nur die datenbank und nicht den server gefährdet. <a href="https://security.stackexchange.com/a/25666/159875">mark burnetts antwort</a> auf daves frage scheint meine vermutung zu beweisen.</p><p>nehmen sie wieder daves code als beispiel. dave verwendet unsichere/schnelle hash-funktionen, md5 und sha1, also können sie sein passwort einfach aus der datenbank knacken (den klartext abrufen). sie können das echte passwort jedoch immer noch nicht erhalten, wenn sein server nicht kompromittiert ist.</p>
<h2>ja aber..</h2><p>um es schön und klar zu machen ... wir sprechen von einem kompromiss nur für datenbanken, wenn ein angreifer zugriff auf die datenbank hat, nicht jedoch auf den quellcode der anwendung. in diesem fall erhält der angreifer die kennwort-hashes, kann sie jedoch aufgrund des benutzerdefinierten algorithmus von dave nicht knacken und die ursprünglichen kennwörter abrufen. im falle eines verstoßes nur gegen die datenbank schützt der kennwortalgorithmus von dave die kennwörter besser als bei verwendung von md5 oder sha1.</p><p><strong> dies ist jedoch </strong> nur ein möglicher weg für systemlecks. es gibt eine wichtige tatsache, die die "mathematik" zerstört, die daves homebrew-algorithmus vernünftig erscheinen lässt.</p><h2>die hälfte aller verstöße beginnt intern.</h2><p>(quellen <a href="https://www.helpnetsecurity.com/2019/06/17/human-error-data-breach/">1</a> <a href="https://www.forbes.com/sites/louiscolumbus/2018/08/31/58-of-all-healthcare-breaches-are-initiated-by-insiders/#4a6d911c601a">2</a> ) was eine sehr ernüchternde tatsache ist, wenn sie es einmal einwirken lassen. von der hälfte der von mitarbeitern verursachten verstöße, die hälfte von ihnen ist zufällig und <strong> die hälfte ist absichtlich </strong>. daves algorithmus kann hilfreich sein, wenn sie sich nur um ein nur-datenbank-leck sorgen. wenn das alles ist, worüber sie sich sorgen machen, dann ist das bedrohungsmodell, vor dem sie in ihrem kopf schützen, falsch.</p><p>um nur ein beispiel zu nennen: entwickler haben per definition zugriff auf den anwendungsquellcode. wenn ein entwickler schreibgeschützten zugriff auf die produktionsdatenbank erhält, verfügt er jetzt über alles, was er zum einfachen knacken der kennwörter benötigt. daves benutzerdefinierter algorithmus ist jetzt nutzlos, da er auf alten und leicht zu knackenden hashes basiert.</p><p>wenn dave jedoch einen modernen passwort-hashing-algorithmus verwendet und sowohl salz als auch pfeffer verwendet hätte, hätte der entwickler, der zugriff auf einen nur-datenbank-dump erhalten hat, absolut nichts nützliches.</p><p>das ist nur ein zufälliges beispiel, aber der allgemeine punkt ist einfach: es gibt viele datenlecks in der realen welt, bei denen korrektes hashing den tatsächlichen schaden gestoppt hätte, wenn daves algorithmus dies nicht konnte.</p><h2>zusammenfassend</h2><p>es geht um tiefenverteidigung. es ist einfach, eine sicherheitsmaßnahme zu erstellen, die vor einer bestimmten art von angriff schützen kann (daves algorithmus ist eine leichte verbesserung gegenüber md5 zum schutz vor nur-datenbank-lecks). dies macht ein system jedoch nicht sicher. viele reale verstöße sind ziemlich kompliziert und nutzen schwachstellen an mehreren stellen in einem system aus, um endlich echten schaden zu verursachen. jede sicherheitsmaßnahme, die mit der annahme beginnt, dass dies der einzige angriffsvektor ist, über den ich mir sorgen machen muss (was dave getan hat), wird die dinge gefährlich falsch machen.</p>
hallo,

jeder kann eine verschlüsselung entwickeln, die er selbst nicht brechen kann. das bedeutet allerdings keinesfalls, das diese sicher ist und einer cryptoanalyse standhält.

das erste, was mir an deinem chiffrierten text auffällt, ist das er nicht wirklich zufällig ist. verschlüsselte daten so… <blockquote> <p>angenommen, der server soll daten mit dem privaten schlüssel verschlüsseln und mit dem öffentlichen schlüssel entschlüsseln, um daten zu verteilen, von denen überprüft werden kann, dass sie vom richtigen server stammen.</p> </blockquote><p>sie können dies tun - auf eine sehr vereinfachte ebene funktioniert die rsa-signatur (anmerkung, vereinfacht - es steckt noch ein bisschen mehr dahinter).</p><blockquote> <p>kann ich den privaten schlüssel einfach veröffentlichen und den öffentlichen schlüssel geheim halten, anstatt den code zu ändern, um dies zu ermöglichen? beeinträchtigt dies die sicherheit des systems?</p> </blockquote><p>sie <strong> müssen den privaten schlüssel überhaupt nicht </strong> veröffentlichen - rsa ist eine trapdoor-permutation, was bedeutet:</p><ul> <li>wenn sie mit einem öffentlichen schlüssel verschlüsseln, können sie mit dem privaten schlüssel entschlüsseln.</li> <li>wenn sie mit einem privaten schlüssel verschlüsseln, können sie mit einem öffentlichen schlüssel entschlüsseln.</li> </ul><p>daher unterstützt rsa sowohl das signieren als auch das verschlüsseln, wobei der endbenutzer nur über den öffentlichen schlüssel verfügt.</p><p>wenn der client in ihrem fall überprüfen möchte, ob daten vom server stammen, wenden sie den zweiten fall von rsa an und entschlüsseln die signaturdaten mit dem bereits vorhandenen öffentlichen schlüssel.</p><p>da es sich um eine permutation handelt, sollten sie ihren code außerdem überhaupt nicht ändern müssen. beide tasten sollten mit derselben funktion arbeiten. ich würde erwarten, dass jede anständige kryptobibliothek apis zur überprüfung von signaturen gemäß den unterschiedlichen standards hat - eine davon wäre wahrscheinlich eine gute wahl.</p><p>rsa labs bieten ein nice <a href="https://web.archive.org/web/20130718172549/https://www.rsa.com/rsalabs/node.asp?id=2182">erklärung hierfür</a> .</p><p>wenn sie dies zwischen servern erweitern oder die clientkommunikation überprüfen möchten, generieren sie schlüssel für jede entität und tauschen sie die öffentlichen aus. das verfahren kann dann an beiden enden angewendet werden.</p><p>theoretisch sind e und d austauschbar (weshalb rsa funktioniert) (man muss als geheim bezeichnet und geheim gehalten werden), aber p und q müssen <strong> immer </strong> sein geheim gehalten, da diese es ihnen ermöglichen, d von e abzuleiten und umgekehrt. sie müssen jedoch beim verständnis des privaten schlüssels äußerst vorsichtig sein - speichert ihre software p/q im privaten schlüssel? wenn ja, können sie es nicht so veröffentlichen, wie es ist. auch wenn ich austauschbar sage - sobald sie eines dieser paare (e oder d zusammen mit ihrem modul n) veröffentlicht haben, müssen sie das andere <em> mit ihrem leben</em> schützen. praktisch gesehen <a href="https://stackoverflow.com/questions/696472/given-a-private-key-is-it-possible-to-derive-its-public-key">wie graeme in den kommentaren verlinkt</a> e wird oft als kleiner/fester wert gewählt. mein kommentar, dass e/d austauschbar ist, trifft eindeutig nicht zu, wenn e leicht zu bestimmen ist. wenn sie so etwas tun, kann dies zu verwirrung und fehlimplementierung führen. verwenden sie eine bibliothek eines drittanbieters/veröffentlichen sie keine privaten schlüssel.</p> <p>es ist keine schwäche für einen kurzen oder langen öffentlichen exponenten für rsa bekannt, solange der öffentliche exponent "korrekt" ist (dh relativ prim zu <em> p-1</em> für alle primzahlen <em> p </em> welche den modul teilen).</p><p><em> if</em> sie verwenden einen kleinen exponenten <em> und</em> sie verwenden kein padding für die verschlüsselung <em> und</em> sie verschlüsseln genau dieselbe nachricht mit bei mehreren unterschiedlichen öffentlichen schlüsseln ist ihre nachricht gefährdet: if <em> e = 3</em> und sie verschlüsseln die nachricht <em> m</em> mit öffentlichen schlüsseln <em> n<sub>1</sub></em>, <em> n<sub>2</sub></em> und <em> n<sub>3</sub></em>, dann hast du <em> c<sub>ich</sub> = m<sup>3</sup></em> mod <em> n<sub>ich</sub></em> für <em> i = 1</em> bis <em> 3</em>. mit dem <a href="http://en.wikipedia.org/wiki/chinese\_remainder\_theorem">chinesischer restsatz</a> können sie dann <em> m<sup>3</sup></em> mod <em> n<sub>1</sub>n<sub>2</sub>n<sub>3</sub></em>, was sich als <em> m herausstellt<sup>3</sup></em> (ohne modulo) weil <em> n<sub>1</sub>n<sub>2</sub>n<sub>3</sub></em> ist eine größere ganze zahl. eine (nicht modulare) kubikwurzelextraktion reicht dann aus, um <em> m</em> zu extrahieren.</p><p>die schwäche ist hier <strong> nicht </strong> der kleine exponent; vielmehr ist es die verwendung einer falschen auffüllung (nämlich überhaupt keine auffüllung) für die verschlüsselung. das auffüllen ist für die sicherheit von rsa sehr wichtig, egal ob verschlüsselung oder signatur. wenn sie keine ordnungsgemäße polsterung verwenden (wie die in <a href="http://www.rsa.com/rsalabs/node.asp?id=2125">pkcs # 1</a> beschriebenen), haben sie viele schwächen, und die im obigen absatz beschriebene ist bei weitem nicht die größte. wenn sich jemand jedoch auf eine schwäche im zusammenhang mit der exponentengröße bezieht, bezieht er sich mehr oder weniger direkt auf dieses ereignis. das ist ein bisschen alte und falsche überlieferung, die manchmal in ein verbot gegen <em> groß</em> exponenten umgewandelt wird (da es sich um einen mythos handelt, ist der umgekehrte mythos auch ein mythos und nicht mehr - und nein weniger begründet); ich glaube, das beobachten sie hier.</p><p>es gibt jedoch einige gründe, warum ein großer öffentlicher exponent vermieden werden sollte:</p><ul> <li> <p>kleine öffentliche exponenten fördern die effizienz (für public-key-operationen).</p> </li> <li> <p>es gibt sicherheitsprobleme, wenn ein kleiner exponent <em> privat</em> vorhanden ist. ein schlüsselwiederherstellungsangriff wurde beschrieben, wenn die länge des privaten exponenten nicht mehr als 29% der länge des öffentlichen exponenten beträgt. wenn sie erzwingen möchten, dass der private exponent kurz ist (z. b. um operationen mit privaten schlüsseln zu beschleunigen), müssen sie mehr oder weniger einen großen öffentlichen exponenten verwenden (so groß wie der modul). die forderung, dass der öffentliche exponent kurz sein muss, kann dann als eine art indirekte gegenmaßnahme angesehen werden.</p> </li> <li> <p>einige weit verbreitete rsa-implementierungen drosseln große öffentliche rsa-exponenten. z.b. der rsa-code in windows (cryptoapi, von internet explorer für https verwendet) besteht darauf, den öffentlichen exponenten in einem einzelnen 32-bit-wort zu codieren. es kann keinen öffentlichen schlüssel mit einem größeren öffentlichen exponenten verarbeiten.</p> </li> </ul><p>dennoch sieht "risiken können groß sein" wie die allgemeine rechtfertigung aus ("dies ist ein sicherheitsproblem" ist die übliche art zu sagen "wir haben es nicht implementiert, aber wir wollen keine art von faulheit zugeben").</p> Hallo Daniel,  
  
ja das bekommen wir hin. Bitte überprüfen Sie ob in der App der korrekte Anmeldename und PIN hinterlegt ist (identisch wie im normalen Online-Banking). Der Zugang könnte z.B. auch gesperrt sein. Damit wir das rausfinden können, lassen Sie uns bitte über das [Kontaktformular](https://www.bw-bank.de/community-kontakt) Ihre persönlichen Daten zukommen. Wir werden uns dann bei Ihnen melden.  
  
Viele Grüße  
Nicolas <p>die standardmethode für die angabe des objekttyps ist entweder <a href="http://search.cpan.org/perldoc?perlfunc#ref"><code>ref</code></a> oder <a href="http://search.cpan.org/perldoc?scalar::util"><code>scalar::util</code></a> <code>::blessed</code>. wenn sie<em> wissen </em>das objekt gesegnet ist, geben sie dieselbe information zurück. </p><pre><code>my $class1 = blessed( $obj ); my $class2 = ref $obj; </code></pre><p><code>ref</code> gibt jedoch auch 'hash' für nicht gesegnete hashes zurück, während <code>blessed</code> dieses spiel ablehnt. </p><p>für eine liste von methoden ist es für den gesegneten zeigerstil eines perl-objekts einfach, eine davon selbst zu codieren. der folgende code funktioniert ziemlich gut für mich. es gibt die namen der funktionen (diejenigen, die den &quot;code-slot&quot; des angegebenen namens annehmen) zurück, die dem paket zugeordnet sind, das sie definiert. </p><pre><code>sub class\_methods { use class::isa; my $obj = shift; return unless ref( $obj ); my %meth\_names; foreach my $anc ( class::isa::self\_and\_super\_path( ref $obj ), 'universal' ) { my $stash = \%{"$anc\::"}; my @funcs = grep { m/^[\_\p{alpha}]/ # begins with \_ or alpha &amp;&amp; !exists $meth\_names{$\_} # no clobbering &amp;&amp; defined *{$stash-&gt;{$\_}}{code} # has a filled code slot } keys %$stash ; # assign to the "hash slice", keyed by all the entries in @funcs # the value of $anc repeated as many times as elements in @funcs. @meth\_names{@funcs} = ( $anc ) x @funcs; } return %meth\_names; } </code></pre><ul> <li><p>dies funktioniert auch für relativ komplexe objekte, aber wenn das besitzende paket eine menge generierten codes enthält, ist es nicht besonders hilfreich zu wissen, in welchem ​​paket die generatoren den code-pointer stecken. es wird mehr bedeuten, welches paket zu finden ist generiert den code. </p></li> <li><p>ist dies der fall, erhalten sie<em> might </em>den code aus der ausführung ihres codes, einschließlich <a href="http://search.cpan.org/perldoc?data::dumper"><code>data::dumper</code></a> und setzen von <code>$data::dumper::deparse</code> auf 1 wie folgt: (<code>local $data::dumper::deparse = 1;</code>) und dann den code-zeiger wie folgt: <code>say dumper( $code\_ref );</code></p></li> <li><p>es<em> won't </em>funktioniert für gültige methoden, die noch mit einer beliebigen <code>autoload</code>-methode erstellt werden müssen. wenn sie diese in der liste sehen, macht das objekt möglicherweise mehr, aber was es alles tut, wissen sie nicht.</p></li> <li><p>die &quot;basisklasse&quot; <code>universal</code> ist enthalten, da diese klasse verhalten enthält, das vom objekt verwendet werden kann. </p></li> </ul><p>viel glück.</p> @bibabumsebaer: Ich habe perfekte Passwörter aus Groß- und Kleinbuchstaben und Zahlen wild durcheinander. Für VISA habe ich Sonderzeichen eingestreut und trotzdem habe ich das gleiche Problem: Nie wird eines der eingegenen Passwörter akzeptiert.
Weiß jemand Rat? Es lohnt sich, einen Blick auf diesen [`Blog Post`](http://lostechies.com/jimmybogard/2012/07/20/choosing-an-orm-strategy/) werfen, aber letztendlich werden die Kriterien von Ihnen festgelegt. Sie müssen entscheiden, ob 

* schnelle Entwicklung
* Performance
* Code-zuerst
* DB zuerst

 oder was auch immer Sie suchen und priorisieren Sie die Liste basierend auf, was noch wichtiger ist. Dann verwenden Sie diese Liste, um Ihre Forschung zusammenzustellen. Viele Wege führen zum Ziel und was funktioniert, hängt davon ab, wie sich dein Sauertag verhält, welches Mehl du verwedest, welches Endertebnis du willst.


Brotbacken ist keine Hexerei, aber man muss halt schon bisschen flexibler sein. Stur dem Rezept folgen geht oft nicht.


Ich nehme an, dein Sauerteigstarter ist nicht selbst gemacht? Für meinen selbstangesetzten, aktiven Sauerteig wäre das nämlich viel zu lang.


Dein Ergebnis klingt danach, als wäre dein Teig entweder zu kurz oder zu lange gegangen bzw dein Sauerteig einfach nicht aktiv.


Das ist jetzt leider eine sehr unbefriedigende Antwort, aber du musst dich beim Brotbacken leider echt mit dem Thema etwas beschäftigen, um den Fehler zu finden. Für einen frischen Sauerteig, könnte ich dir aber auch mein erprobtes Rezept schicken und mehr erklären. Kommerziellen Sauerteigstarter habe ich nur noch nie gehabt. Normalerweise darf mit deiner alten EC-Karte nichts mehr passieren, wenn sie wie angegeben "nicht mehr im System ist". Außerdem hat der Finder der Karte deinen Zugangscode nicht. - Wenn du aber selbst mit dieser Karte noch Geld abheben konntest vor dem Verfalltag, ist ja trotzdem Gefahr im Verzug und Banken soll man grundsätzlich nicht trauen!


Deshalb mein Tipp: Rufe im Beisein eines verlässlichen Zeugen, welcher mithört, noch einmal an und zeige den Kartenverlust erneut an. Merke dir Datum und Uhrzeit des Anrufs und lasse dir den Namen des Gesprächspartners am anderen Ende nennen. - So hast du dich bestmöglich für den Moment abgesichert und morgen früh rufst du trotzdem bitte auch noch direkt deine Bank an, oder gehst persönlich hin und kontrollierst die Richtigkeit der Aussage, die du heute erhalten hast. Notfalls kann dann auch die Bank noch einmal aktiv werden. man konnte es bisher auch nicht sperren und im grunde ist es, wegen dem handshake-verfahren, auch nicht wirklich nötig.

 

dennoch haben wir jetzt eine möglichkeit gefunden eine sperre individuell einzurichten.

 

das ist doch gut, oder etwa nicht? :relaxed: