Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Libsodium Extension als Alternative für entfernte Mcrypt Extension installieren (ab PHP 7.2)

Mitglied: Frank

Frank (Level 5) - Jetzt verbinden

27.01.2017, aktualisiert 30.11.2017, 3260 Aufrufe, 2 Kommentare, 2 Danke

Da die PHP Mcrypt Extension ab PHP 7.2 entfernt wird, suche ich schon einige Zeit lang eine gute und sichere Alternative. Siehe dazu auch PHP RFC: Mcrypt Extension wird ab PHP 7.2 entfernt.

Meine Lösung heißt: Libsodium (a portable, cross-compilable, installable, packageable, API-compatible version of NaCl (Networking and Cryptography library)).

Der folgende Installationsvorgang ist nur für PHP Versionen kleiner als 7.2.0 nötig. Alle Versionen darüber haben libsodium bereits integriert.

Dazu muss man die libsodium PHP Extension installieren (Alternativ gibt es sie auch auf GitHUB):
01.
pecl install libsodium
und in die php.ini folgende Zeile hinzufügen:
01.
extension=sodium.so
Dann kann man überprüfen, ob alle funktioniert:

01.
<?php
02.
if (extension_loaded("sodium")) {
03.
    $constants = get_defined_constants(true);
04.
    var_dump([
05.
        SODIUM_LIBRARY_VERSION,
06.
        get_extension_funcs('sodium'),
07.
        $constants["sodium"]
08.
    ]);
09.
} else {
10.
    // sodium not fount
11.
}
Es sollte die aktuelle Version der libsodium Extension erscheinen (kann natürlich variieren)

01.
$ php version_check.php
02.
array(3) {
03.
  [0]=>
04.
  string(6) "1.0.15"
05.
  [1]=>
06.
  array(82) {
07.
    [0]=>
08.
    string(41) "sodium_crypto_aead_aes256gcm_is_available"
09.
    [1]=>
10.
    string(36) "sodium_crypto_aead_aes256gcm_decrypt"
11.
    [2]=>
12.
    string(36) "sodium_crypto_aead_aes256gcm_encrypt"
13.
    [3]=>
14.
    string(43) "sodium_crypto_aead_chacha20poly1305_decrypt"
15.
    [4]=>
16.
    string(43) "sodium_crypto_aead_chacha20poly1305_encrypt"
17.
    [5]=>
18.
    usw.
19.
}
Eine detailierte Installationsanleitung findet ihr hier:
https://paragonie.com/book/pecl-libsodium/read/00-intro.md#installing-li ...


Sichere Passwörter mit PHP erzeugen (benutzt Argon2 - Gewinner der Hashing Competition 2015)

01.
// Password hashing:
02.
$hash_str = sodium_crypto_pwhash_str(
03.
    $password,
04.
    SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
05.
    SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
06.
);
07.
// Password verification:
08.
if (sodium_crypto_pwhash_str_verify($hash_str, $password)) {
09.
    // recommended: wipe the plaintext password from memory
10.
    sodium_memzero($password);
11.
    
12.
    // Password was valid.
13.
} else {
14.
    // recommended: wipe the plaintext password from memory
15.
    sodium_memzero($password);
16.
    
17.
    // Password was invalid.
18.
}

Basic Encryption

01.
$key = sodium_randombytes_buf(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
02.
 
03.
// Using your key to encrypt information
04.
$nonce = sodium_randombytes_buf(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
05.
$ciphertext = sodium_crypto_secretbox('test', $nonce, $key);

Basic Decryption

Dazu brauchen wir als Eingabe natürlich das selbe "nonce" und den selben "key" (siehe oben) um die Nachricht wieder zu entschlüsseln.

01.
$plaintext = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
02.
if ($plaintext === false) {
03.
    throw new Exception("Bad ciphertext");
04.
}

Hier eine erweitere Version mit AES-256 + GCM:

AEAD Encryption - Authenticated (secret-key) Encryption with Associated Data - AES-256 + GCM

01.
$key = sodium_randombytes_buf(SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES);
02.
if (sodium_crypto_aead_aes256gcm_is_available()) {
03.
    $nonce = sodium_randombytes_buf(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES);
04.
    $ad = 'Additional (public) data';
05.
    $ciphertext = sodium_crypto_aead_aes256gcm_encrypt(
06.
        $message,
07.
        $ad,
08.
        $nonce,
09.
        $key
10.
    );
11.
}

AEAD Decryption

Dazu brauchen wir als Eingabe natürlich das selbe "nonce" und den selben "key" (siehe oben) um die Nachricht wieder zu entschlüsseln.

01.
if (sodium_crypto_aead_aes256gcm_is_available()) {
02.
    $decrypted = sodium_crypto_aead_aes256gcm_decrypt(
03.
        $ciphertext,
04.
        $ad,
05.
        $nonce,
06.
        $key
07.
    );
08.
    if ($decrypted === false) {
09.
        throw new Exception("Bad ciphertext");
10.
    }
11.
}
Weitere Informationen und Beispiele für PHP findet ihr auf dieser Seite:
https://paragonie.com/book/pecl-libsodium

Viel Spaß beim Umbauen ...

Update vom 30.11.2017

Die Version PHP 7.2.0 hat seit dem 30.11.2017 libsodium integriert. Es wird libsodium-php 2.x verwendet. In der ursprünglichen Anleitung wurde libsodium-php 1.x verwendet. Ich habe die Codebeispiele für die Version 2.x angepasst. Auch https://paragonie.com/book/pecl-libsodium hat seine Beispiele an die neue Version angepasst.


Gruß
Frank
Mitglied: Frank
30.11.2017, aktualisiert um 21:10 Uhr
Die Anleitung wurde zum heutigen Erscheinen von PHP 7.2.0 (30.11.2017) auf libsodium-php 2.x aktualisiert. libsodium ab jetzt fester Bestandteil von PHP.

Migrationshinweise für libsodium-php 1.x (< PHP 7.2) vs libsodium-php 2.x (>=PHP 7.2)

This extension was originally named libsodium. The module was named libsodium.so or libsodium.dll.

All the related functions and constants were contained within the \Sodium\ namespace.

This extension was accepted to be distributed with PHP >= 7.2, albeit with a couple breaking changes:

  • No more \Sodium\ namespace. Everything must be in the global namespace.
  • The extension should be renamed sodium. So, the module becomes sodium.so or sodium.dll.

The standalone extension (this repository; also the extension available on PECL) was updated to match these expectations, so that its API is compatible with what will be shipped with PHP 7.2.

libsodium-php 2.x is thus not compatible with libsodium-php 1.x.
The 1.x branch will not receive any public updates any more.


Gruß
Frank
Bitte warten ..
Ähnliche Inhalte
PHP

PHP RFC: Mcrypt Extension wird ab PHP 7.2 entfernt

Information von FrankPHP

Ein RFC ist grob eine Abstimmung unter den PHP-Entwicklern, um neue, bestehende oder alte Feature hinzuzufügen, zu ändern, oder ...

PHP

PHP 7.2 veröffentlicht

Information von FrankPHP

Das PHP-Team hat heute, den 30.11.207 die aktuelle Version von PHP 7.2 veröffentlicht. Eine der wichtigsten Änderungen für PHP-Entwickler ...

Windows 10

Windows 10 (Version 1803): Heimnetzgruppe entfernt

Erfahrungsbericht von ashnodWindows 101 Kommentar

Ahoi Auf meinem heimischen Laptop hat sich heute 1803 installiert. In den Benachrichtigungen fand ich dann den Hinweis das ...

Sicherheit

"Display Widgets": WordPress-Plugin mit Backdoor aus Repository entfernt

Information von BassFishFoxSicherheit

Vielleicht sehr interessant fuer alle Wordpress-Benutzer. Sehr interessant auch die Story dahinter. BFF

Neue Wissensbeiträge
iOS
IOS hat nen Cursor !!!
Tipp von Criemo vor 10 StundeniOS2 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Off Topic
Avengers 4: Endgame - Erster Trailer
Information von Frank vor 2 TagenOff Topic2 Kommentare

Ich weiß es ist Off Topic, aber ich freue mich auf diesen Film und vielleicht geht es anderen hier ...

Webbrowser
Microsoft bestätigt Edge mit Chromium-Kern
Information von Frank vor 2 TagenWebbrowser5 Kommentare

Microsoft hat nun in seinem Blog bestätigt, dass die nächste Edge Version kein EdgeHTML mehr für die Darstellung benutzen ...

Sicherheit

MikroTik: Sicherheitslücke wird ausgenutzt obwohl ein Update seit langem verfügbar ist

Information von sabines vor 3 TagenSicherheit

Obwohl ein Update, dass die nun massenhaft ausgenutzte Lücke schließt, seit langem (März 2018) verfügbar ist, wird es offensichtlich ...

Heiß diskutierte Inhalte
Exchange Server
Exchange Server 2010: Keine Eingehenden E-MAils
Frage von gabeBUExchange Server15 Kommentare

Hallo Zusammen Ich habe das kurzen auf dem Exchange 2010 Server das Problem, dass ich keine externen E-Mails mehr ...

Rechtliche Fragen
Systemhaus auf Abwegen
Frage von rocco61Rechtliche Fragen14 Kommentare

Hallo zusammen, bin derzeit ratlos bei dem folgenden Scenario: In einen Seniorenheim wurde beschlossen, die IT an eine andere ...

Server
Server in zwei verschiedene Netzwerke einbinden
Frage von BennyFServer10 Kommentare

Hallo zusammen, bei uns im Haus sind im Erdgeschoss die Geschäftsräume und ab dem 1. Stock sind unsere privaten ...

Outlook & Mail
Kalendersync mit Android und Outlook
Frage von Stefan007Outlook & Mail9 Kommentare

Hi Leute, kennt jemand eine Möglichkeit um Termine zwischen installiertem Outlook auf dem PC und dem Kalender auf einem ...