RK3588

cropped-2.8.1.png
51miz-P1371254-FUV9P8GX-3840x1711

Der Rockchip RK3588 ist ein leistungsstarker System-on-Chip (SoC), der sich durch seine Vielseitigkeit und fortschrittlichen Funktionen auszeichnet, einschließlich der Hardware-Beschleunigung für kryptografische Operationen.

Intelligente Einzelhandelsterminals
Intelligente Einzelhandelsterminals

Einführung in die Krypto-Hardware-Beschleunigung des RK3588

Der RK3588 ist ein Octa-Core-SoC mit vier Cortex-A76- und vier Cortex-A55-Kernen, einer Mali-G610-GPU und einer dedizierten Neural Processing Unit (NPU). Eine seiner weniger beachteten, aber äußerst wertvollen Funktionen ist die integrierte Unterstützung für kryptografische Operationen, die durch Hardware-Beschleuniger und ARMv8-A-Kryptografie-Erweiterungen ermöglicht wird. Diese Funktionen sind besonders relevant für Anwendungen wie sichere Datenübertragung, Medien-Transkodierung, virtuelle private Netzwerke (VPNs) und Blockchain-Technologien.

Die Hardware-Beschleunigung für Kryptografie umfasst insbesondere:

  • AES (Advanced Encryption Standard): Unterstützung für verschiedene Modi wie CBC, ECB und CTR mit Schlüssellängen bis zu 256 Bit.

  • Hash-Funktionen: Hardware-unterstützte Berechnung von SHA-256 und anderen kryptografischen Hash-Algorithmen.

  • Zufallszahlengenerierung: Ein dedizierter True Random Number Generator (TRNG) für kryptografische Schlüssel.

Diese Funktionen ermöglichen eine erhebliche Leistungssteigerung im Vergleich zu Software-basierten Implementierungen, insbesondere bei ressourcenintensiven Aufgaben wie der Verschlüsselung großer Datenmengen.

Technische Grundlagen

Hardware-Architektur

Die Krypto-Hardware des RK3588 ist in Form eines dedizierten Krypto-Controllers implementiert, der als „rk2_crypto“ im Linux-Kernel bekannt ist. Dieser Controller arbeitet mit den ARM-Kryptografie-Erweiterungen zusammen, die in den Cortex-A76- und A55-Kernen integriert sind. Die wichtigsten Merkmale sind:

  • AES-Beschleunigung: Hardware-unterstützte Verschlüsselung und Entschlüsselung mit minimaler CPU-Belastung.

  • Skalierbarkeit: Unterstützung für mehrere parallele kryptografische Operationen, ideal für Multitasking-Umgebungen.

  • Sicherheitsfunktionen: Schutz vor Seitenkanalangriffen durch hardwareseitige Optimierungen.

Kernel-Unterstützung

Seit November 2023 gibt es signifikante Fortschritte in der Linux-Kernel-Unterstützung für die Krypto-Hardware des RK3588. Patches, die auf der Linux-Kernel-Mailingliste (LKML) eingereicht wurden, haben Treiber wie rk2_crypto.c, rk2_crypto_ahash.c und rk2_crypto_skcipher.c eingeführt. Diese Treiber ermöglichen die Nutzung der Krypto-Hardware durch Standard-APIs wie das Crypto API des Linux-Kernels.

Die wichtigsten Kernel-Konfigurationsoptionen sind:

  • CONFIG_CRYPTO_DEV_ROCKCHIP: Aktiviert die Rockchip-Krypto-Engine.

  • CONFIG_CRYPTO_MANAGER_EXTRA_TESTS: Ermöglicht erweiterte Tests für die Krypto-Module.

  • CONFIG_CRYPTO_AES_ARM64_CE: Nutzt die ARMv8-Kryptografie-Erweiterungen für AES.

Die Treiber sind in Kernel-Versionen ab 5.10 verfügbar, wobei die stabilste Unterstützung in Kernel 6.x zu finden ist. Entwickler sollten sicherstellen, dass sie die neuesten Patches aus dem Rockchip-Linux-Repository (https://github.com/rockchip-linux/kernel) anwenden.

Software-Integration

Die effektivste Möglichkeit, die Krypto-Hardware des RK3588 zu nutzen, ist die Integration mit bestehenden Software-Bibliotheken wie OpenSSL oder FFmpeg. OpenSSL unterstützt Hardware-Beschleunigung durch sogenannte „Engines“, die speziell für Rockchip-SoCs konfiguriert werden können. FFmpeg kann ebenfalls konfiguriert werden, um kryptografische Operationen für Medien-Transkodierung zu beschleunigen, obwohl dies oft zusätzliche Anpassungen erfordert.

Praktische Implementierung

Um die Krypto-Hardware-Beschleunigung des RK3588 zu demonstrieren, betrachten wir ein Beispiel mit OpenSSL, das zeigt, wie AES-256-CBC-Verschlüsselung mit Hardware-Unterstützung implementiert werden kann. Dieses Beispiel setzt voraus, dass der Kernel die rk2_crypto-Module geladen hat und OpenSSL mit der Rockchip-Engine kompiliert wurde.

Beispielcode

Der folgende C-Code führt eine AES-256-CBC-Verschlüsselung und -Entschlüsselung durch und nutzt die Hardware-Beschleunigung, wenn verfügbar.

#include <stdio.h>
#include <string.h>
#include <openssl/evp.h>
#include <openssl/err.h>

// Fehlerbehandlung
void handleErrors(void) {
    ERR_print_errors_fp(stderr);
    abort();
}

int main(void) {
    EVP_CIPHER_CTX *ctx;
    unsigned char key[32] = {0}; // 256-Bit-Schlüssel
    unsigned char iv[16] = {0};  // Initialisierungsvektor
    unsigned char plaintext[] = "Dies ist ein Test für RK3588 Krypto-Beschleunigung!";
    unsigned char ciphertext[128];
    unsigned char decryptedtext[128];
    int len;
    int ciphertext_len;
    int decryptedtext_len;

    // OpenSSL initialisieren
    OpenSSL_add_all_algorithms();
    ERR_load_crypto_strings();

    // Kontext erstellen
    if (!(ctx = EVP_CIPHER_CTX_new())) handleErrors();

    // Verschlüsselung initialisieren (AES-256-CBC mit Hardware-Beschleunigung)
    if (1 != EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
        handleErrors();

    // Daten verschlüsseln
    if (1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, strlen((char *)plaintext)))
        handleErrors();
    ciphertext_len = len;

    // Verschlüsselung abschließen
    if (1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) handleErrors();
    ciphertext_len += len;

    // Kontext bereinigen
    EVP_CIPHER_CTX_free(ctx);

    // Entschlüsselung initialisieren
    ctx = EVP_CIPHER_CTX_new();
    if (1 != EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
        handleErrors();

    // Daten entschlüsseln
    if (1 != EVP_DecryptUpdate(ctx, decryptedtext, &len, ciphertext, ciphertext_len))
        handleErrors();
    decryptedtext_len = len;

    // Entschlüsselung abschließen
    if (1 != EVP_DecryptFinal_ex(ctx, decryptedtext + len, &len)) handleErrors();
    decryptedtext_len += len;

    // Null-Terminierung hinzufügen
    decryptedtext[decryptedtext_len] = '\0';

    // Ergebnisse ausgeben
    printf("Original: %s\n", plaintext);
    printf("Entschlüsselt: %s\n", decryptedtext);

    // Aufräumen
    EVP_CIPHER_CTX_free(ctx);
    EVP_cleanup();
    ERR_free_strings();

    return 0;
}

Kompilierung und Ausführung

Um den Code zu kompilieren, verwenden Sie den folgenden Befehl:

gcc -o rk3588_crypto_test rk3588_crypto_test.c -lssl -lcrypto

Führen Sie das Programm aus:

./rk3588_crypto_test

Konfiguration von OpenSSL

Damit OpenSSL die Krypto-Hardware des RK3588 nutzt, muss es mit der Rockchip-Engine kompiliert werden. Dies erfordert:

  1. Installation der Abhängigkeiten:

sudo apt-get install libssl-dev
  1. Kompilierung von OpenSSL mit Rockchip-Unterstützung:

Laden Sie die neueste OpenSSL-Version herunter und konfigurieren Sie sie mit der Rockchip-Engine. Ein Beispiel für die Konfiguration:

./config --prefix=/usr/local/ssl -DOPENSSL_HARDWARE_ROCKCHIP
make && sudo make install
  1. Überprüfung der Hardware-Beschleunigung:

Testen Sie die Leistung mit:

openssl speed -evp aes-256-cbc

Vergleichen Sie die Ergebnisse mit und ohne Hardware-Beschleunigung (z. B. durch Deaktivieren der Rockchip-Engine).

Herausforderungen und Einschränkungen

Trotz der vielversprechenden Hardware-Funktionen gibt es einige Herausforderungen bei der Nutzung der Krypto-Hardware-Beschleunigung des RK3588:

  • Treiberreife: Die rk2_crypto-Treiber sind relativ neu und wurden noch nicht umfassend in Produktionsumgebungen getestet. Entwickler sollten die Stabilität für ihre spezifischen Anwendungsfälle validieren.

  • Distributionen: Viele Standard-Linux-Distributionen für RK3588-basierte Geräte (z. B. Armbian, Debian) enthalten möglicherweise nicht die neuesten Kernel-Patches. Ein benutzerdefinierter Kernel-Build ist oft erforderlich.

  • Anwendungsintegration: Anwendungen wie Plex oder Immich, die Hardware-Beschleunigung für Transkodierung oder Kryptografie benötigen, haben oft Kompatibilitätsprobleme. In solchen Fällen kann eine externe GPU oder eine Software-Fallback-Lösung erforderlich sein.

  • Dokumentation: Die Dokumentation für die Krypto-Hardware des RK3588 ist begrenzt, und Entwickler müssen sich häufig auf Community-Foren und Mailinglisten wie die LKML stützen.

Empfehlungen für Entwickler

Um die Krypto-Hardware-Beschleunigung des RK3588 effektiv zu nutzen, sollten Entwickler die folgenden Schritte befolgen:

  1. Kernel aktualisieren: Verwenden Sie einen Kernel ab Version 6.x mit den neuesten Patches aus dem Rockchip-Linux-Repository (https://github.com/rockchip-linux/kernel).

  2. Distribution auswählen: Armbian ist eine der stabilsten Distributionen für RK3588-basierte Geräte und bietet regelmäßige Kernel-Updates.

  3. OpenSSL konfigurieren: Stellen Sie sicher, dass OpenSSL mit der Rockchip-Engine kompiliert ist, um die maximale Leistung zu erzielen.

  4. Leistung testen: Verwenden Sie Tools wie openssl speed oder benutzerdefinierte Benchmarks, um die Hardware-Beschleunigung zu validieren.

  5. Community-Ressourcen nutzen: Foren wie das Radxa-Forum (https://forum.radxa.com) oder die Linux-Kernel-Mailingliste bieten wertvolle Einblicke und Unterstützung.

 

Die Krypto-Hardware-Beschleunigung des RK3588 bietet eine leistungsstarke Grundlage für kryptografische Anwendungen, von der sicheren Datenübertragung bis zur Medienverarbeitung. Während die Hardware selbst beeindruckend ist, erfordert die vollständige Nutzung eine sorgfältige Konfiguration von Kernel, Treibern und Software-Bibliotheken. Mit den richtigen Tools und Ressourcen können Entwickler die Vorteile der Hardware-Beschleunigung voll ausschöpfen, obwohl einige Herausforderungen in Bezug auf Treiberreife und Anwendungsintegration bestehen bleiben.

Durch die Kombination von OpenSSL, einem aktualisierten Kernel und einer gut gewählten Distribution können Entwickler robuste und effiziente kryptografische Lösungen auf dem RK3588 implementieren. Zukünftige Kernel-Updates und eine verbesserte Community-Unterstützung werden die Nutzung dieser leistungsstarken Funktion weiter vereinfachen.

Quellen

  • Rockchip Linux Kernel Repository: https://github.com/rockchip-linux/kernel

  • Linux Kernel Mailing List (LKML): https://lkml.org

  • OpenSSL Dokumentation: https://www.openssl.org/docs

  • Armbian für RK3588: https://www.armbian.com

  • Radxa Community Forum: https://forum.radxa.com

滚动至顶部