Zum Inhalt springen

Komplexität

Die “Komplexität” im Proof-of-Work-Mechanismus bezieht sich auf den Grad des Rechenaufwands, den ein Client benötigt, um die vom Server präsentierte Herausforderung zu lösen. Die Komplexität wird durch Anpassung des maximalen Werts der von Server während der Herausforderungserstellung generierten Zufallszahl gesteuert.

Die Einstellung der Komplexität dient als Maßnahme, um Sicherheit gegen automatischen Missbrauch/Spam und Benutzererfahrung auszubalancieren. Indem das System den Bereich der zufällig generierten Zahl kontrolliert, passt es die Schwierigkeit der vom Client benötigten Rechenaufgabe an.

Complexity test

Adjust the number of iterations and test the computational complexity on your device.

Iterations: 0

Anpassen der Komplexität

Die Komplexität kann angepasst werden, indem die Mindest- und Höchstwerte der zufällig generierten Geheimzahl auf der Serverseite geändert werden. Ein niedriger maximaler Wert schafft eine weniger komplexe Herausforderung, die weniger Rechenschleifen für den Client erfordert, um eine passende Lösung zu finden. Umgekehrt erhöht ein höherer maximaler Wert die Komplexität und erfordert mehr Rechenressourcen und Zeit vom Client.

Leistungsbenchmarks

Diese Benchmarks veranschaulichen die Zeit, die verschiedene Geräte benötigen, um eine ALTCHA-Herausforderung zu lösen. Die folgende Tabelle zeigt die Anzahl der Berechnungen (Operationen), die jedes Gerät pro Sekunde durchführen kann, und die entsprechende Zeit, um eine Herausforderung mit einer Komplexität von 100.000 zu lösen. Eine höhere Anzahl von Operationen pro Sekunde zeigt eine bessere Leistung an.

GerätLeistungZeit zum Lösen
MacBook Pro M3-Pro (2023)3 Ops/s0,33 Sek.
iPhone 12 mini (2020)1,2 Ops/s0,83 Sek.
AWS EC2 (c6a.xlarge)1 Ops/s1 Sek.
Samsung Galaxy A14 (2023)0,4 Ops/s2,5 Sek.
AWS Lambda (1GB)0,12 Ops/s8 Sek.

Überlegungen

  • Leistungseinfluss

    Höhere Komplexität kann die Rechenlast auf Client-Geräten erheblich erhöhen und möglicherweise die Benutzererfahrung beeinträchtigen.

  • Niedrig- versus Hochleistungsgeräte

    Was auf einem neuen iPhone weniger als eine Sekunde dauert, könnte auf einem Einsteiger-Android-Telefon 30 Sekunden dauern. Testen Sie mit physischen Geräten, die für Ihre Nutzer typisch sind.

  • Sicherheitskompromisse

    Eine niedrigere Komplexität könnte die Sicherheit gegen automatisierte Angriffe verringern, jedoch die Benutzerzugänglichkeit verbessern.

Empfohlene Vorgehensweisen

  • Dynamische Komplexität

    Implementieren Sie ein dynamisches System, das die Komplexität basierend auf der Serverlast oder dem Benutzerverhalten anpasst und so ein Gleichgewicht zwischen Sicherheit und Benutzerfreundlichkeit gewährleistet.

  • Tests und Optimierungen

    Führen Sie gründliche Tests durch, um ein optimales Komplexitätsniveau zu bestimmen, das Missbrauch verhindert, ohne legitime Benutzer übermäßig zu belasten.