Löser für den diskreten Logarithmus
Welche Potenz von 2 ergibt modulo 13 den Rest 5? Die Antwort ist 9, denn 2^9 ≡ 5 (mod 13). Geben Sie Basis, Ziel und Primzahlmodul ein und erhalten Sie den kleinsten Exponenten samt prüfbarer Gleichung. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Rechenbeispiel
- G
- 2
- H
- 5
- Leistung (W)
- 13
- X
- 9
- Gleichung
- 2^9 ≡ 5 (mod 13)
Das Problem des diskreten Logarithmus fragt nach einer ganzen Zahl x, sodass eine gegebene Basis g hoch x kongruent zu einem Ziel h modulo einer Primzahl p ist. Es liegt dem Diffie-Hellman-Schlüsselaustausch, der ElGamal-Verschlüsselung und vielen Lehrbuchaufgaben der algebraischen Kryptografie zugrunde. Diese Fähigkeit setzt den klassischen Babystep-Giantstep-Algorithmus um: eine deterministische Suche in Wurzelzeit, die entweder den kleinsten nichtnegativen Exponenten findet oder beweist, dass h keine Potenz von g in der multiplikativen Gruppe modulo p ist.
Wonach der diskrete Logarithmus fragt
Für gegebene ganze Zahlen g, h und p ist der diskrete Logarithmus von h zur Basis g modulo p jede ganze Zahl x, die g hoch x kongruent zu h modulo p erfüllt. Wenn eine Lösung existiert, ist der kleinste nichtnegative Vertreter im Bereich null bis p minus zwei eindeutig, sobald Sie diesen Bereich festlegen, und er ist der Wert, den dieses Werkzeug zurückgibt.
Anders als bei gewöhnlichen reellen Logarithmen gibt es keine geschlossene elementare Formel, die für beliebige Primzahlen funktioniert; die Schwierigkeit, x für sorgfältig gewählte große Primzahlen zu ermitteln, ist genau der Grund, warum Kryptografie mit diskretem Logarithmus nützlich ist. In der Lehre und bei Experimenten mit kleinen Parametern brauchen Sie dennoch einen korrekten, überprüfbaren Löser: einen, der die Primzahlhypothese validiert, die Eingaben in das kanonische Restsystem reduziert, systematisch sucht und entweder einen verifizierbaren Exponenten ausgibt oder klar feststellt, dass keine Lösung existiert.
Das ist der Vertrag dieses Endpunkts: reine modulare Arithmetik, keine Heuristiken und keine Netzwerkaufrufe.
Wie Babystep-Giantstep x findet
Babystep-Giantstep schreibt den unbekannten Exponenten als x gleich i mal m plus j um, wobei m etwa die Quadratwurzel der Gruppenordnung p minus eins ist und sowohl i als auch j von null bis m laufen. Der Algorithmus speichert zunächst jeden Baby-Wert g hoch j modulo p in einer Hash-Map, die nach dem Rest indiziert ist, und schreitet dann in Giantsteps voran, indem er das Ziel wiederholt mit dem modularen Inversen von g hoch m multipliziert und jeden Zwischenrest in der Map nachschlägt.
Ein Treffer liefert sowohl i als auch j und damit x. Basen und Ziele außerhalb von null bis p minus eins werden modulo p reduziert, und die Antwort gibt die reduzierten g, h und p zurück, sodass Aufrufende genau die gelöste Instanz nachvollziehen können.
Eingaben, Grenzen, Preise und wann es keine Lösung gibt
Pflichtfelder sind g (Basis), h (Zielrest) und p (Primmodul). Ziffernzeichenketten werden für große ganze Zahlen innerhalb der Modulgrenze akzeptiert. Liegt h nicht in der von g modulo p erzeugten zyklischen Untergruppe — etwa wenn g nur eine echte Untergruppe erzeugt und h außerhalb davon liegt — gibt der Löser solved false mit einem null-Exponenten und einer erklärenden Meldung zurück, statt ein falsches x zu erfinden.
Dieses Ergebnis ist eine erfolgreiche Berechnung, kein Client-Fehler, denn die Eingabe war wohlgeformt und die mathematische Antwort lautet, dass kein Logarithmus existiert. Client-Fehler umfassen fehlende Felder, Nicht-Ganzzahlen, Moduln außerhalb des erlaubten Bereichs und zusammengesetztes p. Nutzen Sie das Ergebnis, um Hausaufgaben zu prüfen, Bekanntantwort-Tests für Kryptobibliotheken zu erzeugen oder die Untergruppenzugehörigkeit zu erkunden, bevor Sie Parameter in einem echten Protokollentwurf hochskalieren.
Anwendungsfälle
Verifikation von Hausaufgaben und Prüfungen
Studierende und Lehrende prüfen Aufgaben zum diskreten Logarithmus wie 2^x ≡ 5 (mod 13) und erhalten sowohl den Exponenten als auch eine druckbare Kongruenz für den Lösungsschlüssel.
Bekanntantwort-Tests für Kryptocode
Bibliotheksautoren speisen kleine Primkörper-Instanzen in die CI ein, damit modulare Exponentiation und Inversen-Helfer mit einer unabhängigen BSGS-Referenz konsistent bleiben.
Experimente zur Untergruppenzugehörigkeit
Forschende probieren Kandidatenbasen und -ziele modulo einer kleinen Primzahl aus, um zu sehen, ob h in der von g erzeugten Untergruppe liegt, bevor sie zu produktionsgroßen Parametern übergehen.
Häufige Fragen
Welchen Algorithmus verwenden Sie?
Babystep-Giantstep (Shanks). Er findet das kleinste nichtnegative x mit g^x ≡ h (mod p) in etwa O(√p) Zeit und Speicher, nach einem deterministischen Primzahltest auf p.
Was, wenn kein Exponent existiert?
Sie erhalten solved: false und x: null mit einer kurzen Meldung. Das ist ein gültiges mathematisches Ergebnis (h ist keine Potenz von g mod p), kein Abrechnungs- oder Validierungsfehler.
Wie löse ich 2^x ≡ 5 (mod 13)?
Geben Sie 2 als Basis, 5 als Ziel und 13 als Primzahlmodul ein. Die Antwort ist 9: 2 hoch neun geteilt durch 13 lässt den Rest 5, und kein kleinerer Exponent schafft das.
Was passiert, wenn der Modul keine Primzahl ist?
Die Suche beginnt gar nicht erst. Der Modul wird zuerst auf Primalität geprüft, und ein zusammengesetzter Modul wird mit einer klaren Meldung abgelehnt, statt einen bedeutungslosen Exponenten zu liefern.
Was ist, wenn es keinen Exponenten gibt?
Dann erfahren Sie klar, dass das Ziel für diesen Primzahlmodul keine Potenz der Basis ist. Das ist eine echte mathematische Antwort und kein Rechenfehler.
Wie groß darf der Primzahlmodul sein?
Bis etwa eine Billion. Das reicht für Hausaufgaben, Protokollbeispiele und kleine Experimente mit schneller Antwort, ist aber nicht für die sehr großen Primzahlen echter Verschlüsselung gedacht.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/numth/discrete-log \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"g":2,"h":5,"p":13}'const res = await fetch("https://api.kit.forhosting.com/numth/discrete-log", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"g": 2,
"h": 5,
"p": 13
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/discrete-log",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"g": 2,
"h": 5,
"p": 13
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/discrete-log", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"g":2,"h":5,"p":13}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"g":2,"h":5,"p":13}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/discrete-log", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"g": 2,
"h": 5,
"p": 13
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.discrete_log",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_p | 1000000000007 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Sie liefern drei ganze Zahlen — g, h und einen Primmodul p — und erhalten eine strukturierte JSON-Antwort mit der Lösung, den reduzierten Resten und einer Verifikationsgleichung, wenn eine Lösung existiert.
Wie Babystep-Giantstep x findet
Die Methode verwendet in der Größenordnung Quadratwurzel von p Multiplikationen und Map-Einträge, weshalb diese Fähigkeit den Primmodul nahe einer Billion deckelt: groß genug für Hausaufgaben, Protokolldurchläufe und Belastungstests kleiner Untergruppen, doch beschränkt, damit Speicher und Latenz auf einem Worker vorhersehbar bleiben. Vor der Suche führt der Löser einen deterministischen Miller-Rabin-Primzahltest auf p aus; ist p zusammengesetzt, scheitert der Aufruf mit invalid_input, statt einen Logarithmus in einer Struktur zu erfinden, die nicht die multiplikative Gruppe des Primkörpers ist.
Eingaben, Grenzen, Preise und wann es keine Lösung gibt
Der Preis für die API beträgt pauschal $0.002 je erfolgreicher Anfrage unter der Positions-Einheit; eine gescheiterte Validierung wird nicht berechnet. Das Werkzeug im Browser führt dieselbe Bibliothek kostenlos und ohne Konto aus.
Technische Fragen
Wie löse ich mit dieser API einen diskreten Logarithmus?
Senden Sie die ganzen Zahlen g, h und die Primzahl p per POST an den Endpunkt für den diskreten Logarithmus (oder nutzen Sie das kostenlose Browser-Formular). Die Antwort enthält solved, den Exponenten x, sofern er existiert, die reduzierten Reste und eine Verifikationsgleichung.
Was geschieht, wenn p keine Primzahl ist?
Die Anfrage scheitert mit invalid_input. Dieses Werkzeug definiert den diskreten Logarithmus in der multiplikativen Gruppe eines Primkörpers und arbeitet nicht stillschweigend modulo einer zusammengesetzten Zahl.
Wie viel kostet die API?
Das Browser-Werkzeug ist kostenlos. Die API berechnet $0.002 je erfolgreicher Anfrage aus Ihrem Prepaid-KIT-Guthaben; ungültige Eingaben werden nicht berechnet. Ein Abonnement ist nicht erforderlich.