Code für Bezahlsystem (auch bei Offline Aktivität)

internet

Top Contributor
Hallo,

Ich versuche gerade einen Weg zu finden, wie ich ein Bezahlsystem nutzen könnte.

Die Idee ist wie folgt:
  • Ich vermiete ein Gerät, das bpsw. eine Uhrzeit von 12:00 - 14:00 Uhr genutzt werden darf. Darauf wird eine Java Software betrieben.
  • Falls man das Gerät danach nutzen möchte, dann muss mich sich einen Code kaufen.

Den Code könnte man sich dann von einer Webseite erkaufen. Der Code wird dann später in der GUI vom Gerät eingegeben und die Nutzung kann weiter erfolgen.
Soweit sollte das alles funktionieren....

Nun ist das Gerät aber nicht ständig am Internet angeschlossen, sodass ich keine Online Validierung für den erkauften Code gegen einen Webservice etc. machen könnte.
Ich bräuchte bspw. einen Algorhtymus für den erkauften Code, der nur bestimmte Zahlen / Buchenstaben Kombinationen zulässt, sodass der Code valide ist.
Das sollte auch irgendwie klappen.

Problem ist nun aber, wenn der Code mehrmals genutzt wird, könnte man diesen mehrmals verwenden.
Das könnte man auch umgehen, wenn der genutzte Code in der Datenbank des Geräts gespeichert wird. Problem ist nur, wenn man mehrere Geräte hätte, dann würden diese nicht synchronisiert werden und man könnte bspw. den Code aus der Vergangenheit wieder nutzen.

Hat jemand vielleicht eine Idee?
 

Robert Zenz

Top Contributor
Also zunaechst ist die einfachste, und sicherste Variante, ist eine asymmetrische Schluesselverfahren wo du etwas mit dem einen Schluessel signierst, und dann in deiner Software mit dem zweiten Schluessel verifizierst.

Vielleicht ist das verkaufen von "Zeitfenstern" hier die Loesung. Der Benutzer kauft sich ein das Zeitfenster "08.08.2022 14:00-18:00" und bekommt einen Code nur fuer dieses Zeitfenster.
 

internet

Top Contributor
Genau, das will ich ja realisieren mit dem Zeitfenster....
Das Problem ist eben bzgl. dem Code und keine Onlinevalidierung...

Ja, das mit dem asymmetrischen Schlüsselverfahren war so meine Idee.
Das garantiert aber nicht, dass der Code nicht mehrmals verwendet werden darf (da ich bei der Eingabe des Codes am Gerät eben keine Validierung gegen einen Webservice etc. machen kann, der mir nachschaut, ob der Code bereits verwendet wurde).
 

KonradN

Super-Moderator
Mitarbeiter
Du kannst den Geräten ja direkt eine eindeutige id geben, die dann mit angegeben werden muss und das dann mit verschlüsselt wird.

Dann hast Du eine UUID des Gerätes + ein Zeitfenster.

Aber da musst Du ggf. auch aufpassen: Kann die Zeit verändert werden? Wenn der Benutzer die Zeit verändern kann, dann könnte er die Uhrzeit immer auf den Startpunkt stellen um dann neu zu starten.

Also könnte man dann immer die Zeitpunkte protokollieren - und dann halt abbrechen, wenn er feststellt, dass die aktuelle Zeit vor der letzten Nutzung war. Aber das ist auch alles nichts sicheres, so der Nutzer vollen Zugriff auf das Gerät hat.
 

internet

Top Contributor
Also vielleicht noch ein paar weitere Anforderungen:
- der Code soll aller höchstens 10 Zeichen haben, denn dieser muss vom User dann am Gerät eingegeben werden

Das System, bei dem der Code gekauft wird ist theoretisch für jegliches Gerät, demnach möchte ich hier auch nicht das Gerät mit eingeben wollen.

Was ich mir vorstellen könnte:
  • Firma (welche die Geräte verleiht) hat eine Unterseite auf seiner Webseite: www.code.mycompany.com
  • Dort gibt es ein Formular mit der Eingabe von: Geräte ID, Anzahl Stunden
  • Nutzer muss auf diese Webseite gehen und muss dann hier eine Geräte ID eingeben. Die Geräte ID steht für den Endkunden dann auf dem Bildschirm + eben die Infos auf welche Webseite er gehen muss
  • Das Formular wird dann an die "globale Webseite" gesendet. Bezahlprozess geht los, User bezahlt und erhät dann den Code (per Email etc. zurück).

Dann ist die Frage nun aber, wie ich aus dem Code von ABCD12345 nun die Infos bekomme:
  • Zeitraum
  • GeräteID
 

KonradN

Super-Moderator
Mitarbeiter
Also was für ein Gerät ist es denn?

Ich sehe sehr viele Möglichkeiten, wie man hier etwas machen könnte. Du hast ja irgend eine Art von Computer im Gerät. Also könnte man da evtl.:
  • eine Kamera haben -> QR Codes scannen
  • per Bluetooth eine Kommunikation mit einem Smartphone haben. (Bluetooth Smart / Bluetooth Low Energy wären da z.B. Stichworte) Da kann man also ohne Pairing eine gewisse Kommunikation stattfinden lassen. Dies findet sich ja auch schon in vielen Apps (Corona Warnapp wäre ein Beispiel aber ich kenne es auch von anderen Applikationen. Eine Art Magic Login bei Apple TV Apps - App auf dem Handy ist offen, Apple TV App erwartet eine Anmeldung, man drückt nur auf "Magic Login" auf dem Smartphone und schon ist das AppleTV angemeldet. Das dürfte auch so per Bluetooth gegangen sein. Und der Datenaustausch dürfte auch ähnlich gehen - Ich habe eine Adresse oder Bild und teile es mit einem anderen Smartphone in der Nähe.)
  • Worst Case: WLAN - das halte ich aber für zu umständlich für Anwender.

Aber dann wäre der Usecase so:
  • Mit dem Smartphone in der App einen QR Code scannen oder Gerätedaten per Bluetooth bekommen.
  • Auf dem Smartphone dann den Kauf tätigen oder Details des Kaufs per QR-Code einscannen -> Keine Beschränkung auf 10 Zeichen!
  • Dann übermittelt das Smartphone die Daten an das Gerät -> Wieder keine Beschränkung auf 10 Zeichen

Aber ist das alles nicht zu komplex gedacht? Was ist das Problem, an dem Gerät den Kauf online zu validieren? Dabei ist es dann egal, ob man
a) das per WLAN koppelt. (Wenn das Gerät ein Display hat, dann kann man verfügbare WLANs anzeigen und so.)
b) das per Bluetooth und einer App auf dem Smartphone macht (Benötigt dann aber Android und iOS Applikationen)



Und was mein erster Gedanke bei sowas wäre: Wenn es um hochwertige Geräte geht und entsprechend das "mieten" auch teuer ist: Es gibt entsprechende IoT Anbindungen. Die kosten pro Gerät nicht viel und Du hast dann eigentlich überall über das Mobilfunknetz eine langsame Anbindung. Dann hast du keine Probleme mit dem Kauf und der Validierung. Dann kann man irgendwie, irgendwo kaufen und das kann man dann übermitteln. Das wäre aus meiner Sicht das, was ich am ehesten überlegen würde. Die anderen Ideen wären dann nur eine Art Fallback mit der Anwender "gequält" werden, wenn es aus irgend einem Grund nicht geht.
 

LimDul

Top Contributor
Die spannende Frage ist - kaufe ich einfach "2 Stunden" oder kaufe ich 2 Stunden von 8 bis 10 Uhr am 9.8.2022?

Wenn es nicht für einen fixen Zeitraum ist, wird es deutlich schwerer, wenn die Geräte kein garantiertes Internet haben.

10 Zeichen, ah 36 verschiedene Zeichen (0-9A-Z) entspricht 51 Bit Informationen. Das ist nicht gerade viel, was du zur Verfügung hast.

Was ist denn das Threat-Model? Wo vor willst du dich schützen und welche Risiken nimmst du in Kauf.

Das was klar ist, ich soll einen Code für 2 Stunden nicht einfach 2x eingeben können.
Ist es ein Risiko, das jemand Reverse Engineering betreibt und seinen eigenen Code-Generator schreibt?
Ist es ein Risiko, dass jemand die Java-Anwendung patcht und den Nutzungscheck ausbaut?
etc.

Müssen die Geräte alle X-Tage ans Internet? Wäre es akzeptabel da auf Lizenzverletzungen aufmerksam zu werden und Nachforderungen zu stellen?

Mal als Idee, wir haben 51 Bit.

Wir brauchen folgende Informationen:
  • Gerätenummer (16 Bit)
  • Gekaufte Dauer (4 Bit => Maximal 16 Stunden auf einmal kaufbar)
  • Laufende Nummer (um verschiedene Codes zu unterscheiden, 16 Bit)
Bleiben noch 15 Bits für die Signatur.

Das heißt du müsstest mit einem Privaten Key diese 36 Bit signieren, so dass eine 15 Bit Signatur rauskommt.
Das Gerät kann diese 36 Bit lesen und mit dem Public Key prüfen, ob die Signatur gültig ist und dann den Code akzeptieren und als verbraucht markieren in seiner internen DB.

Auf dem Server muss man nur sicherstellen, dass man die laufende Nummer pro Gerätenummer verwaltet und nicht 2x verwendet.
 

internet

Top Contributor
Also was für ein Gerät ist es denn?
Geht um Fotoapparaten - also ein Computer mit einem Foto drin... Der Computer wird also ständig an anderen Orten verwendet, sodass nicht immer eine Internetverbindung möglich ist - daher das Problem mit keiner Internetconnection.
Was ist denn das Threat-Model?
Was meinst du damit genau?

Das was klar ist, ich soll einen Code für 2 Stunden nicht einfach 2x eingeben können.
Ist es ein Risiko, das jemand Reverse Engineering betreibt und seinen eigenen Code-Generator schreibt?
Ist es ein Risiko, dass jemand die Java-Anwendung patcht und den Nutzungscheck ausbaut?
etc.
Kann natürlich sein, aber macht durchaus kein Sinn, da der Endkunde i.d.R. die Software nicht hat.
Ich bräuchte aber einen private Key pro "Anbieter".

"Anbieter = derjenige, der das Gerät verleiht"
"Endkunde = derjenige, der ein Foto etc. macht"

Der Vorschlag mit dem QR Code gefällt mir.
Endkunde scannt der QR Code, kauf sich einen Code. Bekommt einen QR Code zurück, hält diesen an den Fotoapparat und wird dann wieder freigeschaltet.

Ich könnte mir es so vorstellen:
- Anbieter kauft sich eine Lizenz.
Dabei wird eine UniqueID für das Gerät ermittelt (Motherboard, Mac Adresse bspw.). Zusätzlich wird ein private Key erstellt, der zum einen auf der Server - Applikation, als auch auf der Software, die auf dem Gerät läuft gespeichert wird.

Ich sehe folgende Informationen, die über den Code abrufbar sein sollen.
Diese Informationen müsste ich dann irgendwie über den Code beziehen:
  • Zeitabhängig - Nutzung für weitere 30 Minuten möglich
  • GeräteID
  • Anzahl an Fotosequenzen (anstatt zeitabhängig)

Nun hierzu ein paar Fragen:
1) Wie mache ich das mit dem Code, der mit dann diese Infos zurückgibt, die ich dann entsprechend auslesen kann?
2) Wie mache ich as mit dem UniqueID für das Gerät. Passt dafür diese Lib? https://github.com/MatthewKing/DeviceId
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 3
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
M Code nur für Cracks? Crack the Passwort Übung Java Basics - Anfänger-Themen 7
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
C Verbesserungsvorschlag für effizienteren Code - (Project Euler10) Java Basics - Anfänger-Themen 26
M Bessere bzw. kürzere Variante für Code? Java Basics - Anfänger-Themen 2
D Code für ein Summen Programm Java Basics - Anfänger-Themen 11
I SwingUtilities.invokeLater - Wie verwenden für meinen Code? Java Basics - Anfänger-Themen 4
S Code stimmt nicht für vorgegebenen JUnit-Test Java Basics - Anfänger-Themen 2
C weniger code für: caesar + reverse? Java Basics - Anfänger-Themen 8
R API für Source Code Generierung? (APT) Java Basics - Anfänger-Themen 2
G Code für Rekursionsaufgabe Java Basics - Anfänger-Themen 3
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
Ü Dead Code im Programm? Java Basics - Anfänger-Themen 13
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
terashy VS Code Project run error Java Basics - Anfänger-Themen 10
JaZuDemNo Code Erklärung Java Basics - Anfänger-Themen 3
M Connect-4-Code analysieren Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
W In alten Code zurück- und dort wieder zurechtfinden? Java Basics - Anfänger-Themen 17
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
T Fehlercode bei code der das Alter ausrechnet Java Basics - Anfänger-Themen 2
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
jhfjeh Strukturgramm in code Java Basics - Anfänger-Themen 11
D Tipps zum Code Java Basics - Anfänger-Themen 24
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
ohneInformatik; For Schleife. Was macht dieser Code?? Java Basics - Anfänger-Themen 5
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
W Rückfrage zur Programmgestaltung (clean code) Java Basics - Anfänger-Themen 12
M intelliJ auf neuem PC, plötzlich kein Code Java Basics - Anfänger-Themen 3
Pinhg Sound in Greenfoot Code einbinden Java Basics - Anfänger-Themen 2
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
J Größter gemeinsamer Teiler: mein Code Java Basics - Anfänger-Themen 6
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
A Wie könnte man diesen Code kürzer machen ? Java Basics - Anfänger-Themen 7
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
S Hilfe bei Umänderung von Java Code Java Basics - Anfänger-Themen 16
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
K Wie kann man diesen Code schnell und effizient interpretieren (Man hat nur 4 Minuten) Java Basics - Anfänger-Themen 3
R ISBN-10-Code überprüfen Java Basics - Anfänger-Themen 7
I Bitte um Hilfe zu unterstehenden Code Java Basics - Anfänger-Themen 6
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
I HTML Code säubern Java Basics - Anfänger-Themen 4
B Brauche Hilfe zu einem Code Java Basics - Anfänger-Themen 5
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
N Java-Code abwärtskompatibel machen Java Basics - Anfänger-Themen 4
J Erste Schritte Was mache ich in meinem Code falsch. Java Basics - Anfänger-Themen 3
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
S Compiler-Fehler Nicht adressierbarer Code ( Non-addressable code ) Java Basics - Anfänger-Themen 5
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
A Code Problem Java Basics - Anfänger-Themen 6
C Fehler im Code Java Basics - Anfänger-Themen 10
A Zu einem bestimmten Ort im Code springen Java Basics - Anfänger-Themen 11
L Ist der Code richtig Java Basics - Anfänger-Themen 3
josfe1234 code vereinfachen Java Basics - Anfänger-Themen 15
nonickatall Ausführbarkeit von Code testen bzw. Remote Debugging Java Basics - Anfänger-Themen 4
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
G Programm Code Java Basics - Anfänger-Themen 5
C Code zusammenfassen Java Basics - Anfänger-Themen 5
I Erklärung zum Java Code Java Basics - Anfänger-Themen 2
T Programmablaufsplaninterpretation in Code umformen Java Basics - Anfänger-Themen 1
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
AlexVo String zu Java Anweisung getString("*** java code ***") Java Basics - Anfänger-Themen 19
M ISBN-Code Java Basics - Anfänger-Themen 26
B Zeitgleiches Arbeiten am Code mit mehreren Personen? Java Basics - Anfänger-Themen 7
S Wie kann ich bei diesem Code erreichen, das als Ergebnis hier 15 herauskommt? Java Basics - Anfänger-Themen 23
N Kann man den Code vereinfachen? Java Basics - Anfänger-Themen 25
marcooooo Code erklären Java Basics - Anfänger-Themen 28
marcooooo Code erklären Java Basics - Anfänger-Themen 4
S Advent of Code Day4 Java Basics - Anfänger-Themen 4
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
Gaudimagspam Caesars Code entziffern in Java Java Basics - Anfänger-Themen 8
Lukasbsc Wie kann ich meinen Code optimieren? Java Basics - Anfänger-Themen 4
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
T Main startet nicht bei vorgegebenen Code Java Basics - Anfänger-Themen 41
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
parrot Code entferneJedeZweiteZiffer Java Basics - Anfänger-Themen 6
G Code kürzen Java Basics - Anfänger-Themen 5
Bluedaishi Source Code Signieren Java Basics - Anfänger-Themen 22
L Best Practice Code refactern Java Basics - Anfänger-Themen 30
G code kürzen Java Basics - Anfänger-Themen 16
A Code umschreiben Java Basics - Anfänger-Themen 6
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8
X Reverse algorithm engineering (Java code) Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben