Frage

Ich bin die Änderung bereits bestehenden Sicherheitscode ein. Die Spezifikationen sind ziemlich klar, es Beispielcode ist, aber ich bin kein Verschlüsselungsexperte. In der Tat hat der Beispielcode eine Verzichtserklärung zu sagen, in der Tat, „Sie diesen Code nicht wörtlich verwenden.“

Während der Prüfung der Code, den ich bin zu ändern (die angeblich verfügen über komplett ist) ich auf dieses kleine Juwel lief, die bei der Erzeugung der Herausforderung verwendet wird:

static uint16 randomSeed;

...

uint16 GetRandomValue(void)
{
  return randomSeed++;/* This is not a good example of very random generation :o) */
}

Natürlich ist das erste, was ich war sofort tat passiert es um das Büro und so konnten wir alle ein Lachen erhalten.

Der Programmierer, der diesen Code erzeugt wusste, dass es kein guter Algorithmus war (wie durch den Kommentar angezeigt), aber ich glaube nicht, dass die Auswirkungen auf die Sicherheit verstanden. Sie haben nicht einmal die Mühe, es in der Hauptschleife zu nennen, so dass es zumindest in einen freilaufenden Zähler drehen würde -. Noch nicht ideal, aber Welten jenseits diesem

Ich weiß jedoch, dass der Code, den ich produzieren wird, in ähnlicher Weise eine wirkliche Sicherheit Guru verursachen kichern oder Beben.

  • Was sind die häufigsten Sicherheitsprobleme, die spezifisch für Kryptographie, dass ich verstehen muss?
  • Was sind einige gute Ressourcen, die mir geeignet Wissen über das, was geben werde ich über häufige Fehler wissen sollten?

-Adam

War es hilfreich?

Lösung

Applied Cryptography ein ausgezeichnetes Buch ist, Ihnen zu helfen Krypto und Code zu verstehen. Es geht über viele Grundlagen, wie, wie Blockchiffren arbeiten, und warum eine schlechte Verschlüsselungs-Modus-Wahl wird Ihr Code nutzlos selbst machen, wenn Sie eine perfekt umgesetzt Version von AES verwenden.

Einige Dinge zu achten:

  • Schlechte Quellen von Zufälligkeit
  • Der Versuch, Ihren eigenen Algorithmus oder Protokoll zu entwerfen -. Tut es nicht, immer
  • es nicht Code überprüft bekommen. Vorzugsweise durch sie online veröffentlichen.
  • Nicht mit einer gut etablierten Bibliothek und versucht, es selbst zu schreiben.
  • Crypto als Allheilmittel - Verschlüsselung von Daten nicht auf magische Weise macht es sicher
  • Key Management. In diesen Tagen ist es oft einfacher, den Schlüssel mit einem Seitenkanalangriff zu stehlen als die Krypto angreifen.

Andere Tipps

Versuchen Sie nicht, Ihre eigene Rolle - eine Standard-Bibliothek verwenden, wenn überhaupt möglich. Subtile Änderungen an den Sicherheitscode kann einen großen Einfluss haben, die nicht leicht zu erkennen sind, können aber Sicherheitslücken öffnen. Zum Beispiel zwei modifizierten Zeilen eine Bibliothek ein Loch geöffnet, das wasn‘ t leicht ersichtlich, schon seit geraumer Zeit.

Ihre Frage zeigt eine der gebräuchlichsten: schlechte Quellen der Zufälligkeit. Dabei spielt es keine Rolle, ob Sie einen 256-Bit-Schlüssel verwenden, wenn sie Bits genug, um nicht zufällig sind.

Nummer 2 wird wahrscheinlich davon aus, dass Sie ein System besser als die Experten entwerfen. Dies ist ein Bereich, in dem eine hochwertige Umsetzung eines Standards an Sicherheit grenzender Wahrscheinlichkeit wird besser sein als Innovation. Denken Sie daran, es dauerte drei Hauptversionen, bevor SSL wirklich sicher war. Wir denken.

IMHO gibt es vier Ebenen der Angriffe sollten Sie sich bewusst sein:

  1. Social Engineering-Angriffe. Sie sollten Ihre Benutzer trainieren nicht dumme Dinge zu tun und Ihre Software zu schreiben, so dass es schwierig ist, für Benutzer dumme Dinge zu tun. Ich weiß nicht, jede gute Referenz über diese Dinge.

  2. nicht einen beliebigen Code ausführen (Pufferüberlauf, xss Exploits, SQL-Injection sind alle gruppiert hier). Die minimale Sache zu tun, um darüber zu lernen, ist Schreiben Secure Code von jemandem an MS zu lesen und beobachtete den Wie Web-Software Google Tech Talk zu brechen. Dies sollte man auch ein wenig über die Verteidigung in der Tiefe unterrichten.

  3. logische Angriffe. Wenn Ihr Code Klartext manipuliert, Zertifikate, Signaturen, Chiffre-Texte, öffentliche Schlüssel oder andere Verschlüsselungs Objekte, sollten Sie sich bewusst sein, dass sie in einem schlechten Weg Umgang mit schlechten Dingen führen kann. Minimal Dinge, die Sie sollten sich bewusst sein über sind offline und Online-Wörterbuchangriffe, Replay-Attacken, Man-in-the-Middle-Angriffe. Der Ausgangspunkt, um dies zu lernen und in der Regel eine sehr gute Referenz für Sie http://www.soe.ucsc.edu/~abadi/Papers/gep-ieee.ps

  4. Verschlüsselungs Angriffe. Cryptographic Verwundbarkeiten enthalten:

    • Sachen, die man vermeiden kann: schlechte Erzeugung von Zufallszahlen, Verwendung einer gebrochenen Hash-Funktion, gebrochene Implementierung von Sicherheits primitiven (z Ingenieur vergisst einen -1 irgendwo im Code, der die Verschlüsselungsfunktion umkehrbar macht)
    • Material, das Sie außer, indem sie als up-to-date wie möglich nicht vermeiden können: neue Attacke gegen eine Hash-Funktion oder eine Verschlüsselungsfunktion (siehe zB die letzten MD5 talk), neue Angriffstechnik (siehe zum Beispiel der jüngsten Angriffe gegen Protokolle, die verschlüsselt senden Stimme über das Netzwerk)

Eine gute Referenz im Allgemeinen sollte Applied Cryptography.

Auch ist es sehr beunruhigend für mich, dass Sachen, die auf einem mobilen Gerät geht, die wahrscheinlich gesperrt ist und schwierig zu aktualisieren wird von jemandem geschrieben, um die Sicherheit auf Stackoverflow bittet. Ich glaube, Ihr Fall würde einer der wenigen Fälle, in denen Sie eine externe (gut) Berater benötigen, die Sie die Details richtig zu machen hilft. Selbst wenn Sie einen Sicherheitsberater mieten, die ich Ihnen empfehlen zu tun, benutzen Sie bitte auch die oben (minimalistisch) Referenzen lesen.

  

Was sind die häufigsten Sicherheitsprobleme, die spezifisch für die Kryptographie, dass ich verstehen muss?

Einfach -. Sie (1) ist nicht intelligent genug, mit Ihrem eigenen Algorithmus zu kommen

(1) Und Sie, meine ich Sie, mich und alle anderen diese Website zu lesen ... außer vielleicht Alan Kay und Jon Skeet .

Ich bin kein Krypto-Typ entweder, aber S-Box kann lästig sein, wenn messed mit (und sie machen einen Unterschied). Sie müssen auch eine wirkliche Quelle der Entropie, nicht nur ein PRNG (egal wie zufällig es aussieht). PRNGs sind nutzlos. Als nächstes sollten Sie die Entropiequelle nicht deterministisch sicherzustellen, und dass sie nicht manipuliert werden können.

Mein bescheidener Rat: Stick mit bekannten Verschlüsselungsalgorithmen, wenn Sie einen Experten und verstehen, die Risiken sind. Sie könnten einige getestet, öffentlich zugänglichen Open-Source / public domain-Code sein besser mit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top