C-code zu bereinigen Speicher für openssl EVP_PKEY privaten Schlüssel

Fange ich lernen OpenSSL-Programmierung in C/C++. Ein Problem, das ich gestoßen ist, wie könnte ich sicher wischen Sie den Speicher für private Schlüssel?

Zum Beispiel, kann ich code:

EVP_PKEY *private_key = PEM_read_bio_PrivateKey( bio, ,,,)
RSA *r = EVP_PKEY_get1_RSA( private_key);

Ich würde gerne auslöschen private_key aus dem Speicher sauber vor der Verwendung EVP_PKEY_free() zu befreien.

Wäre ich dankbar für Hilfen und/oder Ihre Anregungen.
Danke.

  • Wird memset(...) für Sie arbeiten?
  • Sicher clearing-Speicher ist yuite ein kompliziertes Thema. Es hängt von der Implementierung, wie dies zu erreichen. Beachten Sie, dass nicht nur das löschen der Schlüssel ist. Sie zu Lesen und zu speichern ist schon ein problem, wenn Sie verhindern möchten, dass andere Prozesse wie z.B. das Speicher Lesen.
InformationsquelleAutor pokeba | 2017-03-18



One Reply
  1. 1

    EVP_PKEY *private_key = PEM_read_bio_PrivateKey( bio, ,,,)

    Ich würde gerne auslöschen private_key aus dem Speicher sauber vor der Verwendung EVP_PKEY_free zu befreien.

    OpenSSL ist EVP_PKEY_free wischt den privaten Schlüssel für Sie. Sie nicht haben, etwas besonderes zu tun.

    RSA *r = EVP_PKEY_get1_RSA( private_key);

    Den get1 bedeutet, dass der Referenzzähler gestoßen und Sie effektiv haben Ihre eigene Kopie des Objekts. Ein get0 bedeutet, dass Sie bekam einen Zeiger auf ein vorhandenes Objekt, und Sie sollten nicht nennen free auf Sie. Wegen get1 haben, müssen Sie RSA_free auf Sie, um sicherzustellen, dass es gelöscht wird. Wie bei EVP_PKEY_free, RSA_free wird wischen Sie die-Taste.

    Bitte rufen Sie nicht memset. Diese sind undurchsichtige Strukturen, und Sie haben zu verfolgen eine Reihe von Zeigern auf richtig klar, die sub-Objekte. Viel mehr Felder ausgeblendet wurden in OpenSSL 1.1.0, so sein wird, schwieriger zu Folgen den Zeigern (wenn Sie wollte). Siehe auch Fehler: „invalid use of incomplete type ‚RSA {aka struct rsa_st}“ OpenSSL 1.1.0, Visual Studio und error C2027: Verwendung des undefinierten Typs „rsa_st‘ in OpenSSL 1.1.0, EVP_get_cipherbyname und „undefined struct/union evp_cipher_st“ in OpenSSL 1.1.0, etc.


    Hier sind einige weitere Lesen, die Sie interessieren könnten:

    Wenn Funktionen wie EVP_PKEY_free und RSA_free genannt werden, Sie schließlich am Ende in einem Aufruf OPENSSL_cleanse vor dem Speicher an das Betriebssystem zurückgegeben. Im Falle eines privaten RSA-Schlüssel, das heißt es muß also mindesten 8 mal wischen Sie die byte-arrays, die im Zusammenhang mit n, e, d, p, q, dp, dq, und invq.

    • jww, vielen Dank. Ich überprüfte den Quellcode für openssl 1.0.1 u, die ich verwende. Ich sehe keine OPENSSL_cleanse () – Aufruf aufgerufen wird, von EVP_PKEY_free(). Aber ich sehe viele OPENSSL_cleanse() aufgerufen RSA_free(). Da die rsa-Schlüssel ist nur eine Referenz aus dem EVP_PKEY struct Speicherbereich, konnte ich sicher davon ausgehen, dass wenn ich RSA_free(), es wird wischen Sie den rsa-Schlüssel und somit auch bereinigt den Speicher von EVP_PKEY struct?
    • EVP_PKEY_free() schließlich fordert EVP_PKEY_free_it() verwendet, die ameth Zeiger der EVP_PKEY Struktur zum Aufruf der Funktion verantwortlich für die Reinigung privater Schlüssel Daten für den jeweiligen Schlüssel geben… Abstraktionen Abstraktionen überall!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.