Schutz vertraulicher Daten durch Verschlüsselung auf Feldebene - Amazon CloudFront

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Schutz vertraulicher Daten durch Verschlüsselung auf Feldebene

Mit Amazon CloudFront können Sie sichere end-to-end Verbindungen zu Originalservern mithilfe von HTTPS erzwingen. Die Verschlüsselung auf Feldebene fügt zusammen mit HTTPS eine zusätzliche Sicherheitsebene hinzu, mit der Sie bestimmte Daten während der gesamten Systemverarbeitung so schützen können, dass nur bestimmte Anwendungen sie sehen können.

Die Verschlüsselung auf Feldebene ermöglicht es Ihren Benutzern, vertrauliche Informationen in sicherer Weise auf Ihre Webserver hochzuladen. Die vertraulichen Informationen, die von Ihren Benutzern bereitgestellt werden, werden am Rand, in der Nähe des Benutzers, verschlüsselt und bleiben über den gesamten Anwendungs-Stack hinweg verschlüsselt. Diese Verschlüsselung stellt sicher, dass nur Anwendungen, die die Daten benötigen - und über die Anmeldeinformationen zum Entschlüsseln verfügen - dies tun können.

Um die Verschlüsselung auf Feldebene zu verwenden, geben Sie bei der Konfiguration Ihrer CloudFront Distribution die Felder in POST-Anfragen an, die Sie verschlüsseln möchten, sowie den öffentlichen Schlüssel, mit dem sie verschlüsselt werden sollen. Sie können bis zu 10 Datenfelder in einer Anfrage verschlüsseln. (Sie können nicht alle Daten in einer Anfrage mit Verschlüsselung auf Feldebene verschlüsseln; Sie müssen einzelne Felder angeben, die verschlüsselt werden sollen.)

Wenn die HTTPS-Anfrage mit Verschlüsselung auf Feldebene an den Ursprung weitergeleitet und durch Ihre Ursprungsanwendung bzw. Ihr Ursprungssubsystem geleitet wird, sind die vertraulichen Daten immer noch verschlüsselt, wodurch das Risiko einer Datenschutzverletzung oder eines versehentlichen Datenverlustes der vertraulichen Daten verringert wird. Komponenten, die aus geschäftlichen Gründen Zugriff auf die sensiblen Daten benötigen, wie z. B. ein Zahlungssystem für eine Kreditnummer, können mit dem entsprechenden privaten Schlüssel entschlüsseln und auf die Daten zugreifen.

Anmerkung

Beachten Sie, dass der Ursprung für die Verschlüsselung auf Feldebene die Chunked-Codierung unterstützen muss.

Verschlüsselung auf Feldebene in CloudFront

CloudFront Bei der Verschlüsselung auf Feldebene wird eine asymmetrische Verschlüsselung verwendet, die auch als Verschlüsselung mit öffentlichen Schlüsseln bezeichnet wird. Sie geben einen öffentlichen Schlüssel an CloudFront, und alle vertraulichen Daten, die Sie angeben, werden automatisch verschlüsselt. Der Schlüssel, den Sie angeben, CloudFront kann nicht zum Entschlüsseln der verschlüsselten Werte verwendet werden. Das kann nur mit Ihrem privaten Schlüssel geschehen.

Verschlüsseln Sie nur sensiblen Daten

Überblick über die Verschlüsselung auf Feldebene

Die folgenden Schritte geben einen Überblick über die Einrichtung der Verschlüsselung auf Feldebene. Spezifische Schritte finden Sie unter Verschlüsselung auf Feldebene einrichten.

  1. Holen Sie sich ein Schlüsselpaar aus öffentlichem und privatem Schlüssel. Sie müssen den öffentlichen Schlüssel abrufen und hinzufügen, bevor Sie mit der Einrichtung der Verschlüsselung auf Feldebene in beginnen. CloudFront

  2. Erstellen Sie ein Verschlüsselungsprofil auf Feldebene. Verschlüsselungsprofile auf Feldebene, in denen Sie erstellen CloudFront, definieren die Felder, die verschlüsselt werden sollen.

  3. Erstellen Sie eine Verschlüsselungskonfiguration auf Feldebene. Eine Konfiguration spezifiziert die zu verwendenden Profile, basierend auf dem Inhaltstyp der Anfrage oder einem Abfrageargument, um bestimmte Datenfelder zu verschlüsseln. Sie können auch die Verhaltensoptionen für die Anforderungsweiterleitung auswählen, die Sie für verschiedene Szenarien benötigen. Sie können beispielsweise das Verhalten festlegen, wenn der durch das Abfrageargument in einer Anforderungs-URL angegebene Profilname in nicht existiert. CloudFront

  4. Verknüpfen zu einem Cache-Verhalten. Verknüpfen Sie die Konfiguration mit einem Cache-Verhalten für eine Distribution, um anzugeben, wann Daten verschlüsselt CloudFront werden sollen.

Verschlüsselung auf Feldebene einrichten

Führen Sie die folgenden Schritte aus, um mit der Verschlüsselung auf Feldebene zu beginnen. Weitere Informationen zu Kontingenten (früher als Limits bezeichnet) für die Verschlüsselung auf Feldebene finden Sie unter Kontingente.

Schritt 1: Erstellen eines RSA-Schlüsselpaars

Um zu beginnen, müssen Sie ein RSA-Schlüsselpaar erstellen, das einen öffentlichen Schlüssel und einen privaten Schlüssel enthält. Der öffentliche Schlüssel ermöglicht CloudFront die Verschlüsselung von Daten, und der private Schlüssel ermöglicht es Komponenten an Ihrem Ursprung, die verschlüsselten Felder zu entschlüsseln. Sie können OpenSSL oder ein anderes Tool verwenden, um ein Schlüsselpaar zu erstellen. Die Schlüsselgröße muss 2048 Bit betragen.

Wenn Sie beispielsweise OpenSSL verwenden, können Sie mithilfe des folgenden Befehls ein Schlüsselpaar mit einer Länge von 2048 Bits erstellen und in der Datei private_key.pem speichern:

openssl genrsa -out private_key.pem 2048

Die erstellte Datei enthält den öffentlichen und den privaten Schlüssel. Um den öffentlichen Schlüssel aus dieser Datei zu extrahieren, führen Sie den folgenden Befehl aus:

openssl rsa -pubout -in private_key.pem -out public_key.pem

Die Datei mit dem öffentlichen Schlüssel (public_key.pem) enthält den codierten Schlüsselwert, den Sie im folgenden Schritt einfügen.

Schritt 2: Fügen Sie Ihren öffentlichen Schlüssel hinzu CloudFront

Nachdem Sie Ihr RSA-Schlüsselpaar erhalten haben, fügen Sie Ihren öffentlichen Schlüssel zu CloudFront hinzu.

Um Ihren öffentlichen Schlüssel zu CloudFront (Konsole) hinzuzufügen
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die CloudFront Konsole unterhttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Wählen Sie im Navigationsbereich Public key aus.

  3. Wählen Sie Add public key (Öffentlichen Schlüssel hinzufügen) aus.

  4. Geben Sie unter Key name einen eindeutigen Namen für den Schlüssel ein. Der Name darf keine Leerzeichen enthalten und darf nur alphanumerische Zeichen, Unterstriche (_) und Bindestriche (-) enthalten. Die maximale Anzahl der Zeichen beträgt 128.

  5. Fügen Sie unter Key value (Schlüsselwert) den codierten Schlüsselwert für den öffentlichen Schlüssel ein, einschließlich der Zeilen -----BEGIN PUBLIC KEY----- und -----END PUBLIC KEY-----.

  6. In Comment fügen Sie einen optionalen Kommentar hinzu. Beispielsweise können Sie das Ablaufdatum für den öffentlichen Schlüssel angeben.

  7. Wählen Sie Hinzufügen aus.

Sie können weitere Schlüssel zur Verwendung hinzufügen, CloudFront indem Sie die Schritte des Verfahrens wiederholen.

Schritt 3: Erstellen eines Profils für die Verschlüsselung auf Feldebene

Nachdem Sie mindestens einen öffentlichen Schlüssel hinzugefügt haben CloudFront, erstellen Sie ein Profil, das angibt, CloudFront welche Felder verschlüsselt werden sollen.

So erstellen Sie ein Profil für die Verschlüsselung auf Feldebene (Konsole)
  1. Wählen Sie im Navigationsbereich die Option Field-level encryption aus.

  2. Wählen Sie Create profile (Profil erstellen) aus.

  3. Füllen Sie die folgenden Felder aus:

    Profilname

    Geben Sie einen eindeutigen Namen für das Profil ein. Der Name darf keine Leerzeichen enthalten und darf nur alphanumerische Zeichen, Unterstriche (_) und Bindestriche (-) enthalten. Die maximale Anzahl der Zeichen beträgt 128.

    Public key name

    Wählen Sie in der Dropdownliste den Namen eines öffentlichen Schlüssels aus, den Sie CloudFront in Schritt 2 hinzugefügt haben. CloudFront verwendet den Schlüssel, um die Felder zu verschlüsseln, die Sie in diesem Profil angeben.

    Provider name

    Geben Sie einen Satz ein, um den Schlüssel zu identifizieren (z. B. den Anbieter, bei dem Sie das Schlüsselpaar erhalten haben). Diese Informationen werden zusammen mit dem privaten Schlüssel benötigt, wenn Anwendungen Datenfelder entschlüsseln. Der Name des Anbieters darf keine Leerzeichen enthalten und darf nur alphanumerische Zeichen, Doppelpunkte (:), Unterstriche (_) und Bindestriche (-) enthalten. Die maximale Anzahl der Zeichen beträgt 128.

    Feldnamensmuster für die Zuordnung

    Geben Sie die Namen der Datenfelder oder Muster ein, die Datenfeldnamen in der Anforderung identifizieren, die Sie verschlüsseln CloudFront möchten. Wählen Sie die Option +, um alle Felder hinzuzufügen, die Sie mit diesem Schlüssel verschlüsseln möchten.

    Für das Feldnamenmuster können Sie den gesamten Namen des Datenfeldes eingeben DateOfBirth, z. B. oder nur den ersten Teil des Namens mit einem Platzhalterzeichen (*), z. B. CreditCard *. Das Feldnamensmuster darf neben dem optionalen Platzhalterzeichen (*) nur aus alphanumerischen Zeichen, eckigen Klammern ([ und ]), Punkten (.), Unterstrichen (_) und Bindestrichen (-) bestehen.

    Stellen Sie sicher, dass Sie keine überschneidenden Zeichen für unterschiedliche Feldnamensmuster verwenden. Wenn Sie beispielsweise ein Feldnamensmuster von ABC* haben, können Sie kein weiteres Feldnamensmuster hinzufügen, das AB* ist. Dazu kommt, dass bei Feldnamen zwischen Groß- und Kleinschreibung unterschieden wird und die maximale Anzahl der Zeichen 128 beträgt.

    Kommentar

    (Optional) Geben Sie einen Kommentar zu diesem Profil ein. Die maximale Anzahl der Zeichen beträgt 128.

  4. Nachdem Sie die Felder ausgefüllt haben, wählen Sie Create profile (Profil erstellen) aus.

  5. Wenn Sie weitere Profile hinzufügen möchten, wählen Sie Add profile aus.

Schritt 4: Erstellen einer Konfiguration

Nachdem Sie ein oder mehrere Verschlüsselungsprofile auf Feldebene erstellt haben, erstellen Sie eine Konfiguration, die den Inhaltstyp der Anforderung angibt, die die zu verschlüsselnden Daten enthält, das für die Verschlüsselung zu verwendende Profil und andere Optionen, die angeben, wie Sie mit der Verschlüsselung umgehen CloudFront möchten.

Wenn die Daten beispielsweise nicht verschlüsselt CloudFront werden können, können Sie in den folgenden Szenarien angeben, ob eine Anfrage blockiert oder an Ihren Ursprung weitergeleitet werden CloudFront soll:

  • Wenn der Inhaltstyp einer Anfrage nicht in einer Konfiguration enthalten ist — Wenn Sie einer Konfiguration keinen Inhaltstyp hinzugefügt haben, können Sie angeben, ob die Anfrage mit diesem Inhaltstyp an den Ursprung weitergeleitet werden CloudFront soll, ohne Datenfelder zu verschlüsseln, oder ob die Anfrage blockiert und ein Fehler zurückgegeben werden soll.

    Anmerkung

    Wenn Sie einer Konfiguration einen Inhaltstyp hinzufügen, aber kein Profil angegeben haben, das mit diesem Typ verwendet werden soll, werden Anfragen mit diesem Inhaltstyp CloudFront immer an den Ursprung weitergeleitet.

  • Wenn der in einem Abfrageargument angegebene Profilname unbekannt ist — Wenn Sie das fle-profile Abfrageargument mit einem Profilnamen angeben, der für Ihre Distribution nicht existiert, können Sie angeben, ob die Anfrage an den Ursprung gesendet werden CloudFront soll, ohne Datenfelder zu verschlüsseln, oder ob die Anfrage blockiert und ein Fehler zurückgegeben werden soll.

In einer Konfiguration können Sie auch angeben, ob die Bereitstellung eines Profils als Abfrageargument in einer URL ein Profil überschreibt, das Sie dem Inhaltstyp für diese Abfrage zugeordnet haben. CloudFront Verwendet standardmäßig das Profil, das Sie einem Inhaltstyp zugeordnet haben, sofern Sie einen angeben. Auf diese Weise können Sie ein Profil haben, das standardmäßig verwendet wird, aber für bestimmte Anforderungen entscheiden, dass Sie ein anderes Profil erzwingen möchten.

So können Sie z. B. (in Ihrer Konfiguration) SampleProfile als das zu verwendende Abfrageargumentprofil festlegen. Dann könnten Sie https://d1234.cloudfront.net?fle-profile=SampleProfile anstelle des Profilshttps://d1234.cloudfront.net, das Sie SampleProfile für den Inhaltstyp der Anfrage eingerichtet haben, die URL CloudFront verwenden, um diese Anfrage verwenden zu können.

Sie können bis zu 10 Konfigurationen für ein einzelnes Konto erstellen und dann eine der Konfigurationen dem Cache-Verhalten einer beliebigen Verteilung für das Konto zuordnen.

So erstellen Sie eine Konfiguration für die Verschlüsselung auf Feldebene (Konsole)
  1. Wählen Sie auf der Seite Verschlüsselung auf Feldebene die Option Create configuration (Konfiguration erstellen) aus.

    Hinweis: Wenn Sie nicht mindestens ein Profil erstellt haben, wird die Option zum Erstellen einer Konfiguration nicht angezeigt.

  2. Füllen Sie die folgenden Felder aus, um das zu verwendende Profil anzugeben. (Einige Felder können nicht geändert werden.)

    Inhaltstyp (kann nicht geändert werden)

    Der Inhaltstyp ist auf application/x-www-form-urlencoded festgelegt und nicht änderbar.

    Default profile ID (optional)

    Wählen Sie in der Dropdown-Liste das Profil aus, das Sie dem Inhaltstyp im Feld Content type zuordnen möchten.

    Content-Format (kann nicht geändert werden)

    Das Content-Format ist auf URLencoded festgelegt und nicht änderbar.

  3. Wenn Sie das CloudFront Standardverhalten für die folgenden Optionen ändern möchten, aktivieren Sie das entsprechende Kontrollkästchen.

    Weiterleiten der Anfrage an den Ursprung, wenn der Inhaltstyp der Anfrage nicht konfiguriert ist.

    Aktivieren Sie das Kontrollkästchen, wenn Sie zulassen möchten, dass die Anfrage an Ihren Ursprung geht, wenn Sie kein Profil für den Inhaltstyp der Anfrage angegeben haben.

    Überschreiben des Profils für einen Inhaltstyp mit einem bereitgestellten Abfrageargument

    Aktivieren Sie das Kontrollkästchen, wenn Sie zulassen möchten, dass ein in einem Abfrageargument angegebenes Profil das Profil überschreibt, das Sie für einen Inhaltstyp angegeben haben.

  4. Wenn Sie das Kontrollkästchen aktivieren, damit ein Abfrageargument das Standardprofil überschreiben kann, müssen Sie die folgenden zusätzlichen Felder für die Konfiguration ausfüllen. Sie können bis zu fünf dieser Abfrageargumentzuordnungen für die Verwendung mit Abfragen erstellen.

    Query argument

    Geben Sie den Wert ein, den Sie für URLs für das fle-profile-Abfrageargument einbeziehen möchten. Dieser Wert weist CloudFront an, dass die mit diesem Abfrageargument verknüpfte Profil-ID (die Sie im nächsten Feld angeben) für die Verschlüsselung auf Feldebene für diese Abfrage verwendet werden soll.

    Die maximale Anzahl der Zeichen beträgt 128. Der Wert darf keine Leerzeichen enthalten und darf nur alphanumerische Zeichen oder die folgenden Zeichen enthalten: Bindestrich (-), Punkt (.), Unterstrich (_), Stern (*), Pluszeichen (+), Prozent (%).

    Profile ID

    Wählen Sie in der Dropdown-Liste das Profil aus, das Sie mit dem Wert verknüpfen möchten, den Sie für Query argument eingegeben haben.

    Weiterleiten der Anfrage an den Ursprung, wenn das in einem Abfrageargument angegebene Profil nicht existiert.

    Aktivieren Sie das Kontrollkästchen, wenn Sie zulassen möchten, dass die Anfrage an Ihren Ursprung weitergeleitet wird, wenn das in einem Abfrageargument angegebene Profil nicht in definiert ist. CloudFront

Schritt 5: Hinzufügen einer Konfiguration zu einem Cache-Verhalten

Um eine Verschlüsselung auf Feldebene zu verwenden, verknüpfen Sie eine Konfiguration mit einem Cache-Verhalten für eine Verteilung, indem Sie die Konfigurations-ID als Wert für Ihre Verteilung hinzufügen.

Wichtig

Um eine Verschlüsselungskonfiguration auf Feldebene mit einem Cacheverhalten zu verknüpfen, muss die Verteilung so konfiguriert sein, dass sie immer HTTPS verwendet und HTTP POST- und PUT-Anforderungen von Viewern akzeptiert. D.h., eine der folgenden Bedingungen muss erfüllt sein:

  • Die Viewer Protocol Policy (Viewer-Protokollrichtlinie) des Cacheverhaltens muss Redirect HTTP to HTTPS (HTTP zu HTTPS umleiten) oder HTTPS only (Nur HTTPS) sein. (In AWS CloudFormation oder in der CloudFront API, ViewerProtocolPolicy muss auf redirect-to-https oder gesetzt seinhttps-only.)

  • Die Allowed HTTP Methods (Erlaubte HTTP-Methoden) des Cache-Verhaltens müssen auf GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE gesetzt sein. (In AWS CloudFormation oder der CloudFront API AllowedMethods muss auf,GET,,,HEAD,OPTIONS, PUT POSTPATCH, gesetzt seinDELETE. Diese können in beliebiger Reihenfolge angegeben werden.)

  • Die Origin Protocol Policy (Ursprungsprotokollrichtlinie) der Ursprungseinstellungen muss auf Match Viewer (Übereinstimmung mit Viewer) oder HTTPS Only (Nur HTTPS) festgelegt sein. (In AWS CloudFormation oder in der CloudFront API, OriginProtocolPolicy muss auf match-viewer oder gesetzt werdenhttps-only.)

Weitere Informationen finden Sie unter Referenz zu den Verteilungseinstellungen.

Entschlüsselung von Datenfeldern an Ihrem Ursprung

CloudFront verschlüsselt Datenfelder mithilfe von. AWS Encryption SDK Die Daten bleiben während des gesamten Anwendungs-Stacks verschlüsselt und können nur von Anwendungen abgerufen werden, die über die Anmeldeinformationen verfügen, um sie zu entschlüsseln.

Nach der Verschlüsselung wird der Verschlüsselungstext base64-kodiert. Wenn Ihre Anwendungen den Text am Ursprung entschlüsseln, müssen sie zuerst den Verschlüsselungstext entschlüsseln und dann das AWS Encryption SDK verwenden, um die Daten zu entschlüsseln.

Das folgende Codebeispiel veranschaulicht, wie Anwendungen Daten an Ihrem Ursprung entschlüsseln können. Beachten Sie Folgendes:

  • Um das Beispiel zu vereinfachen, lädt dieses Beispiel öffentliche und private Schlüssel (im DER-Format) aus Dateien im Arbeitsverzeichnis. In der Praxis würden Sie den privaten Schlüssel an einem sicheren Offline-Platz, wie z. B. einem Offline-Hardware-Sicherheitsmodul, aufbewahren und den öffentlichen Schlüssel an Ihr Entwicklungsteam verteilen.

  • CloudFront verwendet beim Verschlüsseln der Daten spezifische Informationen, und für die Entschlüsselung sollte am Ursprung derselbe Satz von Parametern verwendet werden. Zu den Parametern, CloudFront die bei der Initialisierung verwendet werden, MasterKey gehören:

    • PROVIDER_NAME: Sie haben diesen Wert beim Anlegen eines Verschlüsselungsprofils auf Feldebene angegeben. Verwenden Sie hier denselben Wert.

    • KEY_NAME: Sie haben einen Namen für Ihren öffentlichen Schlüssel erstellt, als Sie ihn hochgeladen haben CloudFront, und dann den Schlüsselnamen im Profil angegeben. Verwenden Sie hier denselben Wert.

    • ALGORITHMUS: RSA/ECB/OAEPWithSHA-256AndMGF1Padding Wird als Algorithmus für die Verschlüsselung CloudFront verwendet. Sie müssen also denselben Algorithmus verwenden, um die Daten zu entschlüsseln.

  • Wenn Sie das folgende Beispielprogramm mit dem Verschlüsselungstext als Eingabe ausführen, werden die entschlüsselten Daten in Ihrer Konsole ausgegeben. Weitere Informationen finden Sie im Java-Beispielcode im AWS Encryption SDK.

Beispiel-Code

import java.nio.file.Files; import java.nio.file.Paths; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import org.apache.commons.codec.binary.Base64; import com.amazonaws.encryptionsdk.AwsCrypto; import com.amazonaws.encryptionsdk.CryptoResult; import com.amazonaws.encryptionsdk.jce.JceMasterKey; /** * Sample example of decrypting data that has been encrypted by CloudFront field-level encryption. */ public class DecryptExample { private static final String PRIVATE_KEY_FILENAME = "private_key.der"; private static final String PUBLIC_KEY_FILENAME = "public_key.der"; private static PublicKey publicKey; private static PrivateKey privateKey; // CloudFront uses the following values to encrypt data, and your origin must use same values to decrypt it. // In your own code, for PROVIDER_NAME, use the provider name that you specified when you created your field-level // encryption profile. This sample uses 'DEMO' for the value. private static final String PROVIDER_NAME = "DEMO"; // In your own code, use the key name that you specified when you added your public key to CloudFront. This sample // uses 'DEMOKEY' for the key name. private static final String KEY_NAME = "DEMOKEY"; // CloudFront uses this algorithm when encrypting data. private static final String ALGORITHM = "RSA/ECB/OAEPWithSHA-256AndMGF1Padding"; public static void main(final String[] args) throws Exception { final String dataToDecrypt = args[0]; // This sample uses files to get public and private keys. // In practice, you should distribute the public key and save the private key in secure storage. populateKeyPair(); System.out.println(decrypt(debase64(dataToDecrypt))); } private static String decrypt(final byte[] bytesToDecrypt) throws Exception { // You can decrypt the stream only by using the private key. // 1. Instantiate the SDK final AwsCrypto crypto = new AwsCrypto(); // 2. Instantiate a JCE master key final JceMasterKey masterKey = JceMasterKey.getInstance( publicKey, privateKey, PROVIDER_NAME, KEY_NAME, ALGORITHM); // 3. Decrypt the data final CryptoResult <byte[], ? > result = crypto.decryptData(masterKey, bytesToDecrypt); return new String(result.getResult()); } // Function to decode base64 cipher text. private static byte[] debase64(final String value) { return Base64.decodeBase64(value.getBytes()); } private static void populateKeyPair() throws Exception { final byte[] PublicKeyBytes = Files.readAllBytes(Paths.get(PUBLIC_KEY_FILENAME)); final byte[] privateKeyBytes = Files.readAllBytes(Paths.get(PRIVATE_KEY_FILENAME)); publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(PublicKeyBytes)); privateKey = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes)); } }