Wiederherstellen des MT19937-Status aus 24-Bit-Beobachtungen zur Vorhersage von 32-Bit-AusgabenPython

Python-Programme
Anonymous
 Wiederherstellen des MT19937-Status aus 24-Bit-Beobachtungen zur Vorhersage von 32-Bit-Ausgaben

Post by Anonymous »

Ich muss die Ausgabe von Pythons random.getrandbits(32) vorhersagen. Ich kann einen /debug-Endpunkt mehrmals aufrufen, um so viele Beobachtungen wie nötig zu erhalten, aber jede Beobachtung besteht nur aus 24 Bits.

Dann muss ich die nächsten 128 vollständigen 32-Bit-Werte vorhersagen.
Pythons Random verwendet MT19937, das einen internen Status mit 624 Elementen hat und normalerweise 624 aufeinanderfolgende vollständige 32-Bit-Ausgaben zur Wiederherstellung benötigt der Staat. Die Temperierungsfunktion ist umkehrbar, wenn Sie vollständige Ausgaben haben.
Das Problem ist, dass ich mehr als 624 Samples sammeln kann, diese aber alle auf 24 Bits gekürzt sind (es fehlen 8 Bits). Ich weiß auch nicht, welche Position im internen Zustand meiner ersten Beobachtung entspricht.
Wie kann ich den MT19937-Status wiederherstellen, um die nächsten 128 Zahlen vorherzusagen?
Code-Referenzen wären willkommen.
Programmcode:

Code: Select all

import random
import secrets
from flask import Flask, request, jsonify

FLAG = open("./flag.txt").read().strip()
random.seed(secrets.token_bytes(32))

app = Flask(__name__)

@app.get("/debug")
def debug():
return {"number": [random.getrandbits(24) for _ in range(64)]}

@app.post("/predict")
def predict():
if not request.is_json:
return jsonify({"error": True}), 400

data = request.json
if "predictions" not in data:
return jsonify({"error": True}), 400

predictions = data["predictions"]
if type(predictions) is not list or len(predictions) != 128:
return jsonify({"error": True}), 400

nums = [random.getrandbits(32) for _ in range(128)]
for nums, pred in zip(nums, predictions):
if nums != pred:
return jsonify({"success": False})

return jsonify({"success": True, "flag": FLAG})

if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post