Frage

Das Netz System.Security.Cryptography Der Namespace verfügt über eine ziemlich verwirrende Sammlung von Algorithmen, die ich zur Verschlüsselung von Kreditkartendaten verwenden könnte.Welches ist das Beste?

Für eine relativ kurze Saite muss es eindeutig sicher sein.

BEARBEITEN:Ich lebe im Vereinigten Königreich, wo ich weiß, dass wir verschlüsselte Kreditkartendaten speichern dürfen, solange die dreistellige CVV-Nummer niemals gespeichert wird.Und vielen Dank an alle für die tollen Antworten.

War es hilfreich?

Lösung

Nichts für ungut, aber die Frage ist etwas „fehlgeleitet“.Es gibt keine „Allheilmittellösung“.Ich würde empfehlen, sich über Kryptographie im Allgemeinen zu informieren und dann etwas Bedrohungsmodellierung durchzuführen.Einige Fragen (keine vollständige Liste), die Sie sich stellen sollten:

  • Ist das Modul, das die Verschlüsselung durchführt, dasjenige, das sie entschlüsseln muss (in diesem Fall verwenden Sie symmetrische Kryptografie), oder sendet es Daten an ein anderes Modul (auf einem anderen Computer), das sie verwendet (in diesem Fall sollten Sie einen öffentlichen Schlüssel in Betracht ziehen). Krypto)
  • Wovor möchten Sie sich schützen?Jemand, der auf die Datenbank zugreift, aber nicht über den Quellcode verfügt (in diesem Fall können Sie den Verschlüsselungsschlüssel direkt in der Quelle fest codieren)?Jemand schnüffelt in Ihrem lokalen Netzwerk (Sie sollten transparente Lösungen wie IPSec in Betracht ziehen)?Jemand stiehlt Ihren Server (das kann sogar in Rechenzentren passieren – in diesem Fall sollte eine vollständige Festplattenverschlüsselung in Betracht gezogen werden)?
  • Müssen die Daten wirklich aufbewahrt werden?Können Sie es nicht direkt an den Kreditkartenabwickler weitergeben und nach Erhalt der Bestätigung löschen?Können Sie es nicht lokal beim Client in einem Cookie oder Flash-LSO speichern?Wenn Sie es auf dem Client speichern, stellen Sie sicher, dass Sie es auf der Serverseite verschlüsseln, bevor Sie es in ein Cookie einfügen.Wenn Sie Cookies verwenden, stellen Sie außerdem sicher, dass diese nur http sind.
  • Reicht es aus, die Gleichheit der Daten zu vergleichen (d. h. die Daten, die mir der Kunde gegeben hat, sind dieselben Daten, die ich habe)?Wenn ja, sollten Sie darüber nachdenken, einen Hash davon zu speichern.Da Kreditkartennummern relativ kurz sind und einen reduzierten Satz an Symbolen verwenden, sollte vor dem Hashing für jede Nummer ein eindeutiger Salt generiert werden.

Später bearbeiten:Beachten Sie, dass Standardverschlüsselungsalgorithmen derselben Kategorie (z. B. 3DES und AES – beides sind symmetrische Blockchiffren) von vergleichbarer Stärke sind.Die meisten (kommerziellen) Systeme sind nicht kaputt, weil jemand ihre Verschlüsselung brutal erzwungen hat, sondern weil ihre Bedrohungsmodellierung nicht detailliert genug war (oder sie überhaupt keine hatten).Sie können beispielsweise alle Daten verschlüsseln, aber wenn Sie über eine öffentlich zugängliche Weboberfläche verfügen, die anfällig für SQL-Injection ist, hilft Ihnen das nicht viel.

Andere Tipps

Es spielt keine Rolle.

Vollständige Kartennummern sollten niemals die Festplatte berühren.

Alles, was zählt, ist der Authentifizierungscode.

Für Spuren usw. verwenden Sie nur die letzten 4 Ziffern xxxx xxxx xxxx 1234 und das Ablaufdatum.

Wenn Sie Kartennummern speichern möchten, wird die Wahl der Kryptografie von der erwerbenden Bank vorgeschrieben.

Es sei denn, Sie sind der Erwerber. In diesem Fall sollten Sie einen alten Unix-Programmierer/DB2-Typen fragen.

„Kann man es nicht lokal beim Client in einem Cookie speichern“ <-- NIEMALS

Ich möchte der Ansicht hinzufügen, dass Sie sie einfach nicht speichern sollten, es sei denn, Sie haben einen wirklich guten Grund dafür, und das Speichern in einem Cookie ist ein Grund Wirklich schlechte Idee – das sind sie einfach zu einfach in die Hände bekommen (was passiert, wenn jemand ein Cookie stiehlt – dann ist es egal, wie verschlüsselt es ist).

Wenn Sie wiederholte Zahlungen durchführen müssen, bieten die meisten CC-Anbieter eine Möglichkeit an, dies zu tun, indem sie eine Art Token der ersten Zahlung speichern, ohne die Kartennummer überhaupt aufzubewahren (Sie könnten einfach die letzten vier Ziffern behalten, um sie dem Kunden anzuzeigen). damit sie wissen, welche Karte gespeichert ist).

Wirklich, tu es einfach nicht!

Außerdem sollten Sie den CCV-Code niemals behalten.

Gemäß PCI DSS Um Compliance-Regeln zu erfüllen, reicht jeder branchenführende Verschlüsselungsstandard aus.Ein 3DES mit einem 256-Bit-Schlüssel ist also gut genug (obwohl auch andere Standards verwendet werden können).Schauen Sie sich das an http://pcianswers.com/2006/08/09/methods-of-encrypting-data/

Vergessen Sie hier nicht die Integrität.Es gibt Fälschungsangriffe gegen Standard-Kryptowährungen, bei denen der Angreifer den Schlüssel nicht kennt, aber den Chiffretext manipulieren kann.Diese können besonders schlimm sein, wenn:

  • kurze Strings verschlüsseln,
  • mit bekannten Teilzeichenfolgen

Genau das ist bei Kreditkarten der Fall.Daher kann es gefährlich sein, System.Security.Cryptography AES oder 3DES im CBC-Modus zu verwenden, ohne Ihre eigene Prüfsumme zu erstellen.Lesen:Es besteht die Möglichkeit, dass ein Angreifer ohne den geheimen Schlüssel eine Kreditkartennummer durch eine andere ersetzen könnte.

Wenn Sie ein Zahlungsgateway eines Drittanbieters verwenden, müssen Sie die Nummern nicht speichern.

Es hat keinen Sinn.

3des ist ziemlich gut, speichern Sie das Salt daneben und bewahren Sie einen Standardschlüssel irgendwo auf, nicht in der Datenbank oder einer Konfigurationsdatei.Auf diese Weise können sie es nicht entschlüsseln, wenn Sie pwned werden.

Auch der rechtliche Aspekt ist zu berücksichtigen.Ich kenne die Situation anderswo nicht, aber in Deutschland ist es einfach nicht erlaubt, Kreditkartennummern zu speichern1). Zeitraum. Dabei spielt es keine Rolle, ob Sie sie verschlüsseln oder nicht und in welchem ​​Format Sie sie speichern.

Alles du Mai Was Sie tun (und hier beziehe ich mich aus dem Gedächtnis, ohne juristisches Wissen), ist, einen starken Hash (SHA-256?) der Kreditkartennummer zusammen mit den letzten vier Ziffern und der Kontonummer zu speichern.Und ja, es ist trivial, allein aus diesen Informationen die vollständige Zahl zu rekonstruieren.Gesetze sind nicht immer logisch.


1) Es sei denn, Sie sind ein eidgenössisch zertifiziertes Kreditkarteninstitut.

Hinweis: Sie sollten prüfen, ob die Speicherung von Kreditkartennummern legal ist.In Schweden müssen Sie beispielsweise zertifiziert sein PCI (Zahlungskartenindustrie), wo Ihre interne und externe Sicherheit getestet wird (zusammen mit vielen anderen Dingen).

Sie sollten beides ein- oder zweimal bedenken, bevor Sie Kreditkarteninformationen speichern, da die Rechtskosten bei Fehlhandlungen teuer sein können.

Verschlüsseln Sie die Kreditkarte mit einem öffentlichen Schlüssel.Geben Sie den privaten Schlüssel nur an den Zahlungsabwickler weiter.Die Zahlungsverarbeitungsmaschine kann dann die Datenbank abfragen und die Arbeit erledigen, und niemand sonst, nicht einmal die Maschine, die den Eintrag hinzugefügt hat, kann ihn entschlüsseln.

So etwas wie OpenSSL_Seal von PHP, wenn Sie möchten, vielleicht mit einem anderen Algorithmus.

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