Alles, was Sie über die Verschlüsselung in Java wissen müssen



In diesem Artikel erhalten Sie detaillierte und umfassende Kenntnisse über die Verschlüsselung in Java und deren Verwendung mit Beispielen.

Verschlüsselung ist die Methode, mathematische Algorithmen zu verwenden, um die Bedeutung einer Information zu tarnen, sodass nur autorisierte Parteien sie entschlüsseln können. In diesem Artikel werden wir Verschlüsselung und Entschlüsselung in diskutieren in der folgenden Reihenfolge:

Eine Einführung in die Verschlüsselung in Java

Die Verschlüsselung wird implementiert, um unsere Daten (wie Texte, Gespräche und Sprache) zu schützen, sei es auf einem Computer oder im Internet. Neueste Verschlüsselungstechnologien sind wesentliche Elemente jeder sicheren Computerumgebung.





Die Hauptaufgabe der Verschlüsselungssicherheit liegt in der Fähigkeit eines Algorithmus, Chiffretext (verschlüsselten Text) zu generieren, der nur schwer auf seinen ursprünglichen Klartext zurückgesetzt werden kann. Die Verwendung von Schlüsseln schafft auch eine weitere Sicherheitsstufe für Methoden zum Schutz unserer Informationen. Ein Schlüssel sind einige Informationen, mit denen nur diejenigen, die ihn enthalten, eine Nachricht codieren und decodieren können.

Verschlüsselung und Entschlüsselung in Java



Symmetrische Verschlüsselungsalgorithmen

Die symmetrischen Algorithmen verwenden denselben Schlüssel für die Ver- und Entschlüsselung. Solche Algorithmen können nur im Blockmodus (der mit Datenblöcken fester Größe arbeitet) oder im Stream-Modus (der mit Datenbits oder -bytes arbeitet) arbeiten. Solche Algorithmenwerden auch häufig für Anwendungen wie Datenverschlüsselung, Dateiverschlüsselung und Verschlüsselung übertragener Daten in Kommunikationsnetzwerken (wie TLS, E-Mails, Sofortnachrichten usw.) verwendet.

Asymmetrische (oder öffentliche Schlüssel) Verschlüsselungsalgorithmen

Im Gegensatz zu symmetrischen Algorithmen, die sowohl für Verschlüsselungs- als auch für Entschlüsselungsvorgänge denselben Schlüssel verwenden, verwenden die asymmetrischen Algorithmen für diese beiden Schritte zwei identische Schlüssel. Diese Algorithmen werden zur Berechnung digitaler Signaturen und Schlüsselerstellungsprotokolle verwendet. Dies bringt jedoch auch die Herausforderung mit sich, dass zwei Schlüssel verwendet werden müssen, was die Dinge komplexer macht.



Um ein grundlegendes Verschlüsselungsschema sicher zu konfigurieren, ist es sehr wichtig, dass alle diese Parameter (mindestens) korrekt ausgelegt sind:

  • Die Auswahl des richtigen Algorithmus ist wichtig.
  • Auswahl der richtigen Betriebsart für die entsprechende Aufgabe
  • Auswahl des richtigen Polsterungsschemas gemäß Anforderung
  • Wählen Sie die richtigen Tasten und ihre Größen entsprechend
  • Korrigieren Sie die Initialisierung mit kryptografisch sicherem CSPRING.

Es ist sehr wichtig, alle diese Parameter sicher zu konfigurieren. Selbst eine winzige Fehlkonfiguration kann ein gesamtes Kryptosystem gefährden und es für Angriffe von Hackern und anderer Malware öffnen. Um diese Diskussion einfach zu halten, wollen wir daher nur algorithmisch unabhängige Initialisierungen einer Chiffre diskutieren. Anstatt solche Verschlüsselungen selbst durchzuführen, ist es immer besser, Experten ihre Aufgabe zu überlassen, mehr algorithmisch abhängige Konfigurationen wie p- und q-Werte des RSA-Algorithmus usw. zu konfigurieren, indem Sie nur die rudimentären kryptografischen Parameter über mehr als einem halben konfigurieren Dutzend Klassen werden verwendet.

Die Einführung von Klassenhierarchien, vielen überladenen Konstruktoren / Methoden usw. fügt viele Komplexitäten hinzu, die es unnötig machen. Ich wünschte, Java würde die Grundkonfigurationen nicht komplizieren und würde einfach eine vereinfachte Architektur wie die von Microsoft verwenden, bei der alle diese Parameter innerhalb des Umfangs einer einzigen Klasse SymmetricAlgorithm und AsymmetricAlgorithm liegen. Für die ersten drei anzugebenden Parameter (Algorithmus, Betriebsart und Füllschema) verwendet ein Cipher-Objekt eine Transformationszeichenfolge.

  • Auswahl des richtigen Algorithmus

Eine Transformationszeichenfolge enthält zweifellos den Namen eines kryptografischen Algorithmus. Zwischen symmetrischer und asymmetrischer Verschlüsselung gibt es 11 Algorithmen (nicht in Bezug auf verschiedene PBEWithAnd-Kombinationen), die gemäß der Standardalgorithmus-Namensdokumentation angegeben werden können. Von diesen sind nur zwei (jeweils eine für symmetrische und asymmetrische Verschlüsselungen) tatsächlich vollständig gesichert.

Die verbleibenden Algorithmen sind entweder übermäßig defekt (DES, RC2 usw.) oder es treten Risse auf (RC5), wodurch sie bei ausreichender CPU-Leistung zerbrechlich werden. Sie können bereits defekt sein, wenn Sie dies lesen. Ein sicherheitsbewusster Entwickler darf weder die NIST-Spezifikationen lesen noch die neuesten Ereignisse und Forschungsergebnisse in der Kryptografie-Community verfolgen. Sie könnten die kaputten oder riskanten Algorithmen, den Digest oder den Pseudozufallsgenerator aufgreifen.

Immer für:

  1. Symmetrischer Algorithmus: Es wird eine AES / AESWrap-Blockverschlüsselung verwendet.

  2. Asymmetrischer Algorithmus: RSA wird verwendet.

  • Arbeitsweise

Die Funktionsweise ist Teil der Transformation und nur für Blockchiffren relevant. Wenn wir asymmetrische Chiffren verwenden, verwenden Sie die EZB als Betriebsart. Dies ist im Wesentlichen ein Hack hinter den Kulissen, dh, Sie ignorieren diesen Wert. Die Java-Anbieter wie SunJCE und SunPKCS11 verwenden standardmäßig den EZB-Modus für symmetrische und asymmetrische Algorithmen. Es mag eine gute Sache für asymmetrische Algorithmen sein, aber eine schlechte Idee für Blockchiffren.

wie man double in int java umwandelt

Die Anbieter könnten angewiesen werden, basierend auf dem verwendeten Algorithmus sichere Standardeinstellungen vorzunehmen. Verwenden Sie symmetrische Verschlüsselung, um sich vor Wiederholungsangriffen oder bekannten Klartextangriffen zu schützen. Verwenden Sie auch eine Transformation, die einen Algorithmus vollständig spezifiziert (d. H. Mit seiner Funktionsweise und Auffüllung). Mach niemals so etwas wie das unten erwähnte.

Wie oben würde der AES-Algorithmus im EZB-Betriebsmodus verwendet, was Wiederholungsangriffe sehr einfach macht. Wenn bei Neuentwicklungen die geringste Möglichkeit besteht, alte Arbeiten zu überarbeiten, sollten wir die authentifizierte Verschlüsselung mit dem AEAD-Modus (Associated Data) verwenden (z. B. GCM und CCM). Wir haben ein Authentifizierungs-Tag mit einer vollen Länge von 128 Bit. Wenn wir einen nicht authentifizierten Modus verwenden, verwenden wir CBC oder CTR mit einem MAC, um den Chiffretext zu authentifizieren.

  • Auswahl des geeigneten Polsterungsschemas

Bei den gängigen Blockverschlüsselungsmodi muss die Länge des Klartextes ein Vielfaches der Blockgröße des zugrunde liegenden Verschlüsselungsalgorithmus betragen, was selten der Fall ist. Daher benötigen wir etwas Polsterung.Das Java-Programm bietet drei verschiedene Schemata für die symmetrische Verschlüsselung, eines ist No Padding (was nicht akzeptabel ist) und eines ist ISO10126Padding, das seit 2007 zurückgezogen wurde.

Daher ist die einzige geeignete Option die Verwendung von PKCS5Padding. Die Mischung einiger Betriebsmodi (z. B. CBC-Modus) und des PKCS5Padding-Padding-Schemas kann zu Padding-Orakelangriffen führen. Es ist gefährlicher, ein Auffüllschema überhaupt nicht zu erwähnen, als ein Schema bereitzustellen, das nur für bestimmte Arten von Angriffen anfällig ist. Die AEAD-Betriebsart wird am meisten empfohlen, um sicherzustellen, dass Sie vor diesen Angriffen geschützt sind.

  • Asymmetrische Algorithmen

Bei asymmetrischen Algorithmen haben wir die Möglichkeit, zwischen zwei Füllschemata zu wählen. Es ist wichtig sicherzustellen, dass nur OAEPWithAndPadding-Schemata verwendet werden. Verwenden Sie im Falle einer Verdauung entweder SHA1 oder SHA256 / 384/512. Verwenden Sie für die Maskenerzeugungsfunktion (MGF) die angegebene MGF1-Polsterung. PKCS1Padding mit RSA ist seit 1998 anfällig für Chiffretext-Angriffe [6].

Hier sprechen wir über die richtige Verwendung einer Transformation in einer 'Cipher.getInstance' -Methode.

  • Symmetrische Verschlüsselung

  • Asymmetrische Verschlüsselung

Die Sicherheitsstufe eines Verschlüsselungsschemas ist direkt proportional zur Größe seines Schlüssels. Die Schlüssellänge muss lang genug sein, damit alle Brute-Force-Angriffe gleichzeitig nicht mehr durchführbar sind. Sie sollte auch kurz genug sein, um die Durchführbarkeit der Berechnungen zu berücksichtigen. Darüber hinaus müssen wir versuchen zu überlegen, was den Rechenfortschritten für die nächsten 30 Jahre noch standhält.

Damit kommen wir zum Ende der Verschlüsselung in Java-Artikel. Ich hoffe, Sie haben eine Vorstellung von Verschlüsselung und Entschlüsselung und warum es in Java verwendet wird.

Besuche die von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt. Der Java J2EE- und SOA-Schulungs- und Zertifizierungskurs von Edureka richtet sich an Studenten und Fachleute, die Java-Entwickler werden möchten. Der Kurs soll Ihnen einen Vorsprung in die Java-Programmierung verschaffen und Sie sowohl für grundlegende als auch für fortgeschrittene Java-Konzepte sowie für verschiedene Java-Frameworks wie Hibernate & Spring schulen.

Hast du eine Frage an uns? Bitte erwähnen Sie dies im Kommentarbereich dieses Blogs „Verschlüsselung in Java“. Wir werden uns so schnell wie möglich bei Ihnen melden.